For scripts and agents
The API.
Everything the site does is one HTTP call. There is no account and no key. Prefer to hand it to an AI agent?
Routes
| Route | What it does |
|---|---|
| POST/api/check | One candidate in, the full verdict out. Body: text (80-column lines, ADES PSV or XML, a time/RA/Dec table, or a sentence), optional station, comet, private, and deep (also searches orbit space for objects seen on 3 or more nights; it takes minutes). |
| POST/api/batch | Many candidates in one paste, told apart by trkSub or designation. Same body. At most 5000 rows. |
| POST/api/frames | FITS frames and the candidate's place in them (beta). A multipart form: files, x and y or ra and dec, station, rate, pa. |
| POST/api/job | A slow check as a job: the same body as /api/check or /api/batch plus door (check or batch), or the frames form. Answers 202 with a job id at once; see Slow checks. |
| GET/api/job/{id} | A job's answer: 202 while it runs, then the answer once (it is deleted when fetched). |
| GET/api/rates | How often each verdict has been right, as measured, with the cases it was measured on. |
| GET/api/examples | The real cases behind the site's example buttons. |
| GET/api/examples/{key}/random | One real case from a button, drawn anew each call. |
| POST/mcp | The same three tools (check, batch, rates) over MCP, Streamable HTTP. |
| GET/api/health | Whether the catalogues are loaded. |
| GET/schema/verdict.json | The JSON Schema of every verdict. |
| GET/llms.txt | A plain-text guide for AI agents. |
Try it
curl -X POST https://www.skyptic.app/api/check \
-H "Content-Type: application/json" \
-d '{"text": "I think I found something at 2026-10-26 07:58 UTC, RA 21h31m24.7s Dec -30d20m57s, mag 14.5, station T08.", "private": true}'Slow checks: post a job
A check usually takes about a minute, and one over several nights up to three or more. Browsers and proxies often cut a request at about 30 seconds and again at about 300, so for anything slow post it as a job: you get an id at once, then ask for the answer. The engine runs once. The answer is kept only until you fetch it (or 15 minutes), and then it is gone: nothing you send is kept.
curl -X POST https://www.skyptic.app/api/job \
-H "Content-Type: application/json" \
-d '{"door": "check", "text": "<your rows>", "private": true}'
# {"job": "Ab3..."}
curl https://www.skyptic.app/api/job/Ab3...
# 202 {"status": "running", "seconds": 12} (ask again in a few seconds)
# 200 the verdict, once; then 404What comes back
A JSON object with the verdict (code, killed, a headline, a plain sentence and the next step), every check (id, status: killed, passed, held, note or not_run, the line with its numbers, and the raw evidence), the desk for a survivor (the MPC form, the ACK phrase, an ADES file), and provenance: Skyptic's version and the date of every catalogue it read, so anyone can run it again. The full shape is the schema.
Verdict codes: KNOWN, SATELLITE, STAR, NOT_ONE_BODY, NO_ORBIT (explained away); STATIC (a fixed source, for another desk), EARTHBOUND (near the Earth, and no catalogued satellite matches), HELD (nothing killed it yet, and it lists what it needs); SURVIVOR; UNREAD (nothing could be read).
Privacy and limits
Nothing sent is kept. Four checks ask outside services about the rows (Gaia, WAMO, SatChecker, and SkyBoT in the deep mode); "private": true skips all four. A request over 5000 rows is refused (413). A single candidate takes from about 3 seconds to half a minute; a full night of 80-column rows takes minutes (measured: 65 to 181 seconds). From one address: 30 checks, 3 batches and 6 frame sets a minute; past that, a 429.