Skip to main content
To open a named BRL account for a business, create a BUSINESS customer with "accounts": ["BRL"] through POST /customers, complete KYB, and wait for the account to reach ACTIVE. The account is issued by a Lumx banking partner in the customer’s name, and it receives Pix. A company incorporated outside Brazil can hold it without a local entity in Brazil. This guide covers the calls from customer creation to the first Pix. To turn those Pix payments into stablecoin, see Collect BRL via Pix and settle in USDC or USDT.

How it works

  1. Create the business customer and request the BRL account in the same call.
  2. Have the company accept the terms of service.
  3. Complete KYB: company details, documents, and associated parties.
  4. Start the verification and wait for APPROVED.
  5. The BRL account is provisioned and becomes ACTIVE.
  6. Collect Pix into the account.

Prerequisites

  • An API key from the Dashboard and the sandbox base URL, https://api-sandbox.lumx.io.
  • The company’s legal name, tax ID (CNPJ for a Brazilian company), incorporation date, country, and email.
  • Its UBOs, shareholders, and at least one representative, with their documents. See Business Verification (KYB).
  • A webhook endpoint, set up under Developers > Webhooks in the Dashboard. See Webhooks.

Create the customer and the account

Send a POST request to /customers with type set to BUSINESS and accounts set to ["BRL"].
Request
Response
Save the customer id and the account id. The account starts in AWAITING_ONBOARDING. Customer creation also provisions a wallet on every supported blockchain, but the wallets array only appears once the customer is APPROVED. See Create a Customer.

Request fields

Complete KYB

A business customer cannot transact until KYB is APPROVED. The steps, in order:
  1. POST /customers/{id}/tos returns a url for the company to accept the terms of service. The link expires after 24 hours. See Terms of Service.
  2. PATCH /customers/{id}/additional-information sends the company’s activity, revenue, source of funds, and counterparties.
  3. POST /customers/{id}/documents uploads INCORPORATION_ARTICLES, SHAREHOLDER_REGISTRY, DIRECTORS_REGISTRY, and PROOF_OF_ADDRESS.
  4. POST /customers/{id}/associated-parties adds the UBOs, shareholders, and representatives. At least one of each role is required before you start.
  5. POST /customers/{id}/documents again, with associatedPartyId, uploads each party’s documents.
  6. POST /customers/{id}/verifications starts the review and returns a verification id.
Poll GET /customers/{id}/verifications/{verificationId} or, better, subscribe to the customer.* webhooks. Lumx targets two business days for the KYB review.
If you drive KYB through the API, do not also share verification.link with the company. Mixing the hosted flow and the API causes conflicts. If you would rather not build the flow, share the link and skip steps 2 to 6. It is returned once the terms of service are accepted.
Details for every step, including the full body for each associated party, are in Business Verification (KYB).

Watch the account become active

The account has its own status, separate from the customer’s. For BRL, provisioning completes right after the customer is APPROVED, foreign companies included. Subscribe to the account.active webhook to know the moment the account is ready. The payload is the account itself:
account.active
You can also list a customer’s accounts with GET /accounts?customerId={customerId}. Each item has id, customerId, status, currency, createdAt, and updatedAt. The webhooks to handle during onboarding: If an account moves to RFI, you are told what is missing. See RFI.

Receive Pix

The account object carries status and currency. It does not return payment coordinates. A BRL account receives Pix through a Pix code, the brCode, which Lumx generates in one of two ways: Both convert the BRL to USDC or USDT and deliver it on-chain. Request one, share the brCode with the payer, and follow the conversion through the onramp.* webhooks. The rule route, one static Pix QR code for every deposit, is in Autoconversion Rules. The step-by-step for both routes is in Collect BRL via Pix and settle in USDC or USDT. Pix runs 24/7/365. See Payment rail cut-off times.

Limits

Each customer has onramp, offramp, and transfer limits. Read the current usage with GET /customers/{id}?includeTransactionLimits=true. A transaction above a limit returns 422 with TRANSACTION_LIMIT_EXCEEDED. See Transaction Limits.

Test in sandbox

In sandbox, the last digit of the customer’s taxId sets the simulated verification outcome: 1 stays NOT_STARTED, 2 returns RFI, 3 returns FINAL_REJECTION, and any other digit is APPROVED. The webhooks fire almost instantly, so you can run the whole flow end to end.

Accounts

Account schema, lifecycle, and activation timelines.

Business Verification (KYB)

Every KYB call, with the full request bodies.

Collect BRL via Pix

Receive Pix and settle in USDC or USDT.

Webhooks

Event types, signatures, and retries.