> For AI agents: the documentation index is at https://platform.detectif.ai/llms.txt. Every page is also available as Markdown by adding `.md` to its path.

# Get a result

`GET /v1/operations/{operation_id}`

Returns the stored outcome of a detection, enrollment or verification by its `operation_id` (kept for 30 days), for example after your connection dropped before the response arrived. Requires the scope of the operation's type.

## Authentication

Send your API key as `Authorization: Bearer <your API key>`.

## Headers

| Name | Type | Required | Description |
|---|---|---|---|
| `Authorization` | string | yes | `Bearer <your API key>`. Keys are created in the dashboard; see [Authentication](https://platform.detectif.ai/docs/authentication/). |

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `operation_id` | string | yes | The `operation_id` from a response (`op_...`). |

## Response

`200`: Success.

| Field | Type | Required | Description |
|---|---|---|---|
| `request_id` | string | yes |  |
| `object` | string | yes | (always `"operation"`) |
| `operation_id` | string | yes |  |
| `type` | string | yes | (one of `deepfake.detect`, `speaker.enroll`, `speaker.verify`) |
| `status` | string | yes | (one of `pending`, `reserved`, `running`, `succeeded`, `failed`) |
| `source` | string | yes | (one of `api`, `dashboard`, `mcp`) |
| `parent_operation_id` | string or null | yes |  |
| `credits_charged` | integer | yes |  |
| `created_at` | string | yes |  |
| `completed_at` | string or null | yes |  |
| `result` | object or null | yes | The original success response body (without request_id). |
| `error` | object or null | yes |  |
| `error.type` | string | yes | (one of `invalid_request`, `authentication`, `permission`, `not_found`, `conflict`, `rate_limited`, `insufficient_credits`, `payload_too_large`, `unsupported_media`, `unprocessable_audio`, `overloaded`, `internal`) |
| `error.code` | string | yes | Stable snake_case error code. |
| `error.message` | string | yes | Human-readable explanation. Do not parse. |
| `error.param` | string or null | no | The request field the error refers to, if any. |
| `partial` | object or null | no | For a failed verification whose synthetic-speech check completed: that result. |

### Example response

```json
{
  "request_id": "req_8f14e45fceea167a5a36dedd",
  "object": "operation",
  "operation_id": "op_6f1ed002ab5595859014ebf0951522d9",
  "type": "deepfake.detect",
  "status": "succeeded",
  "source": "api",
  "created_at": "2026-10-13T09:30:00Z",
  "completed_at": "2026-10-13T09:30:01Z",
  "result": {
    "operation_id": "op_6f1ed002ab5595859014ebf0951522d9",
    "object": "deepfake.detection",
    "result": {
      "label": "genuine",
      "score": 0.0731
    }
  }
}
```

## Errors

| Status | Meaning |
|---|---|
| `400` | The request is invalid, for example a missing or malformed field. |
| `401` | The API key is missing, invalid or revoked. |
| `403` | The key lacks the required scope, the email address is not verified, or the account is suspended. |
| `404` | Not found. Also returned for resources that belong to another account. |
| `429` | Too many requests or too many operations at the same time. Wait for the number of seconds in Retry-After. |
| `500` | Something went wrong on our side. No credits were used. |

Error bodies use the shape described in [Errors](https://platform.detectif.ai/docs/errors/), with a stable `error.code`.

## Code samples

```bash
curl "https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef" \
  -H "Authorization: Bearer $DETECTIF_API_KEY"
```

```python
import os

import requests

resp = requests.get(
    "https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef",
    headers={"Authorization": f"Bearer {os.environ['DETECTIF_API_KEY']}"},
    timeout=30,
)
print(resp.status_code, resp.json())
```

```javascript
const res = await fetch("https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef", {
  headers: {
    Authorization: `Bearer ${process.env.DETECTIF_API_KEY}`,
  },
});
console.log(res.status, await res.json());
```
