txid_in is the bare transaction hash and vout is a separate integer. Use (txid_in, vout); do not look for a colon inside txid_in.
Solana: finality is 0 or 1
confirmations=0 means pending/not final and confirmations=1 means confirmed/final. Do not expect 2, 5, 12, or slot distance. A numeric create override does not change this model.
HTTP response
Callback keeps retrying after processing
CryptPays recognizes only exact HTTP 200 as successful acknowledgement. The response body is ignored.
200 + empty bodySuccess
200 + JSONSuccess
200 + *ok*Success because status is 200
201, 202, or 204Failure
302 redirectFailure
500 + *ok*Failure
After a successful 200, /logs may show internal done. Your endpoint receives no separate result=done callback; fulfill on result=sent, pending=0.
Reconciliation
Fee or forwarded amount differs from expectation
/info fee_percent
Generic public tier
Informational default, not necessarily the transaction’s callback-domain or volume tier.
callback fee
Actual percentage
The contracted CryptPays percentage applied to this payment.
callback fee_coin
Total deduction
Commission plus applicable miner, network, gas, and rent-related recovery.
value_coin=value_forwarded_coin+fee_coin
Do not calculate fee_coin as percentage commission alone. Use the confirmed callback’s exact decimal strings for reconciliation.
Price metadata
Price or conversion field confusion
price is a USDT quote, not fiat. With convert=1, conversion fields are JSON-encoded strings whose only currency key is USDT.
JSON fragment
"value_coin_convert": "{\"USDT\":\"100.00\"}"
Decode the field value separately. Other currency keys and multi-fiat output are not currently supported; if no valid confirmed price exists, price and conversion fields are omitted.
Request target
Callback query conflict or proxy rewrite
Merchant query names
Use names such as order_id, invoice_id, or reference. Avoid CryptPays payload field names as custom query keys.
Reverse proxies
Nginx, Cloudflare, load balancers, and other proxies must preserve the original host and exact path/query used for signature verification.
If verification fails, do not decode, sort, normalize, or rebuild the query. Use the server/framework’s original request-target representation.
Escalation
Information to provide to support
Provide enough public transaction context to identify the payment without exposing wallet secrets.