Link Demo Playground

Link Demo Playground

Launch the real hosted Connect flow against BillerAPI's sandbox — no real biller and no integration code. Sign in, paste your sandbox client id, pick a biller and a scenario, and step through Connect exactly as your users would.

Everything here runs against sandbox

The playground mints a sandbox link_token using the sandbox API key from your signed-in dashboard 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. When you're signed in, we pair it with your sandbox secret automatically to mint the token.

Outcome

Successful link

Credentials accepted; one residential account; one bill due in 15 days.

The hosted flow uses this biller's canonical magic account 4242424242 automatically — any username/password drives the Successful link scenario.

See the magic account numbers reference for every scenario.

Launch sandbox Connect

Mints a sandbox link_token for sb_utility and opens /connect in a new tab.

Open Connect from your own app

Mint the link_token server-side — your secret never reaches the browser. The Launch button above does it client-side with your signed-in sandbox secret. That's fine for a demo, but never ship your secret to the browser in production.

# Mint a sandbox link_token, then open
# /connect?linkToken=<link_token>&client_id=<your sandbox client id>
# (both query params are required — /connect cannot initialize from one alone)
curl -X POST https://sandbox.api.billerapi.com/v1/link-tokens \
  -H "Authorization: Bearer $BILLERAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "client_user_id": "docs_demo", "biller_id": "sb_utility" }'

# => { "link_token": "sb_link_tok_...", "link_token_id": "sb_ltk_...", "expires_at": "..." }

How the flow fits together

1

Server mints a link_token

POST /v1/link-tokens with your client id + API key. Sandbox keys use the bak_test_ prefix; production keys use bak_live_. The mint belongs on YOUR backend.

2

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.

3

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.

4

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

Was this page helpful?