Simulate
tx.check
Pre-sign check: simulate an unsigned transaction, explain it and judge every counterparty, with a verdict and evidence.
Details
- Endpoint
- POST /v1/tx/check
- Credits
- 10
- Rate class
- Heavy. Counts against your heavy requests per second.
The pre-sign check: send an unsigned transaction and get a verdict (safe, caution or danger) with evidence before anyone signs it. tide runs it on its own node without signing or sending it, explains what it does in plain words, and checks every recipient (age, first funder, labels, Intel cluster, scam flags, whether you sent to it before), every coin sent or received (spam, liquidity, holder concentration, TreasuryCap and deny list) and every package called (age, upgrade control, labels). It also flags sending all of a coin or valuable objects to unknown or new addresses, value lost against current prices or the best route, objects made shared or frozen, kiosk listings at 0 and gas set far too high. Each finding has a code, a severity, one sentence and links to tide.ad. Deterministic: no model decides the verdict. 10 credits; works keyless with a per-IP limit.
Parameters
| Name | Type | Description |
|---|---|---|
| tx_bytesrequired | string | The transaction as base64, before signing: TransactionData (what a wallet signs), or TransactionKind bytes together with sender. txBytes is accepted too. |
| sender | string | Address that would sign. Optional with TransactionData (its own sender is used). Required with TransactionKind bytes. With TransactionData from another sender, the check runs as this address and the node picks its gas coins. |
Request
Send your key in the x-api-key header, or leave it out to use the keyless tier.
curl -X POST "https://api.tide.ad/v1/tx/check" \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"tx_bytes": "AAIACEBCDwAAAAAAACDe63pGYu7J8vPe8D+5N6Zj3dqi4hW4B4ooTQJreUbCcAICAAEBAAABAQMAAAAAAQEA",
"sender": "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270"
}'const res = await fetch("https://api.tide.ad/v1/tx/check", {
method: "POST",
headers: {
"x-api-key": process.env.TIDE_API_KEY!,
"content-type": "application/json",
},
body: JSON.stringify({
"tx_bytes": "AAIACEBCDwAAAAAAACDe63pGYu7J8vPe8D+5N6Zj3dqi4hW4B4ooTQJreUbCcAICAAEBAAABAQMAAAAAAQEA",
"sender": "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270"
}),
});
const data = await res.json();Response
{
"verdict": "safe",
"headline": "No red flags found.",
"summary": "Moved objects between addresses.",
"status": "ok",
"error": null,
"sender": "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",
"steps": [
"Split coins (1 command).",
"Sent the SUI to DeepBook package."
],
"balance_changes": [
{
"address": "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",
"name": "DeepBook package",
"coin_type": "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
"symbol": "SUI",
"amount": -0.001088099,
"amount_raw": "-1088099",
"usd": 0
}
],
"findings": [],
"gas": {
"total_sui": 0.001088099,
"computation_sui": 0.0001,
"storage_sui": 0.001976,
"rebate_sui": 0.000987901,
"budget_sui": 0.002595,
"price_mist": 100,
"reference_price_mist": 100,
"payer": "0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",
"usd": 0.000991
},
"checked": {
"addresses": 0,
"coins": 0,
"packages": 0,
"not_checked": []
},
"simulated_at_checkpoint": 341511631,
"latency_ms": 55,
"asOf": {
"checkpoint": 341511604,
"timestamp": "2026-11-04T09:22:38.353Z",
"lagMs": 945
}
}