FOR AI AGENTS & DEVELOPERS
Can an AI agent order a JuryHour test?
Partly, today. The public HTTP endpoints our own site uses are documented below; an agent can create an order and hand a human the checkout link. A proper MCP server is coming soon.
Is there a JuryHour MCP server?
Not yet. We're building an MCP server so agents can preview a page, get a quote, create a test and read the verdict as tools. None of these tools is available today.
| Tool | What it will do | Status |
|---|---|---|
juryhour_preview | Free AI preview of a URL or pitch: headline read, weakest line, rewrite, suggested jury. Includes the safety screen. | Coming soon |
juryhour_create_test | Create an order for a tier and return a Whop checkout URL for a human to pay. | Coming soon |
juryhour_get_verdict | Read order status and, once delivered, the verdict report. | Coming soon |
Payment will always need a human: juryhour_create_test will return a Whop checkout link, not charge a card. Want to be told when it ships? Contact us.
Which endpoints can I call today?
Four public JSON endpoints, the same ones this website calls. There are no API keys; they're built for a person in a browser, so please don't use them for bulk or automated scraping.
| Endpoint | Body / result | Notes |
|---|---|---|
POST /api/preview | {url | pitch_text, buyer_desc, email, turnstile_token, src?} → {ok, preview_id, result} or {ok, preview_id, refused, reason} | Needs a Cloudflare Turnstile token, so it only works from a browser that solved the check. Limited to 3 previews per email and 10 per IP per day (429 rate_limited). |
POST /api/checkout | {tier, email, buyer_desc, url | pitch_text, extra_jurors?, coupon?, preview_id?, parent_order_id?, code?, src?} → {ok, purchase_url, token} | tier is one of spark (Quick Read), proof (Verdict), retest (Retest). extra_jurors is 0–20 at $16 each (400 extra_jurors_out_of_range); legacy addons are refused (400 addons_not_offered); other tiers get 400 tier_not_offered. coupon applies a discount code to the Verdict (400 coupon_unknown, coupon_expired, coupon_not_applicable, coupon_already_used). One discount per order: a code and the Quick Read upgrade credit never combine; the larger saving is applied and the response says which (discount_applied, discount_note). A combination that can't keep our 30% margin gets 400 margin_too_low. retest needs parent_order_id of a delivered proof order with the same email, within 30 days, once (400 retest_needs_parent, retest_parent_not_eligible, retest_window_expired, retest_already_used). A human pays at purchase_url (Whop). 503 sales_paused when we're at capacity; 403 content_refused if the preview was refused. |
GET /api/order/[token] | → {ok, order: {stage, approved_n, requested_n, has_report, deadline_at, …}} | Order status. The token is private; treat it like a password. Poll no more than every few seconds. |
Errors look like {ok:false, code, error} with a 4xx/5xx status. URL and pitch are exclusive: send exactly one. A pitch needs at least 40 characters.
What do the calls look like?
Run a preview from a browser session, then create the order and give the human the checkout link.
curl -X POST https://juryhour.com/api/preview \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"buyer_desc": "Freelance designers who bill by project",
"email": "you@example.com",
"turnstile_token": "<token from the Turnstile widget>"
}'
# 200 {"ok":true,"preview_id":"…","result":{"headline":"…","weakest_line":"…",
# "rewrite_suggestion":"…","recommended_panel":"…", …}}
# 200 {"ok":true,"preview_id":"…","refused":true,"reason":"…"}curl -X POST https://juryhour.com/api/checkout \
-H "Content-Type: application/json" \
-d '{
"tier": "proof",
"email": "you@example.com",
"buyer_desc": "Freelance designers who bill by project",
"url": "https://example.com",
"preview_id": "<from /api/preview: run the free preview first, it includes our content check>"
}'
# 200 {"ok":true,"purchase_url":"https://whop.com/…","token":"…","price_usd":299,
# "coupon_applied":null,"credit_usd":0,"discount_applied":null,"discount_note":null}
# A human opens purchase_url and pays. Then poll the order:
curl https://juryhour.com/api/order/<token>
# 200 {"ok":true,"order":{"stage":"PANEL_LIVE","approved_n":7,"requested_n":15,
# "has_report":false, …}}The delivered report is at /r/[token]. A machine-readable verdict endpoint is part of the MCP work above (coming soon).