Get started
API Endpoint https://api.1xgate.com/
You can simply accept crypto for your businesses by integrating with 1xGate. To accept payment you just need to create a new transaction and redirect the user to to response link. All of the complexities of accepting crypto on different networks will be handled on 1xGate and you will be notified of the payment result at the end.
Authentication
To call the 1xGate APIs, you need an API key. Please register in 1xgate.com to create your own merchant API key.
When you log in to 1xGate panel, you need to create a merchant for your business. After creating your merchant the API key will show you once in the panel.
⚠️Keep it in mind that once the API key has been created we do not show the API key anymore. So copy it and store it in a secure place.
To call the endpoint to have to set the merchant API KEY as x-integration-key: YOUR_API_KEY
HTTP header
Create Payment
# Here is a curl example
curl --location 'https://api.1xgate.com/v1/integrations/payments/external' \
--header 'x-integration-key: YOUR_MERCHANT_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"currency": "usdt",
"network": "trx",
"amount": 2.3,
"orderId": "ORDER_ID_IN_YOUR_DB",
"callbacks": {
"success": "https://google.com/q=success",
"failed": "https://google.com/q=failed"
}
}'
[POST] /v1/integrations/payments
To create a new payment you need to make a POST call to the above url.
In the response you will get _id
which is payment id in 1xGate service and link
that you can redirect your user to the given link for payment.
⚠️ When the has user has been redirected back to your website after payment you should wait until you got the webhook from the 1xGate see here
Result example :
{
"data": {
"userId": "65df57b2eb8c7a6c2b6be09d",
"ip": "3.13.171.120",
"merchantId": "66ad200c8950036604490832",
"currency": "usdt",
"network": "trx",
"address": null,
"memo": null,
"amount": 2.3,
"amountUsd": 2.29839,
"amountPaid": 0,
"amountPaidUsd": 0,
"priceUnit": 0.9993,
"wage": 0,
"orderId": "ORDER_ID_IN_YOUR_DB",
"type": "external",
"status": "created",
"inUse": true,
"expireAt": null,
"callbacks": {
"success": "https://google.com/q=success",
"failed": "https://google.com/q=failed"
},
"meta": {},
"updatedAt": "2024-08-02T18:23:14.867Z",
"createdAt": "2024-08-02T18:23:14.867Z",
"_id": "66ad24125dececa8b9a16bf3",
"link": "https://pay.1xgate.com/66ad24125dececa8b9a16bf3"
}
}
QUERY PARAMETERS
Field | Required | Type | Description |
---|---|---|---|
currency | Yes | String | You payment currency. "USDT" |
network | Yes | String | You blockchain network. "TRON" (TRC20) |
amount | Yes | Number | Amount of payment in above currency. 10.023 (USDT on Tron network) |
orderId | Yes | String | Order Id on your end. You must set a unique order id for each payment |
description | No | String | Description for the payment |
merchantUserEmail | No | String | Email address of user (payer) on your end |
merchantUserId | No | String | User Id on your end |
callbacks.success | Yes | String | Your url to redirect user when payment finished successfully. |
callbacks.failed | Yes | String | Your url to redirect user if the payment is not successful. |
Example for request body:
{
"currency": "usdt",
"network": "trx",
"amount": 2.3,
"orderId": "ORDER_ID_IN_YOUR_DB",
"callbacks": {
"success": "https://yourwebsite_suucess_page_to_redirect_user",
"failed": "https://yourwebsite_failed_page_to_redirect_user"
}
}
Payment webhook
# Here is a curl example
curl \
-X POST YOUR_MERCHANT_WEBHOOK_ADDRESS \
--header 'Content-Type: application/json' \
--data '{
"_id": "63decf79eec0e4414cc6823b",
"type": "payment",
"status": "success",
"modifiedAt": "2023-02-04T22:00:49.599Z",
"amount": 2.3,
"amountPaid": 2.3,
"currency": "usdt",
"network": "trx"
}'
[POST] YOUR_MERCHANT_WEBHOOK_ADDRESS
When any changes happened to you transaction 1xGate will call your webhook address which provided by you while creating a merchant with following data:
🚨 It's highly recommended after getting the webhook for a transaction, call the get transaction endpoint to make sure the webhook is valid see here.
Request example :
{
"_id": "63decf79eec0e4414cc6823b",
"type": "payment",
"status": "success",
"modifiedAt": "2023-02-04T22:00:49.599Z",
"amount": 2.3,
"amountPaid": 2.3,
"currency": "usdt",
"network": "trx"
}
QUERY PARAMETERS
Field | Type | Description |
---|---|---|
_id | String | The payment id |
type | String | The type of the webhook. For payments it is 'payment' |
status | String | This field represents status of the transaction. You can check here for a complete description |
modifiedAt | Date | Last date time (ISO-8601) which this payment status has been modified |
amount | Double | The amount of the transaction (in the currency of the transaction) |
amountPaid | Double | The Amount that the user actually paid (in the currency of the transaction) |
currency | String | The currency of the transaction |
network | String | The network of the currency in which the funds paid |
Get payment
# Here is a curl example
curl --location 'https://api.1xgate.com/v1/integrations/payments/66ad24125dececa8b9a16bf3' \
--header 'x-integration-key: YOUR_MERCHANT_API_KEY'
[GET] /v1/integrations/payments/:paymentId
After getting webhook or at any time to get the last update for the transaction you can call above endpoint. The :paymentId
is the _id
when the payment has been created.
You can check the payment status
from the response. If the status is:
crated
The user was not redirected to 1xGate payment link or closed the tab.pending
The user selected the currency and networks and 1xGate is waiting for the user to send funds.success
The user paid for the transaction successfully.partiallyPaid
The user paid for the transaction but did not cover the whole amount. For example, you asked the user to pay 10 USDT but the user paid only 9 USDT. You can have a look at theamount
andamountPaid
to see the difference and make a choice on your end to mark the transaction as failed or ask the user to send the remaining funds.expired
The user did not pay for the transaction in the proper time and the allocated address (with memo for some networks) expired.error
An error happened during the payment.
Result example :
{
"data": {
"_id": "66ad24125dececa8b9a16bf3",
"userId": "65df57b2eb8c7a6c2b6be09d",
"ip": "3.13.171.120",
"merchantId": "66ad200c8950036604490832",
"currency": "usdt",
"network": "trx",
"address": "TK7sq71kJcMu7AvZPZbUmFGg4psfXVNew5",
"memo": null,
"amount": 2.3,
"amountUsd": 2.29839,
"amountPaid": 0,
"amountPaidUsd": 0,
"priceUnit": 0.9993,
"wage": 0,
"orderId": "ORDER_ID_IN_YOUR_DB",
"type": "external",
"status": "pending",
"description": null,
"merchantUserId": null,
"merchantUserEmail": null,
"transactions": [],
"inUse": true,
"expireAt": "2024-08-02T18:52:53.368Z",
"hook": {
"response": {
"success": false,
"code": {
"status": 404
},
"at": "2024-08-02T18:47:01.369Z",
"body": null
},
"retires": 24,
"lastHookedAt": "2024-08-02T18:47:01.369Z"
},
"callbacks": {
"success": "https://google.com/q=success",
"failed": "https://google.com/q=failed"
},
"meta": {},
"updatedAt": "2024-08-02T18:47:01.314Z",
"createdAt": "2024-08-02T18:23:14.867Z",
}
}
Get Currencies and Networks
# Here is a curl example
curl --location 'https://api.1xgate.com/v1/settings/payment'
[GET] /v1/settings/payment
You can get available currencies and their supported network:
Some of these currencies and their networks may temporarily be deactivated or new currencies and networks will be added to our supported list.
Also, you can use 1xGate assets to show currency or network icons to your customers. You can use the same endpoint for icons https://api.1xgate.com/icons/trx.png to fetching each icon.
Result example :
{
"data": [
{
"currency": "usdt",
"name": "Tether",
"icon": "/icons/usdt.png",
"decimal": 6,
"type": "crypto",
"wallet": {},
"networks": [
{
"network": "trx",
"name": "trc20",
"icon": "/icons/trx.png",
"color": "ffffff",
"min": 2,
"max": 15000,
"waitingTime": "5m"
}
]
},
{
"currency": "ltc",
"name": "Litecoin",
"icon": "/icons/ltc.png",
"decimal": 8,
"type": "crypto",
"wallet": {},
"networks": [
{
"network": "ltc",
"name": "ltc",
"icon": "/icons/ltc.png",
"color": "ffffff",
"min": 2,
"max": 15000,
"waitingTime": "5m"
}
]
},
{
"currency": "btc",
"name": "Bitcoin",
"icon": "/icons/btc.png",
"decimal": 8,
"type": "crypto",
"wallet": {},
"networks": [
{
"network": "btc",
"name": "btc",
"icon": "/icons/btc.png",
"color": "ffffff",
"min": 2,
"max": 15000,
"waitingTime": "15m"
}
]
},
{
"currency": "eth",
"name": "Bitcoin",
"icon": "/icons/eth.png",
"decimal": 8,
"type": "crypto",
"wallet": {},
"networks": [
{
"network": "eth",
"name": "eth",
"icon": "/icons/eth.png",
"color": "ffffff",
"min": 2,
"max": 15000,
"waitingTime": "5m"
}
]
}
]
}
Statuses
You can check the payment status
from the response. If the status is:
crated
The user was not redirected to 1xGate payment link or closed the tab.pending
The user selected the currency and networks and 1xGate is waiting for the user to send funds.success
The user paid for the transaction successfully.partiallyPaid
The user paid for the transaction but did not cover the whole amount. For example, you asked the user to pay 10 USDT but the user paid only 9 USDT. You can have a look at theamount
andamountPaid
to see the difference and make a choice on your end to mark the transaction as failed or ask the user to send the remaining funds.expired
The user did not pay for the transaction in the proper time and the allocated address (with memo for some networks) expired.error
An error happened during the payment.