Approve / Reject Result
Record a decision on a structuring result with POST /v1/structuring/approvals/:id/approve or /reject — gate-scoped, with optional notes for the audit trail.
POST /v1/structuring/approvals/{resultId}/approve and /reject record a human decision on a structuring result. Each call writes an approval decision row with status approved or rejected, the decision source api, and your optional notes — the durable audit record of who let a record through (or held it back) and why. The path parameter is the structuring result id, the same id the pending review queue exposes as result_id.
Both actions require a gate_id in the body, because decisions are scoped to one gate: when several gates govern the same schema, each gate's verdict on a record is independent, and your decision names which policy it satisfies. The platform verifies both sides before writing — the result must belong to your organization (checked through its run, not the gate) and the gate must too — so a foreign or dangling id yields a 404, never a cross-tenant write.
/v1/structuring/approvals/{resultId}/approveBody parameters
/v1/structuring/approvals/{resultId}/rejectcurl
curl -s -X POST https://api.talonic.com/v1/structuring/approvals/9c2f6a1e-3b7d-4c58-9e21-8f4a5d6b7c80/approve \
-H "Authorization: Bearer tlnc_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"gate_id": "4014c518-7f75-425c-bf67-3052464b95a0",
"notes": "Amount verified against the signed PO."
}'Response
Response fields
Response
{
"id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"dataspace_result_id": "9c2f6a1e-3b7d-4c58-9e21-8f4a5d6b7c80",
"status": "approved"
}Errors
Error responses
Error (404)
{
"statusCode": 404,
"code": "RESOURCE_NOT_FOUND",
"error": "Not Found",
"message": "Result '22222222-2222-4222-8222-222222222222' not found.",
"retryable": false,
"request_id": "req_7797aab291774896",
"timestamp": "2026-08-29T11:35:43.680Z",
"path": "/v1/structuring/approvals/22222222-2222-4222-8222-222222222222/approve"
}Decisions recorded through this API sit alongside the automatic ones: gate evaluation writes auto_approved or pending decisions with source auto at structuring time, and your calls add approved/rejected decisions with source api. Reviewer identity is not attached to API decisions (the key, not a user, is the actor), so put the reviewer's name or ticket reference in notes when your compliance process needs attribution.
Approval is what separates delivered from held data: the structuring delivery pipeline exports approved results only, so rejected and undecided records never leave the platform through that channel. The review loop in full: poll the [pending review queue](pending-approvals), group items by result_id, inspect a record's full outcomes via [result checks](result-checks), record your decision here, and let delivery pick up the approved set for the run (see [Trigger Delivery](trigger-delivery)).