Verifications API
Overview
The Verifications API manages identity verification workflows. A verification represents a single identity-check session that collects, extracts, and validates document data against expected values.
The API supports the full lifecycle: create a verification with expected data, upload documents, submit for processing, review results, and take manual action (approve, reject, cancel, resubmit).
Try it live
Create and manage verifications in the Playground → — add your API token to get started.
Status Lifecycle
| Status | API Value | Label | Description |
|---|---|---|---|
| Started | 1 | Started | Verification created, awaiting document upload |
| Submitted | 2 | Submitted | Documents uploaded, pipeline processing |
| Approved | 3 | Approved | All validations passed |
| Rejected | 4 | Rejected | Validation failed |
| Double Check | 5 | Double Check | Needs manual review |
| Expired | 6 | Expired | Verification timed out |
| Canceled | 7 | Canceled | Verification canceled |
| Hold | 8 | Hold | Verification paused |
The typical flow: Started → Submitted → Approved / Rejected / Double Check.
List Verifications
GET /api/v1/{flow}/verifications
Description
Retrieve a paginated list of verifications for a flow. Pass an empty string or omit flow to include all flows.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name (e.g. usps1583). |
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number for pagination (default: 1) |
Example Request
GET /api/v1/usps1583/verifications?page=1
Authorization: Bearer {token}
Accept: application/jsonExample Response
{
"data": [
{
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-001",
"vendor_state": "TN",
"expected_data": {
"person": {
"first_name": "Homer",
"last_name": "Simpson",
"date_of_birth": ""
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "ID Card",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "",
"country": "USA"
}
}
},
"status_label": "Submitted",
"submitted_at": "2026-06-11T07:36:11.000000Z",
"created_at": "2026-06-11T07:04:50.000000Z",
"updated_at": "2026-06-11T07:36:11.000000Z",
"flow": "USPS 1583",
"comments": []
}
],
"links": {
"first": "https://{workspace}.colleckt.io/api/v1/usps1583/verifications?page=1",
"last": "https://{workspace}.colleckt.io/api/v1/usps1583/verifications?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://{workspace}.colleckt.io/api/v1/usps1583/verifications",
"per_page": 15,
"to": 1,
"total": 1
}
}Possible Errors
| Status | Meaning |
|---|---|
401 | Missing or invalid authentication |
404 | Flow not found |
Create Verification
POST /api/v1/{flow}/verifications
Description
Start a new verification process. Provide expected person details, address, and document information. The response includes a url (redirect the end-user here) and qr_code (for mobile access) to the verification widget.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name (e.g. usps1583) |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
vendor_reference | string | No | Internal reference for this verification |
vendor_state | string | No | Vendor state information |
person | object | Conditional | Required if the flow supports photo ID documents |
person.first_name | string | Conditional | Required when person is present |
person.last_name | string | Conditional | Required when person is present |
person.date_of_birth | string | No | Date of birth in YYYY-MM-DD format |
address | object | Conditional | Required if the flow supports proof of address documents |
address.street | string | Conditional | Required when address is present |
address.city | string | Conditional | Required when address is present |
address.state | string | Conditional | Required when address.country is USA |
address.postal_code | string | Conditional | Required when address is present |
address.country | string | Conditional | Required when address is present. ISO3 country code (uppercased) |
documents | object | No | Document expectations |
documents.photo_id | object | Conditional | Required if the flow supports photo ID documents |
documents.photo_id.type | string | Conditional | Must be a valid photo ID document type for this flow. Must not be forbidden for the selected country. Must differ from documents.proof_of_address.type |
documents.photo_id.number | string | Conditional | Required when documents.photo_id is present |
documents.photo_id.country | string | Conditional | Required when documents.photo_id is present. ISO3 code. Must be a valid country for this flow |
documents.proof_of_address | object | Conditional | Required if the flow supports proof of address documents |
documents.proof_of_address.type | string | Conditional | Must be a valid proof of address document type for this flow. Must not be forbidden for the selected country. Must differ from documents.photo_id.type |
documents.proof_of_address.number | string | No | Document number |
documents.proof_of_address.country | string | Conditional | Required when documents.proof_of_address is present. ISO3 code. Must be a valid country for this flow |
Example Request
POST /api/v1/usps1583/verifications
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
{
"vendor_reference": "REF-001",
"vendor_state": "TN",
"person": {
"first_name": "Homer",
"last_name": "Simpson",
"date_of_birth": "1988-05-06"
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "Passport",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "DL789012",
"country": "USA"
}
}
}Response (201 Created)
{
"data": {
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-001",
"vendor_state": "TN",
"expected_data": {
"person": {
"first_name": "Homer",
"last_name": "Simpson",
"date_of_birth": "1988-05-06"
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "Passport",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "DL789012",
"country": "USA"
}
}
},
"status_label": "Started",
"submitted_at": null,
"created_at": "2026-06-10T20:50:15.000000Z",
"updated_at": "2026-06-10T20:50:15.000000Z",
"flow": "USPS 1583",
"comments": []
}
}Possible Errors
| Status | Meaning |
|---|---|
401 | Missing or invalid authentication |
404 | Flow not found |
422 | Validation error — see response body for details |
Business Rules
- The verification is created in Started status
- Country codes are uppercased automatically (e.g.
usa→USA) personanddocuments.photo_idare required when the flow supports photo IDaddressanddocuments.proof_of_addressare required when the flow supports proof of address- Document types must be valid for the flow, not forbidden for the selected country, and must differ between photo ID and proof of address
Get Verification
GET /api/v1/{flow}/verifications/{verification}
Description
Retrieve a single verification with all associated data including documents (with temporary signed URLs), extraction results, validation rule evaluations, decisions, non-private comments, and status history.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID (e.g. ver_xxxxx) |
Example Request
GET /api/v1/usps1583/verifications/ver_xxxxx
Authorization: Bearer {token}
Accept: application/jsonExample Response
{
"data": {
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-001",
"vendor_state": "TN",
"expected_data": {
"person": {
"first_name": "Homer",
"last_name": "Simpson",
"date_of_birth": ""
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "ID Card",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "",
"country": "USA"
}
}
},
"status_label": "Approved",
"submitted_at": "2026-06-11T07:36:11.000000Z",
"created_at": "2026-06-11T07:04:50.000000Z",
"updated_at": "2026-06-11T07:36:42.000000Z",
"flow": "USPS 1583",
"documents": [
{
"id": "doc_xxxxx",
"url_front": "https://...",
"url_back": "https://...",
"status_label": "Approved",
"verification_id": "ver_xxxxx",
"document_type": {
"id": 2,
"name": "Driver License",
"type_label": "Proof of Address"
},
"country": {
"name": "United States of America",
"iso2": "US",
"iso3": "USA"
},
"created_at": "2026-06-11T07:05:01.000000Z",
"updated_at": "2026-06-11T07:36:42.000000Z",
"extracted_data": { },
"decisions": [],
"rules": null
}
],
"comments": [],
"history": [
{
"id": "hist_xxxxx",
"from_status": "Submitted",
"to_status": "Approved",
"user": "system",
"comment": null,
"created_at": "2026-06-11T07:36:42.000000Z"
},
{
"id": "hist_xxxxx",
"from_status": "Started",
"to_status": "Submitted",
"user": "some@email.com",
"comment": null,
"created_at": "2026-06-11T07:36:11.000000Z"
},
{
"id": "hist_xxxxx",
"from_status": null,
"to_status": "Started",
"user": "some@email.com",
"comment": null,
"created_at": "2026-06-11T07:04:50.000000Z"
}
]
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
401 | Missing or invalid authentication |
404 | Verification not found |
Business Rules
- The verification must belong to the specified flow
- Document image URLs are temporary signed URLs (30-minute expiry)
- Document images are not embedded — use
url_frontandurl_backto access images - Extracted data, decisions, and rules are only available after processing
- The
expected_datafield reflects the initial expected values (not extracted results)
Update Verification
PATCH /api/v1/{flow}/verifications/{verification}
Description
Update an existing verification's expected data. All fields are optional — only provided fields are merged into existing data. Omitted fields retain their current values.
You can also change the verification's status by providing status, comment, and email. When changing status to DOUBLE_CHECK (5), the validation pipeline is re-triggered.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
vendor_reference | string | No | Internal reference |
vendor_state | string | No | Vendor state information |
status | integer | No | New verification status (1–8). See Status Lifecycle |
comment | string | Conditional | Required when status is provided |
email | string | Conditional | Required when status is provided. Must be valid email |
person | object | No | Partial person fields — only provided keys are updated |
person.first_name | string | No | |
person.last_name | string | No | |
person.date_of_birth | string | No | |
address | object | No | Partial address fields |
address.street | string | No | |
address.city | string | No | |
address.state | string | Conditional | Required when address.country is USA |
address.postal_code | string | No | |
address.country | string | No | ISO3 code |
documents | object | No | Document configuration |
documents.photo_id | object | No | Photo ID document expectations |
documents.photo_id.type | string | No | Must be valid for this flow, not forbidden, and differ from proof_of_address.type |
documents.photo_id.number | string | Conditional | Required when documents.photo_id.type is present |
documents.photo_id.country | string | Conditional | Required when documents.photo_id.type is present. ISO3 code |
documents.proof_of_address | object | No | Proof of address document expectations |
documents.proof_of_address.type | string | No | Must be valid for this flow, not forbidden, and differ from photo_id.type |
documents.proof_of_address.number | string | No | |
documents.proof_of_address.country | string | Conditional | Required when documents.proof_of_address.type is present. ISO3 code |
Example Request
PATCH /api/v1/usps1583/verifications/ver_xxxxx
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
{
"vendor_reference": "REF-002",
"person": {
"first_name": "Homer J.",
"last_name": "Simpson",
"date_of_birth": "1988-05-06"
}
}Example Response
{
"data": {
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-002",
"vendor_state": "TN",
"expected_data": {
"person": {
"first_name": "Homer J.",
"last_name": "Simpson",
"date_of_birth": "1988-05-06"
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "ID Card",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "",
"country": "USA"
}
}
},
"status_label": "Started",
"submitted_at": null,
"created_at": "2026-06-10T20:50:15.000000Z",
"updated_at": "2026-06-11T02:02:40.000000Z",
"flow": "USPS 1583",
"comments": []
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to specified flow or is canceled |
401 | Missing or invalid authentication |
404 | Verification not found |
422 | Validation error |
Business Rules
- Only provided fields are updated — missing fields retain their previous values
- Country codes are uppercased automatically
- The verification must not be canceled
- When
statusis set toDOUBLE_CHECK, the validation pipeline is re-triggered for all uploaded documents
Delete Verification
DELETE /api/v1/{flow}/verifications/{verification}
Description
Permanently delete a verification and its associated documents.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Example Request
DELETE /api/v1/usps1583/verifications/ver_xxxxx
Authorization: Bearer {token}
Accept: application/jsonResponse (204 No Content)
No response body.
Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
401 | Missing or invalid authentication |
404 | Verification not found |
Business Rules
- Verifications can be deleted in any status
- Consider canceling instead of deleting if you need to preserve the record
Submit Verification
PUT /api/v1/{flow}/verifications/{verification}/submit
Description
Submit a verification for processing. Transitions the verification from Started to Submitted and triggers document extraction and validation.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Example Request
PUT /api/v1/usps1583/verifications/ver_xxxxx/submit
Authorization: Bearer {token}
Accept: application/jsonExample Response
{
"data": {
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-001",
"vendor_state": "TN",
"expected_data": {
"person": {
"first_name": "Homer",
"last_name": "Simpson",
"date_of_birth": ""
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "ID Card",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "",
"country": "USA"
}
}
},
"status_label": "Submitted",
"submitted_at": "2026-06-11T07:36:11.000000Z",
"created_at": "2026-06-11T07:04:50.000000Z",
"updated_at": "2026-06-11T07:36:11.000000Z",
"flow": "USPS 1583",
"comments": []
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
400 | Verification is not in Started status |
400 | Not all required documents have been uploaded |
401 | Missing or invalid authentication |
404 | Verification not found |
Business Rules
- All required documents must be uploaded before submission
- Once submitted, documents cannot be modified or replaced (use resubmit)
- Status changes from Started to Submitted
- Submission triggers the automated extraction and validation pipeline
Resubmit Verification
PUT /api/v1/{flow}/verifications/{verification}/resubmit
Description
Resubmit a verification for reprocessing. Resets all document statuses to Uploaded, clears prior extracted data and validation rules, and re-triggers the full pipeline.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
comment | string | Yes | Reason for resubmission |
email | string | Yes | Email of the user performing the action |
Example Request
PUT /api/v1/usps1583/verifications/ver_xxxxx/resubmit
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
{
"comment": "Re-uploaded documents with better quality.",
"email": "some@email.com"
}Example Response
{
"data": {
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-001",
"vendor_state": "TN",
"expected_data": {
"person": {
"first_name": "Homer",
"last_name": "Simpson",
"date_of_birth": ""
},
"address": {
"street": "742 Evergreen Terrace",
"city": "Springfield",
"state": "Tennessee",
"postal_code": "92026",
"country": "USA"
},
"documents": {
"photo_id": {
"type": "ID Card",
"number": "AB123456",
"country": "USA"
},
"proof_of_address": {
"type": "Driver License",
"number": "",
"country": "USA"
}
}
},
"status_label": "Submitted",
"submitted_at": "2026-06-11T08:00:00.000000Z",
"created_at": "2026-06-11T07:04:50.000000Z",
"updated_at": "2026-06-11T08:00:00.000000Z",
"flow": "USPS 1583",
"comments": []
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
400 | The verification is canceled |
400 | Not all required documents have been uploaded |
401 | Missing or invalid authentication |
404 | Verification not found |
422 | Validation error (missing comment or email) |
Business Rules
- The verification must not be canceled
- All required documents must be uploaded before resubmission
- Document statuses are reset to Uploaded, clearing prior extraction and rules
- Pipeline is re-triggered after resubmission
Approve Verification
PUT /api/v1/{flow}/verifications/{verification}/approve
Description
Manually approve a verification. Transitions to Approved, marks all documents as Approved, and triggers webhooks.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
comment | string | Yes | Reason for approval |
email | string | Yes | Email of the approving user |
Example Request
PUT /api/v1/usps1583/verifications/ver_xxxxx/approve
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
{
"comment": "ID documents match the provided information.",
"email": "some@email.com"
}Example Response
{
"data": {
"id": "ver_xxxxx",
"url": "https://{workspace}.colleckt.io/spa/v3/.../process",
"qr_code": "https://{workspace}.colleckt.io/qr/...",
"vendor_reference": "REF-001",
"vendor_state": "TN",
"status_label": "Approved",
"flow": "USPS 1583",
"documents": [],
"comments": [
{
"content": "ID documents match the provided information.",
"status": "Approved",
"created_at": "2026-06-11T07:36:42.000000Z"
}
]
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
400 | The verification is canceled |
400 | The verification is already approved |
401 | Missing or invalid authentication |
404 | Verification not found |
422 | Validation error (missing comment or email) |
Business Rules
- The verification must not be canceled or already approved
- Sets the verification status to Approved
- Marks all documents as Approved with a manual decision
- Triggers the
VerificationFinishedevent and associated webhooks
Reject Verification
PUT /api/v1/{flow}/verifications/{verification}/reject
Description
Manually reject a verification. Transitions to Rejected, marks all documents as Rejected, and triggers webhooks.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
comment | string | Yes | Reason for rejection |
email | string | Yes | Email of the rejecting user |
Example Request
PUT /api/v1/usps1583/verifications/ver_xxxxx/reject
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
{
"comment": "ID does not match the provided information.",
"email": "some@email.com"
}Example Response
{
"data": {
"id": "ver_xxxxx",
"status_label": "Rejected",
"flow": "USPS 1583",
"comments": [
{
"content": "ID does not match the provided information.",
"status": "Rejected",
"created_at": "2026-06-11T07:36:42.000000Z"
}
]
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
400 | The verification is canceled |
400 | The verification is already rejected |
401 | Missing or invalid authentication |
404 | Verification not found |
422 | Validation error (missing comment or email) |
Business Rules
- The verification must not be canceled or already rejected
- Sets the verification status to Rejected
- Marks all documents as Rejected with a manual decision
- Triggers the
VerificationFinishedevent and associated webhooks
Cancel Verification
PUT /api/v1/{flow}/verifications/{verification}/cancel
Description
Cancel a verification. Transitions to Canceled, marks all documents as Canceled, and triggers webhooks. Canceled verifications cannot be processed further.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
flow | string | The flow path name |
verification | string | The verification ID |
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
comment | string | Yes | Reason for cancellation |
email | string | Yes | Email of the canceling user |
Example Request
PUT /api/v1/usps1583/verifications/ver_xxxxx/cancel
Authorization: Bearer {token}
Content-Type: application/json
Accept: application/json
{
"comment": "Canceling verification due to duplicate entry.",
"email": "some@email.com"
}Example Response
{
"data": {
"id": "ver_xxxxx",
"status_label": "Canceled",
"flow": "USPS 1583",
"comments": [
{
"content": "Canceling verification due to duplicate entry.",
"status": "Canceled",
"created_at": "2026-06-11T17:16:06.000000Z"
}
]
}
}Possible Errors
| Status | Meaning |
|---|---|
400 | Verification does not belong to the specified flow |
400 | The verification is already canceled |
401 | Missing or invalid authentication |
404 | Verification not found |
422 | Validation error (missing comment or email) |
Business Rules
- Sets the verification status to Canceled
- Marks all documents as Canceled
- Triggers the
VerificationCanceledevent and associated webhooks - Canceled verifications cannot be resumed, resubmitted, or processed further
Business Rules Summary
- Document types must be valid for the flow, not forbidden for the selected country, and must differ between photo ID and proof of address
- Country codes are ISO3 format
- The verification status lifecycle is: Started → Submitted → processing → Approved / Rejected / Double Check
- Canceled verifications cannot be modified, submitted, resubmitted, approved, or rejected
- Document images are accessed via temporary signed URLs (30-minute expiry)
- All action endpoints (approve, reject, cancel, resubmit) require both
commentandemailfor audit trail - Updating
statusvia PATCH triggers additional behavior (e.g., re-running validation forDOUBLE_CHECK)
Notes
- Soft deletes are used for verifications — records are not immediately removed from storage
- For document upload, use the dedicated Documents API endpoints