Hanzo

Compliance

Package compliance is your KYC/KYB onboarding, accreditation records, and the evidence trail behind them.

Package compliance is your KYC/KYB onboarding, accreditation records, and the evidence trail behind them.

Base URLhttps://api.hanzo.ai
Operations17
AuthAuthorization: Bearer $HANZO_API_KEY

compliance

DecideAccreditation records an org reviewer's decision on an accreditation record — a reviewer confirmation, a provider verification the reviewer has evidence of (a CPA/attorney letter, a verifier report), a rejection, or an expiry.

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

DecideAccreditation records an org reviewer's decision on an accreditation record — a reviewer confirmation, a provider verification the reviewer has evidence of (a CPA/attorney letter, a verifier report), a rejection, or an expiry. ROLE-GATED (an org admin or platform reviewer) and ATTRIBUTED: the reviewer's identity is recorded as ReviewerSub and audited. Human-in-the-loop: the platform never confirms on its own, and even a provider_verified state carries the reviewer who recorded it.

ParameterInTypeRequiredDescription
idpathstringyesID is the accreditation record to decide, from the path.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
idstringID is the accreditation record to decide, from the path.
statusstringStatus is the decision being recorded: reviewer_confirmed, provider_verified, rejected, or expired.

GetAccreditation returns one tracked accreditation record.

GET /v1/compliance/accreditation/{id}

GetAccreditation returns one tracked accreditation record.

ParameterInTypeRequiredDescription
idpathstringyesID is the accreditation record to read, from the path.

ListAccreditation returns the org's tracked accreditation-state records, newest first — evidence entries the org keeps, never a platform certification.

GET /v1/compliance/accreditation

ListAccreditation returns the org's tracked accreditation-state records, newest first — evidence entries the org keeps, never a platform certification.

ParameterInTypeRequiredDescription
limitqueryintegerLimit caps the rows returned; non-positive means the server default.

CreateAccreditation records an ASSERTED accreditation state for a subject — the subject's own assertion, with no verifier.

POST /v1/compliance/accreditation

CreateAccreditation records an ASSERTED accreditation state for a subject — the subject's own assertion, with no verifier. Every CONFIRMED state (provider_verified, reviewer_confirmed) and every rejected/expired state is a DECISION recorded via the decision endpoint, attributed to the reviewer — a create can never stamp a confirmation. The underlying figures (income, net worth) are never stored; only the method, category, and state.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
basisstringBasis is the qualification category: income, net_worth, professional_license, or entity.
evidenceDocIdstringEvidenceDocID references an evidence document in the org's sealed data room.
expiresAtintegerExpiresAt is the unix second a confirmation ages out; 0 means none.
methodstringMethod is how the state was established: self_attested, third_party_letter, or provider_verified.
notestringNote is a non-PII operator note.
statusstringStatus may only be "asserted" (empty reads as asserted); every confirmed, rejected or expired state is recorded via the
subjectIdstringSubjectID names the subject this record is about; it must exist within the org.

AuditRead is the compliance-scoped read of the SHARED tamper-evident audit plane — the SOC 2 posture surface (privileged actions: who started/decided what, when).

GET /v1/compliance/audit

AuditRead is the compliance-scoped read of the SHARED tamper-evident audit plane — the SOC 2 posture surface (privileged actions: who started/decided what, when). The org is PINNED to the caller's validated org and the rows are narrowed to compliance.* actions. Fail-closed: no principal is a 403, no configured audit store a 501.

ParameterInTypeRequiredDescription
resultquerystringResult filters rows by outcome result: success, deny, or error; empty means all.

Health reports subsystem liveness and the wired verification provider.

GET /v1/compliance/health

Health reports subsystem liveness and the wired verification provider. Fail-open on purpose: it never probes the external provider, so a provider outage cannot fail liveness.

ListRecords is the unified compliance-record view for the org: its verifications and accreditation records together, each provider-reported or tracked, never platform-asserted.

GET /v1/compliance/records

ListRecords is the unified compliance-record view for the org: its verifications and accreditation records together, each provider-reported or tracked, never platform-asserted. PII stays in the subject store; records carry only opaque ids and statuses.

ParameterInTypeRequiredDescription
limitqueryintegerLimit caps the rows returned; non-positive means the server default.

Status is the org's honest posture read: the wired provider and the per-status tally of its verifications.

GET /v1/compliance/status

Status is the org's honest posture read: the wired provider and the per-status tally of its verifications. It is deliberately NOT a boolean "compliant" — it reports counts of provider-reported states and carries the boundary disclaimer.

GetSubject returns one subject WITH its contact PII — the only surface that returns it, and only to the owning org.

GET /v1/compliance/subjects/{id}

GetSubject returns one subject WITH its contact PII — the only surface that returns it, and only to the owning org. The response is never cached by any intermediary.

ParameterInTypeRequiredDescription
idpathstringyesID is the subject to read, from the path.

ListSubjects returns the org's subjects as PII-MINIMIZED summaries — no name or email, only whether an email is on file.

GET /v1/compliance/subjects

ListSubjects returns the org's subjects as PII-MINIMIZED summaries — no name or email, only whether an email is on file. The full record is returned only by the explicit single-subject read.

ParameterInTypeRequiredDescription
limitqueryintegerLimit caps the rows returned; non-positive means the server default.

CreateSubject records a party the org is verifying as part of its own onboarding/compliance — a team member, vendor, customer, or counterparty.

POST /v1/compliance/subjects

CreateSubject records a party the org is verifying as part of its own onboarding/compliance — a team member, vendor, customer, or counterparty. The subject's contact PII (name/email) is sealed at rest and returned only to the owning org; downstream records reference the subject by opaque id.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
emailstringEmail is the subject's contact email, sealed at rest.
kindstringKind is the party type: "individual" (KYC) or "business" (KYB).
namestringName is the subject's name, sealed at rest.
refstringRef is the org's own opaque external id for this subject.

DecideVerification 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

DecideVerification 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.

ParameterInTypeRequiredDescription
idpathstringyesID is the verification to decide, from the path.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
idstringID is the verification to decide, from the path.
statusstringStatus is the reviewer's decision: "reviewer_confirmed" (a pass) or "manual_review" (withheld for review) — never a prov

RefreshVerification polls the wired provider for its current decision and records it, ATTRIBUTED to the provider — the internal PULL reconcile.

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

RefreshVerification polls the wired provider for its current decision and records it, ATTRIBUTED to the provider — the internal PULL reconcile. For the Manual provider the check stays pending; for a hosted provider it reflects the provider's settled status. A poll error is a 502, never a verification.

ParameterInTypeRequiredDescription
idpathstringyesID is the verification to act on, from the path.

GetVerification returns one verification — its opaque subject reference and provider-reported status, no subject PII.

GET /v1/compliance/verifications/{id}

GetVerification returns one verification — its opaque subject reference and provider-reported status, no subject PII.

ParameterInTypeRequiredDescription
idpathstringyesID is the verification to act on, from the path.

post_v1_compliance_verifications_webhook

POST /v1/compliance/verifications/webhook

ListVerifications returns the org's KYC/KYB verifications, newest first — opaque subject references and provider-reported statuses only, no subject PII.

GET /v1/compliance/verifications

ListVerifications returns the org's KYC/KYB verifications, newest first — opaque subject references and provider-reported statuses only, no subject PII.

ParameterInTypeRequiredDescription
limitqueryintegerLimit caps the rows returned; non-positive means the server default.

StartVerification begins a KYC/KYB verification of a subject through the wired provider — an existing subject by id, or one created inline from the request.

POST /v1/compliance/verifications

StartVerification begins a KYC/KYB verification of a subject through the wired provider — an existing subject by id, or one created inline from the request. The returned status is provider-reported and never terminal on a fresh start: starting a verification can never yield a verified record, and a provider error is a 502, never a verification.

Request bodyapplication/json (required)

FieldTypeRequiredDescription
emailstringEmail is an inline subject's contact email, sealed at rest.
kindstringKind is an inline subject's party type: "individual" (KYC) or "business" (KYB).
namestringName is an inline subject's name, sealed at rest.
refstringRef is the org's own opaque external id for an inline subject.
subjectIdstringSubjectID names an existing subject to verify; empty creates one inline.

All Hanzo APIs · Interactive reference

How is this guide?

On this page

complianceDecideAccreditation records an org reviewer's decision on an accreditation record — a reviewer confirmation, a provider verification the reviewer has evidence of (a CPA/attorney letter, a verifier report), a rejection, or an expiry.GetAccreditation returns one tracked accreditation record.ListAccreditation returns the org's tracked accreditation-state records, newest first — evidence entries the org keeps, never a platform certification.CreateAccreditation records an ASSERTED accreditation state for a subject — the subject's own assertion, with no verifier.AuditRead is the compliance-scoped read of the SHARED tamper-evident audit plane — the SOC 2 posture surface (privileged actions: who started/decided what, when).Health reports subsystem liveness and the wired verification provider.ListRecords is the unified compliance-record view for the org: its verifications and accreditation records together, each provider-reported or tracked, never platform-asserted.Status is the org's honest posture read: the wired provider and the per-status tally of its verifications.GetSubject returns one subject WITH its contact PII — the only surface that returns it, and only to the owning org.ListSubjects returns the org's subjects as PII-MINIMIZED summaries — no name or email, only whether an email is on file.CreateSubject records a party the org is verifying as part of its own onboarding/compliance — a team member, vendor, customer, or counterparty.DecideVerification 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.RefreshVerification polls the wired provider for its current decision and records it, ATTRIBUTED to the provider — the internal PULL reconcile.GetVerification returns one verification — its opaque subject reference and provider-reported status, no subject PII.post_v1_compliance_verifications_webhookListVerifications returns the org's KYC/KYB verifications, newest first — opaque subject references and provider-reported statuses only, no subject PII.StartVerification begins a KYC/KYB verification of a subject through the wired provider — an existing subject by id, or one created inline from the request.