Skip to content

Integrate

REST API

Authentication, the endpoints that matter, pagination and rate limits.

Authentication

Two credentials work on the API. A session token from /v1/auth/login acts as the account. An API key acts for a specific set of scopes and is what a service or a pipeline should use.

bash
# Issue a scoped key (shown once)
reliastra keys create ci-bot --scopes read:checks,write:dependencies,read:incidents,read:evidence

# Use it
export RELIASTRA_TOKEN=rel_…
curl -sS https://api.reliastra.com/v1/dependencies -H "Authorization: Bearer $RELIASTRA_TOKEN"
ScopeGrants
read:checksRead observations
write:dependenciesCreate, update and delete dependencies
read:incidentsRead incidents and correlations
read:evidenceRead evidence records and download artifacts

Endpoints

Method and pathWhat it does
POST /v1/auth/loginExchange email and password for an access and refresh token
POST /v1/auth/refreshRotate an expired access token
GET /v1/users/meThe authenticated account
GET /v1/dependenciesList dependencies (limit, cursor)
POST /v1/dependenciesCreate one
GET /v1/dependencies/{id}Read one
PATCH /v1/dependencies/{id}Update one
DELETE /v1/dependencies/{id}Delete one and its observations
GET /v1/dependencies/{id}/resultsObservations for one dependency
GET /v1/dependencies/{id}/historyAggregated history over a window
GET /v1/checks/recentThe most recent observations across dependencies
GET /v1/incidentsList incidents (limit, cursor, status, severity, dependency_id)
GET /v1/incidents/{id}One incident with its correlations
PATCH /v1/incidents/{id}Set status, severity, root cause or description
POST /v1/incidents/{id}/correlateRecord a correlated dependency
GET /v1/incidents/{id}/evidenceThe evidence record for this incident
GET /v1/evidenceList evidence records
GET /v1/evidence/{id}One record: checksum, verification id and URL, payload hash, and a one-hour signed download_url
GET /v1/evidence/{id}/artifactThe rendered artifact itself, streamed. Use this from a script
GET /v1/evidence/{report_token}/downloadPublic gate download by token, for a shared record
POST /v1/evidence/{id}/regenerateRebuild an artifact from its incident
GET /v1/verify/{verification_id}Public verification record. No authentication.
GET /v1/verify/keysPublic signing keys, in JWK form
GET /v1/vendorsThe public observatory index
GET /v1/vendors/{name}One vendor’s public record
GET|POST /v1/webhooksList or create webhook subscriptions (session only)
GET /v1/api-keysList keys (prefixes only; needs read:api_keys)
POST /v1/api-keysIssue a key. The full value is returned once.

From an artifact to its verification

A resolved incident produces an evidence record. GET /v1/evidence/{id} returns everything needed to check the artifact it issued, including the public verification id and URL that are printed inside the document itself:

GET /v1/evidence/{id}json
{
  "id": "7c1d0a5f-…",
  "incident_id": "9f1c8b0e-…",
  "checksum": "0c72…",              // SHA-256 of the rendered document
  "data_hash": "3f9a…",             // SHA-256 of the canonical facts payload
  "verification_id": "8Kd2xQ7mB4pL",
  "verification_url": "https://reliastra.com/reports/8Kd2xQ7mB4pL",
  "methodology_version": "2.0",
  "signed": false,                  // this deployment issues unsigned artifacts
  "expires_at": "2027-09-04T09:12:00Z"
}

verification_url opens a page that needs no account, and GET /v1/verify/{verification_id} is the same record as JSON. GET /v1/verify/keys publishes the Ed25519 public keys for deployments that sign, so a third party can check a signature without trusting either endpoint.

What an API key can and cannot reach

Keys are denied by default. A key can reach the dependency, observation, incident and evidence surfaces its scopes allow; it cannot reach identity, account, webhook or key-management surfaces at all, whatever scopes it carries. That boundary is deliberate: a leaked key must not be able to mint credentials or read the account.

SurfaceAPI keySession
Dependencies, observations, incidents, evidenceWith the matching scopeYes
Webhook configurationNoYes
API key managementNo (unless the key carries read:api_keys)Yes
Account and identityNoYes

Pagination

GET /v1/incidents?limit=2json
{ "items": [ … ], "next_cursor": "eyJpZCI6…", "has_more": true }

Pass next_cursor back as cursor to continue. Cursors are stable for a query shape, not across filters - change the filter and start again.

Errors

StatusMeaningWhat to do
400Validation failed. detail lists each bad field.Fix the request. The field name is in the message.
401No credential, or the token expired.Refresh, or issue a new key.
403The credential lacks the scope.Check the scopes on the key.
404No such resource, or not yours.Confirm the id came from your own list call.
429Rate limited.Back off. Paginated list endpoints are the usual cause.
503A dependency of the API itself is unreadable.Retry. Do not treat this as an empty result.

Schema

This page is the field reference. The generated OpenAPI document is not published: it enumerates every route the API registers, including the authenticated ones, so serving it unauthenticated would hand an attacker the full attack surface from a single unauthenticated request.

This is a deliberate choice, not an omission. Operators who need the machine-readable contract can generate it locally against their own deployment.

bash
# generate the schema from your own deployment
curl -sS https://api.reliastra.com/health
# then, against a checkout of the API:
#   EXPOSE_API_SCHEMA=true python -m scripts.export_openapi

Problem with this page?

These guides live in the repository. An inaccuracy in the documentation is a bug, and the fastest fix is an issue with the sentence quoted. Open an issue.

Next

CLI →

Install, authenticate, read dependencies and incidents, retrieve evidence, and gate a pipeline on verification.

Read the methodology, or run the thing.

Every rule in these guides has a page stating its thresholds and its limits. The other way to check it is to add a dependency and watch what the detector does.