> ## Documentation Index
> Fetch the complete documentation index at: https://docs.originalis.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Actions

> Async analysis: submit, poll, done — one status vocabulary everywhere.

Actions run Originalis analysis pipelines on demand:
`POST /deals/analyze` (website, document link, or
[file upload](/guides/document-inputs)), `POST /founders/analyze`, and
`POST /research`.

They differ from reads in four deliberate ways:

1. **Write-scoped key required** — read-only keys get `403`.
2. **Separate [budget](/core/rate-limits)** — charged only when a run
   actually dispatches.
3. **Always asynchronous** — every action returns `202` immediately with
   a `status_url`; analysis takes minutes.
4. **One status vocabulary** — every action reports
   `queued → running → succeeded | failed`, and a succeeded action's
   `result_url` points back into the read API. Results are ordinary
   resources, never a second schema.

## Poll with backoff

```bash theme={null}
DEAL=$(curl -s -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"website_url": "https://acmerobotics.com"}' \
  "https://api.originalis.ai/api/v1/deals/analyze")
STATUS_URL="https://api.originalis.ai$(echo "$DEAL" | jq -r '.status_url')"
while :; do
  S=$(curl -s -H "X-API-Key: $KEY" "$STATUS_URL" | jq -r '.status')
  [ "$S" = "succeeded" ] || [ "$S" = "failed" ] || { sleep 30; continue; }
  break
done
curl -s -H "X-API-Key: $KEY" "https://api.originalis.ai$(echo "$DEAL" | jq -r '.result_url')"
```

## Duplicate protection

A concurrent submission for the same target (the same company domain in
your org; the same document link) returns `409` rather than silently
starting a second run. Founder analysis is org-deduped: if your org
already assessed the founder, you get the existing analysis back with
`existing: true` — no new run, no spend.

<Note>
  Prefer push over poll? Status reads carry live [progress](/guides/realtime),
  every analysis resource has an [SSE stream](/guides/realtime), and
  [webhooks](/guides/webhooks) fire on terminal states.
</Note>
