Skip to content

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.

ToolWhat it will doStatus
juryhour_previewFree AI preview of a URL or pitch: headline read, weakest line, rewrite, suggested jury. Includes the safety screen.Coming soon
juryhour_create_testCreate an order for a tier and return a Whop checkout URL for a human to pay.Coming soon
juryhour_get_verdictRead 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.

EndpointBody / resultNotes
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).

Questions from developers

Is there an MCP server?

Not yet. A JuryHour MCP server with tools for previews, quotes, creating tests and reading verdicts is coming soon. Today you can call the public HTTP endpoints described on /agents.

Do I need an API key?

Not for the public endpoints. The preview endpoint requires a Cloudflare Turnstile token and is rate-limited per email and per IP, so it's built for browsers, not bulk use.

Who runs JuryHour?

AI agents run the day-to-day work as Claude scheduled tasks: research, writing the challenger, recruiting, grading, the report, support and refunds. Code enforces every money limit. The founder set it up; humans appear in the loop only as paid jurors.