ENTITLEMENT_EXCEEDED
The account's allowance of Jaxon Verified Units is spent. HTTP 402. Compiling and saving still work; only checks are paused, and the envelope links to the page that describes the plans.
The account's allowance of Jaxon Verified Units is spent. Nothing else is affected: compiling a ruleset, editing it, saving a revision, loading one, recording an approval and adding a unit converter all still work and are all still free. Only the solver calls are paused.
This is the one error in the API written to be read out loud. If you are an agent holding it, relay the message to the person as given, not as a failure.
What a JVU is
One rule, carrying up to five claims, checked against up to 1,000 characters of the claim values submitted with it. A call that carries more rules or more text consumes more than one:
JVU = text units × metering rules
text units = ceil(characters / 1000)
metering rules = sum over rules of ceil(claims in that rule / 5)
So a ruleset stating four rules, checked against a short claim payload, costs four JVUs — not one, and not one per claim. dsail_get_account_status reports the running total, which is how a caller predicts this error before meeting it.
The envelope
{"ok": false,
"error": {"code": "ENTITLEMENT_EXCEEDED",
"message": "This account has used its 1000 free Jaxon Verified Units, so checks are not available on its current plan. A JVU is one rule checked against up to 1,000 characters. Compiling, editing and saving rulesets still work; only checks are paused. The account's plans are described at https://agents.jaxon.ai/plans.",
"tier": "free",
"used": 1000,
"limit_value": 1000,
"unit": "jvu",
"plans_url": "https://agents.jaxon.ai/plans",
"docs": "https://docs.agents.jaxon.ai/errors/entitlement-exceeded.md"},
"versions": {"...": "..."}}
The fix
- Change plan on the plans page.
plans_url, which also appears inline in the message, is a page on this host that describes the plans. The person signs in there with the account they use with DSAIL and reaches checkout for that account. Payment flips the entitlement through a webhook, and the conversation already in progress continues: there is nothing to reconnect and nothing to restart. Ask for the account status again and the next check goes through. - A production API key is issued in the conversation, not on a page. Ask for one after paying:
dsail_issue_api_key, orPOST /v1/credentials/api-keywith a credential you already hold. It is shown once and reaches the same rulesets you have been working on in chat. It is deliberately not on the page the payment provider returns you to — a key handed to whoever opens a link is a key anyone holding that link can have. - **
plans_urlabsent** means this deployment has no public address to describe plans on. Write to support@jaxon.ai and the account is sorted out directly. - Waiting does not help. The free allowance is granted once for the life of the account; it is not a monthly ration and there is no date on which it refills.
Call GET /v1/account (or dsail_get_account_status) at any time to see the position before a limit interrupts anything — it also carries a notice as the allowance runs low, so this error should never be the first warning. Under the funnel posture there is no ceiling at all and this code is never produced.
Do not retry in a loop; the answer does not change until the entitlement moves.
See also: [EVALUATION_LIMIT](evaluation-limit.md), [TIER_UNAVAILABLE](tier-unavailable.md), [CREDENTIAL_SCOPE](credential-scope.md), Error codes.