Link Demo Playground
Launch the real hosted Connect flow against BillerAPI's sandbox — no signup, no code. Paste a sandbox client id, pick a biller and a scenario, and step through Connect exactly as your users would.
Everything here runs against sandbox
link_token using the fixed sandbox secret secret_good and opens the hosted /connect page in a new tab. No real biller is contacted and no money moves. Grab a sandbox client id at /developer/keys.Get a sandbox client id at /developer/keys. The secret is the fixed value secret_good for every sandbox client.
Credentials accepted; one residential account; one bill due in 15 days.
At the credentials step, enter account number 4242424242 (any password) to drive the Successful link scenario.
See the magic account numbers reference for every scenario.
Launch sandbox Connect
Mints a sandbox link_token for test_electric_company and opens /connect in a new tab.
Mint the link_token server-side — your secret never reaches the browser. The Launch button above does it client-side only because sandbox uses the fixed secret_good.
# Mint a sandbox link_token, then open /connect?linkToken=…
curl -X POST https://sandbox.api.billerapi.com/link/token/create \
-H "Authorization: Bearer $BILLERAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "client_user_id": "docs_demo", "biller_id": "test_electric_company" }'
# => { "link_token": "lt_...", "link_token_id": "lt_...", "expires_at": "..." }How the flow fits together
Server mints a link_token
POST /v1/link-tokens with your client id + secret. In sandbox the secret is the fixed secret_good; in production it is your real client secret and the mint happens on YOUR backend.
Browser launches Connect with the token
The Elements SDK .connect({ linkToken }).open() opens the hosted /connect iframe. The playground opens it in a new tab instead so you can watch the whole flow.
onEvent streams the funnel
As the user moves through panes, the hosted page emits connect/* events to your onEvent handler — connect/view, connect/authenticated, connect/error, and so on.
Webhooks confirm the outcome
link.completed (interactive) or link_token.completed (backgrounded) is the authoritative signal that the link is ready. SDK callbacks are UX hints only.
Next steps
- → Elements SDK guide — wire
.connect()into your own app. - → Connect Events reference — the full
connect/*onEvent taxonomy. - → Magic account numbers — every sandbox scenario and the account number that triggers it.
- → Set up webhooks — confirm link outcomes server-side.