Base URL (staging):
https://api-staging.venlyfinance.com/v1 · Auth: OAuth2 Bearer token — see Authentication.
Whether your company is Venly-managed or self-custody changes one step below — see Venly-managed vs self-custody.Step 1 — Create a party
A party is the person or organisation behind an account. Itsstatus is ACTIVE immediately, but it still starts unverified — verification is a separate step covered below.
Response (201)
id — it’s the partyId you link in the next step. For an organisation, send partyType: ORGANISATION with name (and optional vatNumber) instead of firstName/lastName.
Step 2 — Open an account linked to the party
An account holds the wallet, IBANs, and transfer history. Pass thepartyId from Step 1 to link the party as ACCOUNT_HOLDER. The wallet is provisioned automatically.
The only difference between company types is the wallet address:
- Venly-managed — Venly creates and holds the wallet. Don’t send an
address. - Self-custody — the customer controls the wallet. You must send their
address.
Response (201)
kycStatus: VERIFICATION_PENDING. It exists and can be set up, but it can’t move money yet.
Self-custody omitting
address returns 400 "Address is required for SELF_CUSTODY wallet type". See Venly-managed vs self-custody for the full difference (including permits).Step 3 — Get the party verified
Mint a hosted verification link and hand it to the end-user:verificationUrl for the KYC flow (individuals) or KYB flow (organisations). The verdict arrives asynchronously and flips the account’s kycStatus to VERIFIED.
If you already verified this user in your own Sumsub account, you can instead forward a share token as party.sumsubToken at account creation. See Onboarding & Verification for both routes.
Poll the account until it flips (or better, register a webhook):
Response (200)
kycStatus is VERIFIED, creating virtual bank accounts, transfers, and pay-in sessions all fail with a KYC error — the exact code and HTTP status depend on the operation (e.g. 400 kyc-not-verified for virtual bank accounts, 422 kyc-required for pay-in sessions). See Account verification.
Step 4 — Create a virtual bank account
With the account verified, issue a EUR IBAN so it can be funded via SEPA. Incoming euros are converted to thetargetCryptocurrency and credited to the wallet.
Response (201)
iban and referenceCode to your customer — the referenceCode is what links their incoming SEPA payment to this account.
Next steps
Full Integration Walkthrough
Funding, transfers, and tracking — end to end.
Self-custody: approving transfers
Sign a permit so a self-custody account can move funds.
Account verification
States, gating, and what works before verification.
API reference
Every endpoint, field, and example.

