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
| Name | Type | Description |
|---|---|---|
| from | ISO date | Inclusive lower bound on transaction_date. |
| to | ISO date | Inclusive upper bound on transaction_date. |
| account_id | UUID | Filter to a single linked account. |
| category | string | Provider-normalized category, e.g. FOOD_AND_DRINK. |
| limit | 1–500 | Page 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.