One endpoint,
every model.
Tare is an OpenAI-compatible gateway in front of every model you use — ours and the ones you bring yourself. One base URL, one key, and every token accounted for.
Reconciliation API
Billing endpoints for machines: your ERP, finance system or internal dashboard can pull directly, with no login session to simulate.
Use an integration key, not an inference key
These endpoints require an integration key — issue one from the console's API Keys page (pick Reconciliation), or request one from the platform.
⚠️ The three key types do not overlap, and using the wrong one returns an explicit refusal rather than a vague 401:
| Key type | Permissions |
|---|---|
| Inference key | Call models |
| Integration key | Read reports — cannot call models |
| Provisioning key | Manage keys — neither model calls nor billing reads |
Endpoints
Base: https://tare.jamerly.ai/v1/integration
| Path | Purpose |
|---|---|
/whoami | Whose key this is, current period, which resources are reachable |
/balance | Balance, credit limit, available, lifetime charged/credited |
/transactions | Ledger entries, paginated |
/statements | Monthly statements |
/statements/{period} | One period, e.g. 2026-07 |
/usage/daily | Daily usage, filterable by apiKeyId |
/attribution | Cost attribution by model, channel, label |
/reconciliation | The platform ledger vs the upstream invoice, and where they differ |
curl https://tare.jamerly.ai/v1/integration/balance \
-H "Authorization: Bearer $TARE_INTEGRATION_KEY"
Scope: balance is account-level, usage is per-key
/balance and /transactions are account-level: every key under the account shares one
wallet.
This matches what a key is — one key is one billing unit, usage separates by key while the
balance is shared. To cap an individual key use the limit on
provisioning keys, which is a different mechanism.
Usage does split by key: /usage/daily?apiKeyId=….
Two limits
- 100 days per query. Pull a year in four requests; exceeding it returns an explicit error
rather than silently truncating — a cron job starting at
from=2020-01-01should not have the database absorb the consequences. - 1200 requests/minute, counted separately from model traffic. Reconciliation walks hundreds of pages by day, key and model, and the model-traffic tier would 429 you on day one.
Field stability
The response fields here are an external contract; they are not renamed for internal refactors. For an OpenAPI / JSON Schema description, see the last section of Endpoints.
Two prerequisites for reconciliation
A period is cut in a specific timezone. 2026-07 is just a string and its start is not
self-evident, so every response carries the timezone the period was cut in. If your side cuts
months in a different timezone, the last day's usage lands in a different month and the two sides
never reconcile, with a gap small enough to be mistaken for rounding.
Late corrections land in the next period. A locked statement is never rewritten. If your ERP expects last month's number to change when a correction arrives, it will not; look for the adjustment line in the current period, which names the month it came from.