Login
Register
  • Русский
  • English
Login
Register
  • Русский
  • English
  • GET STARTED
  • GITHUB
    • 🐘 SDK PHP
    • 👨‍💻 SDK GOLANG
    • ✳️ SDK NODE JS
  • BASICS
    • 🔑 API key authentication
    • ⏱️ Rate limits and pricing
  • AUTHENTICATION
    • 👨‍💼 User authentication
    • 👨‍💼 User registration
    • 🔐 Password recovery
  • INFORMATION
    • 🆕 Adding a new address
    • 🆎 Getting information at the address
    • 🔍 Search for supported cryptocurrencies at
    • 💰 Available currencies
  • RISK CHECK
    • ♻️ Check lifecycle and statuses
    • 🆕 Adding a new quick check
    • 📑 Getting a list of quick checks
    • 📊 Getting information on quick verification
    • 🔄 Rerun a quick check
    • 👁️ Address tracking
  • TRANSACTION CHECK
    • 🧾 How transaction checks work
    • 🆕 Creating a transaction check
    • 📑 List of transaction checks
    • 📊 Getting a transaction check
  • INVESTIGATION
    • 📝 Getting a list of investigations
    • 🕵️‍♂️ Creating an investigation
    • 📋 Receiving information on the investigation
    • 📊 Getting data on the investigation graph
    • 🧐 In-depth investigation within the framework of the investigation
    • 🔄 Investigation launch
  • BALANCES
    • 💰 Getting user`s balance
    • 📜 Creating a payment invoice
    • 💵 Currencies allowed for replenishment
  • KYC VERIFICATION
    • 🆕 Create KYC verification
    • 📑 List KYC verifications
    • ▶️ Start verification session
    • 📷 Upload photos and documents
    • 📋 Get verification details
    • ⚙️ Get session parameters
    • 🔄 Update verification step
    • 🔍 Check document data
    • 👁️ Start liveness check
    • ✅ Verify liveness data
    • 🔤 Recognize document (OCR)

🆕 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

NameInTypeRequiredDescription
» hashbodystringtrueTransaction hash, up to 120 characters. Surrounding spaces are trimmed
» networkbodystringfalseLowercase 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.

Sending the same hash again while the check is still running charges nothing: you get 200 with the current record and message: Tx check is already running. Sending an already finished (done) check, however, starts it over and charges the price again.

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

StatusMeaningDescription
201CreatedThe check has been created, scoring queued, the price charged
200OKDuplicate: a check of this hash is already running, no second charge
401UnauthorizedThe token is missing or invalid
402Payment RequiredInsufficient balance, the check was not created
403ForbiddenTransaction checks are not enabled for the account
409ConflictA parallel request with the same hash is still running — retry in a couple of seconds
422Unprocessable EntityThe value does not look like a transaction hash, or the transaction was not found in the supported networks
503Service UnavailableConfirmation sources are temporarily unavailable — no charge, retry later
The difference between 422 and 503 matters for retries: 422 is final (no such transaction), retrying it is pointless; 503 is temporary, the same hash is worth sending again in a minute or two.
Last Updated:: 9/29/26, 11:48 AM
Contributors: afinogen, Claude Opus 5
Prev
🧾 How transaction checks work
Next
📑 List of transaction checks