Create Buy Order Endpoint
This is used to initiate a new buy order. The life cycle of the order is encapsulated in three (3) events as seen below
POST https://exchanger-api.fuspay.finance/api/v1/no-auth/Axis/BuyUsdtWithFiat/
All events will be communicated to the callback registered in the post request.
Event body will be updated as buy order progresses through the following phases:
a. event.buy.init (buy order started, awaiting fiat payment)
b. event.buy.received.fiat (fiat payment received)
c. event.buy.credited.crypto (transaction completed)
d. event.buy.error (error occurred)
Event body is signed with sha 512. sha512(body, public_key+secret_key)
The diagram below shows the complete flow of a buy order

Axis does not handle third party on-ramp orders. i.e . The name of the user, the payer bank account, has to pass 66% name match with the user's KYC name on Axis. All transactions that fail this test will be pending. See the "Pending Transactions" side bar for more information
Headers
Authorization*
String
"Bearer ${partner_secret_key}"
x-partner-id*
String
"pxxxxxx"
Request Body
partner_order_id*
String
id of your order
fiat_amount*
String
the FIAT amount to be paid by the buyer
chain*
String
e.g. "usdt-trc20", "usdc-matic", "eusd-mob", "usdt-pol".
buyer_crypto_address*
STring
The buyer's crypto address
partner_callback_url*
STring
your partner callback URL
fiat_currency*
String
the fiat currency of the crypto-fiat pair eg. NGN, KHS, GHS
buyer_phone*
String
The is the phone number of the buyer. This is collected for KYC purpose
buyer_email*
String
This is an email representing the buyer. Also for KYC
first_name*
String
The buyer's first name
last_name*
String
Seller's last name
intrapay_merchant_id*
String
Intrapay Merchant ID is a unique identification number gotten by signing up and setting up your wallet on Intrapay.
markup_fee*
String
This is the percentage charge that would be applied in the transaction with the merchant. It is paid into your intrapay wallet.
refund_bank*
String
this is bank code where the fiat will be refunded incase of an incomplete transaction
refund_account*
String
this is account number where the fiat will be refunded incase of an incomplete transaction
refund_fullname*
String
this is account name of the user where the refund will be sent to
Sample Request Body
{
"partner_order_id": "LIVE-TXN-TEST-007123",
"fiat_currency": "KHS",
"buyer_crypto_address": "0x8de6e4fc94464a74ee153ef159b5b636678aa57f",
"chain": "usdt-trc20",
"fiat_amount": "3000",
"partner_callback_url": "https://webhook.site/f63c3262-55f3-462a-8ce1-49ea28c47038",
"buyer_phone": "11111111",
"buyer_email": "[email protected]",
"first_name": "",
"last_name": "",
"intrapay_merchant_id":"",
"markup_fee":"",
"refund_bank": "",
"refund_account": "",
"refund_fullname": ""
}Response {
"message":"OK"
}
The actual response (Event Body) is sent to your callback URL. we send to your callback URL to make responses fast.
BUY EVENTS
{
"event_name": "event.buy.init",
"partner_order_id": "BETA-TEST-FUSPAY-0001",
"fuspay_order_ref": "BETA-TEST-FUSPAY-0001_p176517",
"fiat_amount_to_pay": 100,
"crypto_amount_to_receive": 10,
"exchange_rate": 10,
"pair": "NGN/USDT",
"fiat_currency": "NGN",
"buyer_crypto_address": "TBqNaN3CvyuTmnMe55oRCzadZ1iAxYHrKr",
"chain": "usdt-trc20",
"fiat_payment_status": "PENDING",
"crypto_payment_status": "PENDING",
"payer_into_account": {
"account_name": "Paypoint NA",
"account_number": "9628586981",
"bank_name": "Providus Bank"
},
"payment_link": null,
"crypto_txn_hash": null,
"partner_callback_url": "https://webhook.site/7659f3d1-e7a1-4671-88c8-949e6850dbb7",
"transactional_kyc": {
"email": "",
"phone": "",
"first_name": "",
"last_name": ""
},
"signature": "6155296856767b99b28f3d11bdc3da770c0b1bb42059af6c774a42e459965359f1c5290b627acf09ce686d16cc42ed4"
}{
"event_name": "event.buy.received.fiat",
"partner_order_id": "BETA-TEST-FUSPAY-0001",
"fuspay_order_ref": "BETA-TEST-FUSPAY-0001_p176517",
"fiat_amount_to_pay": 100,
"crypto_amount_to_receive": 10,
"exchange_rate": 10,
"pair": "NGN/USDT",
"fiat_currency": "NGN",
"buyer_crypto_address": "TBqNaN3CvyuTmnMe55oRCzadZ1iAxYHrKr",
"chain": "usdt-trc20",
"fiat_payment_status": "PAID",
"crypto_payment_status": "STARTED",
"payer_into_account": {
"account_name": "Paypoint NA",
"account_number": "9628586981",
"bank_name": "Providus Bank"
},
"payment_link": null,
"crypto_txn_hash": null,
"partner_callback_url": "https://webhook.site/7659f3d1-e7a1-4671-88c8-949e6850dbb7",
"transactional_kyc": {
"email": "",
"phone": "",
"first_name": "",
"last_name": ""
},
"signature": "615529685924e0ab350cb28f3d11bdc3da770c0b1bb42059af6c774a42e459965359f1c5290b627acf09ce686d16cc42ed4"
}//The kyc_error_type message could either be "NO_KYC", for when user has not done KYC or "THIRD_PARTY_ERROR", for when the buyer's fiat payment account name is different from the transctional kyc name.
{
"event_name": "event.buy.received.fiat_kyc_error",
"partner_order_id": "SENTZ-BUY-ORDER-TEST-MY-IP-16",
"fuspay_order_ref": "SENTZ-BUY-ORDER-TEST-MY-IP-10_p533522",
"fiat_amount_to_pay": 15000,
"crypto_amount_to_receive": 10.07,
"exchange_rate": 1490,
"pair": "NGN/USDT",
"fiat_currency": "NGN",
"buyer_crypto_address": "TYYui3F5E7BjATJGBjgpk5fAn90CtfvNan",
"chain": "usdt-trc20",
"fiat_payment_status": "PAID",
"crypto_payment_status": "STARTED",
"payer_into_account": {
"account_name": "Paypoint NA",
"account_number": "9628586981",
"bank_name": "Providus Bank"
},
"payment_link": null,
"crypto_txn_hash": null,
"partner_callback_url": "https://ec0b-2600-1700-f90-55f0-494-231d-7b2c-17da.ngrok-free.app",
"transactional_kyc": {
"email": "",
"phone": "",
"first_name": "",
"last_name": ""
},
"signature": "5a596214cc2f1c3ecad6d8alf0fab65ed5d30112b722ed1ld3c9c3ee6",
"created_at": "2024-06025T14:55:02.080Z",
"sender_name": "AYANTOLA, TESLIM",
"default_kyc_url": "https://kyc.fuspay.finance",
"message": "Buyer needs to perform KYC",
"kyc_error_type": "NO_KYC"
}
{
"event_name": "event.buy.received.fiat_kyc_error",
"partner_order_id": "SENTZ-BUY-ORDER-TEST-MY-IP-16",
"fuspay_order_ref": "SENTZ-BUY-ORDER-TEST-MY-IP-16_p533522",
"fiat_amount_to_pay":15500,
"crypto_amount_to_receive":10.21,
"exchange_rate":1518,
"pair":"NGN/USDT",
"fiat_currency":"NGN",
"buyer_crypto_address": "TYYur3F5E7BjATJGBjgpk5fAm9DCtfvNmn",
"chain":"usdt-trc20",
"fiat_payment_status":"PAID",
"crypto_payment_status":"STARTED",
"payer_into_account":{
"account_name":"Paypoint NA",
"account_number":"9610880057",
"bank_name":"Providus Bank"
},
"payment_link":null,
"crypto_txn_hash":null,
"partner_callback_url":"https://ec0b-2600-1700-f90-55f0-494-231d-7b2c-17da.ngrok-free.app",
"transactional_kyc":{
"email":"",
"phone":"",
"first_name":"",
"last_name":""
},
"signature": "617dc884f8061ee67b834b61487552d6b2bc1d9812d9b8efbb650ccd5965623f65ce24f21c",
"created_at":"2024-06-28T15:15:13.000Z",
"sender_name":"QProject Technologies Limited Avis Charles Ayodeji",
"default_kyc_url":null,
"message":"Third Party Payment",
"kyc_error_type":"THIRD_PARTY_PAYMENT"
}{
"event_name": "event.buy.credited.crypto",
"partner_order_id": "BETA-TEST-FUSPAY-0001",
"fuspay_order_ref": "BETA-TEST-FUSPAY-0001_p176517",
"fiat_amount_to_pay": 100,
"crypto_amount_to_receive": 10,
"exchange_rate": 10,
"pair": "NGN/USDT",
"fiat_currency": "NGN",
"buyer_crypto_address": "TBqNaN3CvyuTmnMe55oRCzadZ1iAxYHrKr",
"chain": "usdt-trc20",
"fiat_payment_status": "PAID",
"crypto_payment_status": "PAID",
"payer_into_account": {
"account_name": "Paypoint NA",
"account_number": "9628586981",
"bank_name": "Providus Bank"
},
"payment_link": null,
"crypto_txn_hash": "f028a30dcc063a2c54e51c5babb3aa439afcd7393e7a5213145c1a9e5585a7",
"partner_callback_url": "https://webhook.site/7659f3d1-e7a1-4671-88c8-949e6850dbb7",
"transactional_kyc": {
"email": "",
"phone": "",
"first_name": "",
"last_name": ""
},
"signature": "29ab5f53ab696cf2cd5c0ebe429a8a6c145a705aa54dee3dd8bff48800b94b123c7beae6092d4f6de"
}{
event_name: 'buy.event.close',
partner_order_id: string,
fuspay_order_ref: string,
fiat_amount_to_pay: number,
crypto_amount_to_receive: number,
exchange_rate: string,
pair: 'NGN/EUSD',
fiat_currency: 'NGN',
buyer_crypto_address:string,
chain: 'eusd-mob',
fiat_payment_status: string,
crypto_payment_status: string,
payer_into_account: {
account_name: string,
account_number: string,
bank_name: string
},
payment_link: null,
crypto_txn_hash: null,
partner_callback_url: string,
transactional_kyc: { email: string, phone: string, first_name: string, last_name: string },
signature: string,
meta_data: {
status: 'refunded',
message: 'buyer has been refunded',
refund_account: string,
amount_refunded: string,
fee: number
}
}
Event Body Description
event_name
This is the name of the buy event
event buy init, event buy received fiat, event buy credited crypto.
partner_order_id
Id of order generated on partner's system
fuspay_order_ref
Reference number of order generated on Fuspay system
fiat_amount_to_pay
The equivalent fiat amount user would pay based on exchange rate
crypto_amount_to_receive
This is the amount of cryptocurrency to be received
exchange_rate
This is the exchange rate
pair
fiat_currency
This is the amount of fiat currency to be bought
buyer_crypto_address
The buyer's crypto address
chain
e.g. usdt-trc20, usdc-matic
fiat_payment_status
This is the fiat payment status.
Pending (payment has not been fully processed yet) or Paid (payment is fully processed and successful)
crypto_payment_status
This is the crypto payment status.
Started (payment is in process), Completed (payment is fully processed and completed)
account_name
This is the name of the account holder
account_number
This is the bank account number or phone number if MOMO
bank_name
The name of the bank
Email of the buyer
phone
Phone number of the buyer
first_name
First name of the buyer
last_name
Last name of the buyer
payment_link
This is the payment link given to the buyer
available for MOMO payments
crypto_txn_hash
This is the crypto transaction has given to the buyer
the hash of your crypto payment
partner_callback_url
The partner Id returned from the onboarding endpoint
signature
This is the buyer's signature
sha512 signed with public key + secret key
Last updated
Was this helpful?