Powered by Apollo's Engine

AffixIO
API
Documentation

Complete API reference for building with AffixIO. Real-time cryptographic verification, zero-knowledge proofs, and stateless architecture. Every endpoint documented with examples.

Get API Access View Dashboard
<50ms
Response Time
0
Data Stored
99.99%
Uptime SLA
30+
API Endpoints
GET

/

Get API information, version, and available endpoints. Returns different responses for JSON vs HTML requests.

Response (JSON):
JSON
{
  "name": "AffixIO API",
  "version": "1.0.0",
  "engine": {
    "name": "Apollo",
    "version": "1.0.0"
  },
  "documentation": "https://www.affix-io.com/docs",
  "endpoints": {
    "health": "/health",
    "verify": "/verify",
    "pod": "/pod/:podId/verify",
    "domain": "/domain/verify",
    "hermes": "/hermes/:slug"
  },
  "customDomains": {
    "supported": true,
    "cname": "api.affix-io.com"
  },
  "timestamp": "2025-01-20T12:00:00.000Z"
}
curl
curl -X GET https://api.affix-io.com/ \
  -H "Accept: application/json"
GET

/health

Comprehensive health check endpoint. Returns service status, database connectivity, engine status, and response time metrics.

curl
curl https://api.affix-io.com/health
Response:
JSON
{
  "status": "healthy",
  "timestamp": "2025-01-20T12:00:00.000Z",
  "uptime": 86400,
  "engine": {
    "name": "Apollo",
    "version": "1.0.0",
    "status": "operational"
  },
  "database": {
    "status": "connected"
  },
  "responseTime": 5
}
GET

/health/ready

Readiness probe for Kubernetes/Docker orchestration. Checks if the service is ready to accept traffic.

curl
curl https://api.affix-io.com/health/ready
Response (200 OK):
JSON
{ "ready": true }
GET

/health/live

Liveness probe for Kubernetes/Docker orchestration. Checks if the service process is alive.

curl
curl https://api.affix-io.com/health/live
Response (200 OK):
JSON
{ "live": true }
GET

/verify

Get engine information and verification service status.

curl
curl https://api.affix-io.com/verify
Response (200 OK):
JSON
{
  "success": true,
  "engine": {
    "name": "Apollo",
    "version": "1.0.0"
  },
  "status": "operational",
  "timestamp": "2025-01-20T12:00:00.000Z"
}
POST

/verify

Auth Required

Main verification endpoint for cryptographic verification. Requires active subscription. Supports both API key and Bearer token authentication.

Request Body:
data
object (required)
Verification data to process
options
object (optional)
Additional verification options
curl
curl -X POST https://api.affix-io.com/verify \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "field1": "value1",
      "field2": "value2"
    },
    "options": {}
  }'
JavaScript
const response = await fetch('https://api.affix-io.com/verify', {
  method: 'POST',
  headers: {
    'X-API-Key': 'your-api-key',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    data: {
      field1: 'value1',
      field2: 'value2'
    },
    options: {}
  })
});

const result = await response.json();
Response (200 OK):
JSON
{
  "success": true,
  "verificationId": "verify-123-abc",
  "timestamp": "2025-01-20T12:00:00.000Z",
  "jws": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "signature": "cryptographic-signature",
  "proof": "zero-knowledge-proof"
}
POST

/verify/batch

Auth Required

Batch verification endpoint. Process up to 100 verification items in a single request for improved performance.

Request Body:
items
array (required, max 100)
Array of verification data objects
curl
curl -X POST https://api.affix-io.com/verify/batch \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"field1": "value1"},
      {"field2": "value2"}
    ]
  }'
Response (200 OK):
JSON
{
  "success": true,
  "count": 2,
  "results": [
    {
      "success": true,
      "verificationId": "verify-1"
    },
    {
      "success": true,
      "verificationId": "verify-2"
    }
  ]
}
GET

/verify/qr/:hash

Verify a QR code by hash. Proxies to main backend service. No authentication required.

URL Parameters:
hash
string (required)
QR code hash identifier
curl
curl https://api.affix-io.com/verify/qr/abc123def456
GET

/pod/:podId

Get information about a corporate pod including status, custom domain, and verification count.

URL Parameters:
podId
string (required)
Unique pod identifier
curl
curl https://api.affix-io.com/pod/pod-123
Response (200 OK):
JSON
{
  "success": true,
  "pod": {
    "id": "pod-123",
    "name": "Corporate Pod",
    "status": "ACTIVE",
    "customDomain": "verify.example.com",
    "verificationCount": 1500,
    "createdAt": "2025-01-20T12:00:00.000Z",
    "endpoints": {
      "verify": "https://api.affix-io.com/pod/pod-123/verify",
      "info": "https://api.affix-io.com/pod/pod-123"
    }
  }
}
POST

/pod/:podId/verify

Auth Required

Pod-specific verification endpoint. Public endpoint but requires pod authentication. Charges apply per verification ($0.35 default). Rate limited to 1000 requests per hour per IP.

URL Parameters:
podId
string (required)
Unique pod identifier
Request Body:
data
object (required)
Verification data object
curl
curl -X POST https://api.affix-io.com/pod/pod-123/verify \
  -H "Content-Type: application/json" \
  -d '{
    "field1": "value1",
    "field2": "value2"
  }'
Response (200 OK):
JSON
{
  "success": true,
  "verificationId": "pod-verify-123",
  "timestamp": "2025-01-20T12:00:00.000Z",
  "jws": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "signature": "cryptographic-signature",
  "proof": "zero-knowledge-proof"
}
GET

/pod/:podId/stats

Auth Required

Get pod statistics including total verifications, success rate, today's count, and weekly charges. Requires pod ownership (verified via API key).

URL Parameters:
podId
string (required)
Unique pod identifier
curl
curl https://api.affix-io.com/pod/pod-123/stats \
  -H "X-API-Key: your-api-key"
Response (200 OK):
JSON
{
  "success": true,
  "stats": {
    "podId": "pod-123",
    "podName": "Corporate Pod",
    "totalVerifications": 1500,
    "successfulVerifications": 1450,
    "successRate": "96.67%",
    "todayVerifications": 50,
    "weeklyCharges": 525.00,
    "status": "ACTIVE"
  }
}
POST

/domain/verify

Auth Required

Verify DNS configuration for a custom domain. Checks if CNAME is properly configured to point to api.affix-io.com. Can optionally verify pod ownership.

Request Body:
domain
string (required)
Domain name to verify (e.g., verify.example.com)
podId
string (optional)
Pod ID to verify ownership (optional)
curl
curl -X POST https://api.affix-io.com/domain/verify \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "verify.example.com",
    "podId": "pod-123"
  }'
Response (200 OK):
JSON
{
  "success": true,
  "domain": "verify.example.com",
  "dns": {
    "valid": true,
    "cname": "api.affix-io.com"
  },
  "available": true,
  "instructions": null
}
GET

/domain/status/:domain

Check the current status of a domain including DNS configuration, pod association, and readiness status.

URL Parameters:
domain
string (required)
Domain name to check
curl
curl https://api.affix-io.com/domain/status/verify.example.com
Response (200 OK):
JSON
{
  "success": true,
  "domain": "verify.example.com",
  "configured": true,
  "podInfo": {
    "id": "pod-123",
    "name": "Corporate Pod",
    "status": "ACTIVE"
  },
  "dns": {
    "valid": true,
    "cname": "api.affix-io.com"
  },
  "ready": true
}

Hermes routes provide stateless eligibility checks. They forward requests to target URLs and return YES/NO verdicts based on search results in the response data. Perfect for building eligibility verification systems.

POST

/hermes/:slug

Verify eligibility through a Hermes route. Searches the target URL's data source and returns a YES/NO verdict. Supports optional token authentication if route requires it.

URL Parameters:
slug
string (required)
Hermes route slug identifier
Request Body:
search query
object (required)
Data to search for in the target URL's response
curl
curl -X POST https://api.affix-io.com/hermes/my-route \
  -H "Content-Type: application/json" \
  -d '{
    "id": "12345",
    "email": "user@example.com"
  }'
JavaScript
const response = await fetch('https://api.affix-io.com/hermes/my-route', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    // Optional: 'Authorization': 'Bearer token' if route requires token
  },
  body: JSON.stringify({
    id: '12345',
    email: 'user@example.com'
  })
});

const result = await response.json();
// Result: { verdict: 'YES' | 'NO', jws: '...', timestamp: '...', ... }
Response (200 OK):
JSON
{
  "verdict": "YES",
  "timestamp": "2025-01-20T12:00:00.000Z",
  "jws": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "signature": "cryptographic-signature",
  "proof": "zero-knowledge-proof",
  "zkProof": {
    "proof": "zk-proof-data",
    "commitment": "commitment-hash",
    "verificationKey": "verification-key",
    "publicInputs": {
      "verdict": "YES"
    }
  }
}
GET

/hermes/:slug/:id?

GET request to Hermes route. Uses query parameters as search criteria. Optional ID parameter can be used for specific item lookup.

URL Parameters:
slug
string (required)
Hermes route slug identifier
id
string (optional)
Optional specific item ID
Query Parameters:
any field
string (optional)
Query parameters used as search criteria
curl
curl "https://api.affix-io.com/hermes/my-route?id=12345&email=user@example.com"
JavaScript
const params = new URLSearchParams({
  id: '12345',
  email: 'user@example.com'
});

const response = await fetch(`https://api.affix-io.com/hermes/my-route?${params}`);
const result = await response.json();
Response (200 OK):
JSON
{
  "verdict": "YES",
  "timestamp": "2025-01-20T12:00:00.000Z",
  "jws": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "signature": "cryptographic-signature",
  "proof": "zero-knowledge-proof"
}

Proxy routes create api.affix-io.com URLs that forward to destination URLs. They use Hermes routes under the hood and return YES/NO verdicts based on search results.

POST

/proxy

Create a proxy URL. Converts a destination URL into an api.affix-io.com link that can be used for verification.

Request Body:
userId
string (required)
User ID creating the proxy
destinationUrl
string (required)
URL to proxy to
sourceUrl
string (optional)
Source URL (defaults to destinationUrl)
requireToken
boolean (optional)
Require token authentication for this route
curl
curl -X POST https://api.affix-io.com/proxy \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "user-123",
    "destinationUrl": "https://api.example.com/data",
    "requireToken": false
  }'
Response (201 Created):
JSON
{
  "success": true,
  "id": "hermes-123",
  "slug": "abc123def456",
  "sourceUrl": "https://api.example.com/data",
  "destinationUrl": "https://api.example.com/data",
  "apiUrl": "https://api.affix-io.com/hermes/abc123def456",
  "createdAt": "2025-01-20T12:00:00.000Z"
}
GET

/proxy

List all proxy URLs for a user with statistics.

Query Parameters:
userId
string (required)
User ID to list proxies for
curl
curl "https://api.affix-io.com/proxy?userId=user-123"
GET

/proxy/:id

Get details for a specific proxy route.

curl
curl https://api.affix-io.com/proxy/hermes-123
DELETE

/proxy/:id

Delete a proxy route. Soft delete preserves history.

curl
curl -X DELETE https://api.affix-io.com/proxy/hermes-123 \
  -H "Content-Type: application/json" \
  -d '{"userId": "user-123"}'