Create decision — POST /v1/compliance/verifications/{id}/decision

Records a privileged reviewer's MANUAL decision on a verification — the human-in-the-loop path, and the ONLY route to a passing status when no real provider is wired.

POST /v1/compliance/verifications/{id}/decision

Addresshttps://api.hanzo.ai/v1/compliance/verifications/{id}/decision
MethodPOST
Operationpost_compliance_verifications_by_id_decision
AuthAuthorization: Bearer $HANZO_API_KEY

Records a privileged reviewer's MANUAL decision on a verification — the human-in-the-loop path, and the ONLY route to a passing status when no real provider is wired. It produces a DISTINCT reviewer_confirmed, never a provider_verified (a provider decision is the provider's to report, via the webhook or a reconcile), and it is ROLE-GATED (an org admin or platform reviewer) AND ATTRIBUTED (the reviewer's user id is DecidedBy), so a manual pass is always accountable.

Request

3 fields, body application/json (required).

FieldInTypeRequiredDescription
idpathstringyesID is the verification to decide, from the path.
idbodystring—ID is the verification to decide, from the path.
statusbodystring—Status is the reviewer's decision: "reviewer_confirmed" (a pass) or "manual_review" (withheld for review) — never a provider status.

Response

StatusBodyMeaning
200compliance.checkViewok
defaultproblem-detailsrefused

200 body — 10 fields.

FieldInTypeAlwaysDescription
createdAtbodyinteger (int64)—CreatedAt is the unix second the verification was started.
decidedAtbodyinteger (int64)—DecidedAt is the unix second a terminal status was recorded.
decidedBybodystring—DecidedBy records who settled a terminal status: the provider name, or a reviewer's user id for a recorded manual decision.
idbodystring—ID is the verification's opaque id.
kindbodystring—Kind is the party type: "individual" (KYC) or "business" (KYB).
providerbodystring—Provider is the verification provider this check runs through.
statusbodystring—Status is the check's state: pending, provider_verified, provider_rejected, manual_review, or expired (provider-reported), or reviewer_confirmed — the one value a privileged human reviewer records, never a provider.
subjectIdbodystring—SubjectID is the opaque id of the subject under verification.
updatedAtbodyinteger (int64)—UpdatedAt is the unix second the verification last changed.
verifyUrlbodystring—VerifyURL is the provider's hosted verification flow for the subject, when one exists.

Failure carries the platform error shape — see Errors.

Examples

hanzo compliance verifications decision <id>
import { Configuration, ComplianceApi } from 'hanzoai';

const api = new ComplianceApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postComplianceVerificationsByIdDecision({ id: 'id', id: "<id>", status: "<status>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import ComplianceApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = ComplianceApi(client).post_compliance_verifications_by_id_decision(id='id', id="<id>", status="<status>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.ComplianceAPI.PostComplianceVerificationsByIdDecision(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, compliance_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = compliance_api::post_compliance_verifications_by_id_decision(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.ComplianceApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new ComplianceApi(client).postComplianceVerificationsByIdDecision();
curl -X POST https://api.hanzo.ai/v1/compliance/verifications/<id>/decision \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "id": "<id>",
       "status": "<status>"
     }'

MCP reaches compliance through the compliance tool, which names its 16 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "get_compliance_accreditation"
         }
       }
     }'

Compliance API · All Hanzo APIs · Interactive reference

Was this page useful?