Authentication

Org-scoped API keys, permission scopes, and error handling

View as Markdown

Every Clossir API request authenticates with an org-scoped API key. Keys are created in the dashboard or via the API itself, and each key carries a set of permission scopes that limit what it can access.

API keys

Authenticating a request
$curl -H "Authorization: Bearer sk_live_..." \
> https://api.signum.tech/identity/parties

Or with the SDK:

SDK authentication
1import { SignumClient } from "@signum-tech/sdk";
2
3const signum = new SignumClient({
4 apiKey: "sk_live_...",
5});

Key properties

PropertyDescription
Org-scopedEvery key belongs to one organization. All operations through that key are isolated to that org via RLS.
Network modeKeys can optionally be restricted to testnet or mainnet. If unset, inherits the org’s default.
Permission scopesFine-grained access control — a key can only perform operations its scopes allow.

Permission scopes

Each API key is granted a subset of the 16 canonical scopes. Scopes follow the pattern {resource}:{action} where action is read or write.

ScopeDescription
orgs:readRead organization data
orgs:writeCreate/update organizations
assets:readRead assets
assets:writeCreate/update/delete assets
members:readRead org members
members:writeAdd/remove/update members
wallets:readRead wallets
wallets:writeCreate/manage wallets
chains:readRead chain registry
chains:writeEnable/disable chains for org
attestations:readRead attestations
attestations:writeCreate/revoke attestations
transfers:readRead transfers
transfers:writeInitiate transfers
api-keys:readList API keys
api-keys:writeCreate/revoke API keys

A write scope on a resource does not imply read. If your integration needs to both create attestations and query their status, grant both attestations:write and attestations:read.

Use caseScopes
Read-only dashboardorgs:read, assets:read, members:read, attestations:read, transfers:read
Attestation issuerattestations:read, attestations:write, wallets:read
Full platform accessAll 16 scopes
Key management onlyapi-keys:read, api-keys:write

Error handling

The Clossir API returns errors as RFC 9457 application/problem+json responses — structured, machine-readable error bodies with consistent fields.

Error shape

Example error response
1{
2 "type": "https://api.signum.tech/errors/insufficient-scope",
3 "title": "Forbidden",
4 "status": 403,
5 "detail": "This API key does not have the 'attestations:write' scope required for this operation."
6}

Standard fields

FieldTypeDescription
typestringURI identifying the error type. about:blank for generic HTTP errors.
titlestringShort, human-readable summary of the problem.
statusnumberThe HTTP status code.
detailstringHuman-readable explanation specific to this occurrence.
instancestring?URI identifying the specific request (for support reference).

Common error types

StatusType URIWhen
401about:blankMissing or invalid API key
403.../insufficient-scopeKey lacks the required scope for this operation
409.../prerequisites-not-metA prerequisite state is not satisfied (includes prerequisites[] array with resolution hints)
422about:blankRequest body validation failed
429about:blankRate limit exceeded

Prerequisite errors

Some operations require prior state — for example, creating an attestation requires the party to exist. When prerequisites are not met, the response includes resolution hints:

409 Prerequisite failure
1{
2 "type": "https://api.signum.tech/errors/prerequisites-not-met",
3 "title": "Prerequisites not met",
4 "status": 409,
5 "detail": "Cannot create attestation: party has not completed identity verification.",
6 "prerequisites": [
7 {
8 "state": "party_verified",
9 "satisfied": false,
10 "detail": "Party pty_abc123 has not completed KYC.",
11 "resolution": {
12 "method": "POST",
13 "path": "/identity/parties/pty_abc123/verify",
14 "description": "Initiate identity verification for this party"
15 }
16 }
17 ],
18 "dependencyChain": ["party_exists", "party_verified", "attestation_eligible"]
19}

The resolution field tells you exactly which API call to make to satisfy the prerequisite.

Next steps

  • Quickstart — see authentication in action
  • API Reference — explore the full operation catalog
  • Webhooks — receive async notifications when state changes