curl -X POST https://services-staging.getplu.com/api/v2/partner/card/users \
-H "Authorization: Bearer sk_staging_your_api_key" \
-H "Content-Type: application/json" \
-H "idempotency-key: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"firstName": "Jane",
"lastName": "Doe",
"email": "[email protected]",
"phoneNumber": "+14155555555",
"accountPurpose": "personal use",
"ipAddress": "203.0.113.42",
"isTermsOfServiceAccepted": true,
"program": "custodial",
"address": "123 Main Street",
"city": "San Francisco",
"region": "CA",
"postalCode": "94105",
"countryCode": "US"
}'
{
"status": "success",
"message": "User created successfully",
"data": {
"serviceId": "acme-user-abc123def456ghi",
"verificationUrl": "https://withpersona.com/verify?inquiry-id=inq_abc123..."
}
}
Create a new card user with Persona KYC verification
curl -X POST https://services-staging.getplu.com/api/v2/partner/card/users \
-H "Authorization: Bearer sk_staging_your_api_key" \
-H "Content-Type: application/json" \
-H "idempotency-key: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"firstName": "Jane",
"lastName": "Doe",
"email": "[email protected]",
"phoneNumber": "+14155555555",
"accountPurpose": "personal use",
"ipAddress": "203.0.113.42",
"isTermsOfServiceAccepted": true,
"program": "custodial",
"address": "123 Main Street",
"city": "San Francisco",
"region": "CA",
"postalCode": "94105",
"countryCode": "US"
}'
{
"status": "success",
"message": "User created successfully",
"data": {
"serviceId": "acme-user-abc123def456ghi",
"verificationUrl": "https://withpersona.com/verify?inquiry-id=inq_abc123..."
}
}
Creates a new user and initiates KYC verification through Persona. Returns aDocumentation Index
Fetch the complete documentation index at: https://docs.getplu.com/llms.txt
Use this file to discover all available pages before exploring further.
verificationUrl where the user completes identity verification.
This is the v2 flow using Persona for KYC — it requires fewer fields than the legacy v1 endpoint and provides a smoother verification experience.
Bearer sk_staging_your_api_key+14155555555personal use, business expenses.true. Confirms the user has accepted the terms of service.custodial or non_custodial.program is non_custodial.123 Main Street.CA, Lagos.US, KE, NG.curl -X POST https://services-staging.getplu.com/api/v2/partner/card/users \
-H "Authorization: Bearer sk_staging_your_api_key" \
-H "Content-Type: application/json" \
-H "idempotency-key: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"firstName": "Jane",
"lastName": "Doe",
"email": "[email protected]",
"phoneNumber": "+14155555555",
"accountPurpose": "personal use",
"ipAddress": "203.0.113.42",
"isTermsOfServiceAccepted": true,
"program": "custodial",
"address": "123 Main Street",
"city": "San Francisco",
"region": "CA",
"postalCode": "94105",
"countryCode": "US"
}'
{
"status": "success",
"message": "User created successfully",
"data": {
"serviceId": "acme-user-abc123def456ghi",
"verificationUrl": "https://withpersona.com/verify?inquiry-id=inq_abc123..."
}
}
verificationUrl to complete Persona KYC?referenceId={serviceId}user.kyc.approved), you can create a card for the userlastName field. This lets you test each scenario without going through real identity verification.
Keyword in lastName | KYC Outcome | Example lastName |
|---|---|---|
Approved | KYC approved — user can create cards | DoeApproved |
Denied | KYC denied | DoeDenied |
needsVerification | Additional verification required | DoeneedsVerification |
{
"event": "user.kyc-event",
"timestamp": "2026-02-19T20:49:29.927Z",
"data": {
"serviceId": "acme-user-7mFQc5aCslAWtkd",
"status": "approved",
"email": "[email protected]",
"firstName": "Jane",
"lastName": "DoeApproved"
}
}
{
"event": "user.kyc-event",
"timestamp": "2026-02-19T21:01:49.217Z",
"data": {
"serviceId": "acme-user-yvDaVMdFaug51H4",
"status": "denied",
"email": "[email protected]",
"firstName": "Jane",
"lastName": "DoeDenied",
"reason": "WRONG_USER_REGION, REGULATIONS_VIOLATIONS"
}
}
{
"event": "user.kyc-event",
"timestamp": "2026-02-19T21:02:49.083Z",
"data": {
"serviceId": "acme-user-G9KZgnhgbndDdJg",
"status": "needsVerification",
"email": "[email protected]",
"firstName": "Jane",
"lastName": "DoeneedsVerification",
"verificationLink": "https://kyc.getplu.com/verify?userId=e5508685-2771-48fd-8cbc-c8c3e6df9179"
}
}
verificationLink is only present on needsVerification events. reason is only present on denied events and contains one or more comma-separated denial codes.