Pricing and the free tier
There is one price list, and a free allowance you earn by sending the trajectory. The router decides per search, from what the request carries, never from who sent it.
The two bands
| the search carried | band | what it costs |
|---|---|---|
| its trajectory | free | nothing, up to the free allowance |
| no trajectory | credit | list price, from your credit |
The trajectory is the assistant text your agent's hook sends with the search: what the agent said just before it searched. It is what the platform values, and what the free tier is served on. A search with no trajectory is list price.
Every response says which band it was served in, as usage.billing, and why a search that might have been free was not, as usage.billing_reason. jevlin search prints it on the decision line.
The allowances
Per account, per UTC day. Every project and every key of one account share them.
| tier | free | list price |
|---|---|---|
fast | 200 searches a day | $15 per 1,000 |
balanced | 50 a day | $35 per 1,000 |
max | coming soon | contact us |
The zero-rated searches may cost the platform up to $2 of engine cost a day per account; past that, or past a count, the next search is list price for the rest of the day, with billing_reason saying which ran out. A cache hit in the free band is free and counts against nothing. A search that names its own providers is list price: a named set is not a fan-out and carries no comparison between engines.
List price is the engines' pass-through cost: the router's receipt names what each engine cost, and usage.cost_micros is the sum. The rate ceiling is separate and comes with the account; see Rate limits and spend caps.
What counts as a trajectory
A trajectory is at least one history entry the assistant wrote, with text in it, after the client's size caps. Which hosts send one today:
| host | sends the assistant's text | free tier |
|---|---|---|
| Claude Code, Cursor, opencode, Pi | yes, from the hook | yes |
| Codex, Hermes | no: their hooks expose ids, not the text | list price until they do |
jevlin search from a bare shell | no | list price |
any shell with JEVLIN_TRACE=off | nothing at all | list price |
A reasoning entry alone, or an entry whose text was dropped as oversize, is not a trajectory either. The machine envelope's mining.trajectory field, kept for compatibility, says whether one rode.
Gaming demotes to list price
Free searches are served on a declaration, the trajectory, and the platform checks it afterwards, half an hour at a time. For each key it looks at a window of searches as a whole: whether the histories repeat, whether they are one template with the query spliced in, whether they are about the query at all, and whether the searches arrive at a machine's cadence.
A key too quiet for any half hour to judge, such as a loop that searches on a timer, is judged on the day as a whole, with two more signals no pacing hides: whether its searches are isolated from one another, where an agent's come in bursts, and whether they are spread evenly across the day, one or two to the half hour. Exact gaps, jittered gaps and randomised gaps all read the same on both.
A key whose window fails is moved to list price for 24 hours. A second failure within a week moves it to list price until an operator restores it. The key still searches; it pays. The keys page on the platform shows the demotion and when it ends, and the envelope says billing_reason: demoted. A single soft signal never demotes: parallel subagents sharing a system prompt, or an agent on a timer, look alike to one check and not to two. If you think a demotion is wrong, ask at platform.jevlin.ai/contact-us.
The thresholds are not published.
Seeing it
- The usage page on the platform shows each day's searches by band, what the credit ones were charged, and what the free ones cost the engines.
- The keys page shows a demoted key, and the date it is restored.
jevlin limitsreads the spend side;jevlin statussays whether tracing is on from this shell.