Overview
Fluz KYB (Know Your Business) lets your platform onboard a business onto Fluz rails from your own UI. Across a small set of operations you:- Resolve the business category and sub-category the entity trades under,
- Submit the legal entity record — legal name, structure, tax ID, state of incorporation, legal address, and intended use of the account — together with the beneficial ownership roster,
- Get identity verification completed for the owners who require it, and
- Track the resulting KYB case to an approval or a decline.
accountId immediately with a kybStatus of SUBMITTED.
Registration is validation, not approval. A
success response confirms the payload passed validation and a KYB case was opened. It does not mean the business is approved. Build your integration so it waits for an approved status before attempting to fund the account or issue cards.What a business account unlocks
Once KYB is approved, the business account can be used for the commercial side of the platform:- Business spend accounts and balances
- Commercial virtual cards, including bulk issuance
- Authorized users and card-level spend controls
- Approval workflows for cards, transfers, and reimbursements
- Business-level transaction reporting and expense annotation
When to use these endpoints
Use this flow when you want to collect entity and ownership data in your own UI rather than sending users into a Fluz-hosted experience. If you would rather Fluz host the collection and document upload, talk to your account manager about the widget-based onboarding option instead.KYB flow
Step-by-step
1
Step 0 — Satisfy the prerequisites
None of this is part of the flow, but all of it must be true before you call
registerBusiness. Each row links to the detail below. See prerequisites2
Resolve the business category and sub-category
Call getBusinessCategories and let the user pick a category and one of that category’s sub-categories.
3
Upload an authorized-signer document, if applicable
Required only when the applicant owns less than 25% of the business and is not the control person. Upload the document first, then pass the returned URL in
authorizedSignerDocumentUrl. See Submit business documents.4
Submit the registerBusiness mutation
Send the full entity record, the ownership certifications, and every owner in one call. Validation errors are returned inside the payload — see Response details.
5
Get the remaining owners verified
Read getBusiness to see each owner’s expected verification and current progress. For owners on the document path, generate a link with requestOwnerDocumentVerificationLink and send it to them. Invited owners are emailed by Fluz and verify themselves.
6
Wait for the KYB decision, then provision
The application starts under review. Surface that state to your user rather than implying they are live. Once the status moves to
APPROVED, create spend accounts and issue cards.End-to-end sequence
Prerequisites
Application permission scopes
SelectREGISTER_BUSINESS in your application’s permission scopes in the Fluz dashboard. Every KYB operation requires it, and a token can only carry scopes your application is configured to request. See Application Scopes.
Subscribing to the KYB_STATUS_UPDATE webhook requires the same scope.
Applicant authorization
The applicant must have completed OAuth authorization for your application, and that authorization must cover every business scope your application requests. If you later add a scope, existing users have to re-authorize before they can register a business — otherwise registration fails withAUTH-0008.
The applicant must already be cip-verified
The Bearer token identifies the applicant: the user submitting the application. Exactly one owner in the roster must match the token’s user by email (case-insensitive) or phone number, and that owner cannot be markedisInvited: true.
KYB verifies the business and the other owners. It does not verify the applicant, so the applicant must reach a verified state beforehand. The isUsPerson value you send for them decides which check applies:
Identity verification happens outside the KYB surface, with the
VERIFY_KYC scope, using verifyUserInformation, verifyUserPrefillInformation, or requestDocumentVerificationLink. See identity verification (KYC). If the person has no Fluz account at all yet, create one with registerUser first.
One open application per user
A user cannot start a new registration while an existing application is still open — that returnsBS-0007.
Access tokens
Each operation requires a Bearer token of a specific account type:Mint Bearer tokens with
generateUserAccessToken — see the Authentication section of the API reference.KYB status lifecycle
SUBMITTED is only ever returned by registerBusiness. getBusiness reports a three-value status, and the state immediately after registration reads as PENDING there — the two are the same moment described with different vocabulary.Tracking an application
Two ways to follow an application to its final status. Use whichever fits your infrastructure; many integrations use the webhook for latency and an occasional read for reconciliation.- Webhook
- Reading status directly
Subscribe to the
KYB_STATUS_UPDATE event in the Fluz dashboard: register your callback URL and select the event. Your application needs the REGISTER_BUSINESS scope to subscribe.Fluz POSTs to your endpoint when a business’s KYB status changes.Two things to handle:
- Treat delivery as at-least-once. Make your handler idempotent, keyed on
accountIdplusnewStatus. - You may receive events where
previousStatusequalsnewStatus. The case moved between internal states that both surface as the same public status. Treat those as no-ops.
The payload carries the business status only — it does not include the owner roster. Call getBusiness when you need per-owner progress.
Reviews are typically resolved within one to two business days, but can take longer when additional documentation is requested or an owner has not completed their identity verification. If a case appears stalled, contact your account manager with the
accountId rather than resubmitting — a second submission will be blocked by BS-0007.Identifying businesses with externalReferenceId
Fluz identifies a business by its accountId, a UUID minted at registration. externalReferenceId is an optional identifier you supply instead, so you can work with Fluz using the ID your own system already uses for that customer.
Pass it once, on registerBusiness:
- Token minting without storing Fluz IDs. Mint a business-account access token by reference instead of by
userIdandaccountId. - Webhook correlation. The reference comes back on every
KYB_STATUS_UPDATEevent, so you can match an event to your own record without a lookup table.
accountId yourself, which you should do regardless.
Rules
Two different references are in play and they are easy to conflate. The reference already carried by your access token is used to locate the applicant’s existing authorization. The reference in the
registerBusiness input is the one written onto the new business account. They serve different purposes.Related pages
Register a business
The
registerBusiness mutation: full parameter reference, ownership rules, and error codes.Business categories
Fetch the category and sub-category IDs required by the mutation.
Submit business documents
Upload authorization documents and respond to KYB documentation requests.
Business KYB status
Read KYB status and per-owner verification progress.
Owner verification link
Generate a shareable identity-verification link for an owner.
Register customers
Create the Fluz user who will act as the applicant.