API Reference / Results
Say whether a result was right
POST/v1/operations/{operation_id}/feedback
Tells us whether an AI-speech check (deepfake.detect) got it right. Send correct, and optionally what the recording really is (label: real or fake) and a short note. Only for checks of your own account; sending again replaces your earlier answer. No credits are used. We store your answer with the result, not the audio: keeping recordings for review would need your explicit consent and is not offered yet. Requires the scope of the check (deepfake:detect).
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 |
Request body
Content type application/json.
correctbooleanrequiredWas the result right?
labelstring or nullOptional: what the recording really is.
One of:
real,fakenotestring or nullOptional note, at most 500 characters.
at most 500 characters
{
"correct": false,
"label": "real",
"note": "My own voice, recorded on a phone."
}Response
200 Your answer was saved.
request_idstringrequiredobjectstringrequiredalways
"operation.feedback"operation_idstringrequiredcorrectbooleanrequiredlabelstring or nullrequiredOne of:
real,fakenotestring or nullrequiredcreated_atstringrequiredupdated_atstringrequired
Example response
{
"request_id": "req_8f14e45fceea167a5a36dedd",
"object": "operation.feedback",
"operation_id": "op_6f1ed002ab5595859014ebf0951522d9",
"correct": false,
"label": "real",
"note": "My own voice, recorded on a phone.",
"created_at": "2026-10-13T09:30:00Z",
"updated_at": "2026-10-13T09:30:00Z"
}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. |
| 409 | Conflict, for example a request with the same Idempotency-Key is still running, or the speaker already has the maximum number of samples. |
| 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 -X POST "https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef/feedback" \
-H "Authorization: Bearer $DETECTIF_API_KEY" \
-H "Content-Type: application/json" \
-d '{"correct":false,"label":"real","note":"My own voice, recorded on a phone."}'import os
import requests
resp = requests.post(
"https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef/feedback",
headers={"Authorization": f"Bearer {os.environ['DETECTIF_API_KEY']}"},
json={
"correct": False,
"label": "real",
"note": "My own voice, recorded on a phone.",
},
timeout=30,
)
print(resp.status_code, resp.json())const res = await fetch("https://platform.detectif.ai/v1/operations/op_0123456789abcdef0123456789abcdef/feedback", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DETECTIF_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"correct": false,
"label": "real",
"note": "My own voice, recorded on a phone."
}),
});
console.log(res.status, await res.json());