Skip to main content
POST
Verify and record deposit transaction
Checks a transaction hash or signature and records it when it is a supported deposit to the account’s receive address. The check verifies the evidence independently and does not replace normal provider-webhook detection. Manual checks cover Arbitrum, Ethereum, Base, Polygon and BNB Chain EVM transactions, Solana signatures, Movement transaction hashes and Bitcoin transaction IDs. Tron deposits are detected by webhook and cannot use this endpoint. Pass tokenAddress or logIndex to disambiguate multiple matching transfers. Known check failures return HTTP 200 with isTransferDone: false and an error object, so read the body, not just the status code.

Authorizations

Authorization
string
header
required

HTTP Basic auth. Username is the Stableyard app ID. Password is the app secret. The optional Stableyard-Version request header must match the environment pin.

Headers

Stableyard-Version
enum<string>

Optional contract-version assertion. Omit it to use the app environment's pinned version. A different supported version is accepted only after that environment is explicitly migrated.

Available options:
2026-09-09

Path Parameters

accountId
string
required

Canonical account id returned by the Accounts API.

Example:

"acct_123"

Body

application/json
transactionHash
string
required

Observed transaction hash or signature.

Maximum string length: 256
Example:

"0xabc1230000000000000000000000000000000000000000000000000000000000"

chainId
enum<integer>
required

Supported deposit chain IDs: Arbitrum=42161, Ethereum=1, Base=8453, Polygon=137, BNB Smart Chain=56, Avalanche=43114, Robinhood Chain=4663, Tempo=4217, Solana=10103, Movement=10002, Tron=728126428, Bitcoin=10001.

Available options:
42161,
1,
8453,
137,
56,
43114,
4663,
4217,
10103,
10002,
728126428,
10001
Example:

42161

depositAddress
string
required

The account receive address that should have received the transfer.

Required string length: 8 - 256
Example:

"0x1111111111111111111111111111111111111111"

tokenAddress
string

Optional token identifier used to disambiguate multiple matching transfers. Use the configured contract/mint, the EVM zero address for ETH/POL/BNB, native:btc for BTC, or the Solana System Program address for SOL.

Maximum string length: 128
Example:

"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"

logIndex
integer

Optional token log/account index used to disambiguate token transfers. Omit it for native EVM and SOL transfers.

Required range: x >= 0

Response

Deposit check result

checked
boolean
required
Example:

true

detected
boolean
required
Example:

true

isTransferDone
boolean

True only when the hash is verified as a supported deposit transfer to the submitted active deposit address and passes the chain minimum. Known check failures return false with HTTP 200.

Example:

true

verified
boolean

True when a transaction hash was verified through a configured chain RPC.

Example:

true

supported
boolean

False when the transaction exists but is not a supported configured token/native deposit transfer, is unconfirmed, or does not pass the chain minimum.

Example:

true

chainId
enum<integer>

Supported deposit chain IDs: Arbitrum=42161, Ethereum=1, Base=8453, Polygon=137, BNB Smart Chain=56, Avalanche=43114, Robinhood Chain=4663, Tempo=4217, Solana=10103, Movement=10002, Tron=728126428, Bitcoin=10001.

Available options:
42161,
1,
8453,
137,
56,
43114,
4663,
4217,
10103,
10002,
728126428,
10001
Example:

42161

depositAddress
string
Example:

"0x1111111111111111111111111111111111111111"

transactionHash
string
Example:

"0xabc1230000000000000000000000000000000000000000000000000000000000"

hashExists
boolean

False when the hash is malformed or the chain RPC reports the transaction was not found.

Example:

false

depositAddressExists
boolean

False when the submitted deposit address is not active for the account and chain.

Example:

true

addressMatched
boolean

For non-deposit transaction-hash checks, indicates whether the chain transaction appeared to touch the submitted deposit address.

Example:

true

reason
string
Example:

"unsupported_deposit_transaction"

minimumTransactionAmountAtomic
string

Minimum threshold in the asset's atomic units when a verified deposit is ignored for being too small.

Example:

"10000"

minimumTransactionAmount
string

Human-readable minimum threshold when a verified deposit is ignored for being too small.

Example:

"0.0001"

error
object

Known validation, not-found, conflict, or provider-check error returned with HTTP 200 for transaction-hash checks. Provider/RPC details are not exposed.

idempotent
boolean
Example:

false

ignored
boolean

True when Stableyard recorded the observed deposit but did not create a transaction. Reusable USDC/USDT/USDG deposits are accepted at 0.5 tokens and above except Tron USDT, whose inclusive minimum is 10 USDT. Native BTC has an inclusive minimum of 0.0001 BTC (10,000 sats). Movement THBT is accepted at 16.5 or above. Polygon JPYC is accepted at or above the configured POLYGON_JPYC_MIN_AMOUNT (100 by default). Other native assets retain their documented strict minimum rules.

Example:

false

deposit
object | null
transaction
object | null