HomeGuidesAPI ReferenceChangelog
Home
Guides

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 BUSINESS entity
  • 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

  1. Compliance approval from Reap for the use of Universal KYB for the program
  2. An established business-type entity (type: BUSINESS) created via POST /entity (see Step 1)
  3. A valid Reap API key is required to authenticate all Universal KYB requests
  4. The externalId value 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 /entity with type: BUSINESS
  • Returns an id (used as entityId in all subsequent calls), a businessId, and echoes back the integrator-supplied externalId

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-kyc requirement 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

  1. Create the business entity via POST /entity with type: BUSINESS
  2. Submit the KYB Pack via POST /entity/entityId/ukyb
  3. Submit the DDQ via POST /entity/entityId/ukyb/ddq
  4. Submit EDD via POST /entity/entityId/ukyb/edd only when requested by Reap's compliance review
  5. Upload supporting KYB documents via POST /entity/entityId/requirement-slug/requirementSlug/upload against the appropriate KYB document slugs

API Summary

ActionEndpointMethodUse Case
Create business entity/entityPOSTRegister a business-type entity to anchor all subsequent KYB submissions
Submit KYB Pack/entity/entityId/ukybPOSTSubmit the canonical business identity, UBO declaration, principal place of business, and nature of business
Submit Due Diligence (DDQ)/entity/entityId/ukyb/ddqPOSTSubmit card authorities, expected spend profile, and headcount for businesses requesting card issuance
Submit Enhanced Due Diligence/entity/entityId/ukyb/eddPOSTSubmit 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/uploadPOSTUpload 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 NameTypeDescription
externalIdstringThe integrator's external reference ID for the business, used to correlate the Reap entity with the internal record
typestringType 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 NameTypeDescription
idstringUnique identifier generated by Reap for the created entity. Used as entityId in all subsequent calls
externalIdstringThe external reference ID provided during entity creation
businessIdstringUnique identifier for the associated Reap business account
typestringType 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 NameTypeDescription
legalBusinessNamestringFull legal registered name as shown on the Certificate of Incorporation. Trading/DBA names are captured separately if needed
legalFormOfCompanystringControlled 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)
businessRegistrationNumberstringOfficial registration / company number issued by the registering authority
uboDeclarationarrayList of declared UBOs (UBOs at 25%+ ownership or with control must be declared)
principalPlaceOfBusinessAddressobjectStructured address of the principal place of business
businessWebsiteUrlstringPublic website URL of the business
natureOfBusinessstringFree-form description of the business's primary activities

uboDeclaration[] (array of objects)

Parameter NameTypeDescription
fullNamestringUBO full legal name
ownershipPctdecimalDecimal percentage

principalPlaceOfBusinessAddress (object)

Parameter NameTypeDescription
line1stringStreet address line 1
line2stringStreet address line 2
citystringCity
statestringState / province / region
postalCodestringPostal / ZIP code
countrystringThree-letter identifiers to represent countries (Format: ISO 3166-1 alpha-3)

Sample Response

{
  "submittedRequirementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Key Output

Parameter NameTypeDescription
submittedRequirementIdstringIdentifier 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 NameTypeDescription
cardAuthoritiesarrayCard admin declaration of who can operate on the cards
expectedSpendProfileobjectSpend bucket declaration that becomes the monitoring baseline
numberOfEmployeesnumberTotal headcount of the business at time of submission

cardAuthorities[] (array of objects)

Parameter NameTypeDescription
fullNamestringFull name of the authority
rolestringRole of the authority

expectedSpendProfile.spendBuckets[] (array of objects)

Parameter NameTypeDescription
namestringBucket purpose name
expectedSpendUsdnumberExpected spend in USD for this bucket
jurisdictionIsostringLocation where the services are consumed and billed (Format: ISO 3166-1 alpha-3)
txnPatternobjectStructured transaction pattern for this bucket
txnPattern.frequencystringFrequency of transaction pattern
txnPattern.avgTicketUsdnumberAverage ticket size in USD
txnPattern.peakDaysarray of stringWeekday code list (e.g. MON, TUE, WED)

Sample Response

{
  "submittedRequirementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Key Output

Parameter NameTypeDescription
submittedRequirementIdstringIdentifier 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 NameTypeDescription
sourceOfFundsDeclarationstringFree-form declaration of where the funds used in business activity originate (EDD Form 2.1a)
sourceOfWealthDeclarationstringFree-form declaration of the underlying source of wealth (EDD Form 2.2a)

Sample Response

{
  "submittedRequirementId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Key Output

Parameter NameTypeDescription
submittedRequirementIdstringIdentifier 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 NameTypeDescription
entityIdstringPath parameter. The Reap entity ID returned from Step 1
requirementSlugstringPath parameter. The KYB document slug the file is being uploaded against (see the KYB Document Slugs table below)
filesfileUploading 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, or board-resolution) to upload each required KYB document, including one Proof of Identity document per UBO for ubo-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.

SlugCategoryDescription
ubo-kycMandatory KYBProof of Identity for each declared UBO. Multiple files supported via repeated uploads to this slug.
certificate-of-incorporationMandatory KYBCertificate of Incorporation or jurisdictional equivalent.
board-resolutionMandatory KYBBoard resolution authorising the business to open, manage, or issue cards through Reap.
ownership-structure-chartOptional KYBOwnership structure chart. A Reap Google Slides template is available on request.
company-profileOptional KYBRegister of directors, shareholders, and members.
source-of-funds-supporting-docConditional EDDEDD Form 2.1b — 3-month bank statement or wallet evidence.
source-of-wealth-supporting-docConditional EDDEDD Form 2.2a — audited / unaudited financials, SAFE / SAFT, or director statement.

File Upload Constraints

ConstraintLimit
Allowed extensionsSupported 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 requirementUp to 15 files can be uploaded per requirement slug and subsequent uploads beyond this limit are rejected
Upload semanticsAppend-on-upload: each upload appends to the requirement's file set — earlier uploads are preserved (no orphaning) and the full set is reviewed
Granular deleteDeleting 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 /entity using type: BUSINESS
  • Submit the KYB Pack via POST /entity/entityId/ukyb with legal identity, UBO declaration, principal place of business, and nature of business
  • Submit the DDQ via POST /entity/entityId/ukyb/ddq with card authorities, expected spend profile, and headcount
  • Submit EDD via POST /entity/entityId/ukyb/edd with sourceOfFundsDeclaration and sourceOfWealthDeclaration
  • Upload mandatory KYB Pack documents (certificate-of-incorporation, board-resolution, ubo-kyc) and any optional supporting documents

Common Errors

ErrorCauseResolution
401 UnauthorizedMissing or invalid API keyCheck x-reap-api-key
Entity not foundentityId is unknown, deleted, or belongs to a different businessConfirm 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 /entity and type: BUSINESS and use the returned id as the entityId for 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/upload against 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