Skip to main content
Recommended: For most use cases, use KYC Links for a hosted, user-friendly flow. This guide covers the programmatic API approach for teams that need full control over the KYC collection process.

Prerequisites

  • API keys from the Dashboard (Get API keys)
  • A user created in your HIFI account
  • Sandbox endpoint: https://sandbox.hifibridge.com
All examples use the sandbox environment. For production, replace the sandbox URL with the production endpoint and use your production API keys.

Process Overview

  1. Retrieve KYC Requirements - Get required information for your target rail
  2. Update KYC Information - Provide personal information
  3. Upload KYC Documents - Submit identity verification documents
  4. Submit KYC - Submit the application for review
  5. Check KYC Status - Monitor approval status

Retrieve KYC Requirements

First, find out what information is needed for your target rail by calling the Retrieve KYC Requirements endpoint. Request:
Response:
Response Fields:
object
All mandatory KYC fields needed for the rail. These must be provided before submission.
object
Additional fields that aren’t mandatory but may help with approval or enable additional features.
object
Most Important Field: Lists any missing or invalid data that must be corrected before KYC submission.
Rail-Specific Requirements: Each rail has different KYC requirements based on regulatory needs. Visit our Rails page to learn about available rails and their specific requirements.

Update KYC Information

Provide the missing personal information using the Update KYC endpoint. Request:
Response:
Personal information updated! Notice the documents array is still empty - we’ll upload those next.

Upload KYC Documents

Now we need to upload identity verification documents. This is a two-step process:
  1. Upload the file to get a fileId
  2. Attach the file to the user’s KYC application

Upload a File

First, upload the identity document (driver’s license, passport, etc.) using the Upload a File endpoint. Request:
Response:
Response Fields:
string
required
The file ID. Save this - you’ll use it in the next step to attach this document to the user’s KYC application.
string
Original filename of the uploaded file.
number
File size in bytes.
string
File type (e.g., image/png, image/jpeg, application/pdf).

Add Documents to KYC

Now attach the uploaded file(s) to the user’s KYC application using the Add Documents endpoint.
Driver’s License Requirements: Most identity documents require both front and back images. For this example, we’ll use the same file ID for both sides, but in production you should upload and attach separate images.
Request:
Request Fields:
string
required
Document type. Options: DRIVERS, ID_CARD, PASSPORT, RESIDENCE_PERMIT
string
required
Which side of the document. Options: FRONT_SIDE, BACK_SIDE (passports typically only need FRONT_SIDE)
string
required
Country that issued the document (ISO country code).
string
required
The file ID received from the file upload endpoint.
Response:
Response Fields:
number
Number of documents successfully attached.
array
Array of document objects with IDs, types, and temporary signed URLs for viewing.
Documents uploaded! All required KYC information is now complete. Time to submit for review.

Submit KYC

With all fields and documents provided, submit the KYC application to unlock the rail using the Submit KYC endpoint. Request:
Response:
KYC application submitted! What happens next?
  1. Status starts as CREATED (immediate)
  2. Transitions to PENDING (within minutes in sandbox)
  3. Final status: ACTIVE or REJECTED (typically automatic in sandbox, 1-3 business days in production)
Sandbox Auto-Approval: In the sandbox environment, KYC applications are typically automatically approved within minutes for testing purposes. However, certain compliance checks (like PEP screening by banking partners) may still block approval even in sandbox. In production, the review process typically takes 1-3 business days.
You can either:
  1. Poll the Retrieve KYC Status endpoint
  2. Listen for KYC.STATUS_UPDATE webhook events

Check KYC Status

Check the current KYC status for the rail using the Retrieve KYC Status endpoint. Request:
Response:
KYC approved! The status is ACTIVE, which means the rail is now unlocked and the user can:
  • Onramp fiat to stablecoins
  • Offramp stablecoins to fiat
Response Fields:
string
Overall KYC status for the rail. Possible values: - CREATED - Application submitted, not yet reviewed - PENDING - Being reviewed by compliance team - ACTIVE - Approved, rail is unlocked - REJECTED - Not approved (see rejectReasons for details)
object
High-level review outcome for the entire application.
object
Detailed review results broken down by category (identity documents, personal information, questionnaire). Useful for diagnosing issues if rejected.

Next Steps

Now that your user has completed KYC and unlocked the rail, you can: