OpenAPI 3.1 LIVE

API documentation

Copy-ready requests, realistic responses and complete schemas for AML, rates and billing. Everything needed to make a production request without guesswork.

13operations
4groups
3.1OpenAPI
KEY

Authentication

Send the API key with every protected request. Billable operations also require a unique Idempotency-Key; replaying the same key and body never creates a second charge.

All API operations use POST. A processed request returns HTTP 200: always inspect error in the JSON body. Errors contain code, message and status. Use POST /api/v1/rates/get for rates. POST /api/v1/rate is Deprecated and preserves its existing requests, responses, errors and billing; no removal date is scheduled.

Base URLhttps://platform.safio.ioHeaderX-API-Key: sk_safio_...BillableIdempotency-Key: order-2026-000001
01 · Quick start

Run your first AML check

Copy the example, replace the API key and wallet address. Safio returns a check_id that you can use to poll status and download the report.

POST/api/v1/aml/checks/create
Code examples
curl --request POST \
  --url 'https://platform.safio.io/api/v1/aml/checks/create' \
  --header 'X-API-Key: sk_safio_...' \
  --header 'Idempotency-Key: order-2026-000001' \
  --header 'Content-Type: application/json' \
  --data '{
  "subject": {
    "type": "address",
    "value": "TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"
  },
  "network": "tron",
  "asset": "USDT",
  "product": "screen",
  "lookback_days": 90,
  "callback_url": "https://hooks.customer.example/aml/completed"
}'
OpenAPI 3.1

Endpoints

13 operations · System · Rates · AML · Billing

POSTSystem

/api/v1/health

Health

Service health endpoint. Public, unauthenticated availability check. GET is retained for existing provider monitors; POST is the documented RPC operation. Both methods use the same response. Infrastructure probes use GET /health and GET /readiness.

health_api_v1_health_post

Request body

This operation has no request body.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "data": {
    "status": "ok"
  },
  "error": null
}
Schema6 fields
FieldTypeDescription
dataoptionalobject | null
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTRatesAPI keyIdempotent

/api/v1/rates/get

Get Rate

get_rate_api_v1_rates_get_post

Headers & parameters

Idempotency-Keyheaderstringrequired

Stable unique key preventing duplicate rate charges.

Request body

required
Request
{
  "from_currency": "USDT",
  "to_currency": "RUB",
  "max_age_seconds": 60
}
Schema5 fields
FieldTypeDescription
from_currencyrequiredstring
to_currencyrequiredstring
max_age_secondsoptionalinteger | nullMax staleness in seconds
min_updated_atoptionaldate-time | nullMin acceptable update timestamp
sourceoptionalstring | nullOptional configured rate route alias.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema22 fields
FieldTypeDescription
dataoptionalRateResponse | null
from_currencyrequiredstring
to_currencyrequiredstring
raterequirednumber
median_raterequirednumber
min_raterequirednumber
max_raterequirednumber
sample_countrequiredinteger
updated_atrequireddate-time
valid_untilrequireddate-time
billingrequiredBillingChargeResponse
enabledrequiredboolean
amountrequiredstring
currencyrequiredstring
balance_afterrequiredstring | null
waivedoptionalbooleanTrue when a reserved AML charge was automatically returned because the purchased result was not delivered with contractually sufficient coverage.
reusedoptionalbooleanTrue when the same Idempotency-Key returned the stored response without a second charge.
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTRatesDeprecatedAPI keyIdempotent

/api/v1/rate

Get Rate

Deprecated compatibility method. Use POST /api/v1/rates/get. Existing request, response, error and billing semantics are preserved.

get_rate_api_v1_rate_post

Headers & parameters

Idempotency-Keyheaderstringrequired

Stable unique key preventing duplicate rate charges.

Request body

required
Request
{
  "from_currency": "USDT",
  "to_currency": "RUB",
  "max_age_seconds": 60
}
Schema5 fields
FieldTypeDescription
from_currencyrequiredstring
to_currencyrequiredstring
max_age_secondsoptionalinteger | nullMax staleness in seconds
min_updated_atoptionaldate-time | nullMin acceptable update timestamp
sourceoptionalstring | nullOptional configured rate route alias.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema22 fields
FieldTypeDescription
dataoptionalRateResponse | null
from_currencyrequiredstring
to_currencyrequiredstring
raterequirednumber
median_raterequirednumber
min_raterequirednumber
max_raterequirednumber
sample_countrequiredinteger
updated_atrequireddate-time
valid_untilrequireddate-time
billingrequiredBillingChargeResponse
enabledrequiredboolean
amountrequiredstring
currencyrequiredstring
balance_afterrequiredstring | null
waivedoptionalbooleanTrue when a reserved AML charge was automatically returned because the purchased result was not delivered with contractually sufficient coverage.
reusedoptionalbooleanTrue when the same Idempotency-Key returned the stored response without a second charge.
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI key

/api/v1/aml/capabilities/get

Show capabilities available to this API key

Returns allowed paid products and configured network availability. Use this before presenting product choices to a customer.

aml_capabilities_api_v1_aml_capabilities_get_post

Request body

This operation has no request body.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema20 fields
FieldTypeDescription
dataoptionalAmlCapabilitiesResponse | null
default_productrequiredAmlProduct
productsrequiredAnalysisLevelCapabilityResponse[]
productrequiredAmlProduct
default_lookback_daysrequiredinteger
allowedrequiredboolean
evidence_accessoptionalboolean
networksrequiredNetworkCapabilityResponse[]
networkrequiredAmlNetwork
assetsrequiredAmlAsset[]
address_productsrequiredAmlProduct[]Products both permitted for this key and configured for an address on this network.
transaction_productsrequiredAmlProduct[]Products both permitted for this key and configured for a transaction on this network.
default_address_productrequiredAmlProduct | null
default_transaction_productrequiredAmlProduct | null
notesrequiredstring[]
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI keyIdempotent

/api/v1/aml/checks/create

Queue an asynchronous AML check

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.

create_aml_check_api_v1_aml_checks_create_post

Headers & parameters

Idempotency-Keyheaderstringrequired

Stable unique key used to prevent duplicate checks and charges.

Request body

required
Request
{
  "subject": {
    "type": "address",
    "value": "TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"
  },
  "network": "tron",
  "asset": "USDT",
  "product": "screen",
  "lookback_days": 90,
  "callback_url": "https://hooks.customer.example/aml/completed"
}
Schema10 fields
FieldTypeDescription
subjectrequiredAmlSubjectRequest
typerequiredSubjectType
valuerequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
productoptionalAmlProduct | nullPurchased 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_daysoptionalinteger | nullOptional historical window. When omitted, the selected level uses its advertised default: exact_sanctions/screen=90, enhanced=180, investigation=730 days.
risk_model_idoptionaluuid | nullPublished customer risk model to evaluate alongside the Safio score.
allow_product_upgradeoptionalbooleanWhen true, Safio may raise the requested product to the minimum product required by risk_model_id. No silent upgrade occurs when false.
callback_urloptionalstring | nullOptional HTTPS webhook URL. It must match a callback URL pattern configured by an administrator for this API key.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema16 fields
FieldTypeDescription
dataoptionalAmlCheckAcceptedResponse | null
check_idrequireduuid
statusrequiredstring
stagerequiredstring
status_endpointrequiredstring
report_endpointrequiredstring
productrequiredAmlProduct
lookback_daysrequiredinteger
callback_statusrequiredstring | null
created_atrequireddate-time
reusedrequiredbooleanTrue when the same Idempotency-Key returned the original check.
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI keyIdempotent

/api/v1/aml/checks/bulk/create

Queue up to 100 AML checks in one request

Each item keeps independent validation, billing and status. Replaying the same batch Idempotency-Key is safe because item keys are deterministic.

create_bulk_aml_checks_api_v1_aml_checks_bulk_create_post

Headers & parameters

Idempotency-Keyheaderstringrequired

Stable key for the complete batch.

Request body

required
Request
{
  "items": [
    {
      "subject": {
        "type": "address",
        "value": "TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH"
      },
      "network": "tron",
      "asset": "USDT",
      "product": "screen",
      "client_reference": "customer-001"
    }
  ]
}
Schema12 fields
FieldTypeDescription
itemsrequiredAmlBulkCheckItemRequest[]
subjectrequiredAmlSubjectRequest
typerequiredSubjectType
valuerequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
productoptionalAmlProduct | nullPurchased 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_daysoptionalinteger | nullOptional historical window. When omitted, the selected level uses its advertised default: exact_sanctions/screen=90, enhanced=180, investigation=730 days.
risk_model_idoptionaluuid | nullPublished customer risk model to evaluate alongside the Safio score.
allow_product_upgradeoptionalbooleanWhen true, Safio may raise the requested product to the minimum product required by risk_model_id. No silent upgrade occurs when false.
callback_urloptionalstring | nullOptional HTTPS webhook URL. It must match a callback URL pattern configured by an administrator for this API key.
client_referenceoptionalstring | nullCustomer identifier echoed in every bulk response.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "data": null,
  "error": {
    "code": "invalid_request",
    "message": "The request could not be processed.",
    "status": 400
  }
}
Schema24 fields
FieldTypeDescription
dataoptionalAmlBulkCheckAcceptedResponse | null
batch_idrequireduuid
acceptedrequiredinteger
rejectedrequiredinteger
itemsrequiredAmlBulkCheckAcceptedItemResponse[]
indexrequiredinteger
client_referencerequiredstring | null
checkoptionalAmlCheckAcceptedResponse | null
check_idrequireduuid
statusrequiredstring
stagerequiredstring
status_endpointrequiredstring
report_endpointrequiredstring
productrequiredAmlProduct
lookback_daysrequiredinteger
callback_statusrequiredstring | null
created_atrequireddate-time
reusedrequiredbooleanTrue when the same Idempotency-Key returned the original check.
erroroptionalobject | null
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI key

/api/v1/aml/checks/bulk/get

Get up to 100 AML check results in one request

get_bulk_aml_checks_api_v1_aml_checks_bulk_get_post

Request body

required
Request
{
  "ids": [
    "c4e5295c-8f4a-4db2-980f-0e782b63811f"
  ]
}
Schema1 fields
FieldTypeDescription
idsrequireduuid[]

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "data": null,
  "error": {
    "code": "http_error",
    "message": "Missing or invalid API key.",
    "status": 401
  }
}
Schema33 fields
FieldTypeDescription
dataoptionalAmlBulkCheckResponse | null
itemsrequiredAmlBulkCheckResultItemResponse[]
idrequireduuid
checkoptionalAmlCheckResponse | null
check_idrequireduuid
subjectrequiredAmlSubjectResponse
networkrequiredAmlNetwork
assetrequiredAmlAsset
statusrequiredstring
stagerequiredstring
productrequiredAmlProduct
lookback_daysrequiredintegerActivity window purchased for this check.
created_atrequireddate-time
started_atrequireddate-time | null
completed_atrequireddate-time | null
deadline_atrequireddate-time | nullCurrent processing-attempt deadline, when the check is running.
status_endpointrequiredstring
report_endpointrequiredstring
callback_statusrequiredstring | null
callback_attemptsrequiredinteger
processing_attemptsrequiredintegerNumber of worker attempts, including automatic recovery.
processing_time_msoptionalinteger | nullCompleted wall-clock processing time for the latest attempt.
queue_time_msoptionalinteger | nullTime from durable request creation until a worker started it.
total_time_msoptionalinteger | nullCompleted end-to-end time from request creation to final result.
stage_durations_msoptionalobjectSource-neutral processing time accumulated by public stage.
resultrequiredAmlProductResultResponse | null
errorrequiredobject | null
erroroptionalobject | null
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI key

/api/v1/aml/checks/get

Get an asynchronous AML check

get_aml_check_api_v1_aml_checks_get_post

Request body

required
Request
{
  "id": "c4e5295c-8f4a-4db2-980f-0e782b63811f"
}
Schema1 fields
FieldTypeDescription
idrequireduuid

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema87 fields
FieldTypeDescription
dataoptionalAmlCheckResponse | null
check_idrequireduuid
subjectrequiredAmlSubjectResponse
typerequiredSubjectType
valuerequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
statusrequiredstring
stagerequiredstring
productrequiredAmlProduct
lookback_daysrequiredintegerActivity window purchased for this check.
created_atrequireddate-time
started_atrequireddate-time | null
completed_atrequireddate-time | null
deadline_atrequireddate-time | nullCurrent processing-attempt deadline, when the check is running.
status_endpointrequiredstring
report_endpointrequiredstring
callback_statusrequiredstring | null
callback_attemptsrequiredinteger
processing_attemptsrequiredintegerNumber of worker attempts, including automatic recovery.
processing_time_msoptionalinteger | nullCompleted wall-clock processing time for the latest attempt.
queue_time_msoptionalinteger | nullTime from durable request creation until a worker started it.
total_time_msoptionalinteger | nullCompleted end-to-end time from request creation to final result.
stage_durations_msoptionalobjectSource-neutral processing time accumulated by public stage.
resultrequiredAmlProductResultResponse | null
productrequiredAmlProduct
subjectrequiredAmlProductSubjectResponse
typerequiredSubjectType
valuerequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
risk_scoreoptionalinteger | nullSafio 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_levelrequiredRiskLevel
decisionrequiredstring
triggered_rulesrequiredstring[]
categoriesrequiredAmlCategoryAssessmentResponse[]
categoryrequiredRiskCategory
assessment_statusrequiredstring
exposure_typerequiredstring
min_confirmed_hopsoptionalinteger | null
path_statusrequiredstring
exposure_amount_usdoptionalstring | nullDocumented USDT exposure amount or path-capacity upper bound. Null for non-USDT assets and when exposure is not attributable to an amount.
exposure_shareoptionalnumber | null
directionsoptionalExposureDirection[]
context_signal_countoptionalinteger
warningoptionalstring | null
coveragerequiredAmlCoverageItemResponse[]
categoryrequiredRiskCategory
statusrequiredstring
directionsoptionalExposureDirection[]
lookback_daysrequiredinteger
coverage_statusrequiredstring
lookback_daysrequiredinteger
route_summariesoptionalAmlRouteSummaryResponse[] | nullAggregated confirmed routes available to Enhanced and Investigation.
categoryrequiredRiskCategory
directionrequiredExposureDirection
confirmed_hopsrequiredinteger
exposure_typerequiredstring
exposure_amount_usdoptionalstring | null
exposure_shareoptionalnumber | null
first_observed_atoptionaldate-time | null
last_observed_atoptionaldate-time | null
entity_nameoptionalstring | nullPresent only when the API key permits downstream entity disclosure.
evidence_availableoptionalboolean
policy_versionrequiredstring
dataset_revisionrequiredstring
billingrequiredBillingChargeResponse
enabledrequiredboolean
amountrequiredstring
currencyrequiredstring
balance_afterrequiredstring | null
waivedoptionalbooleanTrue when a reserved AML charge was automatically returned because the purchased result was not delivered with contractually sufficient coverage.
warningsrequiredstring[]
customer_riskoptionalCustomerRiskResultResponse | nullResult calculated with the customer's published model. Safio's proprietary score remains in risk_score and is evaluated independently.
model_idrequireduuid
model_namerequiredstring
model_versionrequiredinteger
scoreoptionalinteger | null
risk_levelrequiredRiskLevel
decisionrequiredstring
triggered_rulesrequiredstring[]
errorrequiredobject | null
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI key

/api/v1/aml/checks/evidence/get

Open protected Investigation evidence

Requires aml:evidence:read and the analyst role. Every view is audited and returns a single-use, short-lived PDF export token.

get_aml_check_evidence_api_v1_aml_checks_evidence_get_post

Request body

required
Request
{
  "id": "c4e5295c-8f4a-4db2-980f-0e782b63811f"
}
Schema1 fields
FieldTypeDescription
idrequireduuid

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema72 fields
FieldTypeDescription
dataoptionalAmlEvidenceResponse | null
check_idrequireduuid
audit_idrequireduuid
productrequired"investigation"
subjectrequiredAmlProductSubjectResponse
typerequiredSubjectType
valuerequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
generated_atrequireddate-time
lookback_daysrequiredinteger
linked_identitiesrequiredAmlEvidenceIdentityResponse[]
addressrequiredstring
kindrequiredstring
node_activityoptionalAmlEvidenceNodeActivityResponse[]Observed transaction-flow denominator for graph nodes. Values are deduplicated from the immutable screening trace and are not wallet balances.
addressrequiredstring
observed_inflowrequiredstring
observed_outflowrequiredstring
observed_amountrequiredstringLargest observed inbound or outbound value in the immutable screening window. This is not the current on-chain balance.
screened_transaction_transfersoptionalAmlEvidenceSubjectTransferResponse[]Economic transfers that belong to the screened transaction subject. Empty when the screened subject is an address.
sourcerequiredstring
destinationrequiredstring
transactionrequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
amountrequiredstring
timestampoptionaldate-time | null
channelrequiredstring
rolerequiredstring
initiatoroptionalstring | null
pathsrequiredAmlEvidencePathResponse[]
categoryrequiredRiskCategory
risk_addressrequiredstring
entity_namerequiredstring | nullPresent only when the analyst key also has the aml:entity:read downstream-disclosure scope.
directionrequiredExposureDirection
confirmed_hopsrequiredinteger
amountrequiredstring | null
amount_basisrequiredstring
stepsrequiredAmlEvidenceTransferResponse[]
sourcerequiredstring
destinationrequiredstring
transactionrequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
amountrequiredstring
depthrequiredinteger
timestamprequireddate-time
directionrequiredExposureDirection
channelrequiredstring
rolerequiredstring
initiatoroptionalstring | null
contextual_signalsrequiredAmlEvidenceContextResponse[]
categoryrequiredRiskCategory
directionrequiredExposureDirection
countrequiredinteger
warningrequiredstring
coveragerequiredAmlCoverageItemResponse[]
categoryrequiredRiskCategory
statusrequiredstring
directionsoptionalExposureDirection[]
lookback_daysrequiredinteger
analyst_notesrequiredstring[]
policy_versionrequiredstring
dataset_revisionrequiredstring
export_tokenrequiredstring
export_endpointrequiredstring
export_expires_atrequireddate-time
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTAMLAPI key

/api/v1/aml/checks/evidence/report.pdf

Download a protected Investigation evidence report

Consumes the single-use export token returned by evidence/get.

get_aml_check_evidence_report_api_v1_aml_checks_evidence_report_pdf_post

Request body

required
Request
{
  "id": "c4e5295c-8f4a-4db2-980f-0e782b63811f",
  "export_token": "ev_4J6YmpZ9xK2rN7qW5cT8bH3sF1dL0aPc"
}
Schema2 fields
FieldTypeDescription
idrequireduuid
export_tokenrequiredstring

Responses

2
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "data": null,
  "error": {
    "code": "http_error",
    "message": "Missing or invalid API key.",
    "status": 401
  }
}
Schema6 fields
FieldTypeDescription
datarequirednull
errorrequiredErrorBody
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/pdf
PDF

Binary document returned with Content-Type: application/pdf.

POSTAMLAPI key

/api/v1/aml/checks/report.pdf

Download the completed AML report snapshot

Returns the PDF produced by the original asynchronous check. This endpoint does not rerun analysis and does not create another charge.

get_aml_check_report_api_v1_aml_checks_report_pdf_post

Request body

required
Request
{
  "id": "c4e5295c-8f4a-4db2-980f-0e782b63811f"
}
Schema1 fields
FieldTypeDescription
idrequireduuid

Responses

2
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "data": null,
  "error": {
    "code": "http_error",
    "message": "Missing or invalid API key.",
    "status": 401
  }
}
Schema6 fields
FieldTypeDescription
datarequirednull
errorrequiredErrorBody
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/pdf
PDF

Binary document returned with Content-Type: application/pdf.

POSTAMLAPI key

/api/v1/aml/path-search

Search for a confirmed path to an address or category

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.

search_aml_path_api_v1_aml_path_search_post

Request body

required
Request
{
  "source_address": "TPKvdDWMtkbmx1UXopGVyXGJi256uhXVuH",
  "target": {
    "risk_category": "sanctions"
  },
  "network": "tron",
  "asset": "USDT",
  "max_hops": 5,
  "lookback_days": 180
}
Schema15 fields
FieldTypeDescription
source_addressrequiredstring
targetrequiredAmlPathTargetRequest
addressoptionalstring | null
entity_categoryoptionalEntityCategory | null
risk_categoryoptionalRiskCategory | null
networkrequiredAmlNetwork
assetrequiredAmlAsset
max_hopsoptionalinteger
lookback_daysoptionalinteger
min_transfer_amountoptionalnumber | string
max_transfer_amountoptionalnumber | string | null
min_transfer_amount_usdoptionalnumber | string | null
max_transfer_amount_usdoptionalnumber | string | null
max_pathsoptionalinteger
modeoptionalstring

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "data": null,
  "error": {
    "code": "http_error",
    "message": "Missing or invalid API key.",
    "status": 401
  }
}
Schema41 fields
FieldTypeDescription
dataoptionalAmlPathSearchResponse | null
statusrequiredstring
networkrequiredAmlNetwork
assetrequiredAmlAsset
source_addressrequiredstring
targetrequiredAmlPathTargetRequest
addressoptionalstring | null
entity_categoryoptionalEntityCategory | null
risk_categoryoptionalRiskCategory | null
max_hopsrequiredinteger
billable_depth_tierrequiredinteger
pathsrequiredAmlPathResponse[]
hopsrequiredinteger
path_capacityrequiredstring
first_observed_atrequireddate-time | null
last_observed_atrequireddate-time | null
matched_targetrequiredAmlPathMatchResponse
addressrequiredstring
entity_categoryoptionalEntityCategory | null
risk_categoryoptionalRiskCategory | null
entity_nameoptionalstring | null
confidenceoptionalnumber | null
source_tieroptionalstring | null
stepsrequiredAmlPathTransferResponse[]
sourcerequiredstring
destinationrequiredstring
transactionrequiredstring
assetrequiredAmlAsset
amountrequiredstring
timestamprequireddate-time | null
coveragerequiredAmlPathSearchCoverageResponse
statusrequiredstring
reasonsrequiredstring[]
visited_addressesrequiredinteger
visited_transactionsrequiredinteger
warningsrequiredstring[]
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null
POSTBillingAPI key

/api/v1/billing/account

Show API-key balance and product prices

Returns the current balance, billing state, tariff, per-level AML prices and the price of one successful rate request for the authenticated API key.

billing_account_api_v1_billing_account_post

Request body

This operation has no request body.

Responses

1
200Processed RPC request. Inspect error in the response body; HTTP 200 does not imply business success.application/json
Response
{
  "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
}
Schema19 fields
FieldTypeDescription
dataoptionalBillingAccountResponse | null
api_key_idrequireduuid
enabledrequiredboolean
currencyrequiredstring
balancerequiredstring
complimentary_aml_checks_remainingoptionalinteger
aml_pricesrequiredAmlPriceScheduleResponse
exact_sanctionsrequiredstring
screenrequiredstring
enhancedrequiredstring
investigationrequiredstring
rate_pricerequiredstringPrice of one successful POST /rate request.
tariff_plan_idrequireduuid | null
tariff_plan_coderequiredstring | null
erroroptionalErrorBody | null
coderequiredstring
messagerequiredstring
statusoptionalinteger | null
extraoptionalobject | null