Skip to main content

Overview

The registerBusiness mutation creates a business account on the Fluz platform. In a single call it:
  1. Creates a business account tied to the applicant — the Fluz user whose token you submit with,
  2. Stores the legal entity record — legal name, structure, tax ID, state of incorporation, legal address, category, and intended use of the account,
  3. Stores the beneficial ownership information for each owner you supply,
  4. Opens a KYB case for compliance review, and
  5. Links the new business account to your application’s OAuth grant.
The mutation returns an accountId immediately, with a kybStatus of SUBMITTED.
This page is the parameter and error reference for the mutation itself. For prerequisites, the surrounding sequence of calls, and how to track a case to a decision, read Register & Verify Businesses first.

Required scopes

A business-account token is rejected by the schema before the mutation runs. Basic authentication is not accepted.

Basic mutation structure

Parameters

Address formattingFormat businessLegalAddress and each owner address using the structured fields below, with a real, deliverable address and a consistent city / state / postal code. Both may be international (country name, ISO 3166; some countries are restricted, e.g. Russia or Iran). The business legal address is additionally verified against an address-validation provider and rejected with BS-0002 if it cannot be confirmed; owner addresses receive field and state/province checks only. See Address Formatting Requirements.

BusinessLegalAddress

The stored address is the provider’s normalized version of what you sent, with city, state, and postalCode upper-cased — not the exact strings you submitted.

RegisterBusinessConfirm

Both fields are non-nullable, so send both. Only the one matching your roster is enforced — set it to true and the other to false.

BusinessOwner

isUsPerson is required on every owner. The GraphQL schema types it as a nullable Boolean, but validation rejects a missing or null value for all owners — including the applicant, invited owners, and owners below the beneficial-ownership threshold. The error reads owner N is invalid: isUsPerson is required.

OwnerAddress

BusinessStructure (enum)

Any structure not on this list is rejected with BS-0005. Trusts, non-profits, and other entity types are handled case by case — contact your account manager before building against them.

BusinessAccountUsage (enum)

Send every value that applies. If none fit, omit businessAccountUsage and describe the intended use in businessAccountUsageOther. Sending a value outside the enum returns BS-0004.

Beneficial ownership requirements

KYB review depends on getting the ownership picture right the first time. Collect and submit:
  • Every individual who owns 25% or more of the entity, directly or indirectly.
  • A control person — an individual with significant responsibility for managing the entity (CEO, CFO, managing member, general partner, or similar) — even if they hold no equity. Send them with isControlPerson: true. Exactly one owner must carry that flag.
  • The applicant — the user your Bearer token belongs to — matched by emailAddress or phoneNumber. Exactly one owner must match, and that owner cannot be isInvited: true.
Practical notes:
  • Total ownershipPercentage across the array must not exceed 100, but it does not need to equal 100. If a business is 40/35/25 across three individuals plus a non-owner CEO, submit all four with percentages of 40, 35, 25, and 0.
  • Where an entity (rather than a person) holds equity, look through to the individuals behind it and submit those individuals.
  • Owner emails and phone numbers must be unique across the roster.
  • title is a free-text field, but it is read by a human reviewer. Use recognizable titles (“Chief Executive Officer”, “Managing Member”) rather than internal shorthand.

Who needs full identity data

How much you send per owner depends on their role. Every owner needs the base fields; only some need identity data on top. Base fields: firstName, lastName, title, ownershipPercentage, isControlPerson, isInvited, isUsPerson, and at least one of emailAddress / phoneNumber. Full identity data: dob and address, plus lastFourSsnDigits when isUsPerson is true. When isUsPerson is false, omit lastFourSsnDigits — that owner completes document verification after registration via requestOwnerDocumentVerificationLink.

Validation quick reference

Most errors come down to formatting. Check these before submitting:
Two formats changed from earlier versions of this API. Owner dob is now an ISO 8601 date (1975-02-28), not MM/DD/YYYY. Owner phoneNumber now requires a country calling code — a bare 10-digit US number is rejected. Note also that +15551234567 fails because 555 is not an assigned US area code; use a real area code in test data.

Documents

An authorized-signer document is required when the applicant is not a beneficial owner or control person, and any structure may be asked for additional documentation during KYB review. Both paths are covered on one page:

Submit business documents

Upload endpoint, accepted documents, and what to do when compliance requests more information.

Response details

RegisterBusinessError

Validation and business-rule failures are returned inside the response payload, not as top-level GraphQL errors. Branch on the presence of error (or on success === false) rather than relying on the HTTP status.Permission failures are the exception: a wrong scope, a wrong account type, or Basic auth is rejected before the resolver runs and appears in the top-level errors array with data.registerBusiness set to null.
OAuth linkage can fail without failing the mutation. After the business is created and submitted, the API links the new business account to your application’s OAuth grant. If that step fails it is logged server-side only — the mutation still returns success: true with the accountId, but the business grant, and any externalReferenceId, may be missing. Contact support with the accountId rather than resubmitting; a retry is blocked by BS-0007.

cURL Example

John is the applicant and the control person, so he needs base fields only — his identity was verified before registration. Jane is a beneficial owner who is neither the applicant nor invited, so she needs full identity data.

Example Response

Success

Error

Error Codes

Returned inside the payload, with success: false: Returned in the top-level errors array, with data.registerBusiness set to null:
Owner-roster problems are reported as ARG-0001, not BS-0003. BS-0003 (InvalidOwnerInformation) exists in the shared error catalogue but this API does not return it.

Testing in staging

  • Register against the staging GraphQL endpoint shown in the examples above. See Staging vs. Live Environment.
  • Use Test Addresses for addresses that pass validation deterministically — the legal address goes through a real address-validation provider, so invented streets will fail.
  • EINs in staging must still satisfy the XX-XXXXXXX format, but do not need to correspond to a real entity.
  • Owner phone numbers must be possible numbers for their country. +15551234567 fails because 555 is not an assigned US area code; use a real area code with a 555 exchange, e.g. +14155551234.
  • Because a user cannot hold two open applications (BS-0007), test repeated registration paths with distinct test users.

Best practices

  • Validate client-side first. Nearly every error code is a formatting or selection problem you can catch before the network call. Doing so materially improves onboarding completion rates.
  • Expect one error at a time. Validation stops at the first problem it finds and the legal address is checked early, so a rejected submission may have more than one thing wrong with it.
  • Fetch categories at runtime. Never hardcode category UUIDs.
  • Send isUsPerson on every owner. It is the single most common cause of a rejected roster.
  • Do not auto-retry on a declined KYB. Resubmission will not change the outcome and creates duplicate cases.
  • Store the accountId immediately. It is your only handle on the application and the reference support will ask for.
  • Communicate the pending state honestly. Tell the user their business is under review and roughly how long it takes, rather than dropping them into a business dashboard that cannot yet transact.
  • Collect ownership completely the first time. Missing beneficial owners is the most common cause of a review stalling for additional documentation.

Notes

  • Either businessAccountUsage or businessAccountUsageOther must be provided.
  • Users cannot register a new business while they already have an ongoing application.
  • There is no idempotency key. Duplicate submissions are blocked by the open-application check instead.
  • Validation runs before anything is written, and the entity, application, charter, and address records are created in a single transaction — a rejected submission leaves nothing behind.
  • The taxId you submit is tokenized before storage and is never returned by any read operation.

KYB overview

Prerequisites, the end-to-end flow, and how to track a case to a decision.

Business categories

Fetch the category and sub-category IDs required by this mutation.

Submit business documents

Upload authorization documents and respond to KYB documentation requests.

Business KYB status

Read KYB status and per-owner verification progress after submitting.

Owner verification link

Generate an identity-verification link for owners on the document path.

Address formatting requirements

Rules that govern the legal and owner address objects.