Buy Transaction API Intergration Guide (NGN -> Stablecoin)

This guide explains how to create, refresh, confirm, requery, and track an on-ramp transaction using the Quidax Ramp API.

An on-ramp transaction allows your customer to pay fiat currency, such as NGN, and receive cryptocurrency, such as USDT or USDC, into their wallet address.

Base URL

https://ramp-be.quidax.io

Transaction Flow

The on-ramp transaction flow works like this:

  1. Create an on-ramp transaction.
  2. Refresh the on-ramp transaction if you need to update or recalculate the quote.
  3. Confirm the on-ramp transaction to generate a dynamic, single-use bank account.
  4. Ask your customer to make the fiat deposit.
  5. Listen to webhook events to track the transaction status.
  6. Requery the buy transaction using the Fetch On-Ramp Transaction endpoint to confirm the latest transaction status.
  7. Receive the final webhook when the transaction is successful or failed.

1. Create an On-Ramp Transaction

This endpoint is used to create an on-ramp transaction.

The merchant_reference must be unique for every new transaction. If the same merchant_reference is reused, the API will return a duplicate transaction error.

Endpoint

POST https://ramp-be.quidax.io/api/v1/merchants/custodial/on_ramp_transactions/initiate

Request

curl --request POST \
     --url https://ramp-be.quidax.io/api/v1/merchants/custodial/on_ramp_transactions/initiate \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "from_currency": "ngn",
  "to_currency": "usdt",
  "from_amount": "3000",
  "merchant_reference": "xncbncvv",
  "customer": {
    "email": "[email protected]",
    "first_name": "test",
    "last_name": "user"
  },
  "wallet_address": {
    "address": "0xxx",
    "network": "bep20"
  }
}
'

Request Body Fields

FieldTypeRequiredDescription
from_currencystringYesThe fiat currency the customer is paying with. Example: ngn.
to_currencystringYesThe cryptocurrency the customer wants to receive. Example: usdt.
from_amountstringYesThe fiat amount the customer wants to pay.
merchant_referencestringYesA unique transaction reference generated by the merchant. This must not be reused for another transaction.
customer.emailstringYesThe customer’s email address.
customer.first_namestringYesThe customer’s first name.
customer.last_namestringYesThe customer’s last name.
wallet_address.addressstringYesThe customer’s destination wallet address.
wallet_address.networkstringYesThe blockchain network for the wallet address. Example: bep20.

Successful Response

{
  "status": "ok",
  "message": "Transaction successfully initiated",
  "data": {
    "public_id": "6a089a1a-7633-4e4c-b6e6-39da723dd4fa",
    "reference": "TRX-29U3YLYGC8",
    "merchant_reference": "ui79ffjbbnj-fftxnkfffbb12jj345",
    "from_currency": "ngn",
    "to_currency": "usdt",
    "from_amount": "2000.0",
    "to_amount": "1.23",
    "status": "pending",
    "created_at": "2025-05-16T13:17:30.212Z",
    "updated_at": "2025-05-16T13:17:33.292Z",
    "blockchain_fee": "1.0"
  }
}

Successful Response Fields

FieldTypeDescription
statusstringThe API response status. ok means the request was successful.
messagestringA human-readable message describing the result of the request.
dataobjectContains the transaction details.
data.public_idstringThe public unique identifier of the on-ramp transaction.
data.referencestringThe transaction reference generated by Quidax.
data.merchant_referencestringThe unique transaction reference provided by the merchant.
data.from_currencystringThe fiat currency the customer is paying with.
data.to_currencystringThe cryptocurrency the customer will receive.
data.from_amountstringThe fiat amount for the transaction.
data.to_amountstringThe estimated amount of cryptocurrency the customer will receive.
data.statusstringThe current transaction status. pending means the transaction has been created but has not been completed.
data.created_atstringThe date and time the transaction was created.
data.updated_atstringThe date and time the transaction was last updated.
data.blockchain_feestringThe blockchain or network fee applied to the transaction.

Error Responses

Invalid Amount

{
  "status": "bad_request",
  "message": "Invalid amount",
  "data": null
}

Duplicate Transaction

{
  "status": "bad_request",
  "message": "Transaction with reference already exists",
  "data": null
}

Invalid Address Format

{
  "status": "bad_request",
  "message": "Invalid address format",
  "data": null
}

Invalid Network

{
  "status": "bad_request",
  "message": "Invalid network",
  "data": null
}

Forbidden

{
  "status": "forbidden",
  "message": "Invalid private key",
  "data": null
}

2. Refresh an On-Ramp Transaction

This endpoint is used to refresh an existing on-ramp transaction.

You must provide the same merchant_reference that was used when initiating the original on-ramp transaction.

Refreshing the transaction can be used to recalculate the quote or update the transaction amount before confirmation.

Endpoint

PUT https://ramp-be.quidax.io/api/v1/merchants/custodial/on_ramp_transactions/{merchant_reference}/refresh

Replace {merchant_reference} with the merchant reference used when the transaction was created.

Request

curl --request PUT \
     --url https://ramp-be.quidax.io/api/v1/merchants/custodial/on_ramp_transactions/merchant_reference/refresh \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "from_currency": "ngn",
  "to_currency": "usdt",
  "from_amount": "2000"
}
'

Request Body Fields

FieldTypeRequiredDescription
from_currencystringYesThe fiat currency the customer is paying with. Example: ngn.
to_currencystringYesThe cryptocurrency the customer wants to receive. Example: usdt.
from_amountstringYesThe updated fiat amount for the transaction.

Successful Response

{
  "status": "ok",
  "message": "Transaction successfully initiated",
  "data": {
    "public_id": "6a089a1a-7633-4e4c-b6e6-39da723dd4fa",
    "reference": "TRX-29U3YLYGC8",
    "merchant_reference": "ui79ffjbbnj-fftxnkfffbb12jj345",
    "from_currency": "ngn",
    "to_currency": "usdt",
    "from_amount": "2000.0",
    "to_amount": "1.23",
    "status": "pending",
    "created_at": "2025-05-16T13:17:30.212Z",
    "updated_at": "2025-05-16T13:17:33.292Z",
    "blockchain_fee": "1.0"
  }
}

Successful Response Fields

FieldTypeDescription
statusstringThe API response status. ok means the request was successful.
messagestringA human-readable message describing the result of the request.
dataobjectContains the refreshed transaction details.
data.public_idstringThe public unique identifier of the on-ramp transaction.
data.referencestringThe transaction reference generated by Quidax.
data.merchant_referencestringThe merchant reference originally provided when the transaction was initiated.
data.from_currencystringThe fiat currency the customer is paying with.
data.to_currencystringThe cryptocurrency the customer will receive.
data.from_amountstringThe refreshed fiat amount for the transaction.
data.to_amountstringThe recalculated estimated amount of cryptocurrency the customer will receive.
data.statusstringThe current transaction status.
data.created_atstringThe date and time the transaction was created.
data.updated_atstringThe date and time the transaction was last updated.
data.blockchain_feestringThe blockchain or network fee applied to the transaction.

Error Responses

Invalid Currency Pair

{
  "status": "bad_request",
  "message": "Currency swap not allowed: ngn -> usdtg",
  "data": null
}

Failed to Refresh On-Ramp Transaction

{
  "status": "bad_request",
  "message": "Failed to refresh on-ramp transaction",
  "data": null
}

3. Confirm an On-Ramp Transaction

This endpoint is used to confirm an existing on-ramp transaction and generate a dynamic, single-use bank account for the NGN fiat deposit.

The customer must send the exact amount_expected to the generated bank account. Do not send more or less than the expected amount, as overpayment or underpayment will prevent the provider from processing the deposit.

Merchants should inform their customers to send the exact amount_expected. If the customer sends more or less than the expected amount, the payment will be rejected.

Also, ensure that the name on the customer’s bank account used for the fiat deposit matches the name they provided when initiating the transaction. The system does not support third-party deposits. If the names do not match, the system will reject the fiat deposit and issue a refund to the customer.

Endpoint

POST /api/v1/merchants/custodial/on_ramp_transactions/{reference}/confirm

Replace {reference} with the transaction reference to be confirmed.

Request

curl --request POST \
     --url https://ramp-be.quidax.io/api/v1/merchants/custodial/on_ramp_transactions/text-reference/confirm \
     --header 'accept: application/json'

Successful Response

{
  "status": "ok",
  "message": "Transaction successfully confirmed",
  "data": {
    "public_id": "7047c360-4ef6-404d-835d-b41dc832ed49",
    "account_name": "test json",
    "account_number": "0565084270",
    "bank_name": "Test Bank",
    "reference": "BANK_ACCOUNT_8f8102c76be41979",
    "amount": "2000.0",
    "amount_expected": "2053.75",
    "created_at": "2025-05-16T14:12:11.419Z",
    "updated_at": "2025-05-16T14:12:11.419Z",
    "processor_fee": "50.0",
    "vat": "3.75"
  }
}

Successful Response Fields

FieldTypeDescription
statusstringThe API response status. ok means the request was successful.
messagestringA human-readable message describing the result of the request.
dataobjectContains the generated bank account and payment details.
data.public_idstringThe public unique identifier for the confirmed transaction or generated payment instruction.
data.account_namestringThe account name of the generated dynamic bank account.
data.account_numberstringThe account number the customer should pay into.
data.bank_namestringThe name of the bank where the dynamic account was generated.
data.referencestringThe bank account or payment reference generated for the deposit.
data.amountstringThe original transaction amount before processor fees and VAT.
data.amount_expectedstringThe exact total amount the customer must deposit. This includes the original amount, processor fee, and VAT.
data.created_atstringThe date and time the bank account or payment instruction was created.
data.updated_atstringThe date and time the bank account or payment instruction was last updated.
data.processor_feestringThe payment processor fee added to the transaction.
data.vatstringThe VAT charged on the processor fee.

Error Responses

Invalid API Key

{
  "status": "forbidden",
  "message": "Invalid private key",
  "data": null
}

Transaction Not Found

{
  "status": "not_found",
  "message": "Transaction does not exist",
  "data": null
}

4. Requery the Buy Transaction

This endpoint is used to fetch or requery a buy transaction.

Merchants can use this endpoint to confirm the latest status of an on-ramp transaction, especially after receiving a webhook or when they need to verify whether the transaction status has changed.

Webhooks should be used as the source of truth for final transaction status updates. However, merchants can also requery the transaction using this endpoint to confirm the latest transaction status.

Endpoint

GET https://ramp-be.quidax.io/api/v1/merchants/on_ramp_transaction/{reference}

Replace {reference} with the transaction reference you want to fetch.

Request

curl --request GET \
     --url https://ramp-be.quidax.io/api/v1/merchants/on_ramp_transaction/reference \
     --header 'accept: application/json' \
     --header 'x-private-key: sk_test'

Request Header Fields

HeaderRequiredDescription
acceptYesThe response format expected from the API. Use application/json.
x-private-keyYesYour merchant secret key.

Successful Response

{
  "status": "ok",
  "message": "Transaction found",
  "data": {
    "public_id": "11fbee44-eef0-4d27-b21c-b2d0070aa3bb",
    "status": "completed",
    "mode": "buy",
    "from_currency": "ngn",
    "to_currency": "usdc",
    "from_amount": "3000.0",
    "to_amount": "1.927314",
    "network": "solana",
    "merchant_reference": "rhhhhfffbbfffrrrrr",
    "error_message": null,
    "blockchain_fee": "0.025",
    "crypto_payout": {
      "public_id": "656b176e-9e33-48ec-bf8b-b5f119ef05ac",
      "transaction_hash": "5WCENqT47Qs3aGz2yghSvDMYK2KBCmxEShaPWeyiLgP1Y5V7QXRHuQwkFa83HZwUbyUckQV9RUV4WfEaSBhQrrTi",
      "status": "completed",
      "amount": "1.927314",
      "processor_fee": "0.025",
      "address": "FQw1J6qke2JDgjzLmdzeU7mxKgNDePK2Stf81XGpUZog",
      "network": "solana",
      "currency": "usdc",
      "created_at": "2026-05-29T16:57:24.982Z",
      "updated_at": "2026-05-29T16:58:21.729Z"
    },
    "fiat_deposit": {
      "public_id": "d0dbc26b-3937-4d09-87ef-9a1a231d60d1",
      "status": "success",
      "currency": "ngn",
      "amount": "3000.0",
      "fee": "80.63",
      "created_at": "2026-05-29T16:57:19.983Z",
      "updated_at": "2026-05-29T16:57:20.008Z"
    },
    "mobile_money_deposit": null,
    "created_at": "2026-05-29T16:53:50.733Z",
    "updated_at": "2026-05-29T16:58:21.755Z"
  }
}

Successful Response Fields

FieldTypeDescription
statusstringThe API response status. ok means the transaction was found.
messagestringA human-readable message describing the result of the request.
dataobjectContains the on-ramp transaction details.
data.public_idstringThe public unique identifier of the on-ramp transaction.
data.statusstringThe current status of the on-ramp transaction. Example: completed.
data.modestringThe transaction mode. For on-ramp transactions, this will be buy.
data.from_currencystringThe fiat currency the customer paid with. Example: ngn.
data.to_currencystringThe cryptocurrency the customer received or will receive. Example: usdc.
data.from_amountstringThe fiat amount for the transaction.
data.to_amountstringThe cryptocurrency amount for the transaction.
data.networkstringThe blockchain network used for the crypto payout.
data.merchant_referencestringThe unique transaction reference provided by the merchant.
data.error_messagestring or nullThe error message for the transaction, if any. This will be null when there is no error.
data.blockchain_feestringThe blockchain fee charged for the crypto payout.
data.crypto_payoutobject or nullContains the crypto payout details. This can be null if the payout has not been created yet.
data.fiat_depositobject or nullContains the fiat deposit details. This can be null if no fiat deposit has been received yet.
data.mobile_money_depositobject or nullContains mobile money deposit details, where applicable. This can be null when mobile money was not used.
data.created_atstringThe date and time the on-ramp transaction was created.
data.updated_atstringThe date and time the on-ramp transaction was last updated.

Crypto Payout Fields

FieldTypeDescription
data.crypto_payout.public_idstringThe public unique identifier of the crypto payout.
data.crypto_payout.transaction_hashstringThe blockchain transaction hash for the crypto payout.
data.crypto_payout.statusstringThe status of the crypto payout. Example: completed.
data.crypto_payout.amountstringThe crypto amount sent to the customer.
data.crypto_payout.processor_feestringThe processor fee charged for the crypto payout.
data.crypto_payout.addressstringThe wallet address where the cryptocurrency was sent.
data.crypto_payout.networkstringThe blockchain network used for the payout.
data.crypto_payout.currencystringThe cryptocurrency sent to the customer.
data.crypto_payout.created_atstringThe date and time the crypto payout was created.
data.crypto_payout.updated_atstringThe date and time the crypto payout was last updated.

Fiat Deposit Fields

FieldTypeDescription
data.fiat_deposit.public_idstringThe public unique identifier of the fiat deposit.
data.fiat_deposit.statusstringThe status of the fiat deposit. Example: success.
data.fiat_deposit.currencystringThe fiat deposit currency. Example: ngn.
data.fiat_deposit.amountstringThe fiat amount received from the customer.
data.fiat_deposit.feestringThe fee charged on the fiat deposit.
data.fiat_deposit.created_atstringThe date and time the fiat deposit was created.
data.fiat_deposit.updated_atstringThe date and time the fiat deposit was last updated.

Error Response

Transaction Not Found

{
  "status": "not_found",
  "message": "Transaction not found",
  "data": null
}

5. On-Ramp Transaction Webhooks

After your customer makes a fiat deposit, the system will send webhook notifications to your configured webhook URL.

These webhooks help you track the transaction from fiat deposit confirmation to crypto payout completion.

You should listen for the following webhook events:

EventDescription
buy_transaction.processingSent while the transaction is being processed. This can happen after the fiat deposit is received and when the crypto payout is being processed.
buy_transaction.successfulSent when the transaction has been completed successfully.
buy_transaction.failedSent when the transaction fails or requires attention.

Buy Transaction Processing

This event is dispatched during the transaction processing phase.

It is sent from the moment the system receives and confirms the fiat deposit, through to the initiation and processing of the crypto payout.

Fiat Deposit Processing Webhook

This webhook is sent after the customer’s fiat deposit has been received and confirmed.

At this stage, fiat_deposit will contain the deposit details, while crypto_payout may still be null because the crypto payout has not started yet.

{
  "event": "buy_transaction.processing",
  "data": {
    "mode": "buy",
    "status": "processing",
    "network": "trc20",
    "public_id": "a0f80737-f542-49f2-81dc-303be971839e",
    "to_amount": "1.85",
    "created_at": "2025-04-14T08:41:12.696Z",
    "updated_at": "2025-04-15T17:39:59.837Z",
    "from_amount": "3000.0",
    "to_currency": "usdt",
    "fiat_deposit": {
      "fee": "9.99",
      "amount": "9.99",
      "status": "success",
      "currency": "ngn",
      "public_id": "ffbd4fc9-ed12-4df4-91b9-869c097990fc",
      "created_at": "2025-04-15T17:35:58.120Z",
      "updated_at": "2025-04-15T17:35:58.120Z"
    },
    "crypto_payout": null,
    "from_currency": "ngn",
    "blockchain_fee": "1.0",
    "merchant_reference": "usebr-gtextccnv"
  }
}

Crypto Payout Processing Webhook

This webhook is sent when the fiat deposit has been confirmed and the crypto payout is being processed.

At this stage, both fiat_deposit and crypto_payout will be present in the webhook payload.

{
  "event": "buy_transaction.processing",
  "data": {
    "mode": "buy",
    "status": "processing",
    "network": "trc20",
    "public_id": "a0f80737-f542-49f2-81dc-303be971839e",
    "to_amount": "1.85",
    "created_at": "2025-04-14T08:41:12.696Z",
    "updated_at": "2025-04-15T17:39:59.837Z",
    "from_amount": "3000.0",
    "to_currency": "usdt",
    "fiat_deposit": {
      "fee": "9.99",
      "amount": "9.99",
      "status": "success",
      "currency": "ngn",
      "public_id": "ffbd4fc9-ed12-4df4-91b9-869c097990fc",
      "created_at": "2025-04-15T17:35:58.120Z",
      "updated_at": "2025-04-15T17:35:58.120Z"
    },
    "crypto_payout": {
      "amount": "9.99",
      "status": "processing",
      "address": "0xfjjkfjnmfn",
      "network": "trc20",
      "currency": "usdt",
      "public_id": "0594ea31-8d0b-4691-8b95-b4ae9057ab1b",
      "created_at": "2025-04-15T17:37:37.125Z",
      "updated_at": "2025-04-15T17:37:37.125Z",
      "processor_fee": 1,
      "transaction_hash": "xdkkdlf"
    },
    "from_currency": "ngn",
    "blockchain_fee": "1.0",
    "merchant_reference": "usebr-gtextccnv"
  }
}

Buy Transaction Successful

This event is dispatched when the transaction has been completed successfully.

At this stage, the fiat deposit has been received, the crypto payout has been completed, and the transaction status will be completed.

{
  "event": "buy_transaction.successful",
  "data": {
    "mode": "buy",
    "status": "completed",
    "network": "trc20",
    "public_id": "a0f80737-f542-49f2-81dc-303be971839e",
    "to_amount": "1.85",
    "created_at": "2025-04-14T08:41:12.696Z",
    "updated_at": "2025-04-15T17:39:59.837Z",
    "from_amount": "3000.0",
    "to_currency": "usdt",
    "fiat_deposit": {
      "fee": "9.99",
      "amount": "9.99",
      "status": "success",
      "currency": "ngn",
      "public_id": "ffbd4fc9-ed12-4df4-91b9-869c097990fc",
      "created_at": "2025-04-15T17:35:58.120Z",
      "updated_at": "2025-04-15T17:35:58.120Z"
    },
    "crypto_payout": {
      "amount": "9.99",
      "status": "completed",
      "address": "0xfjjkfjnmfn",
      "network": "trc20",
      "currency": "usdt",
      "public_id": "0594ea31-8d0b-4691-8b95-b4ae9057ab1b",
      "created_at": "2025-04-15T17:37:37.125Z",
      "updated_at": "2025-04-15T17:37:37.125Z",
      "processor_fee": 1,
      "transaction_hash": "xdkkdlf"
    },
    "from_currency": "ngn",
    "blockchain_fee": "1.0",
    "merchant_reference": "usebr-gtextccnv"
  }
}

Buy Transaction Failed

This event is dispatched when the transaction fails or requires attention.

This can happen after the fiat deposit has been received but the crypto payout fails. or fiat deposit faile, In this case, the transaction status may be needs_attention, and the crypto_payout.status will be failed.

{
  "event": "buy_transaction.failed",
  "data": {
    "mode": "buy",
    "status": "needs_attention",
    "network": "trc20",
    "public_id": "a0f80737-f542-49f2-81dc-303be971839e",
    "to_amount": "1.85",
    "created_at": "2025-04-14T08:41:12.696Z",
    "updated_at": "2025-04-15T17:39:59.837Z",
    "from_amount": "3000.0",
    "to_currency": "usdt",
    "fiat_deposit": {
      "fee": "9.99",
      "amount": "9.99",
      "status": "success",
      "currency": "ngn",
      "public_id": "ffbd4fc9-ed12-4df4-91b9-869c097990fc",
      "created_at": "2025-04-15T17:35:58.120Z",
      "updated_at": "2025-04-15T17:35:58.120Z"
    },
    "crypto_payout": {
      "amount": "9.99",
      "status": "failed",
      "address": "0xfjjkfjnmfn",
      "network": "trc20",
      "currency": "usdt",
      "public_id": "0594ea31-8d0b-4691-8b95-b4ae9057ab1b",
      "created_at": "2025-04-15T17:37:37.125Z",
      "updated_at": "2025-04-15T17:37:37.125Z",
      "processor_fee": 1,
      "transaction_hash": "xdkkdlf"
    },
    "from_currency": "ngn",
    "blockchain_fee": "1.0",
    "merchant_reference": "usebr-gtextccnv"
  }
}

Webhook Response Fields

Main Payload Fields

FieldTypeDescription
eventstringThe webhook event name. Possible values include buy_transaction.processing, buy_transaction.successful, and buy_transaction.failed.
dataobjectContains the transaction details.
data.modestringThe transaction mode. For on-ramp transactions, this will be buy.
data.statusstringThe current status of the on-ramp transaction.
data.networkstringThe blockchain network for the crypto payout.
data.public_idstringThe public unique identifier of the on-ramp transaction.
data.to_amountstringThe amount of cryptocurrency the customer is expected to receive.
data.created_atstringThe date and time the on-ramp transaction was created.
data.updated_atstringThe date and time the on-ramp transaction was last updated.
data.from_amountstringThe fiat amount for the on-ramp transaction.
data.to_currencystringThe cryptocurrency the customer will receive.
data.fiat_depositobjectContains details of the fiat deposit.
data.crypto_payoutobject or nullContains details of the crypto payout. This can be null when the crypto payout has not started.
data.from_currencystringThe fiat currency used for the deposit.
data.blockchain_feestringThe blockchain fee for the crypto payout.
data.merchant_referencestringThe unique transaction reference provided by the merchant when the transaction was initiated.

Fiat Deposit Fields

FieldTypeDescription
data.fiat_deposit.feestringThe fee charged on the fiat deposit.
data.fiat_deposit.amountstringThe fiat deposit amount received.
data.fiat_deposit.statusstringThe status of the fiat deposit. Example: success.
data.fiat_deposit.currencystringThe fiat deposit currency. Example: ngn.
data.fiat_deposit.public_idstringThe public unique identifier of the fiat deposit.
data.fiat_deposit.created_atstringThe date and time the fiat deposit was created.
data.fiat_deposit.updated_atstringThe date and time the fiat deposit was last updated.

Crypto Payout Fields

FieldTypeDescription
data.crypto_payout.amountstringThe crypto payout amount.
data.crypto_payout.statusstringThe status of the crypto payout. Examples: processing, completed, or failed.
data.crypto_payout.addressstringThe wallet address where the cryptocurrency is being sent.
data.crypto_payout.networkstringThe blockchain network used for the payout.
data.crypto_payout.currencystringThe cryptocurrency being sent.
data.crypto_payout.public_idstringThe public unique identifier of the crypto payout.
data.crypto_payout.created_atstringThe date and time the crypto payout was created.
data.crypto_payout.updated_atstringThe date and time the crypto payout was last updated.
data.crypto_payout.processor_feenumber or stringThe processor fee charged for the crypto payout.
data.crypto_payout.transaction_hashstringThe blockchain transaction hash for the crypto payout.

General API Response Structure

All API responses follow this structure:

{
  "status": "ok",
  "message": "Human-readable response message",
  "data": {}
}

General Response Fields

FieldTypeDescription
statusstringIndicates the result of the request. Possible values include ok, bad_request, forbidden, and not_found.
messagestringA human-readable explanation of the result.
dataobject or nullContains response data when the request is successful. For errors, this is usually null.

Common Status Values

StatusMeaning
okThe request was successful.
bad_requestThe request was invalid, incomplete, duplicated, or could not be processed.
forbiddenAuthentication failed, usually because the private key is invalid.
not_foundThe requested transaction could not be found.

Important Integration Notes

  1. Always generate a unique merchant_reference when creating a new on-ramp transaction.

  2. Save both the merchant reference and the Quidax transaction reference returned in the response.

  3. Use the same merchant_reference when refreshing an existing transaction.

  4. Confirm the transaction only when the customer is ready to make payment.

  5. After confirmation, instruct the customer to pay the exact amount_expected.

  6. Do not allow overpayment or underpayment. Merchants should inform their customers to send the exact amount_expected. If the customer sends more or less than the expected amount, the payment will be rejected.

  7. Ensure that the name on the customer’s bank account matches the name used when initiating the transaction.

  8. The system does not support third-party deposits. If the names do not match, the system will reject the fiat deposit and issue a refund to the customer.

  9. Validate the wallet address and network before creating the transaction.

  10. Ensure the selected currency pair is supported before calling the API.

  11. Store the public_id, reference, merchant_reference, and transaction status for reconciliation and support purposes.

  12. Use webhooks as the source of truth for final transaction status updates.

  13. Merchants can also requery the buy transaction using the Fetch On-Ramp Transaction endpoint to confirm the latest transaction status.


Did this page help you?