- configure an application that can only ever land on a business account;
- walk an owner through the OAuth grant;
- register their legal entity and beneficial ownership roster;
- track the KYB case to a decision;
- prove the connection by issuing a card on the business account.
Prerequisites
- A staging login and an application created from Templates → OAuth Integration. See Prepare your accounts.
- The application moved to
ACTIVEby Fluz, withVERIFY_KYCenabled. Without this, calls fail withAUTH-0030 … current status: PERSONAL. - A
client_id,client_secret, and registeredredirect_uri. See Configure OAuth App. - Requests go to the sandbox: no real money, no real PII. See Staging vs. Live Environment.
The full flow
Configure the application for businesses
Two permission lists live on the Permissions tab of your app, and they’re edited independently.
A non-empty Business permissions list is what makes your app business-enabled. If you leave it empty, users are never offered the option to apply for a business account, whatever else you configure.While you’re in the app editor, register your
redirect_uri on the OAuth tab. Also add a webhook URL subscribed to KYB status update; that’s how you’ll learn the review has finished without polling.Ask Fluz to activate the app and restrict it to business accounts
Send your application name or ID to your Fluz account manager and ask for two things:
- activation (
ACTIVEstatus), required before the app can act for anyone but you; - a business-accounts-only restriction, so the flow never settles on a personal account.
Send the owner through the OAuth grant
Build the authorize URL:With the app restricted to business accounts, a first-time user sees sign-in and 2FA, then a consent screen with two groups: the consumer permissions they’re granting now, and the business permissions being pre-approved for the business they’re about to create. The list is read-only; they accept all of it or they don’t finish.They’re redirected back to your
Authorization URL
redirect_uri with ?code=...&state=.... Validate state, then capture the single-use code server-side.Full parameter reference: Client-Facing OAuth Grant Flow.Exchange the code for the applicant's token
This is the same exchange as any other grant. Use Basic auth with the base64 of The
client_id:client_secret:Exchange (cURL)
redirect_uri must match the one you used at /authorize exactly, byte for byte.The business doesn’t exist yet, so this token belongs to the applicant’s personal account. Its account type is
CONSUMER. That’s correct, and it’s the token that getBusinessCategories and registerBusiness require. Read the account off the exchange response and persist it, rather than inferring it from your own records of who started the flow.Verify the applicant's identity (KYC)
KYB verifies the business and the other owners. It doesn’t verify the applicant, so the applicant has to be verified before you register anything. Otherwise registration fails with Which check the applicant needs depends on the
ARG-0001.Call verifyUserInformation with the applicant’s token. In staging, this test identity returns APPROVED the first time it’s used. Reusing it for another user returns DUPLICATE, which doesn’t count as verified. See Test KYC Flows.isUsPerson value you’ll send for them in the next step. true requires a successful SSN (CIP) verification on file; false requires a successful document verification. See User KYC Verification.Register the business
First, still using the applicant’s Then submit the entity and the full ownership roster in one call, with the same A success response returns an
CONSUMER token, resolve the category the entity trades under. Never hardcode these UUIDs:CONSUMER token. In staging, use taxId: "11-1111111" for an auto-approval (see KYB Testing):accountId and a kybStatus of SUBMITTED. Store the accountId immediately: it’s your only handle on the application, and you’ll mint the business token with it.These three things reject most first attempts:isUsPersonis required on every owner, including the applicant and invited owners. It’s the single most common cause of a rejected roster.- Exactly one owner must be the applicant, matched by email or phone against the token’s user. Exactly one must be the control person.
- The legal address is checked against an address-validation provider. Invented streets fail with
BS-0002; use Test Addresses.
Get the remaining owners verified, then wait
SUBMITTED means the payload validated and a case opened. It doesn’t mean approved.Mint a BUSINESS token: generateUserAccessToken with the applicant’s userId and the new business accountId. Then read the roster:verificationType:SSN— the owner runsverifyUserInformationwith a token for their own user. The business token can’t do it for them.DOCUMENTS— get a link from requestOwnerDocumentVerificationLink and send it to them. This call returnsARG-0001forSSNowners.isInvited: true— Fluz emails the owner, who verifies themselves.
kybStatus is final and every owner reports READY.The status moves from PENDING to APPROVED or DECLINED, usually within one to two business days. Take the decision off the KYB status update webhook you configured in Step 1, and use getBusiness for reconciliation: hourly, not per page load.Show the user an honest “under review” state. Don’t drop them into a business dashboard that can’t transact yet, and don’t auto-retry a decline: a second submission is blocked by
BS-0007. Full lifecycle: Register & Verify Businesses.Fund the business and prove it
A new business account has a zero balance. Fund a spend account first; see Funding a staging wallet.Once An
kybStatus is APPROVED and funds are in place, run any Fluz operation with the BUSINESS token and it executes against the business. There’s no separate business API.ACTIVE card back means the loop is closed: configured, authorized, verified, registered, approved, operating. To read the card’s status and limit later, see Card status, locks & limits.You’re done 🎉
You’ve taken a business from an empty application to a verified account that can spend. From here:Business accounts in OAuth
The two permission lists, the account picker, and which account a code resolves to.
Register & verify businesses
Prerequisites, the KYB status lifecycle, and tracking a case to a decision.
Submit business documents
Authorized-signer uploads and responding to documentation requests.
Onboard & connect a customer
The same journey for individuals.
Want to learn more? Contact us at support@fluz.app to speak with our experts or request a demo.