Prerequisites
- API client credentials with permission to create users and manage KYC.
The flow
Retrieve Terms of Service
Before creating a user, retrieve the general Terms of Service applicable to their country of residence by calling the List terms of service endpoint withtype=general and the user’s country code.
Create the user
Once the user has accepted the Terms of Service, call Create user to register them on the platform.Response
metadata field to store your own business data (e.g. external IDs or tracking parameters).
Subscribe to the core.user.created webhook to be notified asynchronously.
Check required processes
The KYC processes required for a user are determined by the Terms of Service they accepted at registration — different ToS codes map to different regulatory regimes with different requirements. After creating the user, call Get KYC overview to see the full list of applicable processes and their current statuses.pending status, indicating they are waiting for the user to provide information.
Response
status: "exempt" are not required for this user’s region. See the KYC processes overview for the full requirements matrix per ToS.
Complete KYC processes
| Process | Category |
|---|---|
| email, phone | Direct submission |
| profile | Form-based |
| address | Direct submission |
| identity | File-based |
| proofOfAddress | File-based |
| customerDueDiligence | Form-based |
| enhancedDueDiligence | File-based |
| cryptoRiskAssessment | Form-based |
| selfCategorizationStatement | Form-based |
| taxDetails | Form-based |
| screening, risk | Background (automatic) |
Email and phone
Verify the user’s email and phone number.- Partner-verified
- Uphold-verified
Call Update email and Update phone with A successful response returns the submitted information with an
input containing the email address and phone number, respectively, and output containing the verification datetime.ok status.Response
Profile
Declare the user’s personal information, such as their name, date of birth, and citizenship. Call Update profile withinput.details containing the relevant fields.
Profile is a form-based process — the required fields may vary based on the user’s region and other factors. Always check the returned
hint object for the specific schema to display. See Dynamic forms for guidance on rendering the form and submitting the data.hint object with the form schema and UI schema — even when status is ok — so the user can update their information later.
Response
Address
Declare the user’s residential address. Call Update address withinput containing the address fields.
ok status.
Response
Identity
Verify that the user is the person they claim to be.- Partner-verified
- Uphold-verified
Your organization performs identity verification through an already-approved method and submits the result to Uphold.Two sub-types are supported:
Document submission
Document submission
Create files
Call Create file for each document to obtain an upload URL.A successful response returns an
upload object with a presigned URL and form data for uploading the file to the provided storage service.Response
Upload the file
Upload the file to the provided
upload.url using the returned upload.formData fields as multipart form parameters.Submit the process
Call Update identity, referencing the file IDs in A successful response returns the submitted information with an
input.media and setting output to the verification results from your provider.ok status.Response
Electronic verification (e-IDV)
Electronic verification (e-IDV)
Your organization performs electronic identity verification through an already-approved provider that checks the user’s declared information against public and third-party records, without requiring physical documents, and submits the result to Uphold. Call Update identity, populating A successful response returns the submitted information with an
input.data with the user’s declared information and output with the provider and verification datetime.ok status.Response
This type does not unblock the same capabilities as document submission. See the comparison table for details.
Proof of address
Verify the user’s residential address. The process may already beok without a submission in certain scenarios — see Proof of address conditions for details.
- Partner-verified
- Uphold-verified
Your organization performs proof-of-address verification through a contracted provider and submits the result to Uphold.Two sub-types are supported:
Document submission
Document submission
Create the file
Call Create file to obtain an upload URL for the document.A successful response returns an
upload object with a presigned URL and form data for uploading the file to the storage provider.Response
Upload the file
Upload the file to the provided
upload.url using the returned upload.formData fields as multipart form parameters.Submit the process
Call Update proof-of-address, referencing the file ID in A successful response returns the submitted information with an
input.media and setting output to the verification results from your provider.ok status.Response
Electronic verification
Electronic verification
Some KYC providers can verify the user’s address electronically, without requiring a physical document, by checking the declared address against public and third-party records.Call Update proof-of-address, populating A successful response returns the submitted information with an
input.data with the user’s declared information and output with the provider and verification datetime.ok status.Response
Customer due diligence
Assess the user’s financial profile and risk level based on their expected activities, source of funds, and other relevant information.- Uphold-verified
- Partner-verified
Uphold performs customer due diligence checks based on the user’s profile and declared intent. Call Update customer due diligence with A successful response returns the submitted information with an Understanding scoreThe
input containing the answers for each form step, repeating until status returns ok.Customer due diligence is a form-based process with multiple steps. The required fields may vary based on the user’s region, expected activities, and other factors. Always check the returned
hint object for the specific schema to display. See Dynamic forms for guidance on rendering the form and submitting the data.ok status, along with the calculated risk score and verification datetime.Response
output.score reflects the user’s assessed risk level. The higher the score, the shorter the recollection period before the user must resubmit.Understanding expirationThe output.expiresAt is the deadline by which the user must resubmit customer due diligence — it opens for recollection 60 days before that date, at which point the process status reverts to pending. The user remains approved during this window and can continue to operate without restrictions until the deadline is reached.Enhanced due diligence
Enhanced due diligence is an additional layer of verification required for users with a high customer due diligence score.- Partner-verified
- Uphold-verified
Your organization performs enhanced due diligence through an already-approved method, such as manual review of source-of-funds document (e.g. pay stub, bank statement, portfolio statement), and submits the result to Uphold.
Create the file
Call Create file to obtain an upload URL for the source-of-funds document.A successful response returns an
upload object with a presigned URL and form data for uploading the file to the storage provider.Response
Upload the file
Upload the file to the provided
upload.url using the returned upload.formData fields as multipart form parameters.Submit the process
Call Update enhanced due diligence, referencing the file ID in A successful response returns the submitted information with an
input.media and setting output containing the verification datetime.ok status.Response
Crypto risk assessment
Assess the user’s knowledge of cryptocurrency risks and their suitability for engaging in crypto-related activities.- Uphold-verified
- Partner-verified
Uphold administers a crypto risk assessment quiz to the user, with a different set of questions per attempt, and evaluates the answers to determine whether the user is approved for crypto-related activities. Call Update crypto risk assessment with A successful response returns the submitted information with an Understanding resultWhen the Understanding offboardingIf a failed attempt occurs, the
input containing the answers for each form step, repeating until output is updated.Crypto risk assessment is a form-based process with multiple steps. The required fields may vary based on the user’s region, current attempt, and other factors. Always check the returned
hint object for the specific schema to display. See Dynamic forms for guidance on rendering the form and submitting the data.ok status, along with approval result, attempts used and remaining, and verification datetime.Response
output.result is approved, the user is cleared for crypto-related activities. When rejected, the user can either retry the quiz (when attempts remain) or will be offboarded (when the maximum attempts have been reached).Understanding attemptsUse the output.attempts object to track how many attempts the user has made and the maximum allowed. When a cooldown is active, retryAt is present and indicates the earliest datetime the user can submit a new attempt.output.offboard object is present. endsAt indicates either the deadline by which the user must submit a new attempt (when attempts remain), or the expected offboarding datetime (when the maximum has been reached). completedAt is set to the effective datetime when the user was offboarded.Self-categorization statement
Collect the user’s self-declared financial profile and categorize them accordingly.- Uphold-verified
- Partner-verified
Uphold administers a self-categorization statement form to the user, and evaluates the answers to determine the user’s category. Call Update self-categorization statement with A successful response returns the submitted information with an Understanding resultWhen the Understanding expirationThe
input containing the answers for each form step, repeating until output is updated.Self-categorization statement is a form-based process with multiple steps. The required fields may vary based on the user’s region, category, and other factors. Always check the returned
hint object for the specific schema to display. See Dynamic forms for guidance on rendering the form and submitting the data.ok status, along with the categorization result and verification datetime.Response
output.result is approved, the user is cleared for the activities allowed for their category. When rejected, the user can either retry the statement (when attempts remain) or will be offboarded (when the maximum attempts have been reached).Understanding attemptsUse the output.attempts object to track how many attempts the user has made and the maximum allowed.output.expiresAt is the deadline by which the user must resubmit the self-categorization statement — it opens for recollection 60 days before that date, at which point the process status reverts to pending. The user remains approved during this window and can continue to operate without restrictions until the deadline is reached.Tax details
Collect the user’s tax residency and tax identification information for tax reporting purposes.- Uphold-verified
- Partner-verified
Uphold collects tax details through a two-step form. The first step asks for the user’s countries of tax residency. Based on the response, the second step requests the required tax identification document numbers for each specified country.
See Dynamic forms for guidance on rendering the form and submitting the data.
Submit tax residency
Call Update tax details with the countries where the user is tax resident.The response returns
The required information varies based on the user’s region. Always check the form schema returned in the
hint dynamically to determine which fields to collect.pending with the next form step in hint, pre-filled with the required tax identification documents for each declared country.Response
Submit tax identification
Call Update tax details again with the tax identification document numbers and certification of the information’s accuracy.A successful response returns the submitted information with an
The required information varies based on the user’s region. Always check the form schema returned in the
hint dynamically to determine which fields to collect.ok status. The form is always returned — even when the process is ok — so the user can update their tax details when needed.Response
Screening and risk
Uphold automatically screens users against sanctions lists and assesses their risk level based on various factors, such as their location, transaction patterns, and other relevant data.output.result is approved, the user has passed screening or risk assessment. When rejected, the user has been flagged for potential issues and may require further review or offboarding.
Monitor user onboarding
Prefer webhooks for real-time updates, or fall back to polling if webhooks are not feasible.- Webhook events (recommended):
- core.user.created
- core.kyc.*.status-changed
status: pending→ waiting for the user to provide informationstatus: running→ Uphold is processing the provided informationstatus: ok→ the process has been successfully verifiedstatus: failed→ verification failed — the user may need to resubmitstatus: exempt→ the process is not required for this user
- Polling (fallback): Get KYC overview
Check capabilities
Always check if the required capabilities for the user’s intended activities are unlocked before allowing them to transact. Call List capabilities to check restrictions and requirements for each capability.requirements or restrictions.
Response
The user is now onboarded and ready to transact.