Skip to content

Verification webhooks ​

Agio sends KYC review and wallet verification updates to your server. These endpoints are configured by the Agio team. Card partners use separate card webhook subscriptions.

Configure an endpoint ​

Create an HTTPS endpoint that accepts POST requests with a JSON body, then contact Agio to configure delivery to it. Associate updates with your records using externalUserId for KYC or external_user_id for wallet verification.

KYC webhook ​

KYC webhooks report review changes for an applicant. Use reviewStatus for review progress and reviewResult for the decision.

KYC webhook fields ​

FieldMeaning
WebhookPayloadIdAgio webhook payload ID
applicantIdVerification provider applicant ID
externalUserIdUser identifier supplied by your application
inspectionIdVerification inspection ID
correlationIdProvider request correlation ID
typeWebhook event type
levelNameVerification level
reviewStatusCurrent review state
reviewResultReview decision and rejection details
reviewApprovedAgio approval summary, when present
sandboxModeWhether the event comes from the sandbox
createdAtEvent creation time

Other fields depend on the event and applicant type.

Read the decision ​

A completed review has a decision in reviewResult.reviewAnswer: GREEN means approved and RED means rejected. For rejection, reviewRejectType distinguishes RETRY from FINAL; rejectLabels lists the reasons. See verification results for all review states.

When present, reviewApproved: true summarizes approval. A false value can also mean that review is still pending; read the review fields before treating it as a final rejection.

Example initial rejection ​

json
{
  "WebhookPayloadId": 1,
  "applicantId": "5cb744200a975a67ed1798a4",
  "inspectionId": "5cb744200a975a67ed1798a5",
  "correlationId": "req-fa94263f-0b23-42d7-9393-ab10b28ef42d",
  "externalUserId": "externalUserId",
  "levelName": "basic-kyc-level",
  "type": "applicantReviewed",
  "reviewResult": {
    "reviewAnswer": "RED",
    "moderationComment": "We do not accept screenshots. Please upload an original photo.",
    "clientComment": "Screenshots are not accepted.",
    "reviewRejectType": "RETRY",
    "rejectLabels": ["UNSATISFACTORY_PHOTOS", "SCREENSHOTS"]
  },
  "reviewStatus": "completed",
  "createdAt": "2026-02-21 13:23:19+0000"
}

Example final rejection ​

json
{
  "WebhookPayloadId": 1,
  "applicantId": "5cb744200a975a67ed1798a4",
  "inspectionId": "5cb744200a975a67ed1798a5",
  "correlationId": "req-fa94263f-0b23-42d7-9393-ab10b28ef42d",
  "externalUserId": "externalUserId",
  "levelName": "basic-kyc-level",
  "type": "applicantReviewed",
  "reviewResult": {
    "moderationComment": "We could not verify your profile. Please contact support: [email protected]",
    "clientComment": " Suspected fraudulent account.",
    "reviewAnswer": "RED",
    "rejectLabels": ["UNSATISFACTORY_PHOTOS", "GRAPHIC_EDITOR", "FORGERY"],
    "reviewRejectType": "FINAL"
  },
  "reviewStatus": "completed",
  "createdAt": "2026-02-21 13:23:19+0000"
}

Example final approval ​

json
{
  "applicantId": "5cb56e8e0a975a35f333cb83",
  "inspectionId": "5cb56e8e0a975a35f333cb84",
  "correlationId": "req-a260b669-4f14-4bb5-a4c5-ac0218acb9a4",
  "externalUserId": "externalUserId",
  "levelName": "basic-kyc-level",
  "type": "applicantReviewed",
  "reviewResult": {
    "reviewAnswer": "GREEN"
  },
  "reviewStatus": "completed",
  "createdAt": "2026-02-21 13:23:19+0000"
}

KYT webhook ​

Wallet verification webhooks report changes to the wallet whitelisting decision.

KYT webhook data fields ​

FieldTypeDescription
idintegerUnique identifier for the wallet record
wallet_addressstringThe wallet address that was analyzed
external_user_idstringYour internal user identifier
status_idintegerCurrent wallet status (see below)
clean_walletbooleanWhether the wallet was marked as clean (new wallet with no history)
created_attimestampWhen the wallet was submitted for analysis
updated_attimestampWhen the status was last updated

Wallet status codes ​

Status IDStatusDescription
1PendingWallet is being analyzed
2ApprovedWallet passed risk analysis and manual review
3DeniedWallet failed risk analysis (high risk score, sanctioned addresses, illicit funds)
4Auto-approvedWallet passed automated risk analysis (low risk score)

Example KYT webhook payload ​

json
{
  "id": 12345,
  "wallet_address": "0x1234567890abcdef1234567890abcdef12345678",
  "external_user_id": "user-abc-123",
  "status_id": 4,
  "clean_wallet": false,
  "created_at": "2026-01-15T10:30:00Z",
  "updated_at": "2026-01-15T10:31:45Z"
}

Approved, denied, and auto-approved are final results. See wallet verification for the clean_wallet flag and status definitions.