Skip to main content
POST

Authorizations

Authorization
string
header
required

OAuth 2.0 client_credentials grant (RFC 6749 §4.4) bound to a DPoP keypair (RFC 9449).

Flow (every authenticated /v1 call requires both an access token AND a fresh per-request DPoP proof):

  1. Register a credential via the merchant portal. Anton issues a client_id (ant_oc_<env>_<32hex>) and a client_secret (ant_ocs_<env>_<48hex>, shown ONCE). The portal generates an ES256 or Ed25519 DPoP keypair in your browser; you store the private half.
  2. Mint an access token: POST /oauth/token with Authorization: Basic <client_id:client_secret> and Content-Type: application/x-www-form-urlencoded. Body: grant_type=client_credentials. A DPoP header carrying a proof signed for the token endpoint is required (no ath claim on this proof).
  3. Use the token: send Authorization: DPoP <access_token> plus a fresh DPoP: <proof> header on every /v1 request. The proof JWT MUST carry htm (request method), htu (request URL, no query/fragment), iat (within ±60s), jti (unique within 5 min), and ath (SHA-256 of the access token, base64url).

Tokens expire in 1 hour in production / staging and 8 hours in sandbox. There are no refresh tokens — call /oauth/token again with your secret. Anton's public signing key is published at /.well-known/jwks.json.

OpenAPI 3.0 has no native DPoP scheme; this declaration plus dpopHeader together convey both the access-token Authorization and the per-request proof header.

DPoP
string
header
required

Per-request DPoP proof JWT (RFC 9449). MUST accompany the Authorization: DPoP <access_token> header on every protected operation. The proof is signed by the merchant's private DPoP key and carries htm, htu, iat, jti, and ath claims.

Headers

Idempotency-Key
string
required

Unique key identifying this operation. Sending the same key twice returns the original response instead of creating a duplicate. Keys are retained for 24 hours.

Maximum string length: 255

Body

application/json
type
enum<string>
required
Available options:
person,
business
display_name
string
required

The subject's legal name. Vault-tokenized at rest; masked on every read.

email
string

Where the hosted link is delivered (with delivery: "email"), and the address shown in the flow. Without an email on file, delivery cannot happen — the attempt stays created and you deliver the link yourself.

external_ref
string

Optional identifier from your systems, echoed back on reads.

country
string

ISO 3166-1 alpha-2. Recommended — it feeds sanctions screening disambiguation.

delivery
enum<string>
default:manual

email — Anton emails the hosted link to the subject. manual (the default when omitted) — you deliver the returned hosted_link yourself.

Available options:
email,
manual
message
string

Optional text shown in the delivery email, attributed to your business. Used for that one send and never persisted (it may carry incidental PII) — it cannot be read back.

Maximum string length: 500

Hosted-link lifetime.

Available options:
7,
14,
30

Response

Subject created; first verification attempt opened.

data
object
required