Simple budget, honest limits.
Seed 300 requests a day, Tree 1,200, Forest unlimited. Billed monthly, never a surprise charge.
No credit card · Daily budget resets 00:00 WIB
$ curl /v1/items -H "Authorization: Bearer wk_***"
# quota headers on every response
X-RateLimit-Limit: 1200
X-RateLimit-Remaining: 1090
X-RateLimit-Reset: 00:00 WIB
# over budget → 429
{ "error": "daily budget spent, resets 00:00 WIB" }
Fast by default, fair by design.
Seed 300/day, Tree 1,200/day, Forest unlimited — the daily total is only a billing budget.
OpenAPI contract
Spec in openapi.yaml. Items are id + name, errors a message.
Daily budget, monthly bill
The daily number is a billing guardrail, not a throttle: Seed 300, Tree 1,200 a day × 30 for the month.
Forest burst
Unlimited daily with a 1,200 req/min burst per endpoint.
Polite 429
Only the daily budget can return 429 — with a reset time, never a surprise charge.
One Go binary
Standard library, zero dependencies. One command to run.
Quota in headers
Every response carries limit, remaining, and reset. Nothing extra to poll.
Simple budget, clear numbers.
Seed 300/day, Tree 1,200/day, Forest unlimited. Reset 00:00 WIB, billed monthly.
Forest
- No daily number
- Anti-abuse 429 only
- Everything in Tree
Estimator: monthly ≈ daily × 30 · unused daily budget fades at midnight.
Integrate in minutes.
Send a key, read the headers, respect the 429.
Send your key
Every request carries Authorization: Bearer wk_***. No key means Seed.
Watch the remainder
Read X-RateLimit-Remaining per response. Running low? Poll less.
Handle 429
Got 429? Pause until X-RateLimit-Reset, then retry.
Fair questions.
Daily budget but monthly billing — how?
Will my spikes get throttled?
Is Forest really unlimited?
Can I switch plans mid-month?
Why no live playground?
Start free. Grow when it clicks.
Seed 300/day free, Tree 1,200/day Rp3,000, Forest unlimited Rp5,000.