UPP Docs
Compliance

Start an identity verification

POST
/customers/{customerId}/verifications

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 pending verification 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 approved or rejected.
  • 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; test is off by default and the others are on.

Read the result with GET /customer-verifications/{verificationId}.

Authorization

merchantApiKeymerchantTimestampmerchantNoncemerchantSignature
headerX-API-KEY<token>

Merchant API key (starts with upk_, also accepts api-key); signing headers are also required

headerX-Timestamp<token>

Unix timestamp in seconds, within 300 seconds of server time

headerX-Nonce<token>

Unique per request; cannot be reused with the same credential during the timestamp validity window

headerX-Signature<token>

Hex HMAC-SHA256 signature (either letter case) of the method, full path, timestamp, nonce and body digest

Path Parameters

customerId*string

Customer ID (the cus_ ID returned when the customer was created)

Request Body

  1. body
usage*VerificationUsage

Verification 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):

usageNotes
testDevelopment and testing only
basicReturns a hosted verification link
kycPart 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_accountUsed 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
Value in"test""basic""kyc""bank_account"
contact_email?string

Required 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

Formatemail

Response Body

Verification created or reused, with its link

application/json
  1. response
id*string

Verification ID (starts with cvr_)

customer_id*string

Customer ID (starts with cus_)

usage*VerificationUsage

Verification 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):

usageNotes
testDevelopment and testing only
basicReturns a hosted verification link
kycPart 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_accountUsed 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
Value in"test""basic""kyc""bank_account"
status*CustomerVerificationStatus

pending waiting for the customer or the review, approved approved, rejected rejected

Value in"pending""approved""rejected"
verification_url*string

Link 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

Formaturi
Example Request
curl -X POST 'https://sandbox.getupp.net/api/v1/customers/string/verifications' \  -H 'Content-Type: application/json' \  -d '{  "usage": "test"}'
Example Response
{  "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..."}