UPP Docs
Compliance

Submit or resubmit a profile

POST
/customers/{customerId}/profiles/{purpose}

The profile must be not yet submitted or resubmission_required; it is created if it does not exist. When the purpose requires an identity verification (virtual_account requires kyc), start that verification first (POST /customers/{customerId}/verifications, which also creates the profile) and submit after it is approved; prefilled values can be overridden in data. If the customer has no user at the provider yet and no email, contact_email is required (not needed for individuals who gave one when starting the kyc verification). After submitting the status is under_review; the review outcome is sent with the customer_profile.status_changed webhook.

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 (starts with cus_)

purpose*string

Profile purpose: virtual_account (virtual bank accounts) or remittance (sender details)

Value in"virtual_account""bank_account""remittance"

Request Body

application/json
  1. body
contact_email?string

Required when the customer has no email and no user at the provider yet; used to create the user at the provider

Formatemail
data*

Profile data according to the requirements

Response Body

Profile

application/json
  1. response
id*string

Profile ID (starts with cpf_)

customer_id*string
purpose*CustomerProfilePurpose

Profile purpose, which determines the reviewing provider. virtual_account is used for virtual bank accounts and some local payouts; remittance holds sender details for other local payouts (approved once UPP's checks pass). The purpose must be enabled for the merchant (on by default; UPP can turn it off per merchant); otherwise profile endpoints return 404

Value in"virtual_account""bank_account""remittance"
type*string
Value in"individual""organization"
status*CustomerProfileStatus

draft not submitted, submitting / submit_uncertain being submitted, under_review in review, resubmission_required needs changes and resubmission, approved approved, rejected rejected (cannot be submitted again)

Value in"draft""submitting""submit_uncertain""under_review""resubmission_required""approved""rejected"
audit_remark*|

Review notes when resubmission is required or the profile is rejected

submissions*integer

Number of submissions

approved_at*|
Formatdate-time
created_at*string
Formatdate-time
updated_at*string
Formatdate-time
Example Request
curl -X POST 'https://sandbox.getupp.net/api/v1/customers/string/profiles/virtual_account' \  -H 'Content-Type: application/json' \  -d '{  "data": {}}'
Example Response
{  "id": "string",  "customer_id": "string",  "purpose": "virtual_account",  "type": "individual",  "status": "draft",  "audit_remark": "string",  "submissions": 0,  "approved_at": "2019-08-24T14:15:22Z",  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}