Documentation Index
Fetch the complete documentation index at: https://docs.polymarket.us/llms.txt
Use this file to discover all available pages before exploring further.
KYC Verification Flow
The verification flow is the core KYC process that validates a user’s identity. This can be started after prefill or directly with user-provided information.
Starting Verification
Request
{
"userId": "user_123",
"firstName": "John",
"middleName": "Michael",
"lastName": "Doe",
"email": "john.doe@example.com",
"phoneNumber": "+15551234567",
"dateOfBirth": "1990-01-15",
"ssn": "123-45-6789",
"address": {
"addressLine1": "123 Main Street",
"addressLine2": "Apt 4B",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"sessionToken": "session_abc",
"agreementTime": "2024-01-15T10:30:00Z",
"referralCode": "REF123",
"ipAddress": "192.168.1.1"
}
Request Fields
| Field | Type | Required | Description |
|---|
userId | string | Yes | Your internal user identifier |
firstName | string | Yes | Legal first name |
middleName | string | No | Middle name |
lastName | string | Yes | Legal last name |
email | string | Yes | Email address |
phoneNumber | string | Yes | Phone number with country code |
dateOfBirth | string | Yes | Date of birth (YYYY-MM-DD) |
ssn | string | Yes | Social Security Number |
address | object | Yes | Residential address |
sessionToken | string | Yes | Session token |
agreementTime | datetime | Yes | When user agreed to terms |
referralCode | string | No | Referral code if applicable |
ipAddress | string | No | User’s IP address |
Address Object
| Field | Type | Required | Description |
|---|
addressLine1 | string | Yes | Street address |
addressLine2 | string | No | Apt/Suite/Unit number |
city | string | Yes | City |
state | string | Yes | State (2-letter code) |
postalCode | string | Yes | ZIP/Postal code |
country | string | Yes | Country code (e.g., “US”) |
Response
{
"status": {
"decision": "pending",
"status": "in_review",
"subStatus": "document_required",
"externalId": "ext_abc123"
},
"docv": {
"sdkKey": "a0a1869f-cf3e-4acb-919a-62b9fef30e3f",
"docvTransactionToken": "token_xyz",
"eventId": "event_123",
"qrCode": "data:image/png;base64,...",
"url": "https://verify.example.com/session/abc123"
},
"participantId": "",
"account": ""
}
Verification Outcomes
Instant Approval
If the identity can be verified immediately:
{
"status": {
"decision": "approved",
"status": "complete",
"subStatus": "",
"externalId": "ext_abc123"
},
"participantId": "firms/ISV-Participant-Acme/users/user_123",
"account": "firms/ISV-Acme/accounts/a1b2c3d4e5f6"
}
The participantId and account fields are populated only after approval. Use these identifiers for subsequent trading API calls.
Document Verification Required
If additional documents are needed, the response includes DocV details:
| Field | Description |
|---|
sdkKey | Socure SDK public key for initializing the DocV SDK |
docvTransactionToken | Session token passed to the SDK’s launch() method |
eventId | Event tracking identifier |
qrCode | Base64-encoded QR code image for mobile scanning |
url | Direct URL for web-based document upload |
Socure SDK Integration
For native mobile document capture, integrate the Socure DocV SDK:
- Initialize the SDK with
sdkKey
- Launch verification with
docvTransactionToken
- Poll
/v1/kyc/status or use webhooks to get the final decision
Socure SDK Documentation:
Alternative: Web-Based Verification
If not using the SDK, users can complete document verification via:
- QR Code - User scans QR code with mobile device to capture documents
- Direct URL - User opens URL on any device to upload documents
Checking Status
Poll the status endpoint to track verification progress:
GET /v1/kyc/status?externalId=ext_abc123
Response when pending:
{
"status": {
"decision": "pending",
"status": "document_review",
"subStatus": "awaiting_review",
"externalId": "ext_abc123"
},
"participantId": "",
"account": ""
}
Response when approved:
{
"status": {
"decision": "approved",
"status": "complete",
"subStatus": "",
"externalId": "ext_abc123"
},
"participantId": "firms/ISV-Participant-Acme/users/user_123",
"account": "firms/ISV-Acme/accounts/a1b2c3d4e5f6"
}
Status Values
Decision
| Value | Description |
|---|
pending | Verification in progress |
approved | Identity verified successfully |
denied | Verification failed |
Status
| Value | Description |
|---|
initiated | Verification started |
in_review | Being reviewed |
document_required | Documents needed |
document_review | Documents being reviewed |
complete | Process complete |
Integration Flow
Best Practices
- Validate input before submission - Check all required fields
- Use webhooks if available - Don’t rely solely on polling
- Handle all decision states - Show appropriate UI for each
- Store externalId - You’ll need it to check status later
- Implement retry logic - API calls may occasionally fail
- Log all responses - For debugging and compliance