Skip to content

Plans & usage

How billing counts

TNL meters a monthly call allowance. There is no per-second rate limit, and no burst budget to manage — the only ceiling is how many calls you make in a calendar month.

Two separate meters exist:

MeterScopeAllowance
API callsEvery authenticated REST and MCP requestSet by your plan
Ledger AI Terminal questions/v1/ai-terminal and /v1/ai-terminal/chat only50 per month

A Ledger AI Terminal request consumes both: one API call and one Terminal question. The Terminal question is reserved before model work begins, so an abandoned or failed investigation can still consume the reservation.

Current pricing and plan tiers live on the plans page — they change, so this page does not duplicate them.

Reading your usage

GET /v1/me is the authoritative source:

bash
curl -sS "https://theneuralledger.com/v1/me" \
  -H "Authorization: Bearer $TNL_API_KEY"
json
{
  "key": { "…": "key metadata" },
  "plan": { "…": "resolved plan" },
  "usage": {
    "month": "2026-07",
    "calls": 1284,
    "remaining": 8716,
    "monthlyLimit": 10000,
    "resetAt": "2026-08-01T00:00:00.000Z"
  }
}
FieldTypeMeaning
monthstringBilling month, YYYY-MM.
callsnumberCalls consumed so far this month.
remainingnumber | nullCalls left. null on uncapped plans.
monthlyLimitnumber | nullPlan ceiling. null on uncapped plans.
resetAtstringISO timestamp when the counter resets.

MCP tool responses carry the same usage block, so an MCP client can track its position without a separate REST call.

Budgeting

Each page is a call, not each story. At page_size=100:

TaskCalls
10,000-story backfill100
Hourly sync, 1 page each~720/month
Hourly sync, 3 pages each~2,160/month

Practical ways to spend fewer calls:

  • Use page_size=100 rather than the default — same data, fewer requests.
  • Poll with updated_since so you fetch only what changed.
  • Use fields to shrink responses (this reduces bandwidth and parse cost, though the call count is unchanged).
  • Cache aggressively. Stories change only when revision increments.

A 429 will not clear on retry

429 means the monthly allowance is exhausted. It resets at usage.resetAt — not in a few seconds. Retrying immediately accomplishes nothing. See Errors & rate limits.

Uncapped plans

When monthlyLimit and remaining are null, the plan has no fixed ceiling. Code defensively — do not assume these fields are numbers:

javascript
const { remaining, monthlyLimit } = usage;
const unlimited = monthlyLimit === null;
const low = !unlimited && remaining < monthlyLimit * 0.1;
if (low) console.warn(`TNL allowance low: ${remaining} calls left`);

The Neural Ledger API