Requires an API key via the
X-API-Key header. See API Keys.Verify checks the on-chain marker, not attribution. It reads the transaction calldata and reports whether it ends with a marker Turtle produced. A
signatureValid: false result does not by itself mean the deposit is unattributed: the deposits credited to your distributor are the ones listed by Distributor Activity.Overview
GET /v2/actions/verify
Check whether a transaction’s calldata carries the attribution marker that the Turtle API or SDK embeds when it builds a deposit. Pass a transaction hash and chain ID, and the endpoint re-derives the attribution data from the on-chain calldata alone: which encoding it found (schema), the parsed metadata (including distributorId, opportunityId, the deposited amount, and referralCode), and whether the marker was produced by Turtle (signatureValid).
Use it to debug an integration: to confirm that the transactions you broadcast still carry the marker the API generated, or to inspect what a marker decodes to.
When verify says false for an attributed deposit
Turtle’s ledger credits some deposits whose transaction carries no on-chain marker at all. Verify has nothing to read in those cases and returns200 with signatureValid: false and an error saying no attribution was found in the calldata. That response says nothing about whether the deposit is credited. It happens for:
- Manual backfills entered by a Turtle operator.
- Intent or off-chain order deposits, where there is no calldata to stamp.
- Deposits with your own calldata. The client called Deposit with a
referralCodebut broadcast its own transaction, or the wallet rewrote the calldata before sending it. - Transactions that predate tracking, sent before Turtle started stamping deposits.
signatureValid: false for it, because there is no marker to check.
Encodings
Verify recognizes two encodings and reports which one it found in theschema field.
When the calldata ends with neither marker,
schema is absent and signatureValid is false.
Request
integer
required
The chain ID where the transaction was executed (e.g.,
1 for Ethereum, 42161 for Arbitrum).string
required
The transaction hash to verify (
0x followed by 64 hex characters).Response
ERC-8021 (current format) There is notag under this schema. The metadata comes from the interaction the API minted when it built the deposit, keyed by the actionId carried in the suffix.
tag is present and the metadata is decoded from the calldata itself.
string
Which encoding was found:
erc8021 or legacy. Absent when the calldata carries no marker.string
The raw tracking tag found in the transaction data. Only present under
legacy (value 🐢Earn). ERC-8021 markers carry no tag.object
Attribution metadata for the transaction. Under
legacy it is decoded from the calldata. Under erc8021 it is resolved from the interaction the API minted for the actionId in the suffix.boolean
required
Whether the marker was produced by Turtle. Under
legacy: the blob is signed by Turtle’s attribution wallet. Under erc8021: the suffix names Turtle’s registry and its actionId is an interaction the API minted for this same transaction, chain, and wallet. false when the marker fails that check or when there is no marker at all. It is not an attribution verdict.string
Explains why
signatureValid is false (e.g., no marker found in the calldata, or an ERC-8021 actionId that this API did not mint). Absent on a valid marker.Error Handling
Malformed txHash
Malformed txHash
Status: 400 Bad RequestSolution: Pass a
txHash of 0x followed by 64 hex characters.Missing or non-integer chainId
Missing or non-integer chainId
Status: 400 Bad RequestThe
context entry is keyed by the failing parameter (query:chainId) and carries the validator’s message.Solution: Pass chainId as an integer for a supported chain.No marker in the calldata
No marker in the calldata
Status: 200 OKSolution: This is the expected result for a transaction the API did not build (or whose calldata was rewritten) and for backfilled, intent-based, or pre-tracking deposits. It does not mean the deposit is unattributed; check Distributor Activity for the ledger’s view. If you expected the API-built calldata to be broadcast unchanged, compare the transaction’s
data with what Deposit returned.Marker not produced by Turtle
Marker not produced by Turtle
Status: 200 OKSolution: A marker is present but Turtle did not produce it. Under
erc8021 the error names the failed check: the suffix names a registry that is not Turtle’s, the actionId was not minted by this API, or it was minted for a different transaction or wallet. Under legacy the blob is signed by a key other than Turtle’s attribution wallet; the response then carries tag and metadata with signatureValid: false. The verification itself succeeded, so the status is 200. Rebuild the deposit through Deposit so the API stamps it.Related
- Deposit: Generate the deposit whose marker you are verifying
- Distributor Activity: List every deposit attributed to your distributor
- Distributor Model: How attribution and revenue tracking work

