📊 Getting a transaction check
GET /api/v1/tx-checks/{id}
The check record: status, transaction data and the risk breakdown by party. The method is free — this is what you poll for the result.
🛠️ Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | integer | true | Check identifier from the creation response |
Example request
curl 'https://amlkyc.tech/api/v1/tx-checks/128' \
-H 'Authorization: Bearer <API_TOKEN>' \
-H 'Accept: application/json'
Example responses
200 Response — the check has finished
{
"success": true,
"data": {
"id": 128,
"uuid": "0f2d3a51-6f1a-4a2f-9f2f-2a5a0c9d7b41",
"hash": "e54ca4ba8ff7034b1e11e764c50f65fdfc5fb0394fe986ec4d96aff2b4230598",
"network": "trx",
"status": 2,
"status_label": "done",
"score": 77,
"summary": {
"network": "trx",
"hash": "e54ca4ba8ff7034b1e11e764c50f65fdfc5fb0394fe986ec4d96aff2b4230598",
"block": 68123456,
"contractRet": "SUCCESS",
"timestamp": 1759132364000,
"amount": "1500.000000",
"asset": "USDT",
"from": [
"TLXvVN23UkxS4SW4JuQMhAYw9NNP8zwGyA"
],
"to": [
"TFq8GqCTiJA1PAnCJjtqDMHTRAsZgKNaYk"
]
},
"results": [
{
"address": "TLXvVN23UkxS4SW4JuQMhAYw9NNP8zwGyA",
"direction": "in",
"score": 77,
"labels": [
"Mixer"
]
},
{
"address": "TFq8GqCTiJA1PAnCJjtqDMHTRAsZgKNaYk",
"direction": "out",
"score": 12,
"labels": []
}
],
"error": null,
"created_at": "2026-09-29T09:12:44.000000Z",
"updated_at": "2026-09-29T09:13:58.000000Z"
}
}
📋 Record fields
| Field | Type | Description |
|---|---|---|
| id | integer | Check identifier |
| uuid | string | Check UUID |
| hash | string | Transaction hash exactly as it was submitted |
| network | string | The network that confirmed the transaction |
| status | integer | 0 — new, 1 — processing, 2 — done, 3 — failed |
| status_label | string | Textual status: new, processing, done, failed |
| score | number|null | Final risk: the maximum across the scored parties. null until the check finishes |
| summary | object|null | Transaction data: from, to, block, timestamp, amount, asset and other source fields |
| results | array|null | Risk breakdown by the addresses of the parties |
| error | string|null | Error code when the status is failed |
| created_at, updated_at | string | ISO 8601 timestamps |
🧩 The `results` breakdown
| Field | Type | Description |
|---|---|---|
| address | string | Address of a party to the transaction |
| direction | string | in — sender (from summary.from), out — recipient (from summary.to) |
| score | number|null | Risk of the address; null if the risk sources did not answer for it |
| labels | array | Risk labels (strings), e.g. Mixer, Malicious Address. An empty array when there are none |
200 Response — the check failed
{
"success": true,
"data": {
"id": 129,
"uuid": "6b0a31f8-2fc3-4e58-9a5f-8b58ef7e1c02",
"hash": "0x2f1c0bd5ef1f1e9f0fbb5ee8b1b9a7a24d5a5de2b0a0a51a1f5f1f2c3d4e5f60",
"network": "eth",
"status": 3,
"status_label": "failed",
"score": null,
"summary": {
"network": "eth",
"hash": "0x2f1c0bd5ef1f1e9f0fbb5ee8b1b9a7a24d5a5de2b0a0a51a1f5f1f2c3d4e5f60",
"block": 21345678,
"from": [
"0x28c6c06298d514db089934071355e5743bf21d60"
],
"to": [
"0x21a31ee1afc51d94c2efccaa2092ad1028285549"
]
},
"results": [
{
"address": "0x28c6c06298d514db089934071355e5743bf21d60",
"direction": "in",
"score": null,
"labels": []
},
{
"address": "0x21a31ee1afc51d94c2efccaa2092ad1028285549",
"direction": "out",
"score": null,
"labels": []
}
],
"error": "risk_sources_unavailable",
"created_at": "2026-09-29T09:20:10.000000Z",
"updated_at": "2026-09-29T09:21:02.000000Z"
}
}
The codes are explained in Error codes. A failed check is not refunded; it can be started again.
🔁 Responses
| Status | Meaning | Description |
|---|---|---|
| 200 | OK | Check data |
| 401 | Unauthorized | The token is missing or invalid |
| 403 | Forbidden | Transaction checks are not enabled for the account |
| 404 | Not Found | The check does not exist or belongs to another user |