Start an identity verification
Starts an identity verification of the given usage for a customer and returns the link where the customer completes it.
- If the customer already has a
pendingverification of the same usage, it is reused and a new link is returned. - When the customer finishes, UPP gets the result from the provider and sets the verification to
approvedorrejected. - If the provider asks the customer to resubmit, the verification stays
pending; call this endpoint again for a new link. - The usage must be enabled for the merchant, otherwise 422 (
Verification usage test is not available.). Usages are enabled per merchant by UPP;testis off by default and the others are on.
Read the result with GET /customer-verifications/{verificationId}.
merchantApiKeymerchantTimestampmerchantNoncemerchantSignatureX-API-KEY<token>Merchant API key (starts with upk_, also accepts api-key); signing headers are also required
X-Timestamp<token>Unix timestamp in seconds, within 300 seconds of server time
X-Nonce<token>Unique per request; cannot be reused with the same credential during the timestamp validity window
X-Signature<token>Hex HMAC-SHA256 signature (either letter case) of the method, full path, timestamp, nonce and body digest
customerId*stringCustomer ID (the cus_ ID returned when the customer was created)
- body
usage*VerificationUsageVerification usage, which determines the provider that runs it. The usage must be enabled for the merchant (configured by UPP; test is off by default, the others are on):
| usage | Notes |
|---|---|
| test | Development and testing only |
| basic | Returns a hosted verification link |
| kyc | Part of the profile flow: also creates the profile; contact_email is required when the customer has no email; the result has no document images |
| bank_account | Used before applying for virtual accounts at some banks: required when the virtual_account profile's document is not an ID card or passport; start it after the virtual_account profile is approved, otherwise 422; the result has no document images |
"test""basic""kyc""bank_account"contact_email?stringRequired when usage is kyc and the customer has no email; used to create the user at the provider. A kyc verification also creates the customer's virtual_account profile
emailVerification created or reused, with its link
application/json- response
id*stringVerification ID (starts with cvr_)
customer_id*stringCustomer ID (starts with cus_)
usage*VerificationUsageVerification usage, which determines the provider that runs it. The usage must be enabled for the merchant (configured by UPP; test is off by default, the others are on):
| usage | Notes |
|---|---|
| test | Development and testing only |
| basic | Returns a hosted verification link |
| kyc | Part of the profile flow: also creates the profile; contact_email is required when the customer has no email; the result has no document images |
| bank_account | Used before applying for virtual accounts at some banks: required when the virtual_account profile's document is not an ID card or passport; start it after the virtual_account profile is approved, otherwise 422; the result has no document images |
"test""basic""kyc""bank_account"status*CustomerVerificationStatuspending waiting for the customer or the review, approved approved, rejected rejected
"pending""approved""rejected"verification_url*stringLink where the customer completes the verification. Its validity is set by the provider (typically 1 hour); each call returns a new link for the same verification
uricurl -X POST 'https://sandbox.getupp.net/api/v1/customers/string/verifications' \ -H 'Content-Type: application/json' \ -d '{ "usage": "test"}'{ "id": "cvr_01m5eadct0b1padtfy5g1h9z1w", "customer_id": "cus_01m5ead2k7knsqfa65tpt1an6r", "usage": "test", "status": "pending", "verification_url": "http://upp.test/fake/kyc/fake-applicant-2dcd024f-6089-44bf-aca3-29b64529c9f4?expires=1792559391&signature=e865e7f2..."}