Decisions

Get OZAV's verdict on a risk question

Runs OZAV's own engines on the input and returns the verdict with its reasons and checks. The verdict is recorded (your input is not) so you can read it back and report its outcome.

Missing or stale data is REVIEW, never ALLOW. If an engine cannot answer at all, the call returns 503 DECISION_UNAVAILABLE, nothing is recorded and nothing is charged.

Send an Idempotency-Key to retry safely: the same key and body return the same decision and are not charged again; the same key with a different body answers 409.

Requires the decisions:write scope. API keys created before this scope existed do not gain it: create a new key with the scopes you need.

post/decisions

Request

  • Base URL
    https://developers.ozav.io/v2
  • Auth
    • API key in header X-API-Key
    • or HTTP bearer

Headers

PAYMENT-SIGNATUREstring

Pay this call in USDC with x402 (v2, scheme exact) instead of prepaid credit: the base64 PaymentPayload answering the PAYMENT-REQUIRED challenge of a previous 402. OZAV checks the authorization itself, settles it on-chain itself, credits the amount to your prepaid balance and runs the call, which is then charged as usual; the settlement comes back in the PAYMENT-RESPONSE header. A call that fails after payment is refunded to your credit, not on-chain. To pay with MPP instead, send Authorization: Payment <credential> answering the WWW-Authenticate challenge, with your API key in X-API-Key; the receipt returns in Payment-Receipt, and one authorization is credited once whichever protocol carries it. With a test key, see X-Ozav-Simulate-Payment.

X-Ozav-Simulate-Payment'required'

Sandbox only. A sandbox call is never charged, so it never answers 402 by itself. Send required to rehearse the payment: the call answers the same 402 (PAYMENT-REQUIRED and details.x402, with details.simulated: true) at the real price of the call, payable to the sandbox address 0x0000000000000000000000000000000000000402. Retry with a well-formed PAYMENT-SIGNATURE (for example the one an OZAV agent signs in the sandbox with POST /agents/{agent_id}/payments): the call runs and PAYMENT-RESPONSE comes back with simulated: true. Nothing is checked on-chain and nothing moves. Ignored with a live key.

Idempotency-Keystring

Optional idempotency key (16-256 characters of [A-Za-z0-9_-]); same semantics as on money-moving operations.

Request body

OR
OR
OR

Response

The verdict.

idstring required

The decision id (ozav_dec_...).

object'decision' required

Always the literal decision.

type'name.match' | 'destination.ownership' | 'wallet.risk' | 'transaction.outbound' required

The decision type requested.

effect'ALLOW' | 'REVIEW' | 'DENY' required

ALLOW, REVIEW (a person should look) or DENY (OZAV holds the proof of the risk).

policy_versionstring required

The version of OZAV's rules that produced the verdict.

outcome'confirmed_risk' | 'false_positive' | 'completed' | 'reversed' | 'chargeback' | 'null' nullable required

The outcome you reported, or null.

outcome_atstring date-time nullable required

When the outcome was reported.

created_atstring date-time required

When the decision was made.

Changes

No recorded changes to this operation across all 1 revision of this API.