Quickstart

From a fresh account to your first live response in about five minutes, using a free sandbox bank. No real bank connection required.

1. Create an account

Sign up at the developer portal. New accounts start on the free sandbox tier, so you can build everything below at no cost.

2. Create an API key

In the portal, open API keys and create one. The secret is shown once, at creation time, and never again, so copy it straight away. Every key looks like edk_… and is sent as a bearer token on every request.

Keep your key secret

The key grants read access to the connected accounts on your account. Store it in an environment variable or secrets manager, never in client-side code or a public repository. See Authentication for rotation, revocation and leak scanning.

3. Provision a sandbox bank

In the portal, click Provision sandbox. This creates a deterministic sandbox bank on your account with a few accounts and realistic transactions. Sandbox data has the exact same shape as production and never bills, and every record it returns carries "sandbox": true so you can tell it apart.

4. List your accounts

Call GET /accounts with your key. You get back the connected accounts on your account, each with a stable id you use for the following calls.

Requestbash
curl https://api.endute.com/v1/accounts \
  -H "Authorization: Bearer edk_a1B2c3D4_EXAMPLEexampleEXAMPLEexampleEXAMPLEexample1"
Responsejson
[
  {
    "id": "6f2b6c0e-7d1a-4a2e-9f0b-2c9a1e5d4b3a",
    "institution": "Endute Sandbox Bank",
    "name": "Everyday Current",
    "masked_identifier": "4321",
    "currency": "GBP",
    "status": "enabled",
    "sandbox": true,
    "last_synced_at": "2026-07-01T09:14:22Z",
    "oldest_booking_date": "2026-05-02"
  },
  {
    "id": "b8e4d2a1-1c3f-4e5a-8b6d-0f2a7c9e1d4b",
    "institution": "Endute Sandbox Bank",
    "name": "Rainy Day Savings",
    "masked_identifier": "8890",
    "currency": "GBP",
    "status": "enabled",
    "sandbox": true,
    "last_synced_at": "2026-07-01T09:14:23Z",
    "oldest_booking_date": "2026-05-02"
  }
]

5. Fetch transactions

Use an account id to read its transactions. The feed is newest-first and cursor-paginated: follow the next URL to walk it. Each transaction keeps the raw bank description verbatim and adds an enrichment object with a merchant name, category and, when known, the merchant's website domain (brand_domain) you can feed to a logo service to show merchant logos.

Requestbash
curl "https://api.endute.com/v1/accounts/6f2b6c0e-7d1a-4a2e-9f0b-2c9a1e5d4b3a/transactions" \
  -H "Authorization: Bearer edk_a1B2c3D4_EXAMPLEexampleEXAMPLEexampleEXAMPLEexample1"
Responsejson
{
  "next": "https://api.endute.com/v1/accounts/6f2b6c0e-7d1a-4a2e-9f0b-2c9a1e5d4b3a/transactions?cursor=cD0yMDI2LTA2LTI4",
  "previous": null,
  "results": [
    {
      "id": "d1c2b3a4-5e6f-4708-9a0b-1c2d3e4f5061",
      "booking_date": "2026-06-30",
      "value_date": "2026-06-30",
      "amount": "-12.80",
      "currency": "GBP",
      "description": "TESCO STORES 3421 LONDON GB",
      "counterparty": "Tesco Stores",
      "enrichment": {
        "merchant_name": "Tesco",
        "category": "Groceries",
        "brand_domain": "tesco.com",
        "confidence": null,
        "source": null
      },
      "sandbox": true
    },
    {
      "id": "a9b8c7d6-4e5f-4031-8a2b-9c8d7e6f5041",
      "booking_date": "2026-06-29",
      "value_date": "2026-06-29",
      "amount": "1850.00",
      "currency": "GBP",
      "description": "SALARY ACME LTD",
      "counterparty": "Acme Ltd",
      "enrichment": {
        "merchant_name": null,
        "category": "Income",
        "brand_domain": null,
        "confidence": null,
        "source": null
      },
      "sandbox": true
    }
  ]
}

6. Read a balance

Balances are cached and served with a fetched_at timestamp so you always know how current they are. Reading a balance never triggers a live bank fetch.

Requestbash
curl "https://api.endute.com/v1/accounts/6f2b6c0e-7d1a-4a2e-9f0b-2c9a1e5d4b3a/balances" \
  -H "Authorization: Bearer edk_a1B2c3D4_EXAMPLEexampleEXAMPLEexampleEXAMPLEexample1"
Responsejson
{
  "account_id": "6f2b6c0e-7d1a-4a2e-9f0b-2c9a1e5d4b3a",
  "balance": "1284.5600",
  "currency": "GBP",
  "fetched_at": "2026-07-01T09:14:22Z"
}

Next steps

  • Endpoint reference: every path, parameter and response field.
  • Pagination & errors: walking the feed and handling error responses.
  • When you are ready for real data, connect a bank from the portal. Billing only starts once a real account is connected.