Skip to main content

📄 Guide

A company is your business customer’s funding and compliance entity on the platform: onboarding creates its funding pool, and every employee, card and balance hangs off it. This page walks “apply → get the result → day-to-day maintenance”, showing what to call, what to send and what you get back.

Who does what

Step 1: submit the application

POST /open-api-corp/organization/v1/apply — KYB runs asynchronously after submission; acceptance returns an organizationApplyId. The synchronous response carries only organizationApplyId + status=PENDING — accepted, not approved.
Dedup runs on three dimensions: organizationRef, email and companyRegistrationNumber are unique within one partner, and the latter two are never released, even after a rejection. Reapplying under an organizationRef with an in-flight or approved application returns APPLY_DUPLICATE; if only a rejected application exists it returns APPLY_REJECTED_USE_RESUBMIT — the right path is resubmit, never a new ID.

Step 2: get the result

Rely on webhooks ORGANIZATION_CREATED / ORGANIZATION_REJECTED, with GET /open-api-corp/organization/v1/query-apply?organizationApplyId=... as the polling fallback. Key response fields: Resubmission after rejection: POST /open-api-corp/organization/v1/resubmit with organizationApplyId plus the corrected organizationName / companyRegistrationNumber, re-reviewed under the same application; organizationRef cannot change. Allowed only while the current state is REJECTED, otherwise STATUS_CONFLICT.

Day-to-day maintenance

Query company detail: GET /open-api-corp/organization/v1/query?organizationId=... — legal name, registration number, pool currencies and status (life cycle ACTIVE / TERMINATED overlaid with behavioral states FROZEN / SUSPENDED / RESTRICTED; semantics in State machines and freezing). Freeze / unfreeze: POST /open-api-corp/organization/v1/update-restrictions — idempotent set semantics: addRestrictions freezes, removeRestrictions unfreezes, values restricted to the 5 capability-domain codes ACCOUNT_FROZEN / CASH_IN_FROZEN / CASH_OUT_FROZEN / PAYMENT_FROZEN / CARD_FROZEN (anything else returns DAPI_PARAM_INVALID). A state change pushes a webhook notification.
Low-balance alerts: POST /open-api-corp/fund/v1/balance-alert-set — a threshold per currency (balanceSettings[].currency + balanceSettings[].thresholdAmount), with optional emailSettings. Full-replacement semantics — every call resets the entire alert configuration; the webhook LOW_BALANCE always fires, and email is sent only if a mailbox is configured; the same alert fires once per day until the balance recovers. ORGANIZATION_CREATED (KYB passed, carries organizationId) / ORGANIZATION_REJECTED (carries rejectMessage) / the company status-change notification (carries addRestrictions / removeRestrictions) / LOW_BALANCE. Envelope and signature verification: Quickstart.

Next steps