Skip to main content

Prerequisites

Before submitting KYC, you need:
  1. A created User
  2. Required identity documents

KYC Requirements

You can fetch the KYC requirements for a specific user and rails combination. GET /v2/users/{userId}/kyc/requirements?rails={rails} This endpoint returns the specific fields required, optional, and any invalid fields for the user’s KYC submission.
The following fields are mandatory for KYC submission:
{
  "required": {
    "firstName": "string",
    "lastName": "string", 
    "email": "string",
    "phone": "string",
    "address": {
      "required": {
        "addressLine1": "string",
        "city": "string",
        "stateProvinceRegion": "string",
        "postalCode": "string",
        "country": "string"
      },
      "optional": {
        "addressLine2": "string"
      }
    },
    "dateOfBirth": "date",
    "taxIdentificationNumber": "string",
    "govIdType": "string",
    "govIdFrontUrl": "string",
    "govIdCountry": "string",
    "proofOfAddressType": "string",
    "proofOfAddressUrl": "string"
  }
}
Additional fields that can be submitted to enhance the KYC process:
{
  "optional": {
    "sofEuQuestionnaire": {
      "required": {
        "actingAsIntermediary": "boolean",
        "employmentStatus": "string",
        "expectedMonthlyPayments": "string",
        "mostRecentOccupation": "string",
        "primaryPurpose": "string",
        "sourceOfFunds": "string"
      },
      "optional": {
        "primaryPurposeOther": "string"
      }
    },
    "govIdBackUrl": "string"
  }
}
Fields that are either missing or contain invalid data:
{
  "invalid": {
    "message": "fields are either missing or invalid",
    "fields": {
      "phone": "missing",
      "taxIdentificationNumber": "missing",
      "govIdType": "missing",
      "govIdFrontUrl": "missing",
      "govIdCountry": "missing",
      "proofOfAddressType": "missing",
      "proofOfAddressUrl": "missing"
    }
  }
}

Step 1: Update KYC Information

First, update the user’s KYC information with additional details: POST /v2/users/{userId}/kyc
curl -X POST "https://sandbox.hifibridge.com/v2/users/{userId}/kyc" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+8573491112",
    "taxIdentificationNumber": "564213816",
    "nationality": "USA"
  }'

Step 2: Upload Documents

Upload required KYC documents: POST /v2/users/{userId}/kyc/documents
curl -X POST "https://sandbox.hifibridge.com/v2/users/{userId}/kyc/documents" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "type": "ID_CARD",
      "subType": "FRONT_SIDE",
      "issuedCountry": "USA",
      "issuedDate": "2024-05-04",
      "expiryDate": "2030-05-04",
      "number": "869950322",
      "url": "https://picsum.photos/1000/1000"
    },
    {
      "type": "ID_CARD",
      "subType": "BACK_SIDE",
      "issuedCountry": "USA",
      "issuedDate": "2024-05-04",
      "expiryDate": "2030-05-04",
      "number": "869950322",
      "url": "https://picsum.photos/1000/1000"
    }
  ]'

Step 3: Submit KYC

Submit the KYC for processing: POST /v2/users/{userId}/kyc/submissions
curl -X POST "https://sandbox.hifibridge.com/v2/users/{userId}/kyc/submissions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "rails": "USD"
  }'

KYC Status

You can get detailed information about a user’s compliance status and transfer limits using the KYC status endpoint. GET /v2/users/{userId}/kyc-status This endpoint returns the current KYC status, transfer limits, and review results for the user.
Basic user details and KYC status:
{
  "user": {
    "id": "user_123456789",
    "name": "John Smith",
    "email": "john.smith@example.com",
    "type": "individual"
  },
  "rails": "USD",
  "createdAt": "2024-01-15T10:30:00Z",
  "updatedAt": "2024-01-15T14:45:00Z",
  "status": "APPROVED",
  "message": "KYC verification completed successfully"
}
Current transfer limits for onramps and offramps:
{
  "onRamp": {
    "enabled": true,
    "limits": {
      "daily": 10000,
      "monthly": 100000
    }
  },
  "offRamp": {
    "enabled": true,
    "limits": {
      "daily": 5000,
      "monthly": 50000
    }
  }
}
Detailed review results from compliance.
{
  "reviewResult": {
    "reviewAnswer": "APPROVED",
    "reviewRejectType": null,
    "rejectReasons": [],
    "comment": "All documents verified successfully"
  },
  "details": {
    "companyInfo": {
      "reviewResult": {
        "reviewAnswer": "APPROVED",
        "reviewRejectType": null,
        "rejectReasons": [],
        "comment": "Individual verification complete"
      }
    },
    "questionnaire": {
      "reviewResult": {
        "reviewAnswer": "APPROVED",
        "reviewRejectType": null,
        "rejectReasons": [],
        "comment": "Source of funds questionnaire approved"
      }
    }
  }
}
After submission, the KYC review process begins. For individual users, this typically takes a few minutes. You’ll receive a KYC.STATUS.UPDATE webhook when the review is complete. Learn more about statuses

Next Steps

Once KYC is approved, Users can:
I