Skip to main content
POST
Create research

Authorizations

Authorization
string
header
required

Workspace API key created while signed in on the Developers page. Send Authorization: Bearer seneca_sk_… A Clerk session token is not accepted.

Headers

Idempotency-Key
string
required

Required. 1–255 characters: letters, numbers, or . _ : -. Reuse this exact value, with the same prompt and panel, to retry a request whose response was lost. A different prompt or panel with this value returns 409 idempotency_conflict. The key expires after 24 hours.

Required string length: 1 - 255
Pattern: ^[A-Za-z0-9._:-]{1,255}$

Body

application/json
prompt
string
required

The research question. The server trims surrounding whitespace.

panel
string
required

Research depth. Canonical ids and server-owned prices: wide (15 credits, 10 curated models), consensus (45 credits, 40 curated models), seneca (100 credits, every production-eligible model). The server chooses the models. Extra fields, including a model list, are rejected.

Response

Idempotent replay of the original run. The response header Idempotent-Replayed is true. No second run is created and no second reserve is written.

id
string<uuid>
required
status
string
required

queued, running, synthesizing, completed, partial, or failed.

prompt
string
required
credits_reserved
integer
required

Credits reserved when the run was accepted. This is the panel price and does not change if the run is later refunded.

created_at
string<date-time>
required
progress
PublicProgressOut · object
required
object
string
default:research.run
Allowed value: "research.run"
phase
string | null

panel while models are still answering. Null while synthesizing or after the run finishes.

source
string | null
panel
string | null

Canonical panel id: wide, consensus, or seneca. A stored Quick Pulse run still reports quick_pulse.

credits_charged
integer | null

Null while the run is in progress. Equal to credits_reserved when a customer report is delivered, including a partial run that has a report. 0 after a verified technical failure with no customer report; that refund restores the reserve. failure_code does not change between a charged failure and a refunded one.

failure_code
string | null

research_failed when status is failed. Null otherwise.

completed_at
string<date-time> | null