Review Action
Approve or reject a review record with POST /v1/review/:id/action. The optional reason is stored as review_comment and the decision timestamp is recorded.
POST /v1/review/:id/action records a Record Review decision — a record-level human judgment — on a review item. approve marks the record accepted; reject marks it refused. These are the only two accepted actions; any other value fails validation with a 400 naming the allowed values. Include an optional reason for audit purposes; it is stored on the record as review_comment and returned by [GET /v1/review/:id](get-review-item).
The action writes three things: status becomes approved or rejected, reviewed_at is stamped with the decision time, and review_comment is set to your reason (or cleared to null when omitted). reviewed_by stays null for API decisions — an API key carries no user identity — so decisions made here are distinguishable from platform-UI decisions, which record the acting user. If your compliance process needs an actor trail for API decisions, encode it in reason.
Repeat calls are allowed and overwrite: actioning an already-actioned record replaces its status, timestamp, and comment, so you can flip an accidental approve to reject by calling again. What you cannot do is return a record to pending — there is no "undecide" action. Each call is also independent per record; for clearing many items with one decision, [POST /v1/review/batch](review-batch) is the bulk form of the same write.
The decision is a record-keeping write: it does not delete extracted data, trigger re-extraction, or by itself push anything to a destination. Export staging after approval is driven by the schema's configured approval behavior in the platform review flow, and delivery signals for approved results are emitted by the structuring approvals surface — see [Approve / Reject a Result](approve-reject-result) for the gate-driven path that feeds delivery bindings. Use this endpoint when your source of truth for accept/reject lives outside Talonic and you sync verdicts back.
/v1/review/:id/actionPath parameters
Body parameters
curl
curl -s -X POST https://api.talonic.com/v1/review/a1b2c3d4-e5f6-7890-abcd-ef1234567890/action \
-H "Authorization: Bearer tlnc_your_api_key" \
-H "Content-Type: application/json" \
-d '{"action": "approve", "reason": "Verified against the PO in NetSuite"}'Response
Response fields
Response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"run_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"schema_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"status": "approved",
"overall_confidence": 0.72,
"assigned_to": null,
"reviewed_by": null,
"reviewed_at": "2026-08-12T10:30:00.000Z",
"created_at": "2026-08-12T09:00:00.000Z",
"links": {
"self": "/v1/review/a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"action": "/v1/review/a1b2c3d4-e5f6-7890-abcd-ef1234567890/action"
}
}Errors
Error responses
Error (400 — invalid action)
{
"statusCode": 400,
"code": "VALIDATION_ERROR",
"error": "Bad Request",
"message": "action must be one of the following values: approve, reject",
"retryable": false,
"request_id": "req_cc64b4fba5524acf",
"path": "/v1/review/a1b2c3d4-e5f6-7890-abcd-ef1234567890/action"
}A robust sync loop treats the response status as the confirmation of the write and re-reads nothing. Pair this with GET /v1/review/stats to verify the pending count dropped as expected, and with [POST /v1/review/batch](review-batch) when the same verdict applies to many records at once.