API Reference

One endpoint, one schema, three providers. Authenticate with an API key from the dashboard.

Authentication

Send your key in the x-api-key header. Keys are created in the API Keys tab.

curl https://os3n.com/api/public/v1/transactions \
  -H "x-api-key: osbn_live_..."

GET /api/public/v1/transactions

Returns transactions for the API key's owner, normalized across providers.

Query parameters

NameTypeDescription
fromISO dateInclusive lower bound on transaction_date.
toISO dateInclusive upper bound on transaction_date.
account_idUUIDFilter to a single linked account.
categorystringProvider-normalized category, e.g. FOOD_AND_DRINK.
limit1–500Page size. Default 100.

Example response

{
  "data": [
    {
      "id": "f3b8...",
      "account_id": "9d7e...",
      "provider": "plaid",
      "amount": -12.49,
      "currency": "USD",
      "description": "Blue Bottle Coffee",
      "merchant_name": "Blue Bottle",
      "category": "FOOD_AND_DRINK",
      "transaction_date": "2026-06-25",
      "pending": false
    }
  ]
}

Lovable partner integration

If you are building on Lovable.dev, use the Lovable proxy endpoints instead of the regular API key. They isolate each of your end users by a lovable_user_id.

1. POST /api/public/lovable/link-start

Returns a magic link for the user to connect their bank. Header: X-OS3N-Key.

curl -X POST https://os3n.com/api/public/lovable/link-start \
  -H "Content-Type: application/json" \
  -H "X-OS3N-Key: os3n_..." \
  -d '{"lovable_user_id":"user_123","redirect_url":"https://your-lovable-app.lovable.app/"}'
2. GET /api/public/lovable/accounts

Returns linked accounts and balances for a single Lovable user.

curl "https://os3n.com/api/public/lovable/accounts?lovable_user_id=user_123" \
  -H "X-OS3N-Key: os3n_..."
3. GET /api/public/lovable/transactions

Returns normalized transactions. Optional filters: from, to, account_id.

curl "https://os3n.com/api/public/lovable/transactions?lovable_user_id=user_123&from=2026-01-01" \
  -H "X-OS3N-Key: os3n_..."

See the Lovable landing page and the live demo.

Rate limits

Default 60 requests/minute per API key. Burst above the limit returns429 Too Many Requests.

Errors

  • 401 — Missing or invalid API key.
  • 403 — Key revoked.
  • 429 — Rate limit exceeded.
  • 500 — Internal error.