Google Analytics, Vercel Web Analytics, Leadsy and the TikTok Pixel stay off until you accept. The help chat starts once you have chosen. The scheduling button starts once you have chosen. Read our Privacy Policy.
Every failure from a public StellarFirm API route is JSON with the same shape. Branch on error.code: it is stable. The message and hint are for people and may be reworded.
json
{ "error": { "code": "not_found", "message": "There is no API route at /api/nothing-here.", "hint": "Read the route list at /openapi.json, or start at /docs/api.", "docs": "https://stellarfirm.ai/docs/api/errors" }}
Field
Meaning
code
A stable, machine-readable code.
message
What went wrong, in one plain sentence.
hint
What to do next.
docs
This page.
Failures are never cached. A 405 also carries an Allow header that lists the methods the route accepts.
The request is not valid. Check it against the OpenAPI file.
invalid_token
400
The link or token is not valid. Use the link exactly as sent.
not_configured
503
Sign-in is not set up on this deployment. Try again later.
balance_unavailable
503
The balance could not be read. Try again in a few seconds.
unavailable
503
StellarFirm could not answer. Try again in a few seconds.
upstream_failed
502
A service StellarFirm relies on did not answer. Try again.
too_large
413
The request is too large. Send a smaller one.
try_used_up
429
The visitor used every free prompt of the free trial. The error carries promptsLeft.
try_ended
503
The free trial is used up for this month. The error carries reopensOn, the day it opens again (UTC).
try_busy
429
A prompt is already running, or too many run at once. Wait for the answer, then try again. A Retry-After header says how long when it is the second case.
try_refused
403, 503
The request did not pass the check that a person sent it, or the check could not run. Open the page in a browser.
try_failed
502
The free trial could not answer the prompt. The error says how many prompts are left.
internal_error
500
Something went wrong on our side. Try again.
Routes that belong to the signed-in app can answer other codes. They keep the same shape. The free trial's errors add fields inside error where they help (reopensOn, promptsLeft).