API/One Face for agents
v1.0.0-beta.mdGet API keys
Agents

One Face for agents

An agent asks for a verification and receives a card; the person opens it on her own device and proves she is present; the agent reads the result.

The agent never touches a camera or a microphone, and the card grants no authority — it is a verification of presence, not a mandate.

1. Ask for a verification

POST /functions/v1/agent-verification-request

Auth: a first-party Sieve ID JWT in Authorization: Bearer, or the OAuth 2.1 bearer issued to an MCP client. A merchant API key is refused with USER_TOKEN_REQUIRED, because the card belongs to the merchant the agent represents and only an owner of that merchant may mint one.

FieldTypeNotes
merchant_idstring, required
external_refstringYour own reference
purposestring ≤140Shown to the person
ttl_seconds60–900Default 300
200
{
  "verification_id": "avr_71ac33",
  "url": "https://id.sidaxis.com/capture?hs=...",
  "merchant_id": "mrc_9f2c",
  "external_ref": "support-ticket-4471",
  "expires_at": "2026-09-16T12:06:03Z",
  "ttl_seconds": 300
}

The url is single-use on the hosted surface.

2. Read the outcome

GET /functions/v1/agent-verification-result?verification_id=avr_71ac33

Polling, not webhooks. Every state is HTTP 200 with three message layers — reason, developer_message, user_message — never an error.

StateMeans
pendingThe card was never opened
openedThe person is in the capture
verifiedShe proved she was present; carries the assurance level and the receipt
refusedThe capture did not prove presence, with a named reason
expiredThe card's TTL passed
200 — verified
{
  "verification_id": "avr_71ac33",
  "state": "verified",
  "reason": "verified",
  "developer_message": "Capture verified a live person at 2026-09-16T12:03:11Z.",
  "user_message": "You are verified.",
  "assurance_level": "face_voice",
  "receipt_code": "RCP-4K2M-9QX7"
}

Two guarantees

  • The result is derived from what the capture recorded. Nothing and nobody can declare “verified” on its own, including the agent that asked.
  • Every state is a refusal or a fact with a named reason, never an exception to catch.

What this is not

It does not issue a mandate, does not move money, and does not make the agent an authority. When the agent needs standing authority, that is mandates/issue — and it still needs a live capture_id from a human surface.

Sidaxis is the human authorisation layer. It never moves money, holds funds or settles. The machine-readable contract is openapi.yaml.
Sidaxis API documentationQuickstartAuthenticationHosted or headlessSandbox and productionIdempotencyRate limitsErrors and refusalsField namesWebhooksAssuranceThe document ruleAlias availabilityMerchant themeMCP serverCompatibilityStatusRoadmapChangelogIdentityEnroll an identityRecognise a personDisclose an attributeMandatesThe eight scopesIssue a mandateCheck an actionConsume a mandateRead a mandateRevoke a mandateReceiptsRead a merchant's receiptsVerify a receiptHosted sessionsCreate a hosted sessionConsume a hosted sessionOne Face for agents