Register Transfer
Registers a new transfer in BitOK KYT and optionally triggers automatic AML checks.
This is the main entry point for submitting blockchain transfers for risk analysis.
HTTP Request
POST /v1/transfers/register/
Request Body
JSON object with the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
client_id | string/null | No | External client identifier (up to 40 chars). |
direction | string | Yes | Either incoming or outgoing. |
network | string | Yes | Blockchain network code (ETH, BTC, TRX, …). |
tx_hash | string | Yes | Transaction hash containing the transfer. |
token_id | string | Yes | Token ID or contract address. Use native for native assets. |
output_address | string | Yes | Recipient address. |
disable_auto_check | boolean | No | If true, transfer is registered only — no automatic AML checks. |
force_recheck | boolean | No | Forces re-check even if previously checked. |
risk_model | string/null | No | Risk model ID to use (optional). |
Example Request
{
"client_id": "id0001",
"direction": "incoming",
"network": "ETH",
"tx_hash": "0x46bf4313a1f7f22cf97859d119c609fedad81541330de661f967795cc4f46e89",
"token_id": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"output_address": "0x98cb5718876aab18e3a8429a18ad543f6369a6f3"
}
Response
A successful request returns HTTP 201 Created with a REGISTERED_TRANSFER_EXTRA object.
This object contains:
- transfer metadata
- binding status
- exposure/counterparty/sanctions check states
- fiat values
- risk scoring
REGISTERED_TRANSFER_EXTRA — Full Structure
| Field | Type | Description |
|---|---|---|
id | string | Unique transfer ID. |
client_id | string/null | External client ID. |
attempt_id | string/null | Internal processing attempt ID. |
registered_at | string (ISO8601) | Registration timestamp. |
risk_level | string | Risk level for transfer (high, medium, low, undefined). |
risk_score | number/null | Numerical risk score. |
network | string | Blockchain network. |
token_id | string | Token identifier or contract. |
token_symbol | string | Token symbol. |
tx_status | string | Status of transaction binding (binding, bound, not_found). |
tx_hash | string | Transaction hash. |
occurred_at | string/null | Timestamp when transfer occurred. |
input_address | string/null | Sender address. |
output_address | string | Receiver address. |
direction | string | Direction (incoming / outgoing). |
amount | number/null | Token amount. |
value_in_fiat | number/null | Value in USD. |
check_state | object | Exposure/counterparty/sanctions check statuses. |
check_state.exposure | string | Exposure check status (queued, checking, checked). |
check_state.exposure_checked_at | string/null | Timestamp of exposure check completion. |
check_state.counterparty | string | Counterparty check status. |
check_state.counterparty_checked_at | string/null | Timestamp of counterparty check. |
check_state.sanctions | string | Sanctions check status. |
check_state.sanctions_checked_at | string/null | Timestamp of sanctions check. |
fiat_currency | string | Fiat currency (USD). |
Example Response
{
"id": "81453afe-9e53-40d7-b66e-9ec15382f8ed",
"client_id": "id0001",
"attempt_id": null,
"registered_at": "2025-11-18T12:52:35.189368+03:00",
"risk_level": "undefined",
"risk_score": null,
"network": "ETH",
"token_id": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"token_symbol": "USDT",
"tx_status": "binding",
"tx_hash": "0x46bf4313a1f7f22cf97859d119c609fedad81541330de661f967795cc4f46e89",
"occurred_at": null,
"input_address": null,
"output_address": "0x98cb5718876aab18e3a8429a18ad543f6369a6f3",
"direction": "incoming",
"amount": null,
"value_in_fiat": null,
"check_state": {
"exposure": "queued",
"exposure_checked_at": null,
"counterparty": "none",
"counterparty_checked_at": null,
"sanctions": "none",
"sanctions_checked_at": null
},
"fiat_currency": "USD"
}
Try it
POST/v1/transfers/register/
API KEY ID
API KEY SECRET
Body (JSON)
HTTP Request
Press "Send Request" to generate HTTP request.
HTTP …
{
// Response will be shown here after the request.
}