logo

Search...

⌘ K

English

Product Guide
API Reference
Resource Download
Help Center

Getting Started

Overview

Scenario Capabilities

Onboarding Steps

Payin Capabilities

CKP Checkout Page

Interaction

Integration Prep

Integration Steps

Deeplink Redirect

Interaction

Integration Prep

Integration Steps

QRCode Display

Interaction

Integration Prep

Integration Steps

Payout Capabilities

Capability Overview

Deposit

Crypto Withdraw / Payout

Fiat Withdraw

Receive Payout Result

Supported Chains and Currencies

Supported Chains

Supported Currencies

Appendix

Wallets / Currencies / Chains

Transaction Status

Payment Status

Refund Status

Withdraw Status

Batch Status

Error Code Description

Signature Algorithm

Webhook Notifications to Merchants

Payment Callback

Method: POST

Request Headers

Field Name Type Required Description
content-type string Yes application/json
x-api-key string Yes Provided by Paydify, same as appId
x-api-timestamp string Yes Timestamp in milliseconds
x-api-signature string Yes Signature, see Signature Algorithm

Request Body

Field Name Type Description
appId string Provided by Paydify
txnId string Paydify payment order ID
mchTxnId string Merchant order ID
state string Payment status, enum values see Payment Status
txnHash string Blockchain transaction hash
txnAmount string Order amount. If currency is USDT, then 1.23 means 1.23 USDT
orderCurrency string Order currency
paidAmount string Actual payment amount, if currency is USDT, then 1.23 means 1.23 USDT
mchReceivedAmount string Amount merchant should receive, if currency is USDT, then 1.23 means 1.23 USDT
mchFee string Fee charged by Paydify, if currency is USDT, then 0.23 means 0.23 USDT
currency string Payment currency
settlementCurrency string Settlement currency for merchant. USDT/USDC for crypto settlement, USD for fiat settlement
notifyType string Notification type, fixed value: payment
fromAddress string Payer address
paidTime int Payment success timestamp in milliseconds, only has value when payment is successful
failedTime int Payment failure timestamp in milliseconds, only has value when payment fails/times out

Response

Return HTTP 200 after receiving the callback. Paydify determines success from the response body:

Response Value Description
success Callback acknowledged, no further retries
fail Callback explicitly failed, will be retried per the retry policy

Recommended:

  • Set Content-Type to text/plain
  • Return the bare string success or fail (case-insensitive)

Also accepted as success (no further retries):

  • Leading/trailing whitespace or trailing newline: success , success\n
  • JSON string literal: "success"

Still treated as failure and retried:

  • JSON objects: {"status":"success"} / {"code":0} / {"result":"success"}
  • HTML error pages or empty body
  • Any value other than success (including fail)

Any response that cannot be recognized as success triggers retries, up to 7 attempts.

Request Example

curl -X POST '{endpoint}' \
  -H 'content-type: application/json' \
  -H 'x-api-key: xxx' \
  -H 'x-api-timestamp: 121212121' \
  -H 'x-api-signature: xxxx' \
  -d '{
    "appId": "Axxxxxxxx",
    "txnId": "P4687529510003120897",
    "mchTxnId": "DCS20250905175704ICVAa11111211",
    "currency": "USDC",
    "state": "PAID",
    "txnHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
    "fromAddress": "0x1111111111222222222233333333334444444444",
    "notifyType": "payment",
    "paidAmount": "0.22",
    "mchReceivedAmount": "0.22",
    "mchFee": "0",
    "txnAmount": "0.22",
    "paidTime": 1757328167000,
    "failedTime": 0
}'

Refund Callback

Method: POST

Request Headers

Field Name Type Required Description
content-type string Yes application/json
x-api-key string Yes Provided by Paydify, same as appId
x-api-timestamp string Yes Timestamp in milliseconds
x-api-signature string Yes Signature, see Signature Algorithm

Request Body

Field Name Type Description
appId string Application ID provided by Paydify
txnId string Paydify refund order ID
mchTxnId string Merchant refund order ID
currency string Refund currency (e.g., USDT, USDC)
state string Refund status, enum values see Refund Status. Terminal: REFUNDED (success) / FAILED (failure)
txnHash string Blockchain transaction hash
notifyType string Notification type, fixed value: refund
txnAmount string Refund amount in crypto currency. If currency is USDT, then "1.23" means 1.23 USDT
failedTime int Refund failure timestamp in milliseconds. Only has value when refund fails
refundedTime int Refund success timestamp in milliseconds. Only has value when refund is successful
orderCurrency string Original order currency (e.g., USD, EUR). Only present in fiat payment scenarios
settlementCurrency string Settlement currency (e.g., USD). Only present in fiat payment scenarios
orderAmount string Original order amount in fiat currency. Only present in fiat payment scenarios
settlementAmount string Settlement amount (negative value indicates refund). Only present in fiat payment scenarios

Response

Return HTTP 200 after receiving the callback. Paydify determines success from the response body:

Response Value Description
success Callback acknowledged, no further retries
fail Callback explicitly failed, will be retried per the retry policy

Recommended:

  • Set Content-Type to text/plain
  • Return the bare string success or fail (case-insensitive)

Also accepted as success (no further retries):

  • Leading/trailing whitespace or trailing newline: success , success\n
  • JSON string literal: "success"

Still treated as failure and retried:

  • JSON objects: {"status":"success"} / {"code":0} / {"result":"success"}
  • HTML error pages or empty body
  • Any value other than success (including fail)

Any response that cannot be recognized as success triggers retries, up to 7 attempts.

Request Example

curl -X POST '{endpoint}' \
  -H 'content-type: application/json' \
  -H 'x-api-key: xxx' \
  -H 'x-api-timestamp: 121212121' \
  -H 'x-api-signature: xxxx' \
  -d '{
    "appId": "Axxxxxxxx",
    "txnId": "R4687326023007356672",
    "mchTxnId": "DCS20250905175704ICVAa1111",
    "currency": "USDC",
    "state": "REFUNDED",
    "txnHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
    "notifyType": "refund",
    "txnAmount": "0.11",
    "failedTime": 0,
    "refundedTime": 1757315967000
}'

Callback Retry Mechanism

If the callback does not receive the expected response value success, it will retry up to 7 times at intervals of 1m / 5m / 30m / 2h / 6h / 12h / 24h. Deliveries that still fail after all retries raise an alert:

Request Number Time Delay Description
0 0 1st normal callback, executed immediately, no delay
1 1 minute 1st retry
2 5 minutes 2nd retry
3 30 minutes 3rd retry
4 2 hours 4th retry
5 6 hours 5th retry
6 12 hours 6th retry
7 24 hours 7th retry

Catalogue