API Reference / Results
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 | Details |
|---|---|---|
Authorizationrequired | string |
|
Path parameters
| Name | Type | Details |
|---|---|---|
operation_idrequired | string | The |
Response
200 Success.
request_idstringrequiredobjectstringrequiredalways
"operation"operation_idstringrequiredtypestringrequiredOne of:
deepfake.detect,speaker.enroll,speaker.verifystatusstringrequiredOne of:
pending,reserved,running,succeeded,failedsourcestringrequiredOne of:
api,dashboard,mcpparent_operation_idstring or nullrequiredcredits_chargedintegerrequiredcreated_atstringrequiredcompleted_atstring or nullrequiredresultobject or nullrequiredThe original success response body (without request_id).
errorobject or nullrequired4 fields in
errortypestringrequiredOne of:
invalid_request,authentication,permission,not_found,conflict,rate_limited,insufficient_credits,payload_too_large,unsupported_media,unprocessable_audio,overloaded,internalcodestringrequiredStable snake_case error code.
messagestringrequiredHuman-readable explanation. Do not parse.
paramstring or nullThe request field the error refers to, if any.
partialobject or nullFor a failed verification whose synthetic-speech check completed: that result.
Example response
{
"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 share one shape with a stable error.code; see Errors for every code and how to fix it.
Code samples
curl "https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef" \
-H "Authorization: Bearer $DETECTIF_API_KEY"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())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());