This page requires JavaScript to display.

Create a hosted session

POST /sessions · Hosted · version 2026-09-14

The whole reading, on a screen we host. You need an API key and a redirect — no SDK, no camera code, no proof handling.

Create the session, send the person to url, and read the outcome from the webhook or from the return_url callback. The proof never touches your frontend.

One session does one thing. mode decides which: claim a person, recognise one, ask for an attribute, or take a mandate grant.

Base URL

https://api.sidaxis.com/v1 in production, https://sandbox.api.sidaxis.com/v1 in sandbox.

Parameters

NameInTypeRequiredDescription
AuthorizationheaderstringrequiredBearer sk_live_… in production, sk_test_… in sandbox.
Sidaxis-VersionheaderstringoptionalDated version. Pin it in production.
Idempotency-KeyheaderstringoptionalReplaying a key returns the original session and its url instead of opening a second one.

Request body

FieldTypeRequiredDescription
modeenumrequiredWhat the session is for. Each maps to the headless endpoint of the same name.
return_urlstringrequiredWhere the person lands when the session ends. Sidaxis appends session_id and status; read the result from the API or the webhook, never from the query string alone.
cancel_urlstringoptionalWhere a person who abandons the session lands. Defaults to return_url.
facetokenstringoptionalRequired for mode recognise, attribute and mandate. Who the session is about.
attributeenumoptionalRequired for mode attribute. The single predicate you are asking for.
mandateobjectoptionalRequired for mode mandate. The same five fields as POST /mandates, minus granted_by — the session proves who is granting.
brandingobjectoptionalWhite-label: logo_url, accent, domain, headline, footer_note. Included in the free tier.
localestringoptionalBCP 47. Defaults to the person's browser.
metadataobjectoptionalYour own strings, returned unchanged on the session and the webhook.

Example request

{
  "mode": "mandate",
  "return_url": "https://acme.example/agent/setup/done",
  "facetoken": "0xA1f3c9b27d04",
  "mandate": {
    "granted_to": "agent_7f2c",
    "scope": [
      "payment"
    ],
    "ceiling": {
      "amount": 200,
      "currency": "USD",
      "period": "month"
    },
    "until": "2027-03-01T00:00:00Z"
  },
  "branding": {
    "logo_url": "https://acme.example/logo.svg",
    "accent": "#2DD48F",
    "domain": "id.acme.example",
    "headline": "Authorise your assistant"
  }
}

Responses

201 — Session open

Redirect the person to url. It is single-use and expires.

{
  "id": "ses_2a91c4f7",
  "status": "open",
  "mode": "mandate",
  "url": "https://id.acme.example/s/2a91c4f7",
  "expires_at": "2026-09-14T11:34:02Z",
  "created_at": "2026-09-14T11:04:02Z",
  "metadata": {}
}

Errors

invalid_return_url, allowance_exhausted, rate_limited. See errors and refusals.

Notes

Sessions expire in 30 minutes and the url is single-use. Create a new session rather than reusing one.

Billing follows the headless equivalent: a claim session is billed once per person, a recognise session is free, and a session the person abandons is never billed.

White-label — your logo, accent, copy and your own domain — is included in the free tier. Point a CNAME at Sidaxis and set branding.domain.

The person's reading still happens on their device. Hosted changes who writes the screen, not where the biometric goes.

See also

Unpacking...