Skip to main content
You’ll need a Nuvion sandbox API key to follow this guide. Create an account to get yours.

Before you begin

Every request to the Nuvion API requires these headers: This guide uses the sandbox base URL, https://api.nuvion.dev. No real funds move in sandbox. Set your API key as an environment variable so you don’t repeat yourself:

Step 1: Create an individual entity

An entity represents a person or business on your platform. Accounts, documents, and transfers all belong to an entity. Identity document metadata is required at creation. You’ll upload the actual files in the next step. Use POST /individual-entities.
Response
Save data.entity.id and data.person.id. You’ll need both in the next step.

Step 2: Upload KYC documents

Two documents are required before the entity can be submitted for review: a government-issued ID and a proof of address. Use POST /documents, linking each file to the person via link_to_identity.person_id.
In sandbox, document content isn’t verified. Any valid base64-encoded file, like the tiny sample images above, is accepted. Both uploads are required before you can submit the entity for review.

Step 3: Submit for review

The entity’s status moves to pending. Review is automatic, often within seconds and typically no more than a few minutes. Nuvion fires the entities.updated webhook when the status changes to approved or rejected.
In production, listen for entities.updated instead of polling. For this quickstart, you can check status with GET /entities/{entity_id}. Accounts can only be created once status is approved.

Step 4: Create an account

Once the entity is approved, open an account to hold a balance. Use POST /accounts.
Response
Save data.account.id. You’ll use it as account_id in the remaining steps.

Step 5: Generate account details

Account details are the banking coordinates that others use to pay into this account. Provisioning starts as pending and finishes asynchronously. Poll GET /account-details/{id} or listen for the account_details.created webhook before sharing the details with payers. Use POST /account-details.
Response
Account details are persistent. Create them once per account and reuse them for future payments.

Step 6: Fund the account

Your new EUR account has a 0 balance. Fund it via open banking: create a funding session, then complete the bank authentication at the returned checkout_url. Use POST /funding-sessions.
Response
Open checkout_url in a browser and complete the sandbox bank authentication flow. Nuvion credits the account and fires funding_sessions.updated once the session reaches status: "settled".
Wait for funding_sessions.updated, or poll GET /funding-sessions/{id}, before initiating a transfer. Fund more than you intend to send. Transfers carry a fee on top of the amount, so funding the exact transfer amount can leave insufficient balance.available.

Step 7: Add a payout recipient

To send money out, register who you’re paying and their bank details. This is a two-call flow: create a counterparty, then attach their SEPA payment details. See Send a payout for every supported rail and corridor.
Save id from the counterparty response as counterparty_id, and id from the payment details response as payment_detail_id. You’ll need both for the transfer.

Step 8: Send a transfer

Use POST /transfers to move money from your funded EUR account to the recipient.
Response
All amounts are in the smallest currency unit. 10000 = €100.00 EUR.
You’ve created an entity, gotten it approved, opened and funded a EUR account, and sent a SEPA payout. You’re ready to build.

What’s next

Accept a payment

Receive funds from a bank transfer or card into a Nuvion account.

Send a payout

Full payout guide: every supported rail and corridor.