Core
POST /verify
Submit identifier (pseudonymised or hashed) and circuit_id. Get back eligible (boolean), optional signed token, latency_ms, and data_retained: null. Auth: API key (X-AffixIO-Key), Bearer JWT, or mTLS.
Identification via API
Send an identifier and a circuit ID. Get a cryptographically verified yes or no. Age, KYC, voting eligibility, health, finance, education. The circuit defines what you’re verifying; we never store PII.
One request with identifier and circuit_id. The circuit resolves against the right data source and returns a binary outcome. No personal data is retained.
Typical response time around 43ms. You can pass optional metadata (e.g. timestamp, source); it is never logged. data_retained is always null.
Use these endpoints to identify or verify anything. Base URL: https://api.affix-io.com/v1. Full spec: openapi.json.
Core
Submit identifier (pseudonymised or hashed) and circuit_id. Get back eligible (boolean), optional signed token, latency_ms, and data_retained: null. Auth: API key (X-AffixIO-Key), Bearer JWT, or mTLS.
Discovery
List available verification circuits. Filter by sector (health, finance, government, education, motoring, travel, hospitality, entertainment, ticketing, cross-sector). Each circuit has id, name, description, sector, input_methods.
Tokens
Re-verify a previously issued token without re-running the circuit. Useful for caching. Returns valid, eligible, circuit_id, issued_at, expires_at.
Example request body (POST /verify)
{
"identifier": "3a7bd3e27785e7b7a6c0e7c1f4f3f6b8",
"circuit_id": "health-age-verification"
}
Example response (200)
{
"eligible": true,
"circuit_id": "health-age-verification",
"token": "eyJ...",
"expires": "2026-03-06T12:00:00Z",
"latency_ms": 43,
"data_retained": null
}
The following uses the live base URL https://api.affix-io.com. Replace YOUR_API_KEY with your key (from hello@affix-io.com).
1. List available circuits (GET /v1/circuits)
curl -s -X GET "https://api.affix-io.com/v1/circuits" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
Response shape: {"circuits": [{"id": "health-age-verification", "name": "...", "description": "...", "sector": "health", ...}], "total": N}
2. Run a verification (POST /v1/verify)
curl -s -X POST "https://api.affix-io.com/v1/verify" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"identifier":"3a7bd3e27785e7b7a6c0e7c1f4f3f6b8","circuit_id":"health-age-verification"}'
JavaScript (fetch) equivalent:
const API_BASE = 'https://api.affix-io.com/v1';
const apiKey = 'YOUR_API_KEY';
// List circuits
const circuitsRes = await fetch(`${API_BASE}/circuits`, {
headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }
});
const { circuits, total } = await circuitsRes.json();
// Verify (use a circuit_id from the list, e.g. circuits[0].id)
const verifyRes = await fetch(`${API_BASE}/verify`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
identifier: '3a7bd3e27785e7b7a6c0e7c1f4f3f6b8',
circuit_id: 'health-age-verification'
})
});
const result = await verifyRes.json();
// result.eligible (boolean), result.data_retained === null, result.latency_ms
Authentication can also use X-API-Key: YOUR_API_KEY or mTLS (see openapi.json). Health check (no auth): GET https://api.affix-io.com/health.
Circuits define the type of verification. Same API, different circuit_id for different use cases.
Identification through the AffixIO API is stateless and binary. You send an identifier and a circuit_id to the verify endpoint; the circuit resolves against the relevant data source (API, database, government registry, etc.) and returns a single eligibility result. AffixIO does not validate the identifier format; the circuit defines how it is resolved. We never store PII or identifier data (data_retained is always null). Use GET /circuits to discover circuits by sector. Authentication is via API key, Bearer token, or mTLS. For full schema and examples, see openapi.json. Contact hello@affix-io.com or the contact page for API access.
Answers on identifying anything via the API, circuit IDs, and PII.
Send a POST to /verify with an identifier (pseudonymised or hashed) and a circuit_id. You get a binary eligible true or false. The circuit defines what you’re verifying (e.g. age, KYC, voting). We don’t store PII.
It tells the API which verification rule or data source to use. Examples: health-age-verification, finance-kyc-verification, govt-voting-eligibility. List them with GET /circuits, optionally filtered by sector.
A string. We don’t validate format; the circuit resolves it. Best practice: SHA-256 hex of the raw identifier, salted on the client, so you never send raw PII.
No. The API is stateless. The response includes data_retained: null. You get only a binary result.
OpenAPI 3.1 at openapi.json. Production: https://api.affix-io.com/v1. For keys and access, email hello@affix-io.com.
Use one API to identify or verify anything. Binary result, no PII stored. OpenAPI spec on the site; contact us for keys and integration.
Contact our team Contact pageAffixIO home · How it works · Agentic payments · OpenAPI · hello@affix-io.com