Authentication

Server-to-server calls authenticate with an API key in the X-API-Key header. A key is bound to one organization and to exactly one issuer or one verifier — there are no OAuth-style scopes.

Request

curl "$LUTRAID_API/v1/organizations/$ORG/issuers/$ISSUER/create-credential-offer" \
  -H "X-API-Key: $LUTRAID_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "issuanceProfileId": "...", "data": [] }'

Key types

PrefixGrantsUse with
iss_<keyId>_<secret>one issueroffer creation, issuance status
ver_<keyId>_<secret>one verifierverification requests and results

A key never grants access to a second issuer, verifier or organization. Calling an endpoint with a key that doesn't match the organizationId/issuerId/verifierId in the path fails closed with PERMISSION_DENIED (403) — the key simply isn't authorized for that resource, not that the resource doesn't exist.

Managing keys

Keys are created and revoked in the dashboard — there is no API to create or manage keys, and no additional scopes to configure. The secret is returned once, at creation; it is stored only as a hash and cannot be read back.

Errors

StatusCodeCause
401INVALID_API_KEYmissing key, malformed key, wrong secret, revoked key
401API_KEY_EXPIREDkey had a configured expiry that has passed
403PERMISSION_DENIEDkey valid but scoped to a different issuer, verifier or organization

See Errors for the full response shape.

Was this page helpful?