{"openapi":"3.0.3","info":{"title":"Payment Gateway API","description":"API for generating crypto deposit payment addresses.\n## Sign Generation\nThe `sign` field is an HMAC-style SHA256 signature to verify request integrity.\n\n**Steps:** \n\n1. Sort parameters alphabetically by key.\n\n2. Remove any `null` values.\n\n3. Concatenate as `key=value` pairs joined by `&`.\n\n5. Append `&secret_key={your_secret_key}`.\n\n6. Lowercase the entire string. \n\n7. Compute `SHA256` hash. \n\n8. Uppercase the result.\n\n**Example raw string:** ``` api_key=abc123&asset_code=USDT&currency_code=IDR&customer_unique_id=user_001&fiat_amount=100000&network_code=TRC20&timestamp=1715000000&transaction_reference=TXN001&secret_key=mysecret ```\n\n**Result:** `SHA256(lowercase(raw_string)).toUpperCase()`\n## Networks List\nThe following is a list of networks required to make payments or withdrawals.\n\n| Code | Name |\n|------|-------------|\n|ETH|Ethereum|\n|SOLANA|Solana|\n|TRX|Tron|\n\n## Assets List\nThe following is a list of networks required to make payments or withdrawals.\n\n| Code | Name |\n|------|-------------|\n|ETH|Ethereum|\n|SOL|Solana|\n|USDT|USDT|\n|USDC|USDC|\n\n## Status List\nThe following is a list of transaction statuses and their descriptions.\n\n| Name | Description |\n|------|-------------|\n|pending|The payment is currently pending and has not been fully processed yet.|\n|completed|The payment amount has been successfully credited to your account balance.|\n|failed|The payment has failed to process or complete.|\n|expired|The payment or top-up has expired and is no longer valid.|\n|received|The payment has been successfully paid and is awaiting further processing.","contact":{},"version":"1.0.0"},"servers":[{"url":"https://wazzipay.com","description":"Production"}],"tags":[{"name":"Payment","description":"Please make sure to carefully follow these instructions to successfully generate a payment through our API. By adhering to these guidelines, you will be able to configure the necessary parameters and ensure a seamless payment process. Should you have any inquiries or require additional assistance, our dedicated support team is here to help. Feel free to reach out to us anytime. We appreciate your trust and look forward to serving you. 💙"},{"name":"Inquiry","description":"Query transaction status and merchant wallet balance information."},{"name":"Callback","description":"The Callback functionality allows you to receive real-time updates on the status of a payment by sending notifications to your specified payment callback URL. When certain events or changes occur related to the payment, such as a successful transaction or a failed payment, the callback is triggered and a notification is sent to your endpoint."}],"paths":{"/api/v1/payment":{"post":{"tags":["Payment"],"summary":"Create Payment","description":"Creates a new deposit transaction and returns a crypto payment address along with the required payment amount. Duplicate `transaction_reference` per user will be rejected.\n","operationId":"createDeposit","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositRequest"},"examples":{"basic_example":{"summary":"Basic deposit request","value":{"api_key":"your-api-key-here","transaction_reference":"TXN-20240501-001","asset_code":"USDT","network_code":"TRC20","fiat_amount":100000,"currency_code":"IDR","customer_unique_id":"customer-123","is_precise_amount":false,"callback_url":"https://yourapp.com/callback","redirect_url":"https://yourapp.com/thank-you","timestamp":1715000000,"sign":"A3F2C1..."}}}}}},"responses":{"200":{"description":"Payment generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositSuccessResponse"},"example":{"success":true,"message":"Payment generate successfully","data":{"amount":65.5,"payment_address":"TJxxxxxxxxxxxxxxxxxxxxxxxxxxx","asset":"Tether USD","network":"Tron (TRC20)","pay_url":"https://wazzipay.com/payment/Dxxxx"}}}}},"422":{"description":"Validation or business logic error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_sign":{"summary":"Invalid signature","value":{"success":false,"message":"Invalid sign"}},"duplicate_reference":{"summary":"Duplicate transaction reference","value":{"success":false,"message":"Duplicate reference!"}},"asset_not_found":{"summary":"Asset not available on given network","value":{"success":false,"message":"Asset with network TRC20 is not found"}},"no_channel":{"summary":"No payment channel available","value":{"success":false,"message":"No channel available, please try again later"}},"validation_error":{"summary":"Request field validation failed","value":{"success":false,"message":"The fiat_amount field must be greater than 0."}}}}}}}}},"/api/v1/verify":{"post":{"tags":["Payment"],"summary":"Verify Payment","description":"After sending crypto to the provided payment address, submit the\non-chain transaction hash so the system can verify the payment.\nThe transaction must be in `pending` status.\nVerification is processed asynchronously — confirmation will be\ndelivered via the `callback_url` set during deposit creation.","operationId":"verifyPayment","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentRequest"},"examples":{"basic_example":{"summary":"Basic verify payment request","value":{"api_key":"your-api-key-here","transaction_reference":"TXN-20240501-001","hash":"abc123txhash...","timestamp":1715000100,"sign":"B5E9F2..."}}}}}},"responses":{"200":{"description":"Transaction hash updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyPaymentSuccessResponse"},"example":{"success":true,"message":"Verifying payment, please wait notification for confirmation"}}}},"422":{"description":"Validation or business logic error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_sign":{"summary":"Invalid signature","value":{"success":false,"message":"Invalid sign"}},"transaction_not_found":{"summary":"Transaction not found","value":{"success":false,"message":"Transaction reference doesnt exist"}}}}}}}}},"/api/v1/withdraw":{"post":{"tags":["Payment"],"summary":"Withdraw","description":"Creates a withdrawal transaction from the merchant's wallet balance to a specified receiver address. The amount is immediately deducted from `balance` and moved to `frozen_balance` while the withdrawal is processed. Withdrawal is processed asynchronously — status confirmation will be delivered via `callback_url`.\n\n**Balance behaviour:**- `balance` is decremented immediately upon submission.\n\n- `frozen_balance` is incremented by the same amount.\n\n- On confirmation, `frozen_balance` is decremented and the transaction\n\nstatus is updated via callback.","operationId":"withdraw","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawRequest"},"examples":{"basic_example":{"summary":"Basic withdrawal request","value":{"api_key":"your-api-key-here","transaction_reference":"WD-20240501-001","asset_code":"USDT","network_code":"TRC20","amount":50,"receiver_address":"TJxxxxxxxxxxxxxxxxxxxxxxxxxxx","customer_unique_id":"customer-123","callback_url":"https://yourapp.com/webhook/withdraw","timestamp":1715000200,"sign":"C7D1F3..."}}}}}},"responses":{"200":{"description":"Withdrawal request submitted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawSuccessResponse"},"example":{"success":true,"message":"Withdraw request submitted","data":{"transaction_no":"WD17150002XY9AB","transaction_reference":"WD-20240501-001","amount":50,"status":"pending"}}}}},"422":{"description":"Validation or business logic error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"invalid_sign":{"summary":"Invalid signature","value":{"success":false,"message":"Invalid sign"}},"duplicate_reference":{"summary":"Duplicate transaction reference","value":{"success":false,"message":"Duplicate reference!"}},"asset_not_found":{"summary":"Asset not available on given network","value":{"success":false,"message":"Asset with network TRC20 is not found"}},"insufficient_balance":{"summary":"Merchant wallet balance is insufficient","value":{"success":false,"message":"Insufficient balance"}}}}}}}}},"/api/v1/payment/status":{"get":{"tags":["Inquiry"],"summary":"Payment Status","description":"Returns transaction data including `status`, `amount`, `sender_address` and etc","operationId":"inquiryPaymentStatus","parameters":[{"in":"query","name":"api_key","required":true,"schema":{"type":"string"},"description":"Your merchant API key.","example":"abc123-api-key"},{"in":"query","name":"transaction_reference","required":true,"schema":{"type":"string"},"description":"Unique transaction identifier from your system."},{"in":"query","name":"timestamp","required":true,"schema":{"type":"integer","format":"int64"},"description":"Unix timestamp. Must be within the last 5 minutes.","example":1715000300},{"in":"query","name":"sign","required":true,"schema":{"type":"string"},"description":"SHA256 HMAC signature using the same algorithm as other endpoints.","example":"D2E4F1..."}],"responses":{"200":{"description":"Payment data retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InquiryPaymentStatusResponse"},"example":{"success":true,"message":"Transaction retrieved","data":{"transaction_no":"D123456","transaction_reference":"TXN-20240501-001","amount":50,"received_amount":49,"fee":1,"status":"completed","customer_unique_id":"customer-123","hash":"0xabcd...","sender_address":"0xabcdef...","asset_code":"USDT","network_code":"ETH"}}}}},"422":{"description":"Validation or signature error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"success":false,"message":"Invalid sign"}}}}}}},"/api/v1/withdraw/status":{"get":{"tags":["Inquiry"],"summary":"Withdraw Status","description":"Returns transaction data including `status`, `amount`, `sender_address` and etc","operationId":"inquiryWithdrawStatus","parameters":[{"in":"query","name":"api_key","required":true,"schema":{"type":"string"},"description":"Your merchant API key.","example":"abc123-api-key"},{"in":"query","name":"transaction_reference","required":true,"schema":{"type":"string"},"description":"Unique transaction identifier from your system."},{"in":"query","name":"timestamp","required":true,"schema":{"type":"integer","format":"int64"},"description":"Unix timestamp. Must be within the last 5 minutes.","example":1715000300},{"in":"query","name":"sign","required":true,"schema":{"type":"string"},"description":"SHA256 HMAC signature using the same algorithm as other endpoints.","example":"D2E4F1..."}],"responses":{"200":{"description":"Withdraw data retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InquiryWithdrawStatusResponse"},"example":{"success":true,"message":"Transaction retrieved","data":{"transaction_no":"D123456","transaction_reference":"TXN-20240501-001","amount":50,"received_amount":49,"fee":1,"status":"completed","customer_unique_id":"customer-123","hash":"0xabcd...","receiver_address":"0xabcdef...","asset_code":"USDT","network_code":"ETH","statement_at":"2026-05-05 14:53:18"}}}}},"422":{"description":"Validation or signature error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"success":false,"message":"Invalid sign"}}}}}}},"/api/v1/wallets/balance":{"get":{"tags":["Inquiry"],"summary":"Merchant Balance","description":"Returns all wallets belonging to the authenticated merchant,including available balance, frozen balance, asset name, and network.","operationId":"inquiryBalance","parameters":[{"in":"query","name":"api_key","required":true,"schema":{"type":"string"},"description":"Your merchant API key.","example":"abc123-api-key"},{"in":"query","name":"timestamp","required":true,"schema":{"type":"integer","format":"int64"},"description":"Unix timestamp. Must be within the last 5 minutes.","example":1715000300},{"in":"query","name":"sign","required":true,"schema":{"type":"string"},"description":"SHA256 HMAC signature using the same algorithm as other endpoints.","example":"D2E4F1..."}],"responses":{"200":{"description":"Balance retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletListResponse"},"example":{"success":true,"message":"Wallets retrieved successfully","data":[{"asset":"USDT (ERC20)","code":"USDT","network":"ETH","available_balance":500,"frozen_balance":50},{"asset":"USDC (ERC20)","code":"USDC","network":"ETH","available_balance":200,"frozen_balance":0}]}}}},"422":{"description":"Validation or signature error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"success":false,"message":"Invalid sign"}}}}}}},"/your-callback-url":{"post":{"tags":["Callback"],"summary":"Transaction status notification (Webhook)","description":"The system sends a `POST` request to the `callback_url` registered during\ndeposit or withdrawal creation whenever a transaction status changes.\n\n**Merchant responsibilities:**- Respond with HTTP `200` to acknowledge receipt. Any other status will trigger a retry.\n- Validate the `sign` field using the same SHA256 HMAC algorithm to ensure the callback is authentic.\n- Use `transaction_reference` to match the callback to your internal order.\n- Always use `status` field as the source of truth — do not rely solelyon the HTTP response timing.\n - Please verify that `received_amount` is already same on your system.","operationId":"callbackWebhook","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallbackPayload"},"examples":{"deposit_completed":{"summary":"Deposit completed","value":{"type":"deposit","transaction_no":"DP17150001ABC12","transaction_reference":"TXN-20240501-001","amount":65.5,"received_amount":65.5,"fee":0.5,"status":"received","customer_unique_id":"customer-123","hash":"abc123txhash...","sender_address":"TJsender...","asset_code":"USDT","network_code":"TRC20","sign":"F1A3C2..."}},"deposit_failed":{"summary":"Deposit failed / expired","value":{"type":"deposit","transaction_no":"DP17150001XY999","transaction_reference":"TXN-20240501-002","amount":65.5,"received_amount":null,"fee":null,"status":"failed","customer_unique_id":"customer-456","hash":null,"sender_address":null,"asset_code":"USDT","network_code":"TRC20","sign":"A9B2D5..."}},"withdrawal_completed":{"summary":"Withdrawal completed","value":{"type":"withdrawal","transaction_no":"WD17150002XY9AB","transaction_reference":"WD-20240501-001","amount":50,"status":"completed","customer_unique_id":"customer-123","hash":"def456txhash...","receiver_address":"TJreceiver...","asset_code":"USDT","network_code":"TRC20","sign":"C8E1F4..."}},"withdrawal_failed":{"summary":"Withdrawal failed","value":{"type":"withdrawal","transaction_no":"WD17150003AB1CD","transaction_reference":"WD-20240501-002","amount":50,"status":"failed","customer_unique_id":"customer-789","hash":null,"receiver_address":"TJreceiver...","asset_code":"USDT","network_code":"TRC20","sign":"D7F2A8..."}}}}}},"responses":{"200":{"description":"Merchant must return HTTP 200 to acknowledge receipt. Response body is ignored by the system."}}}}},"components":{"schemas":{"DepositRequest":{"type":"object","required":["api_key","transaction_reference","asset_code","network_code","fiat_amount","currency_code","customer_unique_id","timestamp","sign"],"properties":{"api_key":{"type":"string","description":"Your merchant API key. Must exist in the system.\n","example":"abc123-api-key"},"transaction_reference":{"type":"string","description":"Unique transaction identifier from your system. Must not be duplicated per merchant account.\n","example":"TXN-20240501-001"},"asset_code":{"type":"string","description":"Crypto asset code. Refer to `Assets List` section\n","example":"USDT"},"network_code":{"type":"string","description":"Blockchain network code. Refer to `Networks List`.\n","example":"ETH"},"fiat_amount":{"type":"number","format":"float","description":"The fiat amount the customer wants to deposit. Must be greater than 0.\n","minimum":0,"exclusiveMinimum":true,"example":100000},"currency_code":{"type":"string","description":"ISO 4217 fiat currency code. Must be one of the supported values in the `CurrencyCode` enum.\n","enum":["IDR","USD","SGD","MYR","THB","VND","PHP"],"example":"IDR"},"customer_unique_id":{"type":"string","description":"Your internal unique identifier for the end customer.\n","example":"customer-123"},"is_precise_amount":{"type":"boolean","description":"(Optional) Controls the payment validation behavior. When set to true, any transaction where the received amount does not exactly match the expected amount will trigger a `failed` callback. When set to false, any incoming transaction to the payment address will trigger a success callback with status `received`, regardless of the amount.","example":false,"default":false},"callback_url":{"type":"string","format":"uri","description":"(Optional) URL to receive webhook notification when deposit status changes.\n","example":"https://yourapp.com/webhook/deposit"},"redirect_url":{"type":"string","format":"uri","description":"(Optional) URL to redirect customer after payment is completed.\n","example":"https://yourapp.com/thank-you"},"timestamp":{"type":"integer","format":"int64","description":"Unix timestamp of the request. Must be within the last 5 minutes to prevent replay attacks.\n","example":1715000000},"sign":{"type":"string","description":"SHA256 HMAC signature. See the Sign Generation section above for the full algorithm.\n","example":"A3F2C1D4E5B6..."}}},"DepositSuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Payment generate successfully"},"data":{"type":"object","properties":{"amount":{"type":"number","format":"float","description":"Crypto amount the customer must send.","example":65.5},"payment_address":{"type":"string","description":"Blockchain wallet address to receive the payment.","example":"TJxxxxxxxxxxxxxxxxxxxxxxxxxxx"},"asset":{"type":"string","description":"Full name of the crypto asset.","example":"Tether USD"},"network":{"type":"string","description":"Full name of the blockchain network.","example":"Tron (TRC20)"},"pay_url":{"type":"string","description":"URL payment page","example":"https://wazzipay.com/payment/DXXXX"}}}}},"VerifyPaymentRequest":{"type":"object","required":["api_key","transaction_reference","hash","timestamp","sign"],"properties":{"api_key":{"type":"string","description":"Your merchant API key. Must exist in the system.","example":"abc123-api-key"},"transaction_reference":{"type":"string","description":"The transaction reference used when creating the deposit.Must belong to the authenticated merchant and be in `pending` status.","example":"TXN-20240501-001"},"hash":{"type":"string","description":"On-chain transaction hash of the crypto payment sent by the customer.","example":"abc123def456txhash..."},"timestamp":{"type":"integer","format":"int64","description":"Unix timestamp of the request. Must be within the last 5 minutes to prevent replay attacks.","example":1715000100},"sign":{"type":"string","description":"SHA256 HMAC signature. Uses the same algorithm as the deposit endpoint. Include `api_key`, `hash`, `timestamp`, `transaction_reference` in the payload.","example":"B5E9F2C1..."}}},"VerifyPaymentSuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Verifying payment, please wait notification for confirmation"}}},"WithdrawRequest":{"type":"object","required":["api_key","transaction_reference","asset_code","network_code","amount","receiver_address","customer_unique_id","timestamp","sign"],"properties":{"api_key":{"type":"string","description":"Your merchant API key. Must exist in the system.","example":"abc123-api-key"},"transaction_reference":{"type":"string","description":"Unique transaction identifier from your system. Must not be duplicated per merchant account.","example":"WD-20240501-001"},"asset_code":{"type":"string","description":"Crypto asset code. Refer to `Assets List` section.","example":"USDT"},"network_code":{"type":"string","description":"Blockchain network code. Refer to `Networks List` section.","example":"TRC20"},"amount":{"type":"number","format":"float","description":"Crypto amount to withdraw. Must be numeric and greater than 0. Must not exceed merchant wallet `balance`.","minimum":0,"exclusiveMinimum":true,"example":50},"receiver_address":{"type":"string","description":"On-chain wallet address to send the crypto to.","example":"TJxxxxxxxxxxxxxxxxxxxxxxxxxxx"},"customer_unique_id":{"type":"string","description":"Your internal unique identifier for the end customer.","example":"customer-123"},"callback_url":{"type":"string","format":"uri","description":"(Optional) URL to receive webhook notification when withdrawal status changes.","example":"https://yourapp.com/webhook/withdraw"},"timestamp":{"type":"integer","format":"int64","description":"Unix timestamp of the request. Must be within the last 5 minutes.","example":1715000200},"sign":{"type":"string","description":"SHA256 HMAC signature using the same algorithm as other endpoints.","example":"C7D1F3A2..."}}},"WithdrawSuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Withdraw request submitted"},"data":{"type":"object","properties":{"transaction_no":{"type":"string","description":"System-generated withdrawal transaction number.","example":"WD17150002XY9AB"},"transaction_reference":{"type":"string","description":"Your original transaction reference.","example":"WD-20240501-001"},"amount":{"type":"number","format":"float","description":"Crypto amount being withdrawn.","example":50},"status":{"type":"string","enum":["pending"],"description":"Initial status of the withdrawal. Always `pending` on creation.","example":"pending"}}}}},"InquiryPaymentStatusResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Wallets retrieved successfully"},"data":{"type":"object","properties":{"transaction_no":{"type":"string","description":"System-generated transaction number.","example":"D17150002XY9AB"},"transaction_reference":{"type":"string","description":"Merchant original transaction reference.","example":"D-20240501-001"},"amount":{"type":"number","format":"float","description":"Requested crypto amount.","example":50},"received_amount":{"type":"number","format":"float","description":"Received crypto amount.","example":49},"fee":{"type":"number","format":"float","description":"Transaction fee","example":2},"status":{"type":"string","enum":["pending","received","completed","failed","expired"],"description":"Transaction status","example":"completed"},"customer_unique_id":{"type":"string","description":"Your internal unique identifier for the end customer.","example":"customer-123"},"hash":{"type":"string","description":"Transfer hash / signature from blockchain.","example":"0xabcd..."},"sender_address":{"type":"string","description":"Sender address","example":"0xabcd"},"asset_code":{"type":"string","description":"Crypto asset code. Refer to `Assets List` section.\n","example":"USDT"},"network_code":{"type":"string","description":"Blockchain network code. Refer to `Networks List` section.\n","example":"ETH"}}}}},"InquiryWithdrawStatusResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Wallets retrieved successfully"},"data":{"type":"object","properties":{"transaction_no":{"type":"string","description":"System-generated transaction number.","example":"D17150002XY9AB"},"transaction_reference":{"type":"string","description":"Merchant original transaction reference.","example":"D-20240501-001"},"amount":{"type":"number","format":"float","description":"Requested crypto amount.","example":50},"received_amount":{"type":"number","format":"float","description":"Received crypto amount.","example":49},"fee":{"type":"number","format":"float","description":"Transaction fee","example":2},"status":{"type":"string","enum":["pending","received","completed","failed","expired"],"description":"Transaction status","example":"completed"},"customer_unique_id":{"type":"string","description":"Your internal unique identifier for the end customer.","example":"customer-123"},"hash":{"type":"string","description":"Transfer hash / signature from blockchain.","example":"0xabcd..."},"receiver_address":{"type":"string","description":"Receiver address","example":"0xabcd"},"asset_code":{"type":"string","description":"Crypto asset code. Refer to `Assets List` section.\n","example":"USDT"},"network_code":{"type":"string","description":"Blockchain network code. Refer to `Networks List` section.\n","example":"ETH"},"statement_at":{"type":"string","description":"Success withdraw date with UTC+7 format (WIB)","example":"2026-05-05 14:53:18"}}}}},"WalletListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"message":{"type":"string","example":"Wallets retrieved successfully"},"data":{"type":"array","items":{"type":"object","properties":{"asset":{"type":"string","description":"Full name of the crypto asset.","example":"Tether USD"},"code":{"type":"string","description":"Asset code","example":"USDT"},"network":{"type":"string","description":"Network code","example":"Tron (TRC20)"},"available_balance":{"type":"number","format":"float","description":"Spendable balance available for withdrawal.","example":500},"frozen_balance":{"type":"number","format":"float","description":"Balance locked by pending withdrawal transactions. Released once withdrawal is confirmed on-chain.","example":50}}}}}},"CallbackPayload":{"type":"object","description":"Payload sent by the system to the merchant's `callback_url`.Fields vary slightly between `deposit` and `withdrawal` types.","required":["type","transaction_no","transaction_reference","amount","status","customer_unique_id","asset_code","network_code","sign"],"properties":{"type":{"type":"string","enum":["deposit","withdrawal"],"description":"Transaction type.","example":"deposit"},"transaction_no":{"type":"string","description":"System-generated transaction number.","example":"DP17150001ABC12"},"transaction_reference":{"type":"string","description":"Your original transaction reference.","example":"TXN-20240501-001"},"amount":{"type":"number","format":"float","description":"Crypto amount of the transaction.","example":65.5},"received_amount":{"type":"number","format":"float","nullable":true,"description":"**(Deposit only)** Actual amount received on-chain. `null` if not received.","example":65.5},"fee":{"type":"number","format":"float","nullable":true,"description":"**(Deposit only)** Processing or network fee. `null` if not yet processed.","example":0.5},"status":{"type":"string","enum":["completed","received","failed","expired"],"description":"Final transaction status.","example":"received"},"customer_unique_id":{"type":"string","description":"Your internal customer identifier.","example":"customer-123"},"hash":{"type":"string","nullable":true,"description":"On-chain transaction hash. `null` if not available.","example":"abc123txhash..."},"sender_address":{"type":"string","nullable":true,"description":"**(Deposit only)** On-chain address of the sender. `null` if not detected.","example":"TJsender..."},"receiver_address":{"type":"string","nullable":true,"description":"**(Withdrawal only)** On-chain address of the recipient.","example":"TJreceiver..."},"asset_code":{"type":"string","description":"Asset code of the transaction.","example":"USDT"},"network_code":{"type":"string","description":"Network code of the transaction.","example":"TRC20"},"sign":{"type":"string","description":"SHA256 HMAC signature generated by the system using the same algorithm. Merchants **must** validate this field to confirm the callback is authentic.","example":"F1A3C2D4..."}}},"ErrorResponse":{"type":"object","properties":{"success":{"type":"boolean","example":false},"message":{"type":"string","example":"Invalid sign"}}}}}}