🆕 Creating a transaction check
POST /api/v1/tx-checks
Takes a hash, confirms the transaction in the network synchronously and queues the scoring of the parties. The response contains the check record with status 0; the result is fetched by polling the check record.
Body parameter
{
"hash": "e54ca4ba8ff7034b1e11e764c50f65fdfc5fb0394fe986ec4d96aff2b4230598",
"network": "trx"
}
🛠️ Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| » hash | body | string | true | Transaction hash, up to 120 characters. Surrounding spaces are trimmed |
| » network | body | string | false | Lowercase network hint: trx, btc, eth, bsc, polygon, avax, arbitrum, optimism, base, zksync, ton, toncoin, solana, merlin, iotex, ltc, doge, bch, hsk, sui |
network is a hint, not a filter: it is taken into account only if that network is among the ones that confirmed the hash. If you omit it entirely, the network is detected automatically — see hash formats.
💳 Charging
The existence of the transaction is confirmed first, and only then the price of the check is charged — an unknown hash costs nothing. The price is the tx_check_price field of your tariff plan, 1 by default.
Example request
curl -X POST 'https://amlkyc.tech/api/v1/tx-checks' \
-H 'Authorization: Bearer <API_TOKEN>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"hash":"e54ca4ba8ff7034b1e11e764c50f65fdfc5fb0394fe986ec4d96aff2b4230598"}'
Example responses
201 Response
{
"success": true,
"message": "Tx check created.",
"data": {
"id": 128,
"uuid": "0f2d3a51-6f1a-4a2f-9f2f-2a5a0c9d7b41",
"hash": "e54ca4ba8ff7034b1e11e764c50f65fdfc5fb0394fe986ec4d96aff2b4230598",
"network": "trx",
"status": 0,
"status_label": "new",
"score": null,
"summary": null,
"results": null,
"error": null,
"created_at": "2026-09-29T09:12:44.000000Z",
"updated_at": "2026-09-29T09:12:44.000000Z"
}
}
Store the id — it is what you fetch the result by and what ties together the history of checks for this hash.
200 Response — a check of this hash is already running (no charge)
{
"success": true,
"message": "Tx check is already running.",
"data": {
"id": 128,
"uuid": "0f2d3a51-6f1a-4a2f-9f2f-2a5a0c9d7b41",
"hash": "e54ca4ba8ff7034b1e11e764c50f65fdfc5fb0394fe986ec4d96aff2b4230598",
"network": "trx",
"status": 1,
"status_label": "processing",
"score": null,
"summary": null,
"results": null,
"error": null,
"created_at": "2026-09-29T09:12:44.000000Z",
"updated_at": "2026-09-29T09:12:47.000000Z"
}
}
422 Response — transaction not found
{
"success": false,
"message": "Transaction not found in supported networks.",
"errors": {
"hash": [
"Transaction not found in supported networks."
]
}
}
402 Response
{
"success": false,
"message": "Insufficient balance."
}
🔁 Responses
| Status | Meaning | Description |
|---|---|---|
| 201 | Created | The check has been created, scoring queued, the price charged |
| 200 | OK | Duplicate: a check of this hash is already running, no second charge |
| 401 | Unauthorized | The token is missing or invalid |
| 402 | Payment Required | Insufficient balance, the check was not created |
| 403 | Forbidden | Transaction checks are not enabled for the account |
| 409 | Conflict | A parallel request with the same hash is still running — retry in a couple of seconds |
| 422 | Unprocessable Entity | The value does not look like a transaction hash, or the transaction was not found in the supported networks |
| 503 | Service Unavailable | Confirmation sources are temporarily unavailable — no charge, retry later |