{"openapi":"3.1.0","info":{"title":"Safio API","description":"Customer API for digital-asset AML screening, auditable risk reports, account balances and supporting market data.","version":"1.0.0"},"servers":[{"url":"https://platform.safio.io"}],"paths":{"/api/v1/health":{"post":{"tags":["system"],"summary":"Health","description":"Service health endpoint.\n\nPublic, unauthenticated availability check. GET is retained for existing\nprovider monitors; POST is the documented RPC operation. Both methods use\nthe same response. Infrastructure probes use GET /health and GET /readiness.","operationId":"health_api_v1_health_post","responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_dict_str__str__"},"examples":{"default":{"summary":"Healthy service","value":{"data":{"status":"ok"},"error":null}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}}}},"/api/v1/rates/get":{"post":{"tags":["rates"],"summary":"Get Rate","operationId":"get_rate_api_v1_rates_get_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":80,"description":"Stable unique key preventing duplicate rate charges.","title":"Idempotency-Key"},"description":"Stable unique key preventing duplicate rate charges."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateRequest"},"examples":{"default":{"summary":"Fresh USDT/RUB quote","value":{"from_currency":"USDT","to_currency":"RUB","max_age_seconds":60}}}}}},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_RateResponse_"},"examples":{"default":{"summary":"Aggregated market rate","value":{"data":{"from_currency":"USDT","to_currency":"RUB","rate":82.41,"median_rate":82.39,"min_rate":82.18,"max_rate":82.63,"sample_count":7,"updated_at":"2026-08-31T10:15:23Z","valid_until":"2026-08-31T10:16:23Z","billing":{"enabled":true,"amount":"0.0003","currency":"USD","balance_after":"80.1997","waived":false},"reused":false},"error":null}},"error_400":{"summary":"HTTP 200 · error 400","value":{"data":null,"error":{"code":"invalid_request","message":"The request could not be processed.","status":400}}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_402":{"summary":"HTTP 200 · error 402","value":{"data":null,"error":{"code":"insufficient_balance","message":"Insufficient API key balance.","extra":{"required":"0.25","available":"0.10","currency":"USD","product":"screen"},"status":402}}},"error_409":{"summary":"HTTP 200 · error 409","value":{"data":null,"error":{"code":"idempotency_conflict","message":"Idempotency-Key was already used with a different request.","status":409}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_429":{"summary":"HTTP 200 · error 429","value":{"data":null,"error":{"code":"rate_limit_exceeded","message":"Too many requests. Retry later.","status":429}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}},"error_503":{"summary":"HTTP 200 · error 503","value":{"data":null,"error":{"code":"service_unavailable","message":"Required upstream data is temporarily unavailable.","status":503}}}}}}}},"x-error-statuses":{"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/rate":{"post":{"tags":["rates"],"summary":"Get Rate","description":"Deprecated compatibility method. Use POST /api/v1/rates/get. Existing request, response, error and billing semantics are preserved.","operationId":"get_rate_api_v1_rate_post","deprecated":true,"security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":80,"description":"Stable unique key preventing duplicate rate charges.","title":"Idempotency-Key"},"description":"Stable unique key preventing duplicate rate charges."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateRequest"},"examples":{"default":{"summary":"Fresh USDT/RUB quote","value":{"from_currency":"USDT","to_currency":"RUB","max_age_seconds":60}}}}}},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_RateResponse_"},"examples":{"default":{"summary":"Aggregated market rate","value":{"data":{"from_currency":"USDT","to_currency":"RUB","rate":82.41,"median_rate":82.39,"min_rate":82.18,"max_rate":82.63,"sample_count":7,"updated_at":"2026-08-31T10:15:23Z","valid_until":"2026-08-31T10:16:23Z","billing":{"enabled":true,"amount":"0.0003","currency":"USD","balance_after":"80.1997","waived":false},"reused":false},"error":null}},"error_400":{"summary":"HTTP 200 · error 400","value":{"data":null,"error":{"code":"invalid_request","message":"The request could not be processed."}}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key."}}},"error_402":{"summary":"HTTP 200 · error 402","value":{"data":null,"error":{"code":"insufficient_balance","message":"Insufficient API key balance.","extra":{"required":"0.25","available":"0.10","currency":"USD","product":"screen"}}}},"error_409":{"summary":"HTTP 200 · error 409","value":{"data":null,"error":{"code":"idempotency_conflict","message":"Idempotency-Key was already used with a different request."}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]}}}},"error_429":{"summary":"HTTP 200 · error 429","value":{"data":null,"error":{"code":"rate_limit_exceeded","message":"Too many requests. Retry later."}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error"}}},"error_503":{"summary":"HTTP 200 · error 503","value":{"data":null,"error":{"code":"service_unavailable","message":"Required upstream data is temporarily unavailable."}}}}}}}},"x-error-statuses":{"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aml/capabilities/get":{"post":{"tags":["aml"],"summary":"Show capabilities available to this API key","description":"Returns allowed paid products and configured network availability. Use this before presenting product choices to a customer.","operationId":"aml_capabilities_api_v1_aml_capabilities_get_post","responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlCapabilitiesResponse_"},"examples":{"default":{"summary":"Products available to this API key","value":{"data":{"default_product":"screen","products":[{"product":"exact_sanctions","default_lookback_days":90,"allowed":true,"evidence_access":false},{"product":"screen","default_lookback_days":90,"allowed":true,"evidence_access":false},{"product":"enhanced","default_lookback_days":180,"allowed":true,"evidence_access":false},{"product":"investigation","default_lookback_days":730,"allowed":true,"evidence_access":true}],"networks":[{"network":"tron","assets":["TRX","USDT"],"address_products":["exact_sanctions","screen","enhanced","investigation"],"transaction_products":["screen","enhanced","investigation"],"default_address_product":"screen","default_transaction_product":"screen"}],"notes":["Products combine API-key entitlement with configured network capability.","Runtime upstream health is evaluated when a check executes."]},"error":null}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_403":{"summary":"HTTP 200 · error 403","value":{"data":null,"error":{"code":"http_error","message":"The API key does not have access to this operation.","status":403}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"401":{"description":"Missing or invalid API key"},"403":{"description":"API key does not have AML access"}}}},"/api/v1/aml/checks/create":{"post":{"tags":["aml"],"summary":"Queue an asynchronous AML check","description":"Reserves the selected AML price and returns immediately. Reusing the same Idempotency-Key with the same payload returns the original check without a second charge. An optional HTTPS callback must match this key's administrator-configured callback URL patterns.","operationId":"create_aml_check_api_v1_aml_checks_create_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":80,"description":"Stable unique key used to prevent duplicate checks and charges.","title":"Idempotency-Key"},"description":"Stable unique key used to prevent duplicate checks and charges."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlCheckCreateRequest"},"examples":{"default":{"summary":"Screen a TRON address","value":{"subject":{"type":"address","value":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"},"network":"tron","asset":"USDT","product":"screen","lookback_days":90,"callback_url":"https://hooks.customer.example/aml/completed"}}}}}},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlCheckAcceptedResponse_"},"examples":{"default":{"summary":"Check accepted","value":{"data":{"check_id":"c4e5295c-8f4a-4db2-980f-0e782b63811f","status":"queued","stage":"queued","status_endpoint":"/api/v1/aml/checks/get","report_endpoint":"/api/v1/aml/checks/report.pdf","product":"screen","lookback_days":90,"callback_status":"pending","created_at":"2026-08-31T10:15:23Z","reused":false},"error":null}},"error_400":{"summary":"HTTP 200 · error 400","value":{"data":null,"error":{"code":"invalid_request","message":"The request could not be processed.","status":400}}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_402":{"summary":"HTTP 200 · error 402","value":{"data":null,"error":{"code":"insufficient_balance","message":"Insufficient API key balance.","extra":{"required":"0.25","available":"0.10","currency":"USD","product":"screen"},"status":402}}},"error_403":{"summary":"HTTP 200 · error 403","value":{"data":null,"error":{"code":"http_error","message":"The API key does not have access to this operation.","status":403}}},"error_404":{"summary":"HTTP 200 · error 404","value":{"data":null,"error":{"code":"http_error","message":"The requested resource was not found.","status":404}}},"error_409":{"summary":"HTTP 200 · error 409","value":{"data":null,"error":{"code":"idempotency_conflict","message":"Idempotency-Key was already used with a different request.","status":409}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}},"error_503":{"summary":"HTTP 200 · error 503","value":{"data":null,"error":{"code":"service_unavailable","message":"Required upstream data is temporarily unavailable.","status":503}}}}}}}},"x-error-statuses":{"202":{"description":"AML check accepted or idempotently reused"},"400":{"description":"Invalid subject, asset/network pair, or product selection"},"401":{"description":"Missing or invalid API key"},"402":{"description":"Insufficient API-key balance"},"403":{"description":"API key is not entitled to the requested product"},"404":{"description":"Transaction or billing account was not found"},"409":{"description":"Idempotency key has already been processed"},"422":{"description":"Request validation failed or the requested product is unavailable for this network and subject type"},"503":{"description":"Required chain data is unavailable"}}}},"/api/v1/aml/checks/bulk/create":{"post":{"tags":["aml"],"summary":"Queue up to 100 AML checks in one request","description":"Each item keeps independent validation, billing and status. Replaying the same batch Idempotency-Key is safe because item keys are deterministic.","operationId":"create_bulk_aml_checks_api_v1_aml_checks_bulk_create_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":80,"description":"Stable key for the complete batch.","title":"Idempotency-Key"},"description":"Stable key for the complete batch."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlBulkCheckCreateRequest"},"examples":{"default":{"summary":"Example request","value":{"items":[{"subject":{"type":"address","value":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"},"network":"tron","asset":"USDT","product":"screen","client_reference":"customer-001"}]}}}}}},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlBulkCheckAcceptedResponse_"},"examples":{"error_400":{"summary":"HTTP 200 · error 400","value":{"data":null,"error":{"code":"invalid_request","message":"The request could not be processed.","status":400}}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_402":{"summary":"HTTP 200 · error 402","value":{"data":null,"error":{"code":"insufficient_balance","message":"Insufficient API key balance.","extra":{"required":"0.25","available":"0.10","currency":"USD","product":"screen"},"status":402}}},"error_403":{"summary":"HTTP 200 · error 403","value":{"data":null,"error":{"code":"http_error","message":"The API key does not have access to this operation.","status":403}}},"error_404":{"summary":"HTTP 200 · error 404","value":{"data":null,"error":{"code":"http_error","message":"The requested resource was not found.","status":404}}},"error_409":{"summary":"HTTP 200 · error 409","value":{"data":null,"error":{"code":"idempotency_conflict","message":"Idempotency-Key was already used with a different request.","status":409}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}},"error_503":{"summary":"HTTP 200 · error 503","value":{"data":null,"error":{"code":"service_unavailable","message":"Required upstream data is temporarily unavailable.","status":503}}}}}}}},"x-error-statuses":{"400":{"description":"Invalid subject, asset/network pair, or product selection"},"401":{"description":"Missing or invalid API key"},"402":{"description":"Insufficient API-key balance"},"403":{"description":"API key is not entitled to the requested product"},"404":{"description":"Transaction or billing account was not found"},"409":{"description":"Idempotency key has already been processed"},"422":{"description":"Request validation failed or the requested product is unavailable for this network and subject type"},"503":{"description":"Required chain data is unavailable"}}}},"/api/v1/aml/checks/bulk/get":{"post":{"tags":["aml"],"summary":"Get up to 100 AML check results in one request","operationId":"get_bulk_aml_checks_api_v1_aml_checks_bulk_get_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlBulkCheckGetRequest"},"examples":{"default":{"summary":"Example request","value":{"ids":["c4e5295c-8f4a-4db2-980f-0e782b63811f"]}}}}},"required":true},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlBulkCheckResponse_"},"examples":{"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aml/checks/get":{"post":{"tags":["aml"],"summary":"Get an asynchronous AML check","operationId":"get_aml_check_api_v1_aml_checks_get_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlCheckIdRequest"},"examples":{"default":{"summary":"Poll check status","value":{"id":"c4e5295c-8f4a-4db2-980f-0e782b63811f"}}}}},"required":true},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlCheckResponse_"},"examples":{"default":{"summary":"Completed screening result","value":{"data":{"check_id":"c4e5295c-8f4a-4db2-980f-0e782b63811f","status":"completed","stage":"completed","product":"screen","lookback_days":90,"created_at":"2026-08-31T10:15:23Z","started_at":"2026-08-31T10:15:24Z","completed_at":"2026-08-31T10:15:27Z","deadline_at":null,"status_endpoint":"/api/v1/aml/checks/get","report_endpoint":"/api/v1/aml/checks/report.pdf","callback_status":"delivered","callback_attempts":1,"processing_attempts":1,"processing_time_ms":2480,"queue_time_ms":120,"total_time_ms":2600,"stage_durations_ms":{"screening":920,"graph_analysis":1080,"report_compilation":480},"result":{"product":"screen","subject":{"type":"address","value":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH","network":"tron","asset":"USDT"},"risk_score":18,"risk_level":"low","decision":"allow","triggered_rules":[],"categories":[{"category":"sanctions","assessment_status":"not_detected","exposure_type":"none","min_confirmed_hops":null,"path_status":"not_applicable","exposure_amount_usd":null,"exposure_share":null,"directions":[],"context_signal_count":0,"warning":null}],"coverage":[{"category":"sanctions","status":"not_detected","directions":[],"lookback_days":90}],"coverage_status":"complete","lookback_days":90,"route_summaries":[],"evidence_available":false,"policy_version":"aml-policy-2026-08","dataset_revision":"2026-08-31T10:00:00Z","billing":{"enabled":true,"amount":"0.25","currency":"USD","balance_after":"79.95","waived":false},"warnings":[]},"error":null},"error":null}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aml/checks/evidence/get":{"post":{"tags":["aml"],"summary":"Open protected Investigation evidence","description":"Requires aml:evidence:read and the analyst role. Every view is audited and returns a single-use, short-lived PDF export token.","operationId":"get_aml_check_evidence_api_v1_aml_checks_evidence_get_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlEvidenceGetRequest"},"examples":{"default":{"summary":"Open Investigation evidence","value":{"id":"c4e5295c-8f4a-4db2-980f-0e782b63811f"}}}}},"required":true},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlEvidenceResponse_"},"examples":{"default":{"summary":"Audited evidence bundle","value":{"data":{"check_id":"c4e5295c-8f4a-4db2-980f-0e782b63811f","audit_id":"6b3af902-4d30-4d70-88d7-7b265ec1be49","product":"investigation","subject":{"type":"address","value":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH","network":"tron","asset":"USDT"},"generated_at":"2026-08-31T10:15:28Z","lookback_days":730,"linked_identities":[{"address":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH","kind":"unclassified"}],"paths":[{"category":"sanctions","risk_address":"TJ9pA2j7j3gHhR4u89xExampleAddress","entity_name":"Example sanctioned entity","direction":"received","confirmed_hops":2,"amount":"1250.50","amount_basis":"path_capacity_upper_bound","steps":[{"source":"TJ9pA2j7j3gHhR4u89xExampleAddress","destination":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH","transaction":"f0d4c3b2a190exampletransaction","network":"tron","asset":"USDT","amount":"1250.50","depth":1,"timestamp":"2026-08-28T08:41:00Z","direction":"received","channel":"direct","role":"value","initiator":null}]}],"contextual_signals":[],"coverage":[{"category":"sanctions","status":"detected","directions":["received"],"lookback_days":730}],"analyst_notes":["One confirmed inbound route requires manual review."],"policy_version":"aml-policy-2026-08","dataset_revision":"2026-08-31T10:00:00Z","export_token":"ev_4J6YmpZ9xK2rN7qW5cT8bH3sF1dL0aPc","export_endpoint":"/api/v1/aml/checks/evidence/report.pdf","export_expires_at":"2026-08-31T10:20:28Z"},"error":null}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_403":{"summary":"HTTP 200 · error 403","value":{"data":null,"error":{"code":"http_error","message":"The API key does not have access to this operation.","status":403}}},"error_404":{"summary":"HTTP 200 · error 404","value":{"data":null,"error":{"code":"http_error","message":"The requested resource was not found.","status":404}}},"error_410":{"summary":"HTTP 200 · error 410","value":{"data":null,"error":{"code":"evidence_expired","message":"The evidence retention period has expired.","status":410}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_425":{"summary":"HTTP 200 · error 425","value":{"data":null,"error":{"code":"evidence_not_ready","message":"Investigation evidence is not ready.","status":425}}},"error_429":{"summary":"HTTP 200 · error 429","value":{"data":null,"error":{"code":"rate_limit_exceeded","message":"Too many requests. Retry later.","status":429}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"401":{"description":"Missing or invalid API key"},"403":{"description":"Evidence entitlement or export token is invalid"},"404":{"description":"AML check was not found for this API key"},"410":{"description":"Evidence retention period has expired"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"425":{"description":"Investigation evidence is not ready"},"429":{"description":"Evidence access rate limit exceeded"}}}},"/api/v1/aml/checks/evidence/report.pdf":{"post":{"tags":["aml"],"summary":"Download a protected Investigation evidence report","description":"Consumes the single-use export token returned by evidence/get.","operationId":"get_aml_check_evidence_report_api_v1_aml_checks_evidence_report_pdf_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlEvidenceExportRequest"},"examples":{"default":{"summary":"Download the audited evidence PDF","value":{"id":"c4e5295c-8f4a-4db2-980f-0e782b63811f","export_token":"ev_4J6YmpZ9xK2rN7qW5cT8bH3sF1dL0aPc"}}}}},"required":true},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{"type":"null"},"error":{"$ref":"#/components/schemas/ErrorBody"}}},"examples":{"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_403":{"summary":"HTTP 200 · error 403","value":{"data":null,"error":{"code":"http_error","message":"The API key does not have access to this operation.","status":403}}},"error_404":{"summary":"HTTP 200 · error 404","value":{"data":null,"error":{"code":"http_error","message":"The requested resource was not found.","status":404}}},"error_410":{"summary":"HTTP 200 · error 410","value":{"data":null,"error":{"code":"evidence_expired","message":"The evidence retention period has expired.","status":410}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_425":{"summary":"HTTP 200 · error 425","value":{"data":null,"error":{"code":"evidence_not_ready","message":"Investigation evidence is not ready.","status":425}}},"error_429":{"summary":"HTTP 200 · error 429","value":{"data":null,"error":{"code":"rate_limit_exceeded","message":"Too many requests. Retry later.","status":429}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}},"application/pdf":{"schema":{"type":"string","format":"binary"}}},"x-example-filename":"safio-investigation.pdf"}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"401":{"description":"Missing or invalid API key"},"403":{"description":"Evidence entitlement or export token is invalid"},"404":{"description":"AML check was not found for this API key"},"410":{"description":"Evidence retention period has expired"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"425":{"description":"Investigation evidence is not ready"},"429":{"description":"Evidence access rate limit exceeded"}}}},"/api/v1/aml/checks/report.pdf":{"post":{"tags":["aml"],"summary":"Download the completed AML report snapshot","description":"Returns the PDF produced by the original asynchronous check. This endpoint does not rerun analysis and does not create another charge.","operationId":"get_aml_check_report_api_v1_aml_checks_report_pdf_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlCheckIdRequest"},"examples":{"default":{"summary":"Download the completed AML report","value":{"id":"c4e5295c-8f4a-4db2-980f-0e782b63811f"}}}}},"required":true},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"type":"object","required":["data","error"],"properties":{"data":{"type":"null"},"error":{"$ref":"#/components/schemas/ErrorBody"}}},"examples":{"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}},"application/pdf":{"schema":{"type":"string","format":"binary"}}},"x-example-filename":"safio-aml-report.pdf"}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aml/path-search":{"post":{"tags":["aml-path-search"],"summary":"Search for a confirmed path to an address or category","description":"Searches the selected chain and asset up to 10 hops. Amount filters apply to every edge. A negative answer is conclusive only when coverage is complete.","operationId":"search_aml_path_api_v1_aml_path_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmlPathSearchRequest"},"examples":{"default":{"summary":"Example request","value":{"source_address":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH","target":{"risk_category":"sanctions"},"network":"tron","asset":"USDT","max_hops":5,"lookback_days":180}}}}},"required":true},"responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_AmlPathSearchResponse_"},"examples":{"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_422":{"summary":"HTTP 200 · error 422","value":{"data":null,"error":{"code":"validation_error","message":"Validation Error","extra":{"errors":[{"type":"missing","loc":["body","subject"],"msg":"Field required"}]},"status":422}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/account":{"post":{"tags":["billing"],"summary":"Show API-key balance and product prices","description":"Returns the current balance, billing state, tariff, per-level AML prices and the price of one successful rate request for the authenticated API key.","operationId":"billing_account_api_v1_billing_account_post","responses":{"200":{"description":"Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcResponse_BillingAccountResponse_"},"examples":{"default":{"summary":"Current balance and product prices","value":{"data":{"api_key_id":"abf3ce95-6b80-4181-995a-b04afe9adba4","enabled":true,"currency":"USD","balance":"80.20","complimentary_aml_checks_remaining":3,"aml_prices":{"exact_sanctions":"0.04","screen":"0.25","enhanced":"0.69","investigation":"1.90"},"rate_price":"0.0003","tariff_plan_id":"2bc8a33d-42e5-4d3b-8af4-a0ee56e96b28","tariff_plan_code":"trial"},"error":null}},"error_401":{"summary":"HTTP 200 · error 401","value":{"data":null,"error":{"code":"http_error","message":"Missing or invalid API key.","status":401}}},"error_403":{"summary":"HTTP 200 · error 403","value":{"data":null,"error":{"code":"http_error","message":"The API key does not have access to this operation.","status":403}}},"error_404":{"summary":"HTTP 200 · error 404","value":{"data":null,"error":{"code":"http_error","message":"The requested resource was not found.","status":404}}},"error_500":{"summary":"HTTP 200 · error 500","value":{"data":null,"error":{"code":"internal_error","message":"Internal Server Error","status":500}}}}}}}},"security":[{"APIKeyHeader":[]}],"x-error-statuses":{"401":{"description":"Missing or invalid API key"},"403":{"description":"API key does not have billable-product access"},"404":{"description":"Billing account was not found"}}}}},"components":{"schemas":{"RpcResponse_dict_str__str__":{"properties":{"data":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Data"},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[dict[str, str]]"},"RateRequest":{"properties":{"from_currency":{"type":"string","maxLength":16,"minLength":1,"title":"From Currency"},"to_currency":{"type":"string","maxLength":16,"minLength":1,"title":"To Currency"},"max_age_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Age Seconds","description":"Max staleness in seconds"},"min_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Min Updated At","description":"Min acceptable update timestamp"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Optional configured rate route alias."}},"type":"object","required":["from_currency","to_currency"],"title":"RateRequest"},"RpcResponse_RateResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/RateResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[RateResponse]"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"RpcResponse_AmlCapabilitiesResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlCapabilitiesResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlCapabilitiesResponse]"},"AmlCheckCreateRequest":{"properties":{"subject":{"$ref":"#/components/schemas/AmlSubjectRequest"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"product":{"anyOf":[{"$ref":"#/components/schemas/AmlProduct"},{"type":"null"}],"description":"Purchased AML product. Technical engine depths are not public tariff names. Defaults to screen. Deprecated analysis_level/depth input is accepted during migration but omitted from the public schema."},"lookback_days":{"anyOf":[{"type":"integer","maximum":730,"minimum":1},{"type":"null"}],"title":"Lookback Days","description":"Optional historical window. When omitted, the selected level uses its advertised default: exact_sanctions/screen=90, enhanced=180, investigation=730 days."},"risk_model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Risk Model Id","description":"Published customer risk model to evaluate alongside the Safio score."},"allow_product_upgrade":{"type":"boolean","title":"Allow Product Upgrade","description":"When true, Safio may raise the requested product to the minimum product required by risk_model_id. No silent upgrade occurs when false.","default":false},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional HTTPS webhook URL. It must match a callback URL pattern configured by an administrator for this API key.","examples":["https://hooks.customer.example/aml/completed"]}},"additionalProperties":true,"type":"object","required":["subject","network","asset"],"title":"AmlCheckCreateRequest","examples":[{"asset":"USDT","lookback_days":90,"network":"tron","product":"screen","subject":{"type":"address","value":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"}}]},"RpcResponse_AmlCheckAcceptedResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlCheckAcceptedResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlCheckAcceptedResponse]"},"AmlBulkCheckCreateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AmlBulkCheckItemRequest"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"AmlBulkCheckCreateRequest"},"RpcResponse_AmlBulkCheckAcceptedResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlBulkCheckAcceptedResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlBulkCheckAcceptedResponse]"},"AmlBulkCheckGetRequest":{"properties":{"ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Ids"}},"type":"object","required":["ids"],"title":"AmlBulkCheckGetRequest"},"RpcResponse_AmlBulkCheckResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlBulkCheckResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlBulkCheckResponse]"},"AmlCheckIdRequest":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"AmlCheckIdRequest"},"RpcResponse_AmlCheckResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlCheckResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlCheckResponse]"},"AmlEvidenceGetRequest":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"}},"type":"object","required":["id"],"title":"AmlEvidenceGetRequest"},"RpcResponse_AmlEvidenceResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlEvidenceResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlEvidenceResponse]"},"AmlEvidenceExportRequest":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"export_token":{"type":"string","maxLength":200,"minLength":32,"title":"Export Token"}},"type":"object","required":["id","export_token"],"title":"AmlEvidenceExportRequest"},"ErrorBody":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status"},"extra":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Extra"}},"type":"object","required":["code","message"],"title":"ErrorBody"},"AmlPathSearchRequest":{"properties":{"source_address":{"type":"string","maxLength":128,"minLength":1,"title":"Source Address"},"target":{"$ref":"#/components/schemas/AmlPathTargetRequest"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"max_hops":{"type":"integer","maximum":10,"minimum":1,"title":"Max Hops","default":5},"lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Lookback Days","default":180},"min_transfer_amount":{"anyOf":[{"type":"number","minimum":0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Min Transfer Amount","default":"0"},"max_transfer_amount":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Transfer Amount"},"min_transfer_amount_usd":{"anyOf":[{"type":"number","minimum":0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Min Transfer Amount Usd"},"max_transfer_amount_usd":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Transfer Amount Usd"},"max_paths":{"type":"integer","maximum":50,"minimum":1,"title":"Max Paths","default":10},"mode":{"type":"string","enum":["first_confirmed","exhaustive"],"title":"Mode","default":"first_confirmed"}},"type":"object","required":["source_address","target","network","asset"],"title":"AmlPathSearchRequest"},"RpcResponse_AmlPathSearchResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AmlPathSearchResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[AmlPathSearchResponse]"},"RpcResponse_BillingAccountResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/BillingAccountResponse"},{"type":"null"}]},"error":{"anyOf":[{"$ref":"#/components/schemas/ErrorBody"},{"type":"null"}]}},"type":"object","title":"RpcResponse[BillingAccountResponse]"},"RateResponse":{"properties":{"from_currency":{"type":"string","title":"From Currency"},"to_currency":{"type":"string","title":"To Currency"},"rate":{"type":"number","title":"Rate"},"median_rate":{"type":"number","title":"Median Rate"},"min_rate":{"type":"number","title":"Min Rate"},"max_rate":{"type":"number","title":"Max Rate"},"sample_count":{"type":"integer","title":"Sample Count"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"valid_until":{"type":"string","format":"date-time","title":"Valid Until"},"billing":{"$ref":"#/components/schemas/BillingChargeResponse"},"reused":{"type":"boolean","title":"Reused","description":"True when the same Idempotency-Key returned the stored response without a second charge.","default":false}},"type":"object","required":["from_currency","to_currency","rate","median_rate","min_rate","max_rate","sample_count","updated_at","valid_until","billing"],"title":"RateResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"AmlCapabilitiesResponse":{"properties":{"default_product":{"$ref":"#/components/schemas/AmlProduct"},"products":{"items":{"$ref":"#/components/schemas/AnalysisLevelCapabilityResponse"},"type":"array","title":"Products"},"networks":{"items":{"$ref":"#/components/schemas/NetworkCapabilityResponse"},"type":"array","title":"Networks"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"}},"type":"object","required":["default_product","products","networks","notes"],"title":"AmlCapabilitiesResponse"},"AmlSubjectRequest":{"properties":{"type":{"$ref":"#/components/schemas/SubjectType"},"value":{"type":"string","maxLength":128,"minLength":1,"title":"Value"}},"type":"object","required":["type","value"],"title":"AmlSubjectRequest"},"AmlNetwork":{"type":"string","enum":["solana","tron","ethereum","avalanche","bsc"],"title":"AmlNetwork"},"AmlAsset":{"type":"string","enum":["SOL","TRX","ETH","AVAX","BNB","USDT"],"title":"AmlAsset"},"AmlProduct":{"type":"string","enum":["exact_sanctions","screen","enhanced","investigation"],"title":"AmlProduct"},"AmlCheckAcceptedResponse":{"properties":{"check_id":{"type":"string","format":"uuid","title":"Check Id"},"status":{"type":"string","enum":["queued","running","completed","failed"],"title":"Status"},"stage":{"type":"string","enum":["queued","screening","graph_analysis","intelligence_matching","evidence_verification","bidirectional_analysis","report_compilation","rendering","completed","failed"],"title":"Stage"},"status_endpoint":{"type":"string","title":"Status Endpoint"},"report_endpoint":{"type":"string","title":"Report Endpoint"},"product":{"$ref":"#/components/schemas/AmlProduct"},"lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Lookback Days"},"callback_status":{"anyOf":[{"type":"string","enum":["pending","delivered","failed","disabled"]},{"type":"null"}],"title":"Callback Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"reused":{"type":"boolean","title":"Reused","description":"True when the same Idempotency-Key returned the original check."}},"type":"object","required":["check_id","status","stage","status_endpoint","report_endpoint","product","lookback_days","callback_status","created_at","reused"],"title":"AmlCheckAcceptedResponse"},"AmlBulkCheckItemRequest":{"properties":{"subject":{"$ref":"#/components/schemas/AmlSubjectRequest"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"product":{"anyOf":[{"$ref":"#/components/schemas/AmlProduct"},{"type":"null"}],"description":"Purchased AML product. Technical engine depths are not public tariff names. Defaults to screen. Deprecated analysis_level/depth input is accepted during migration but omitted from the public schema."},"lookback_days":{"anyOf":[{"type":"integer","maximum":730,"minimum":1},{"type":"null"}],"title":"Lookback Days","description":"Optional historical window. When omitted, the selected level uses its advertised default: exact_sanctions/screen=90, enhanced=180, investigation=730 days."},"risk_model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Risk Model Id","description":"Published customer risk model to evaluate alongside the Safio score."},"allow_product_upgrade":{"type":"boolean","title":"Allow Product Upgrade","description":"When true, Safio may raise the requested product to the minimum product required by risk_model_id. No silent upgrade occurs when false.","default":false},"callback_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Callback Url","description":"Optional HTTPS webhook URL. It must match a callback URL pattern configured by an administrator for this API key.","examples":["https://hooks.customer.example/aml/completed"]},"client_reference":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Client Reference","description":"Customer identifier echoed in every bulk response."}},"additionalProperties":true,"type":"object","required":["subject","network","asset"],"title":"AmlBulkCheckItemRequest","examples":[{"asset":"USDT","lookback_days":90,"network":"tron","product":"screen","subject":{"type":"address","value":"TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"}}]},"AmlBulkCheckAcceptedResponse":{"properties":{"batch_id":{"type":"string","format":"uuid","title":"Batch Id"},"accepted":{"type":"integer","minimum":0,"title":"Accepted"},"rejected":{"type":"integer","minimum":0,"title":"Rejected"},"items":{"items":{"$ref":"#/components/schemas/AmlBulkCheckAcceptedItemResponse"},"type":"array","title":"Items"}},"type":"object","required":["batch_id","accepted","rejected","items"],"title":"AmlBulkCheckAcceptedResponse"},"AmlBulkCheckResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AmlBulkCheckResultItemResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"AmlBulkCheckResponse"},"AmlCheckResponse":{"properties":{"check_id":{"type":"string","format":"uuid","title":"Check Id"},"subject":{"$ref":"#/components/schemas/AmlSubjectResponse"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"status":{"type":"string","enum":["queued","running","completed","failed"],"title":"Status"},"stage":{"type":"string","enum":["queued","screening","graph_analysis","intelligence_matching","evidence_verification","bidirectional_analysis","report_compilation","rendering","completed","failed"],"title":"Stage"},"product":{"$ref":"#/components/schemas/AmlProduct"},"lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Lookback Days","description":"Activity window purchased for this check."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"deadline_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deadline At","description":"Current processing-attempt deadline, when the check is running."},"status_endpoint":{"type":"string","title":"Status Endpoint"},"report_endpoint":{"type":"string","title":"Report Endpoint"},"callback_status":{"anyOf":[{"type":"string","enum":["pending","delivered","failed","disabled"]},{"type":"null"}],"title":"Callback Status"},"callback_attempts":{"type":"integer","minimum":0,"title":"Callback Attempts"},"processing_attempts":{"type":"integer","minimum":0,"title":"Processing Attempts","description":"Number of worker attempts, including automatic recovery."},"processing_time_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Processing Time Ms","description":"Completed wall-clock processing time for the latest attempt."},"queue_time_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Queue Time Ms","description":"Time from durable request creation until a worker started it."},"total_time_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Total Time Ms","description":"Completed end-to-end time from request creation to final result."},"stage_durations_ms":{"additionalProperties":{"type":"integer"},"type":"object","title":"Stage Durations Ms","description":"Source-neutral processing time accumulated by public stage."},"result":{"anyOf":[{"$ref":"#/components/schemas/AmlProductResultResponse"},{"type":"null"}]},"error":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Error"}},"type":"object","required":["check_id","subject","network","asset","status","stage","product","lookback_days","created_at","started_at","completed_at","deadline_at","status_endpoint","report_endpoint","callback_status","callback_attempts","processing_attempts","result","error"],"title":"AmlCheckResponse"},"AmlEvidenceResponse":{"properties":{"check_id":{"type":"string","format":"uuid","title":"Check Id"},"audit_id":{"type":"string","format":"uuid","title":"Audit Id"},"product":{"type":"string","const":"investigation","title":"Product"},"subject":{"$ref":"#/components/schemas/AmlProductSubjectResponse"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Lookback Days"},"linked_identities":{"items":{"$ref":"#/components/schemas/AmlEvidenceIdentityResponse"},"type":"array","title":"Linked Identities"},"node_activity":{"items":{"$ref":"#/components/schemas/AmlEvidenceNodeActivityResponse"},"type":"array","title":"Node Activity","description":"Observed transaction-flow denominator for graph nodes. Values are deduplicated from the immutable screening trace and are not wallet balances."},"screened_transaction_transfers":{"items":{"$ref":"#/components/schemas/AmlEvidenceSubjectTransferResponse"},"type":"array","title":"Screened Transaction Transfers","description":"Economic transfers that belong to the screened transaction subject. Empty when the screened subject is an address."},"paths":{"items":{"$ref":"#/components/schemas/AmlEvidencePathResponse"},"type":"array","title":"Paths"},"contextual_signals":{"items":{"$ref":"#/components/schemas/AmlEvidenceContextResponse"},"type":"array","title":"Contextual Signals"},"coverage":{"items":{"$ref":"#/components/schemas/AmlCoverageItemResponse"},"type":"array","title":"Coverage"},"analyst_notes":{"items":{"type":"string"},"type":"array","title":"Analyst Notes"},"policy_version":{"type":"string","title":"Policy Version"},"dataset_revision":{"type":"string","title":"Dataset Revision"},"export_token":{"type":"string","title":"Export Token"},"export_endpoint":{"type":"string","title":"Export Endpoint"},"export_expires_at":{"type":"string","format":"date-time","title":"Export Expires At"}},"type":"object","required":["check_id","audit_id","product","subject","generated_at","lookback_days","linked_identities","paths","contextual_signals","coverage","analyst_notes","policy_version","dataset_revision","export_token","export_endpoint","export_expires_at"],"title":"AmlEvidenceResponse"},"AmlPathTargetRequest":{"properties":{"address":{"anyOf":[{"type":"string","maxLength":128,"minLength":1},{"type":"null"}],"title":"Address"},"entity_category":{"anyOf":[{"$ref":"#/components/schemas/EntityCategory"},{"type":"null"}]},"risk_category":{"anyOf":[{"$ref":"#/components/schemas/RiskCategory"},{"type":"null"}]}},"type":"object","title":"AmlPathTargetRequest"},"AmlPathSearchResponse":{"properties":{"status":{"type":"string","enum":["confirmed","not_found_with_complete_coverage","indeterminate"],"title":"Status"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"source_address":{"type":"string","title":"Source Address"},"target":{"$ref":"#/components/schemas/AmlPathTargetRequest"},"max_hops":{"type":"integer","maximum":10,"minimum":1,"title":"Max Hops"},"billable_depth_tier":{"type":"integer","enum":[1,3,5,10],"title":"Billable Depth Tier"},"paths":{"items":{"$ref":"#/components/schemas/AmlPathResponse"},"type":"array","title":"Paths"},"coverage":{"$ref":"#/components/schemas/AmlPathSearchCoverageResponse"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["status","network","asset","source_address","target","max_hops","billable_depth_tier","paths","coverage","warnings"],"title":"AmlPathSearchResponse"},"BillingAccountResponse":{"properties":{"api_key_id":{"type":"string","format":"uuid","title":"Api Key Id"},"enabled":{"type":"boolean","title":"Enabled"},"currency":{"type":"string","title":"Currency"},"balance":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Balance","examples":["80.20"]},"complimentary_aml_checks_remaining":{"type":"integer","minimum":0,"title":"Complimentary Aml Checks Remaining","default":0},"aml_prices":{"$ref":"#/components/schemas/AmlPriceScheduleResponse"},"rate_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rate Price","description":"Price of one successful POST /rate request.","examples":["0.0003"]},"tariff_plan_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tariff Plan Id"},"tariff_plan_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tariff Plan Code"}},"type":"object","required":["api_key_id","enabled","currency","balance","aml_prices","rate_price","tariff_plan_id","tariff_plan_code"],"title":"BillingAccountResponse"},"BillingChargeResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount","examples":["0.10"]},"currency":{"type":"string","title":"Currency"},"balance_after":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Balance After","examples":["80.10"]},"waived":{"type":"boolean","title":"Waived","description":"True when a reserved AML charge was automatically returned because the purchased result was not delivered with contractually sufficient coverage.","default":false}},"type":"object","required":["enabled","amount","currency","balance_after"],"title":"BillingChargeResponse"},"AnalysisLevelCapabilityResponse":{"properties":{"product":{"$ref":"#/components/schemas/AmlProduct"},"default_lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Default Lookback Days"},"allowed":{"type":"boolean","title":"Allowed"},"evidence_access":{"type":"boolean","title":"Evidence Access","default":false}},"type":"object","required":["product","default_lookback_days","allowed"],"title":"AnalysisLevelCapabilityResponse"},"NetworkCapabilityResponse":{"properties":{"network":{"$ref":"#/components/schemas/AmlNetwork"},"assets":{"items":{"$ref":"#/components/schemas/AmlAsset"},"type":"array","title":"Assets"},"address_products":{"items":{"$ref":"#/components/schemas/AmlProduct"},"type":"array","title":"Address Products","description":"Products both permitted for this key and configured for an address on this network."},"transaction_products":{"items":{"$ref":"#/components/schemas/AmlProduct"},"type":"array","title":"Transaction Products","description":"Products both permitted for this key and configured for a transaction on this network."},"default_address_product":{"anyOf":[{"$ref":"#/components/schemas/AmlProduct"},{"type":"null"}]},"default_transaction_product":{"anyOf":[{"$ref":"#/components/schemas/AmlProduct"},{"type":"null"}]}},"type":"object","required":["network","assets","address_products","transaction_products","default_address_product","default_transaction_product"],"title":"NetworkCapabilityResponse"},"SubjectType":{"type":"string","enum":["address","transaction"],"title":"SubjectType"},"AmlBulkCheckAcceptedItemResponse":{"properties":{"index":{"type":"integer","minimum":0,"title":"Index"},"client_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Reference"},"check":{"anyOf":[{"$ref":"#/components/schemas/AmlCheckAcceptedResponse"},{"type":"null"}]},"error":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error"}},"type":"object","required":["index","client_reference"],"title":"AmlBulkCheckAcceptedItemResponse"},"AmlBulkCheckResultItemResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"check":{"anyOf":[{"$ref":"#/components/schemas/AmlCheckResponse"},{"type":"null"}]},"error":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id"],"title":"AmlBulkCheckResultItemResponse"},"AmlSubjectResponse":{"properties":{"type":{"$ref":"#/components/schemas/SubjectType"},"value":{"type":"string","title":"Value"}},"type":"object","required":["type","value"],"title":"AmlSubjectResponse"},"AmlProductResultResponse":{"properties":{"product":{"$ref":"#/components/schemas/AmlProduct"},"subject":{"$ref":"#/components/schemas/AmlProductSubjectResponse"},"risk_score":{"anyOf":[{"type":"integer","maximum":100,"minimum":0},{"type":"null"}],"title":"Risk Score","description":"Safio decision-support risk points backed by confirmed evidence. Null when the available coverage cannot support a defensible numeric result. This value is not a probability of criminal activity."},"risk_level":{"$ref":"#/components/schemas/RiskLevel"},"decision":{"type":"string","enum":["allow","manual_review","reject","indeterminate"],"title":"Decision"},"triggered_rules":{"items":{"type":"string"},"type":"array","title":"Triggered Rules"},"categories":{"items":{"$ref":"#/components/schemas/AmlCategoryAssessmentResponse"},"type":"array","title":"Categories"},"coverage":{"items":{"$ref":"#/components/schemas/AmlCoverageItemResponse"},"type":"array","title":"Coverage"},"coverage_status":{"type":"string","enum":["complete","partial","limited"],"title":"Coverage Status"},"lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Lookback Days"},"route_summaries":{"anyOf":[{"items":{"$ref":"#/components/schemas/AmlRouteSummaryResponse"},"type":"array"},{"type":"null"}],"title":"Route Summaries","description":"Aggregated confirmed routes available to Enhanced and Investigation."},"evidence_available":{"type":"boolean","title":"Evidence Available","default":false},"policy_version":{"type":"string","title":"Policy Version"},"dataset_revision":{"type":"string","title":"Dataset Revision"},"billing":{"$ref":"#/components/schemas/BillingChargeResponse"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"customer_risk":{"anyOf":[{"$ref":"#/components/schemas/CustomerRiskResultResponse"},{"type":"null"}],"description":"Result calculated with the customer's published model. Safio's proprietary score remains in risk_score and is evaluated independently."}},"type":"object","required":["product","subject","risk_level","decision","triggered_rules","categories","coverage","coverage_status","lookback_days","policy_version","dataset_revision","billing","warnings"],"title":"AmlProductResultResponse"},"AmlProductSubjectResponse":{"properties":{"type":{"$ref":"#/components/schemas/SubjectType"},"value":{"type":"string","title":"Value"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"}},"type":"object","required":["type","value","network","asset"],"title":"AmlProductSubjectResponse"},"AmlEvidenceIdentityResponse":{"properties":{"address":{"type":"string","title":"Address"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["address","kind"],"title":"AmlEvidenceIdentityResponse"},"AmlEvidenceNodeActivityResponse":{"properties":{"address":{"type":"string","title":"Address"},"observed_inflow":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Observed Inflow"},"observed_outflow":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Observed Outflow"},"observed_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Observed Amount","description":"Largest observed inbound or outbound value in the immutable screening window. This is not the current on-chain balance."}},"type":"object","required":["address","observed_inflow","observed_outflow","observed_amount"],"title":"AmlEvidenceNodeActivityResponse"},"AmlEvidenceSubjectTransferResponse":{"properties":{"source":{"type":"string","title":"Source"},"destination":{"type":"string","title":"Destination"},"transaction":{"type":"string","title":"Transaction"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"},"channel":{"type":"string","title":"Channel"},"role":{"type":"string","title":"Role"},"initiator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initiator"}},"type":"object","required":["source","destination","transaction","network","asset","amount","channel","role"],"title":"AmlEvidenceSubjectTransferResponse"},"AmlEvidencePathResponse":{"properties":{"category":{"$ref":"#/components/schemas/RiskCategory"},"risk_address":{"type":"string","title":"Risk Address"},"entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Name","description":"Present only when the analyst key also has the aml:entity:read downstream-disclosure scope."},"direction":{"$ref":"#/components/schemas/ExposureDirection"},"confirmed_hops":{"type":"integer","maximum":5,"minimum":0,"title":"Confirmed Hops"},"amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"amount_basis":{"type":"string","title":"Amount Basis"},"steps":{"items":{"$ref":"#/components/schemas/AmlEvidenceTransferResponse"},"type":"array","title":"Steps"}},"type":"object","required":["category","risk_address","entity_name","direction","confirmed_hops","amount","amount_basis","steps"],"title":"AmlEvidencePathResponse"},"AmlEvidenceContextResponse":{"properties":{"category":{"$ref":"#/components/schemas/RiskCategory"},"direction":{"$ref":"#/components/schemas/ExposureDirection"},"count":{"type":"integer","minimum":1,"title":"Count"},"warning":{"type":"string","title":"Warning"}},"type":"object","required":["category","direction","count","warning"],"title":"AmlEvidenceContextResponse"},"AmlCoverageItemResponse":{"properties":{"category":{"$ref":"#/components/schemas/RiskCategory"},"status":{"type":"string","enum":["detected","not_detected","not_assessed","limited"],"title":"Status"},"directions":{"items":{"$ref":"#/components/schemas/ExposureDirection"},"type":"array","title":"Directions"},"lookback_days":{"type":"integer","maximum":730,"minimum":1,"title":"Lookback Days"}},"type":"object","required":["category","status","lookback_days"],"title":"AmlCoverageItemResponse"},"EntityCategory":{"type":"string","enum":["exchange","mixer","bridge","hosted_wallet","payment_service","mining_pool","merchant_service"],"title":"EntityCategory"},"RiskCategory":{"type":"string","enum":["sanctions","issuer_frozen","terrorism","ransomware","stolen_funds","darknet","drugs","mixer","scam","fraud","gambling","high_risk_exchange","other_illicit"],"title":"RiskCategory"},"AmlPathResponse":{"properties":{"hops":{"type":"integer","maximum":10,"minimum":1,"title":"Hops"},"path_capacity":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Path Capacity"},"first_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Observed At"},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Observed At"},"matched_target":{"$ref":"#/components/schemas/AmlPathMatchResponse"},"steps":{"items":{"$ref":"#/components/schemas/AmlPathTransferResponse"},"type":"array","title":"Steps"}},"type":"object","required":["hops","path_capacity","first_observed_at","last_observed_at","matched_target","steps"],"title":"AmlPathResponse"},"AmlPathSearchCoverageResponse":{"properties":{"status":{"type":"string","enum":["complete","partial"],"title":"Status"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"},"visited_addresses":{"type":"integer","minimum":0,"title":"Visited Addresses"},"visited_transactions":{"type":"integer","minimum":0,"title":"Visited Transactions"}},"type":"object","required":["status","reasons","visited_addresses","visited_transactions"],"title":"AmlPathSearchCoverageResponse"},"AmlPriceScheduleResponse":{"properties":{"exact_sanctions":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Exact Sanctions","examples":["0.04"]},"screen":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Screen","examples":["0.25"]},"enhanced":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Enhanced","examples":["0.69"]},"investigation":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Investigation","examples":["1.90"]}},"type":"object","required":["exact_sanctions","screen","enhanced","investigation"],"title":"AmlPriceScheduleResponse"},"RiskLevel":{"type":"string","enum":["indeterminate","low","medium","high","severe","critical"],"title":"RiskLevel"},"AmlCategoryAssessmentResponse":{"properties":{"category":{"$ref":"#/components/schemas/RiskCategory"},"assessment_status":{"type":"string","enum":["detected","not_detected","not_assessed","limited"],"title":"Assessment Status"},"exposure_type":{"type":"string","enum":["exact","direct","indirect","contextual","none"],"title":"Exposure Type"},"min_confirmed_hops":{"anyOf":[{"type":"integer","maximum":5,"minimum":0},{"type":"null"}],"title":"Min Confirmed Hops"},"path_status":{"type":"string","enum":["confirmed","unverified","not_applicable"],"title":"Path Status"},"exposure_amount_usd":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Exposure Amount Usd","description":"Documented USDT exposure amount or path-capacity upper bound. Null for non-USDT assets and when exposure is not attributable to an amount."},"exposure_share":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Exposure Share"},"directions":{"items":{"$ref":"#/components/schemas/ExposureDirection"},"type":"array","title":"Directions"},"context_signal_count":{"type":"integer","minimum":0,"title":"Context Signal Count","default":0},"warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warning"}},"type":"object","required":["category","assessment_status","exposure_type","path_status"],"title":"AmlCategoryAssessmentResponse"},"AmlRouteSummaryResponse":{"properties":{"category":{"$ref":"#/components/schemas/RiskCategory"},"direction":{"$ref":"#/components/schemas/ExposureDirection"},"confirmed_hops":{"type":"integer","maximum":5,"minimum":0,"title":"Confirmed Hops"},"exposure_type":{"type":"string","enum":["exact","direct","indirect"],"title":"Exposure Type"},"exposure_amount_usd":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Exposure Amount Usd"},"exposure_share":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Exposure Share"},"first_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Observed At"},"last_observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Observed At"},"entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Name","description":"Present only when the API key permits downstream entity disclosure."}},"type":"object","required":["category","direction","confirmed_hops","exposure_type"],"title":"AmlRouteSummaryResponse"},"CustomerRiskResultResponse":{"properties":{"model_id":{"type":"string","format":"uuid","title":"Model Id"},"model_name":{"type":"string","title":"Model Name"},"model_version":{"type":"integer","minimum":1,"title":"Model Version"},"score":{"anyOf":[{"type":"integer","maximum":100,"minimum":0},{"type":"null"}],"title":"Score"},"risk_level":{"$ref":"#/components/schemas/RiskLevel"},"decision":{"type":"string","enum":["allow","manual_review","reject","indeterminate"],"title":"Decision"},"triggered_rules":{"items":{"type":"string"},"type":"array","title":"Triggered Rules"}},"type":"object","required":["model_id","model_name","model_version","risk_level","decision","triggered_rules"],"title":"CustomerRiskResultResponse"},"ExposureDirection":{"type":"string","enum":["received","sent"],"title":"ExposureDirection"},"AmlEvidenceTransferResponse":{"properties":{"source":{"type":"string","title":"Source"},"destination":{"type":"string","title":"Destination"},"transaction":{"type":"string","title":"Transaction"},"network":{"$ref":"#/components/schemas/AmlNetwork"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount"},"depth":{"type":"integer","maximum":5,"minimum":1,"title":"Depth"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"direction":{"$ref":"#/components/schemas/ExposureDirection"},"channel":{"type":"string","title":"Channel"},"role":{"type":"string","title":"Role"},"initiator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initiator"}},"type":"object","required":["source","destination","transaction","network","asset","amount","depth","timestamp","direction","channel","role"],"title":"AmlEvidenceTransferResponse"},"AmlPathMatchResponse":{"properties":{"address":{"type":"string","title":"Address"},"entity_category":{"anyOf":[{"$ref":"#/components/schemas/EntityCategory"},{"type":"null"}]},"risk_category":{"anyOf":[{"$ref":"#/components/schemas/RiskCategory"},{"type":"null"}]},"entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Name"},"confidence":{"anyOf":[{"type":"number","maximum":1,"minimum":0},{"type":"null"}],"title":"Confidence"},"source_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tier"}},"type":"object","required":["address"],"title":"AmlPathMatchResponse"},"AmlPathTransferResponse":{"properties":{"source":{"type":"string","title":"Source"},"destination":{"type":"string","title":"Destination"},"transaction":{"type":"string","title":"Transaction"},"asset":{"$ref":"#/components/schemas/AmlAsset"},"amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Amount"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"}},"type":"object","required":["source","destination","transaction","asset","amount","timestamp"],"title":"AmlPathTransferResponse"},"PublicErrorResponse":{"type":"object","required":["data","error"],"properties":{"data":{"type":"null","description":"Always null when the operation fails."},"error":{"type":"object","required":["code","message"],"properties":{"status":{"type":"integer","description":"Semantic error status; the HTTP status remains 200. Absent on the deprecated /api/v1/rate method."},"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string","description":"Safe human-readable error message."},"extra":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"description":"Optional structured details safe to expose to the client."}}}}}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}