What is a Connection?
A connection (BringinLink) is a permanent standing order that links a crypto address to a bank account. Once active, conversions happen automatically — any amount, any time, no further API calls needed. Think of it as a bridge: one side is crypto, the other is fiat. Funds sent to either side are automatically converted and delivered to the other.Supported Connection Types
Supported Currencies & Networks
- Buy (EUR to Crypto)
- Sell (Crypto to EUR)
Buy Connection (EUR to Crypto)
You provide a crypto address
Bringin returns a deposit IBAN
User sends EUR from their bank
Bringin converts and delivers crypto
Sell Connection (Crypto to EUR)
On-chain
You provide an IBAN + bank details
Bringin returns a crypto deposit address
User sends crypto to the deposit address
Bringin converts and delivers EUR
Lightning Network
For BTC sell connections, you can use Lightning for instant, low-fee transactions:You provide an IBAN + Lightning address username
alice_wise).Bringin creates a Lightning address
{username}@bringin.xyz — a permanent receive address.User sends BTC via Lightning
Bringin converts and delivers EUR
How to Create a Connection
Option 1: Single API call (recommended)
Bundle everything intoPOST /application/connect. Bringin handles onboarding, connection creation, and SMS confirmation. You receive webhooks when it’s done.
- Buy (EUR to BTC)
- Sell (BTC to EUR)
- Sell via Lightning
/verification-statuswebhook with the per-user api-key/connection-statuswebhook with the deposit IBAN (or deposit address / LN address)
Option 2: Direct BringinLink API (advanced)
Use this if you already have the user’s per-user api-key and want granular control over the connection lifecycle.List existing connections
GET /bringin-link first before creating a new connection. This prevents duplicate errors and lets you reuse pending connections.- ACTIVE link for same destination — Use it directly, no creation needed
- PENDING link — Show OTP screen with the existing
challengeId - INITIATING link — Poll for status update
- No match — Safe to create a new connection
Create the connection
- Buy (EUR to BTC)
- Sell (BTC to EUR)
- Sell via Lightning
status: "INITIATING". Creation is asynchronous — you must poll for updates.Poll for status
GET /bringin-link/{id} every 2-3 seconds until the status changes from INITIATING.Confirm with SMS OTP
PENDING, the user receives an SMS OTP. Confirm it:ACTIVE and auto-conversions begin.If the user needs a new code, call POST /bringin-link/resend-otp with the existing challengeId.Status Lifecycle
Best Practices
Always check for existing connections first
Always check for existing connections first
POST /bringin-link, always call GET /bringin-link to list the user’s existing connections. This prevents:409 DUPLICATE_BRINGIN_LINK— A link already exists for this destination409 DUPLICATE_DESTINATION_ADDRESS— Address already has an active connection409 DUPLICATE_IBAN— IBAN already has an active connection- Unnecessary resource creation on each failed attempt
Reuse PENDING connections instead of creating duplicates
Reuse PENDING connections instead of creating duplicates
PENDING status:- Check if
standingOrder.challengeExpiresAtis still in the future - If valid — show the OTP screen with the existing
challengeId - If the user needs a new code — call
POST /bringin-link/resend-otp - If expired — wait for auto-expiry, then create a new connection
Connection names must be unique
Connection names must be unique
name field must be unique across all non-terminal connections (INITIATING, PENDING, ACTIVE) for the user. Names from FAILED, EXPIRED, and INACTIVE connections are freed up for reuse.Handle Lightning address usernames carefully
Handle Lightning address usernames carefully
lnAddress field):- 3-30 characters, lowercase alphanumeric plus
_and- - Must start and end with an alphanumeric character
- No consecutive
_or- - Globally unique — if taken, the API returns
409 LN_ADDRESS_EXISTS - The resulting address is
{username}@bringin.xyz
Handling Failures
When a connection creation fails (status: FAILED):
Failed connections are resumable by the Bringin support team. Your app does not need to handle resume logic — direct users to support.
Provide a “Try Again” button that starts a fresh creation flow (list existing connections first, then create).
Cancelling a Connection
To cancel an active connection, use the standing order cancellation flow:Initiate cancellation
Confirm cancellation with OTP
challengeId:INACTIVE.