Skip to content

API Reference

The Athenty REST API lets you integrate identity verification directly into your applications, workflows, and back-office systems — without a manual operator in the loop.

Create verification requests

Trigger Smart IDV or Smart KYC verifications programmatically and receive results via webhook.

Read request status

Retrieve the full assembled status of any verification request, including scores and decisions.

Manage clients

Create and retrieve client records from your CRM, case management, or loan origination platform.

Receive webhooks

Subscribe to real-time events for verification milestones. See Webhook Events below.


https://api.athenty.com/v2/api

All API requests must include your organization’s API key in the X-Api-Key header.

Terminal window
curl https://api.athenty.com/v2/api/requests \
-H "X-Api-Key: YOUR_API_KEY"
  1. Log in to Athenty Secure
  2. Go to Settings → General
  3. Scroll to the API Key section
  4. Click Generate Key

Your key is shown once — copy it immediately. You can rotate or revoke it at any time from the same screen.


MethodPathDescription
POST/requestsCreate a new verification request
GET/requestsList verification requests (paginated)
GET/requests/:idGet a request with full assembled detail
MethodPathDescription
POST/clientsCreate a new client record
GET/clientsList clients (paginated)
GET/clients/:idGet a client record

Create a new verification request. The subject receives an email invitation to complete their verification (if subjectEmail is provided).

Terminal window
curl -X POST https://api.athenty.com/v2/api/requests \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "idv",
"requirements": ["document", "person", "biometric_face"],
"subjectName": "Jane Smith",
"subjectEmail": "jane@example.com",
"expiresDays": 7
}'
FieldTypeRequiredDescription
type"idv" | "kyc" | "share"Verification type
requirementsstring[]Ordered list of steps to collect. At least one required.
clientIdstring (UUID)Link to an existing client record
matterIdstring (UUID)Link to a matter
subjectNamestringFull name of the subject being verified
subjectEmailstringEmail address — used to send the verification invitation
subjectPhonestringPhone number
expiresDaysinteger (1–90)Days until the link expires (default: 7)
configobjectStep-specific configuration overrides
thirdPartiesarrayThird parties to auto-share with on approval

Available requirements: document, person, location, contact, biometric_face, business, pep_hio, financial, consent, attestation, estate

{
"id": "req_01j9abc123",
"orgId": "org_01j9abc000",
"type": "idv",
"status": "initiated",
"requirements": ["document", "person", "biometric_face"],
"subjectName": "Jane Smith",
"subjectEmail": "jane@example.com",
"expiresDays": 7,
"expiresAt": "2025-04-12T00:00:00.000Z",
"accessToken": "a1b2c3...",
"createdAt": "2025-04-05T12:00:00.000Z"
}

List verification requests for your organization. Results are paginated.

Terminal window
curl "https://api.athenty.com/v2/api/requests?status=pending_review&limit=25" \
-H "X-Api-Key: YOUR_API_KEY"
ParameterTypeDescription
type"idv" | "kyc" | "share"Filter by verification type
statusstringFilter by status. Accepts comma-separated values: initiated,in_progress
clientIdstring (UUID)Filter by client
matterIdstring (UUID)Filter by matter
searchstringSearch by subject name or email
dateFromstring (ISO 8601)Filter requests created on or after this date
dateTostring (ISO 8601)Filter requests created on or before this date
sort"created_at" | "updated_at" | "status"Sort order (default: created_at desc)
pageintegerPage number (default: 1)
limitintegerResults per page (default: 20, max: 100)

Available statuses: initiated, in_progress, submitted, pending_review, approved, rejected, canceled, expired

{
"data": [
{
"id": "req_01j9abc123",
"type": "idv",
"status": "pending_review",
"subjectName": "Jane Smith",
"createdAt": "2025-04-05T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 42,
"totalPages": 3,
"hasNext": true,
"hasPrev": false
}
}

Get a verification request with full assembled detail including step data, scores, and decisions.

Terminal window
curl https://api.athenty.com/v2/api/requests/req_01j9abc123 \
-H "X-Api-Key: YOUR_API_KEY"

Returns the fully assembled request object including identity, documents, biometrics, location, score, and review decisions.


Create a new client record in your organization.

Terminal window
curl -X POST https://api.athenty.com/v2/api/clients \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"memberType": "individual",
"country": "CA"
}'
FieldTypeRequiredDescription
nameFirststringFirst name
nameLaststringLast name
businessNamestringBusiness name (for memberType: "business")
emailstringEmail address
phonestringPhone number
externalIdstringYour internal system ID for this client
memberType"individual" | "business"Default: individual
addressLine1string
addressLine2string
citystring
regionstringProvince / state
postalCodestring
countrystring (ISO 3166-1 alpha-2)Default: CA
metadataobjectArbitrary key-value pairs for your own reference
{
"id": "clt_01j9abc456",
"orgId": "org_01j9abc000",
"nameFirst": "Jane",
"nameLast": "Smith",
"email": "jane@example.com",
"memberType": "individual",
"country": "CA",
"active": true,
"requestCount": 0,
"createdAt": "2025-04-05T12:00:00.000Z"
}

List client records for your organization.

Terminal window
curl "https://api.athenty.com/v2/api/clients?search=jane&limit=25" \
-H "X-Api-Key: YOUR_API_KEY"
ParameterTypeDescription
searchstringSearch by name, email, or externalId
memberType"individual" | "business"Filter by member type
active"true" | "false"Filter by active status
sort"name" | "created_at" | "request_count"Sort order
pageintegerPage number
limitintegerResults per page

Get a single client record.

Terminal window
curl https://api.athenty.com/v2/api/clients/clt_01j9abc456 \
-H "X-Api-Key: YOUR_API_KEY"

All list endpoints return a consistent pagination envelope:

{
"data": [ ... ],
"pagination": {
"page": 1,
"limit": 20,
"total": 42,
"totalPages": 3,
"hasNext": true,
"hasPrev": false
}
}

Use page and limit query parameters to navigate pages.


PlanRate limit
Professional200 requests / minute
Business200 requests / minute
EnterpriseCustom — contact us

Exceeded requests return 429 Too Many Requests with a Retry-After header (seconds until the next window resets).


All errors return a JSON body with code, message, and statusCode:

{
"code": "UNAUTHORIZED",
"message": "Invalid API key.",
"statusCode": 401
}
StatusCodeMeaning
400BAD_REQUESTMalformed request
401UNAUTHORIZEDMissing or invalid API key
402PAYMENT_REQUIREDSubscription inactive
403FORBIDDENPlan does not include API access
404NOT_FOUNDResource not found or does not belong to your organization
422VALIDATION_ERRORRequest body failed validation — errors array included
429RATE_LIMITEDToo many requests
{
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"statusCode": 422,
"errors": [
{ "field": "type", "message": "Required" },
{ "field": "requirements", "message": "Array must contain at least 1 element(s)" }
]
}

Subscribe to real-time events to avoid polling the API. See the Advanced Features guide for full webhook setup, payload structure, and signature verification.

EventTriggered when
request.createdA new verification request is created
request.submittedThe subject completes all verification steps
request.approvedAn operator approves the verification
request.rejectedAn operator rejects the verification
request.canceledA request is canceled
request.expiredA request reaches its expiry date
client.createdA new client is created
client.updatedA client record is updated
client.deletedA client record is soft-deleted

All webhook payloads are signed with X-Athenty-Signature (HMAC-SHA256). Always verify the signature before processing.


Download the machine-readable OpenAPI 3.1 spec for use with Postman, Insomnia, or SDK generation tools:

openapi.yaml


Need help integrating? Contact us or book a demo and our team will walk you through your specific use case.