Coding agent documentation index Fetch the complete documentation index at: https://docs.worklittle.com/docs-agent-manifest.json Use this file to discover all available pages before exploring further.

Retries and spend

Rate limits, backoff, organization wallet PAYG and 402 handling, and how to keep an agent loop from turning search into a runaway quota burn.

Retry policy and budget policy are the same policy. A retry on a metered route spends money, so blind retries are a cost bug as well as a load bug.

Rate limits

| Surface | Limit |
| --- | --- |
| API key, all authenticated routes | **60 requests per minute** per key, one-minute window |
| Public board profile, list, detail | 120 per minute per IP |
| Public board apply and parse-resume | 20 per minute per IP |
| Public board sitemap | 30 per minute per IP |
| Board GETs with an optional Bearer key | Substantially higher, typically around 600 per minute |

Throttled requests return 429 with error.code of RATE_LIMITED and a Retry-After: 60 header. MCP forwards the same limits, surfacing them as JSON-RPC errors. Details: Rate limits and the Business-tree copy at Rate limits.

Backoff that respects billing

Standard exponential backoff with jitter, plus two Worklittle-specific rules.

Retryable:      429, 500, 502, 503, 504, network timeouts
Not retryable:  400, 401, 403, 404, 402
Base delay:     honor Retry-After when present, otherwise 1s
Growth:         2x with full jitter
Max attempts:   3 for metered reads, 5 for free reads
Writes:         retry only with an idempotency key at your layer

Rule one: never retry a 402. Payment required means the org wallet is blocked (failed card charge or monthly limit). Retrying cannot succeed and a tight loop turns one failure into a flood.

Rule two: never blind-retry a side effect. A timeout on POST /jobs/:id/apply may mean the application went through and the response was lost. Retrying risks a duplicate submission in front of an employer. Read GET /jobs/applied first, or dedupe on your own request key. The same logic applies to Apply with AI starts (use Idempotency-Key; do not retry blindly on timeout).

Balance and 402

The public API is pay as you go against your organization's wallet. Metered routes return 402 PAYMENT_REQUIRED when payment failed or a monthly limit is hit. Free routes keep working, which is the key to graceful degradation.

Keep a card on file at Billing and watch consumption on Usage. Alert on your own spend rate rather than waiting for a 402. By the time you see one, user-facing search is already broken. On 402, disable metered features and keep free ones alive: GET /jobs/stats, applied-job tracking, public board pages, and most ATS reads. Charges settle on the first of each month in UTC for what you owe.

Prices per route are on Jobs pricing and Business pricing.

Signed-in AI on worklittle.com is not your API bill

People using worklittle.com without an account have limited access to AI features. They cannot call the API or MCP until they create an account. Signed-in members without Instant get a Personal monthly free AI credit, then Plans or a Personal card. Worklittle Instant ($9.99/month) includes $20/mo of AI credit, then Personal PAYG.

This does not apply to your API key.

1. It does not govern your integration. Public API usage is the organization wallet (PAYG for AI tokens) plus free quotas (including 100 AI job-description generations/org/UTC day) and the 60 per minute key limit. 2. Docs chat on docs.worklittle.com is a documentation assistant. It does not use the visitor's API key.

Budgeting an agent loop

Job search is free within monthly quotas, which means an agent's cost is mostly AI/People meters - not page size. Still keep limit intentional so you do not burn quota.

| Control | Implementation |
| --- | --- |
| Cap page size | Clamp `limit` to 10 or 20 in your tool layer, ignore larger model requests |
| Cap searches per turn | Count tool calls; refuse beyond the cap with a message telling the model to use existing results |
| Cap detail fetches | Enrich at most three roles per turn |
| Cache within a conversation | Same filters in the same turn returns the cached page |
| Prefer free endpoints | `GET /jobs/stats` for counts, tracking routes for pipeline reads |
| Separate keys per surface | Attribute spend without guesswork |

Enforce these in code. A prompt that asks a model to be frugal works until the one conversation where it does not.

Related docs

Rate limits, Errors, Jobs pricing, Pagination and limits, Reliability overview.