Skip to main content

Goal

This guide walks you through the KYB flow end-to-end. By the end, you will have an ACTIVE company that is ready for account creation and card issuance.
1

Create a company

Call Create a company with a display name. The response includes a company id you will use for all subsequent calls. The company starts with status: CREATED.
2

Create a company application

Call Advance company application with the company id. The response includes a sessionUrl. Direct the company representative to this URL to complete the corporate verification form.The company status advances to PENDING once the application is created.
3

Handle related persons

During the verification flow, Reap identifies the company’s officers and beneficial owners. Poll List related persons to detect when new related persons appear.For each related person, retrieve their active application via List related person applications to get the sessionUrl. Send this URL to the individual so they can complete their KYC.Repeat this for every related person. The company cannot advance to IN_REVIEW until all related persons reach APPROVED.
4

Handle the company status webhook

When all verification inputs are received and Reap’s compliance review completes, Reap fires a COMPANY_STATUS_UPDATED event. See the COMPANY_STATUS_UPDATED for the full payload schema.Handle the status in the event:
  • IN_REVIEW: inputs are received and the review is in progress.
  • ACTION_REQUIRED: Reap needs more information. Your account manager will contact you.
  • ACTIVE: company is verified. Proceed to account creation and card issuance.
  • REJECTED: verification failed. Contact your account manager.
  • RESTRICTED: company spend is stopped. Contact your account manager. Check isDeactivated if the company itself was deactivated.

Testing in sandbox

In the sandbox environment, use the simulation endpoint to move a company to any target status without running real verification. The update is processed asynchronously. Wait for the COMPANY_STATUS_UPDATED webhook rather than polling. The scenarios below use Managed KYB. For Universal KYB projects, see Testing in sandbox. See Simulate company status in the API reference for the full request schema, including the required applicationDetails fields when simulating ACTIVE.
Simulating ACTIVE rejects countries that cannot be used for card issuance (for example KP). Use a supported country such as AE, HK, or SG on country, registeredAddress, and operationalAddress.

Scenario 1: Happy path (approved)

  1. Create a company
  2. Advance company application
  3. Simulate company status with { "status": "ACTIVE", "applicationDetails": { ... } }
  4. Confirm webhook received with status: "ACTIVE"
  5. Create an account scoped to the company

Scenario 2: In review, then approved

  1. Create a company
  2. Advance company application
  3. Simulate company status with { "status": "IN_REVIEW" }
  4. Confirm webhook received with status: "IN_REVIEW"
  5. Simulate company status with { "status": "ACTIVE", "applicationDetails": { ... } }
  6. Confirm webhook received with status: "ACTIVE"

Scenario 3: Rejected

  1. Create a company
  2. Advance company application
  3. Simulate company status with { "status": "REJECTED" }
  4. Confirm webhook received with status: "REJECTED"