Skip to content
Aranisdevelopers
Sign in

Authentication

One credential, sent as a bearer token. Cookies are never read.

Request
GET /v1/suppliers HTTP/1.1
Host: api.aranis.ai
Authorization: Bearer ara_live_...

Creating a key

Keys are created in the Aranis app under Settings → Integrations. The secret is displayed once, at creation, and is never retrievable afterwards — store it in your secret manager before leaving the page.

Each key belongs to exactly one workspace. That is why no endpoint accepts an organization identifier as input: the tenant is derived from the credential, so a compromised key cannot be pointed at someone else's data.

Keys are bearer credentials — whoever holds one has the access it was granted. Keep them server-side, grant the narrowest scope set that does the job, and revoke immediately on any suspicion. Revocation takes effect on the next request.

Scopes

A key carries an explicit scope set, chosen at creation. Calling an endpoint without its scope returns 403 insufficient_scope naming the one you are missing — not a 401, because the credential itself is valid.

ScopeGrants
suppliers:readList and read suppliers.
suppliers:writeCreate suppliers.
assessments:readList and read assessments, including their gaps.
assessments:writeCreate assessments.
reports:readRead report metadata and download report PDFs.
assets:readList assets.
assets:writeBulk upsert assets.
risks:readRisk register, scores, matrices and acceptance letters.
action-plans:readRead action plans and their items.
action-plans:writeUpdate an action plan item's status.
alerts:readRead alerts and insights.
context:readBusiness processes, products, processing activities, BIA, threats.
evidence:readInclude evidence metadata in assessment gaps.
audit:readRead audit logs, for SIEM ingestion.
webhooks:readRead webhook endpoints and delivery history.

pii:read is additive

pii:read grants nothing on its own. A key holding only that scope reaches no endpoint at all. What it does is un-redact personal fields on resources some other scope already allows.

Without it, those fields are absent from the payload — not null. The distinction matters more than it looks:

suppliers:read alone
{
  "id": "3f1a8c2e-...",
  "name": "Acme Cloud Inc",
  "domain": "acme.com",
  "criticality": "high"
}
suppliers:read + pii:read
{
  "id": "3f1a8c2e-...",
  "name": "Acme Cloud Inc",
  "domain": "acme.com",
  "criticality": "high",
  "email": "security@acme.com",
  "contacts": [{ "name": "Ana Souza", "email": "ana@acme.com" }]
}

An absent email means "this key may not see it". A null email would mean "this supplier has none". If the two were conflated, redacted data would look like missing data, and your reconciliation would quietly start deleting records that exist.

Practically: check 'email' in supplier, not supplier.email !== null.

Plan entitlement

The API is part of the Enterprise plan, and entitlement is re-checked on every request rather than only at key creation — a workspace that downgrades loses API access immediately rather than keeping it until its keys expire.

403
{
  "error": {
    "code": "plan_upgrade_required",
    "message": "The Aranis API is available on the Enterprise plan. Contact sales to enable it.",
    "request_id": "req_01J8Z9K2M4N6P8Q0R2S4T6V8"
  }
}

Rotation

Keys can be given an expiry at creation. To rotate without downtime: create the new key, deploy it, confirm traffic has moved by watching consumption in Settings → Integrations, then revoke the old one.

If a key is ever committed to a repository, revoke it first and rewrite history second. Anything pushed to a public repository should be assumed compromised.