What could you do if every biller had an API?

One REST endpoint returns normalized bills, balances, and due dates as structured JSON — across any biller portal, no scraping to maintain — for developers and their agents.

SOC 2 program underwayCredential protection controls
# Retrieve bills for one linked account
curl "https://sandbox.api.billerapi.com/v1/bills?account_link_id=4b7d3d9c-1f2a-4a5e-9c3b-8e1f0a6d2c74" \
  -H "Authorization: Bearer bak_test_4f2c..." \
  -H "Idempotency-Key: 2f8e0c14-6b39-4d7a-b0f5-1c9a4e6d3b82"
200 OKGET /v1/bills · 214ms
{
  "bills": [
    {
      "id": "bill_9a1c6f52-0b74-4c3e-8d21-5f7a2e94b6c1",
      "total_amount": {
        "value": "142.19",
        "currency": "USD"
      },
      "due_date_iso": "2026-07-21"
    }
  ],
  "total_count": 1,
  "has_more": false,
  "next_cursor": ""
}
$ npm install billerapi
NodeReactCLI
Start an evaluation
Choose your starting point

Build it yourself, or send your agent

Both paths begin with the same public documentation. The agent path runs an account-free, read-only demo without credentials, consent, or account creation.

Account-free terminal demo
npx -y billerapi-cli@1.1.0 demoFollow the human quickstart →
Product

The Connect flow your users actually see

Search for a biller, authenticate, clear MFA, done — the hosted Connect flow handles every provider quirk so your integration is one connect() call and one webhook.

Connect a biller

Find your biller

Search supported billers

spring
SUSpringfield UtilityELECTRIC · IL
SWSpringfield WaterWATER · IL
SBSpring BroadbandINTERNET · US
Continue
01 · Select biller
Connect a biller

Share your bill data

Springfield Utility → Acme App

BillsAmounts, due dates, statementsbills:read
Account detailsBiller name, masked account, status
Agree and continue
02 · Consent
Connect a biller

Log in to Springfield Utility

Entered here only — never sent to Acme App

Username
jordan@example.com
Password
••••••••••••
Verify (MFA) — if your biller asks, we'll prompt for a one-time code next.
Log in
03 · Credentials
Connect a biller

Choose accounts to link

2 accounts found at Springfield Utility

Electric••••4242
Gas••••8811
Link account
04 · Select accounts
Connect a biller
Account linked
Springfield Utility
Account••••4242
Done
05 · Success

The most common path. Region selection appears between consent and credentials for region-gated billers, and an MFA or security-question step appears after login when the biller requires one.

Your user links their biller without leaving your product. You never touch credentials.

See the live sandbox demo
The platform

Bill data and payment preparation in one API

Discover, link, retrieve, and collect payment methods on consistent contracts. Bill-payment execution remains unavailable and returns 501 PAYMENT_EXECUTION_NOT_AVAILABLE.

01

Biller discovery

Search supported billers by name, category, or region — utilities, telecom, insurance, lenders, and subscriptions.

GET /v1/billers?query=eversource
02

Account linking

Drop-in Connect flow handles credentials, MFA, and captchas invisibly. You get a durable link token, never the password.

POST /v1/link-tokens
03

Bill retrieval

Normalized bills with amounts, due dates, statements, and line items — the same schema whether it came from an API or a scrape.

GET /v1/bills
04

Payment methods

Collect and tokenize payment methods with hosted Elements. Bill-payment execution is not available; initiation returns 501 PAYMENT_EXECUTION_NOT_AVAILABLE.

POST /v1/pay-tokens
Integration

Wire up bills in an afternoon

Four steps from key to first webhook. The Connect flow does the messy part; you handle typed events.

  1. 1

    Create a link token

    Call POST /v1/link-tokens server-side with the biller and your customer reference.

    /v1/link-tokens
  2. 2

    Launch Connect

    Hand the token to the drop-in Connect UI. Credentials, MFA, and captchas are handled for you.

  3. 3

    Exchange the token

    Swap the public token for a durable account_link_id you store against the customer.

    account_link_id
  4. 4

    Receive bill.created webhooks

    Bills arrive as signed, typed events as soon as they're available — no polling loop to run.

    bill.created
POST/your-webhook-endpoint
{
  "type": "bill.created",
  "id": "evt_1PQm7z",
  "created": 1783041920,
  "data": {
    "bill_id": "bill_8Kd2Xq",
    "account_link_id": "aln_Qb3R",
    "amount_due": 142.19,
    "due_date": "2026-07-21"
  }
}
200
Free production API calls to start
3
Linked accounts free on sandbox
4
Capabilities — Discover, Link, Retrieve, Pay
Use cases

Built into products like yours

01

Bill management apps

Show every bill in one place and prepare payment experiences without presenting unavailable money movement.

02

Subscription management

Detect recurring charges and surface price changes before renewal.

03

Personal finance (PFM)

Enrich transactions with real due dates and statement-level detail.

Developer experience

Built for engineers

→

Typed SDKs

First-class Node, React, and CLI packages with full TypeScript types generated from the API spec.

→

Event-driven webhooks

Signed, retried, idempotent events. Verify with one line, replay from the dashboard.

→

Versioned API

Date-pinned versions and a public changelog. Upgrades are opt-in, never a surprise.

Ready to deliver automated bill experiences?