Universal KYB
Purpose: Onboard business entities into the Reap platform using one canonical workflow that consolidates business identification, ultimate beneficial owner (UBO) declarations, due-diligence answers, conditional enhanced due-diligence submissions, and supporting documentation against typed requirement slugs.
When to Use This
Use this guide when you need to:
- Onboard a new business customer to Reap as a
BUSINESSentity - Submit a canonical KYB Pack covering legal identity, UBO declaration, principal place of business, and nature of business
- Submit the Due Diligence Questionnaire (DDQ) for businesses requesting card issuance
- Submit Enhanced Due Diligence (EDD) when requested by Reap's compliance review for elevated-risk cases
- Upload supporting KYB documents (Certificate of Incorporation, UBO Proof of Identity, and Board Resolution) against typed requirement slugs
- Correct or update an earlier KYB, DDQ, or EDD submission by appending a new full payload
Overview
Universal KYB consolidates the end-to-end business onboarding process into a single typed workflow under the Reap Compliance API. Instead of orchestrating multiple disjointed submissions, integrators send a structured canonical payload for each step of the case — the KYB Pack for business identity and UBO data, the Due Diligence Questionnaire (DDQ) for card authorities and expected spend profile, an optional Enhanced Due Diligence (EDD) declaration when triggered by Reap's compliance review, and supporting documents uploaded against KYB-specific requirement slugs.
All submissions are anchored to a single business entity created via the existing Entity resource with type: BUSINESS. Each canonical payload is persisted as a typed submission record, drives Reap's jurisdictional rule-engine branching, and becomes the audit-grade source of record for the case.
Prerequisites
- Compliance approval from Reap for the use of Universal KYB for the program
- An established business-type entity (
type: BUSINESS) created viaPOST /entity(see Step 1) - A valid Reap API key is required to authenticate all Universal KYB requests
- The
externalIdvalue to be used as the integrator's correlation reference for the business
Key Concepts
Business Entity
- The anchor record for all Universal KYB submissions
- Created via
POST /entitywithtype: BUSINESS - Returns an
id(used asentityIdin all subsequent calls), abusinessId, and echoes back the integrator-suppliedexternalId
KYB Pack
- Canonical typed payload capturing legal business identity, UBO declaration, principal place of business, and nature of business
- Persisted under
requirementSlug=ukyb-pack - Submitted via
POST /entity/entityId/ukyb
Due Diligence Questionnaire (DDQ)
- Card admin declaration of authorities and expected spend profile
- Required for businesses requesting card issuance
- Becomes the monitoring baseline for ongoing transaction surveillance
- Submitted via
POST /entity/entityId/ukyb/ddq
Enhanced Due Diligence (EDD)
- Free-form declarations of source of funds and source of wealth
- Submitted only when requested by Reap's compliance review
- Submitted via
POST /entity/entityId/ukyb/edd
Ultimate Beneficial Owner (UBO)
- Natural persons declared in the KYB Pack who hold 25%+ ownership or otherwise exercise control over the business
- Each declared UBO requires a Proof of Identity document uploaded against the
ubo-kycrequirement slug
Requirement Slug
- Typed identifier for each KYB submission record (
ukyb-pack) and each supporting document category (for example,certificate-of-incorporation,ubo-kyc,board-resolution) - Drives document association and compliance review routing
External ID
- Unique identifier for the business within the integrator's system
- Used to correlate the Reap entity with the integrator's internal record
Flow Overview
- Create the business entity via
POST /entitywithtype: BUSINESS - Submit the KYB Pack via
POST /entity/entityId/ukyb - Submit the DDQ via
POST /entity/entityId/ukyb/ddq - Submit EDD via
POST /entity/entityId/ukyb/eddonly when requested by Reap's compliance review - Upload supporting KYB documents via
POST /entity/entityId/requirement-slug/requirementSlug/uploadagainst the appropriate KYB document slugs
API Summary
| Action | Endpoint | Method | Use Case |
|---|---|---|---|
| Create business entity | /entity | POST | Register a business-type entity to anchor all subsequent KYB submissions |
| Submit KYB Pack | /entity/entityId/ukyb | POST | Submit the canonical business identity, UBO declaration, principal place of business, and nature of business |
| Submit Due Diligence (DDQ) | /entity/entityId/ukyb/ddq | POST | Submit card authorities, expected spend profile, and headcount for businesses requesting card issuance |
| Submit Enhanced Due Diligence | /entity/entityId/ukyb/edd | POST | Submit source of funds and source of wealth declarations when EDD is requested by Reap's compliance review |
| Upload KYB supporting documents | /entity/entityId/requirement-slug/requirementSlug/upload | POST | Upload Certificate of Incorporation, UBO Proof of Identity, Board Resolution, and other supporting documents to a typed slug |
Universal KYB Onboarding
Step 1: Register and Create Business Entity
Create a business-type entity to anchor the subsequent KYB submissions. The id returned by this call is used as entityId in all subsequent Universal KYB requests.
Call the Create Entity Endpoint
Use POST /entity to register the business and obtain the anchor entity record.
Sample Request (cURL)
curl --request POST \
--url https://sandbox-compliance.api.reap.global/entity \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-reap-api-key: ********' \
--data '
{
"externalId": "BUSINESS-DEMO-10001",
"type": "BUSINESS"
}
'Key Input
| Parameter Name | Type | Description |
|---|---|---|
externalId | string | The integrator's external reference ID for the business, used to correlate the Reap entity with the internal record |
type | string | Type of entity created. Set to BUSINESS for KYB |
Sample Response
{
"id": "5f54bcf9-5a21-4f76-a819-6a65a8c238b8",
"externalId": "BUSINESS-DEMO-10001",
"businessId": "e10e9f95-f256-4c47-bcf6-a6029e09c3aa",
"type": "BUSINESS"
}Key Output
| Parameter Name | Type | Description |
|---|---|---|
id | string | Unique identifier generated by Reap for the created entity. Used as entityId in all subsequent calls |
externalId | string | The external reference ID provided during entity creation |
businessId | string | Unique identifier for the associated Reap business account |
type | string | Type of entity created |
Step 2: Submit the KYB Pack
Submit the canonical KYB payload containing the legal business identity, UBO declaration, principal place of business, and nature of business in a structured, typed JSON body.
Call the Submit KYB Pack Endpoint
Use POST /entity/entityId/ukyb to submit the KYB Pack against the business entity created in the previous step.
Sample Request (cURL)
curl --request POST \
--url https://sandbox-compliance.api.reap.global/entity/entityId/ukyb \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-reap-api-key: ********' \
--data '{
"legalBusinessName": "Acme Trading Pte. Ltd.",
"legalFormOfCompany": "PRIVATE_LIMITED",
"businessRegistrationNumber": "201912345Z",
"uboDeclaration": [
{ "fullName": "Jordan Lee", "ownershipPct": 60 },
{ "fullName": "Riley Tan", "ownershipPct": 40 }
],
"principalPlaceOfBusinessAddress": {
"line1": "10 Anson Road",
"line2": "#12-01",
"city": "Singapore",
"postalCode": "079903",
"country": "SGP"
},
"businessWebsiteUrl": "https://acme.example",
"natureOfBusiness": "B2B SaaS payments infrastructure"
}'Key Input
| Parameter Name | Type | Description |
|---|---|---|
legalBusinessName | string | Full legal registered name as shown on the Certificate of Incorporation. Trading/DBA names are captured separately if needed |
legalFormOfCompany | string | Controlled list. One of: PRIVATE_LIMITED, PUBLIC_LIMITED, LLC, LLP, PARTNERSHIP, SOLE_PROPRIETORSHIP, TRUST, CORPORATE, OTHER. Drives jurisdictional rule-engine branching (for example, trust-only EDD rows) |
businessRegistrationNumber | string | Official registration / company number issued by the registering authority |
uboDeclaration | array | List of declared UBOs (UBOs at 25%+ ownership or with control must be declared) |
principalPlaceOfBusinessAddress | object | Structured address of the principal place of business |
businessWebsiteUrl | string | Public website URL of the business |
natureOfBusiness | string | Free-form description of the business's primary activities |
uboDeclaration[] (array of objects)
uboDeclaration[] (array of objects)| Parameter Name | Type | Description |
|---|---|---|
fullName | string | UBO full legal name |
ownershipPct | decimal | Decimal percentage |
principalPlaceOfBusinessAddress (object)
principalPlaceOfBusinessAddress (object)| Parameter Name | Type | Description |
|---|---|---|
line1 | string | Street address line 1 |
line2 | string | Street address line 2 |
city | string | City |
state | string | State / province / region |
postalCode | string | Postal / ZIP code |
country | string | Three-letter identifiers to represent countries (Format: ISO 3166-1 alpha-3) |
Sample Response
{
"submittedRequirementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}Key Output
| Parameter Name | Type | Description |
|---|---|---|
submittedRequirementId | string | Identifier of the persisted KYB Pack submission record under requirementSlug=ukyb-pack |
Step 3: Submit the Due Diligence Questionnaire (DDQ)
Submit card authorities, expected spend profile, and headcount. This payload is required for businesses requesting card issuance and becomes the monitoring baseline for ongoing transaction surveillance.
Call the Submit DDQ Endpoint
Use POST /entity/entityId/ukyb/ddq to submit the DDQ payload against the business entity.
Sample Request (cURL)
curl --request POST \
--url https://sandbox-compliance.api.reap.global/entity/5f54bcf9-5a21-4f76-a819-6a65a8c238b8/ukyb/ddq \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-reap-api-key: ********' \
--data '{
"cardAuthorities": [
{ "fullName": "Jordan Lee", "role": "Admin" },
{ "fullName": "Riley Tan", "role": "PPTA" }
],
"expectedSpendProfile": {
"spendBuckets": [
{
"name": "Marketing",
"expectedSpendUsd": 25000,
"jurisdictionIso": "SGP",
"txnPattern": {
"frequency": "monthly",
"avgTicketUsd": 2000,
"peakDays": ["MON", "TUE", "WED"]
}
},
{
"name": "Cloud Infrastructure",
"expectedSpendUsd": 80000,
"jurisdictionIso": "USA",
"txnPattern": {
"frequency": "daily",
"avgTicketUsd": 500
}
}
]
}
}'Key Input
| Parameter Name | Type | Description |
|---|---|---|
cardAuthorities | array | Card admin declaration of who can operate on the cards |
expectedSpendProfile | object | Spend bucket declaration that becomes the monitoring baseline |
numberOfEmployees | number | Total headcount of the business at time of submission |
cardAuthorities[] (array of objects)
cardAuthorities[] (array of objects)| Parameter Name | Type | Description |
|---|---|---|
fullName | string | Full name of the authority |
role | string | Role of the authority |
expectedSpendProfile.spendBuckets[] (array of objects)
expectedSpendProfile.spendBuckets[] (array of objects)| Parameter Name | Type | Description |
|---|---|---|
name | string | Bucket purpose name |
expectedSpendUsd | number | Expected spend in USD for this bucket |
jurisdictionIso | string | Location where the services are consumed and billed (Format: ISO 3166-1 alpha-3) |
txnPattern | object | Structured transaction pattern for this bucket |
txnPattern.frequency | string | Frequency of transaction pattern |
txnPattern.avgTicketUsd | number | Average ticket size in USD |
txnPattern.peakDays | array of string | Weekday code list (e.g. MON, TUE, WED) |
Sample Response
{
"submittedRequirementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}Key Output
| Parameter Name | Type | Description |
|---|---|---|
submittedRequirementId | string | Identifier of the persisted DDQ submission record |
Step 4: Submit Enhanced Due Diligence (EDD)
Submit Enhanced Due Diligence only when Reap's compliance team requests it during review for elevated-risk cases. Captures source of funds and source of wealth declarations for the business.
Call the Submit EDD Endpoint
Use POST /entity/entityId/ukyb/edd to submit the EDD declarations against the business entity.
Sample Request (cURL)
curl --request POST \
--url https://sandbox-compliance.api.reap.global/entity/5f54bcf9-5a21-4f76-a819-6a65a8c238b8/ukyb/edd \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'x-reap-api-key: ********' \
--data '{
"sourceOfFundsDeclaration": "Revenue from subscription payments received from customers.",
"sourceOfWealthDeclaration": "Founder capital injection and retained earnings from prior-year operations."
}'Key Input
| Parameter Name | Type | Description |
|---|---|---|
sourceOfFundsDeclaration | string | Free-form declaration of where the funds used in business activity originate (EDD Form 2.1a) |
sourceOfWealthDeclaration | string | Free-form declaration of the underlying source of wealth (EDD Form 2.2a) |
Sample Response
{
"submittedRequirementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}Key Output
| Parameter Name | Type | Description |
|---|---|---|
submittedRequirementId | string | Identifier of the persisted EDD submission record |
Step 5: Upload KYB Documents
Upload supporting documents for KYB requirement slugs using the shared file upload endpoint.
Call the File Upload Endpoint
Use POST /entity/entityId/requirement-slug/requirementSlug/upload to upload one or more files against a KYB document slug.
Sample Request (cURL) (Certificate of Incorporation)
curl --request POST \
--url https://sandbox-compliance.api.reap.global/entity/entityId/requirement-slug/certificate-of-incorporation/upload \
--header 'Accept: application/json' \
--header 'Content-Type: multipart/form-data' \
--header 'x-reap-api-key: ********' \
--form 'files=@"certificate-of-incorporation.pdf"'Key Input
| Parameter Name | Type | Description |
|---|---|---|
entityId | string | Path parameter. The Reap entity ID returned from Step 1 |
requirementSlug | string | Path parameter. The KYB document slug the file is being uploaded against (see the KYB Document Slugs table below) |
files | file | Uploading a single file to a specific requirement slug as multipart/form-data |
Use repeated POST calls with the appropriate
requirementSlug(ubo-kyc,certificate-of-incorporation, orboard-resolution) to upload each required KYB document, including one Proof of Identity document per UBO forubo-kyc.
KYB Document Slugs
The requirementSlug path parameter accepts the values listed below. Each slug routes the uploaded file to a specific document category for compliance review.
| Slug | Category | Description |
|---|---|---|
ubo-kyc | Mandatory KYB | Proof of Identity for each declared UBO. Multiple files supported via repeated uploads to this slug. |
certificate-of-incorporation | Mandatory KYB | Certificate of Incorporation or jurisdictional equivalent. |
board-resolution | Mandatory KYB | Board resolution authorising the business to open, manage, or issue cards through Reap. |
ownership-structure-chart | Optional KYB | Ownership structure chart. A Reap Google Slides template is available on request. |
company-profile | Optional KYB | Register of directors, shareholders, and members. |
source-of-funds-supporting-doc | Conditional EDD | EDD Form 2.1b — 3-month bank statement or wallet evidence. |
source-of-wealth-supporting-doc | Conditional EDD | EDD Form 2.2a — audited / unaudited financials, SAFE / SAFT, or director statement. |
File Upload Constraints
| Constraint | Limit |
|---|---|
| Allowed extensions | Supported file formats are .jpg, .jpeg, .pdf, .png, .gif, .xlsx, .xls, .doc, .docx and .csv while all other extensions are rejected with HTTP 400 |
| Maximum files per requirement | Up to 15 files can be uploaded per requirement slug and subsequent uploads beyond this limit are rejected |
| Upload semantics | Append-on-upload: each upload appends to the requirement's file set — earlier uploads are preserved (no orphaning) and the full set is reviewed |
| Granular delete | Deleting or replacing individual uploaded files is not supported in v1 and corrections require contacting Reap.File replacement is not supported in v1 and previously uploaded files can only be corrected by contacting Reap |
Scenarios
Scenario: Standard Business Onboarding
- Create the business entity with
POST /entityusingtype: BUSINESS - Submit the KYB Pack via
POST /entity/entityId/ukybwith legal identity, UBO declaration, principal place of business, and nature of business - Submit the DDQ via
POST /entity/entityId/ukyb/ddqwith card authorities, expected spend profile, and headcount - Submit EDD via
POST /entity/entityId/ukyb/eddwithsourceOfFundsDeclarationandsourceOfWealthDeclaration - Upload mandatory KYB Pack documents (
certificate-of-incorporation,board-resolution,ubo-kyc) and any optional supporting documents
Common Errors
| Error | Cause | Resolution |
|---|---|---|
| 401 Unauthorized | Missing or invalid API key | Check x-reap-api-key |
| Entity not found | entityId is unknown, deleted, or belongs to a different business | Confirm the entityId returned from POST /entity and re-issue the request |
TL;DR
- Universal KYB is a single canonical workflow for end-to-end business onboarding under the Reap Compliance API
- Create the business entity first with
POST /entityandtype: BUSINESSand use the returnedidas theentityIdfor all subsequent calls - Submit the KYB Pack via
POST /entity/entityId/ukyb(legal identity, UBO declaration, principal place of business, nature of business) - Submit the DDQ via
POST /entity/entityId/ukyb/ddq(card authorities, expected spend profile, headcount) - Submit EDD via
POST /entity/entityId/ukyb/edd(source of funds, source of wealth) - Upload supporting documents via
POST /entity/entityId/requirement-slug/requirementSlug/uploadagainst the KYB document slugs (ubo-kyc,certificate-of-incorporation,board-resolution) - Each upload appends to the requirements file set with a maximum of 15 files per slug and no granular delete support in v1
Updated 10 days ago
