@royalf1sh/crypto-pay-api
v0.0.10
Published
Crypto Pay is a payment system based on <a target="_blank" href="http://t.me/CryptoBot">@CryptoBot</a>, which allows you to accept payments in cryptocurrency using the API.
Downloads
15
Readme
Crypto Pay API
The most lightweight package without dependencies
Crypto Pay is a payment system based on @CryptoBot, which allows you to accept payments in cryptocurrency using the API.
Tips
Please, use Big.js
or another lib to work with big numbers.
Support
Check the official API docs https://telegra.ph/Crypto-Pay-API-11-25
Message to @CryptoSupportBot If you have a question about API. Or join to official chats @CryptoBotEnglish or @CryptoBotRussian for Russian developers.
Installation
First, you need to create your application and get an API token. Open @CryptoBot or @CryptoTestnetBot (for testnet), send a command /pay
to create a new app and get API Token.
npm i @royalf1sh/crypto-pay-api
Usage
const CryptoPayApi = require('@royalf1sh/crypto-pay-api')
const myCryptoApp = new CryptoPayApi({
url: 'testnet-pay.crypt.bot',
token: <YOUR-TOKEN>
})
Testnet url: testnet-pay.crypt.bot
Mainnet url (disabled now): pay.crypt.bot
Methods
All methods return a promise wich contains an object, which always has a Boolean field
ok
. Ifok
equalstrue
, the request was successful, and the result of the query can be found in theresult
field. In case of an unsuccessful request,ok
equalsfalse
, and the error is explained in theerror
field (e.g. PARAM_SHORT_NAME_REQUIRED).
Webhooks for notifications about payments
getMe
A simple method for testing your app's authentication token. Requires no parameters. Returns basic information about the app.
Example
const me = await myCryptoPay.getMe()
console.log(me)
{
ok: true,
result: {
app_id: xxxx,
name: 'Name of App',
payment_processing_bot_username: 'CryptoTestnetBot'
}
}
{ ok: false, error: { code: 401, name: 'UNAUTHORIZED' } }
createInvoice
Use this method to create a new invoice. Returns object of created invoice. Requires object with invoice options as argument.
- asset (String) - Currency code. Supported assets: BTC, TON, ETH (only testnet), USDT, USDC, BUSD
- amount (String)
Amount of the invoice in float. For example:
125.50
- description (String) Optional - Description of the invoice. Up to 1024 symbols
- paid_btn_name (String) Optional - Paid button name. This button will be shown when your invoice was paid. Default is
callback
if you use onlypaid_btn_url
Supported names:viewItem
- View ItemopenChannel
- Open ChannelopenBot
- Open Botcallback
- Return
- paid_btn_url (String) Optional but requried when you use
paid_btn_name
- Paid button URL. You can set any payment success link (for example link on your bot). Start with https or http - payload (String, up to 4kb) Optional - Some data. User ID, payment id, or any data you want to attach to the invoice
- allow_comments (Boolean) Optional - Allow adding comments when paying an invoice. Default is
true
- allow_anonymous (Boolean) Optional - Allow pay invoice as anonymous. Default is
true
Example
const invoice = await myCryptoPay.createInvoice({
asset: 'TON',
amount: 0.05,
description: 'Lorem ipsum dolor',
paid_btn_name: 'viewItem',
paid_btn_url: 'https://ton.org',
payload: JSON.stringify(someData),
allow_comments: true,
allow_anonymous: true
})
console.log(invoice)
{
ok: true,
result: {
invoice_id: 1422,
status: 'active',
hash: 'IVuWdeBit4d5',
asset: 'TON',
amount: '0.05',
pay_url: 'https://t.me/CryptoTestnetBot?start=IVuWdeBit4d5',
description: 'Lorem ipsum dolor',
created_at: '2021-11-29T21:10:43.516Z',
allow_comments: true,
allow_anonymous: true,
payload: '{"some":"text"}',
paid_btn_name: 'viewItem',
paid_btn_url: 'https://ton.org',
is_confirmed: false
}
}
{
ok: false,
error: {
code: 400,
name: 'ASSET_INVALID',
supported_assets: [
'BTC', 'ETH',
'TON', 'BNB',
'BUSD', 'USDC',
'USDT'
]
}
}
getInvoices
Use this method to get invoices of your app. On success, the returns array of invoices. Optional object with options as argument
- asset (String) Optional - Currency code separated by comma. Supported assets: BTC, TON, ETH (only testnet), USDT, USDC, BUSD. Default: all assets.
- invoice_ids (String) Optional - Invoice IDs separated by comma.
- status (String) Optional - Status of invoices. Available statusses:
active
orpaid
. Default: all statusses. - offset (Integer) Optional - Offset needed to return a specific subset of invoices. Default
0
. - count (Integer) Optional - Number of invoices to return. Default
100
, max1000
.
Example
const invoices = await myCryptoPay.getInvoices({
status: 'paid'
})
console.log(invoices)
{
ok: true,
result: { count: 1,
items: [
{
invoice_id: 1407,
status: 'paid',
hash: 'IVZZ22QMSmdS',
asset: 'TON',
amount: '0.05',
pay_url: 'https://t.me/CryptoTestnetBot?start=IVZZ22QMSmdS',
description: 'Duis felis ligula, tincidunt vel bibendum vitae',
created_at: '2021-11-29T18:30:15.527Z',
paid_at: '2021-11-29T18:32:36.017Z',
allow_comments: true,
allow_anonymous: true,
paid_anonymously: true,
comment: 'User comment',
is_confirmed: true,
confirmed_at: '2021-11-29T18:34:04.019Z'
}
]
}
}
{
ok: false,
error: {
code: 400,
name: 'STATUS_INVALID',
allowed_statuses: [ 'active', 'paid' ]
}
}
getBalance
Use this method to get balance of your app. Returns array of assets
Example
const balance = await myCryptoPay.getBalance()
console.log(balance)
{
ok: true,
result: [
{ currency_code: 'BTC', available: '0' },
{ currency_code: 'ETH', available: '0' },
{ currency_code: 'TON', available: '100' },
{ currency_code: 'BNB', available: '0' },
{ currency_code: 'BUSD', available: '0' },
{ currency_code: 'USDC', available: '0' },
{ currency_code: 'USDT', available: '0' }
]
}
getExchangeRates
Use this method to get exchange rates of supported currencies. Returns array of currencies
Example
const exchangeRates = await myCryptoPay.getExchangeRates()
console.log(exchangeRates)
{
ok: true,
result: [
{
is_valid: true,
source: 'BTC',
target: 'RUB',
rate: '4352500.00000000'
},
{
is_valid: true,
source: 'BTC',
target: 'USD',
rate: '58208.74'
},
{
is_valid: true,
source: 'BTC',
target: 'EUR',
rate: '51608.27634518'
},
{
is_valid: true,
source: 'BTC',
target: 'BYN',
rate: '148607.32068118'
},
{
is_valid: true,
source: 'BTC',
target: 'UAH',
rate: '1584025.65210026'
},
{
is_valid: true,
source: 'BTC',
target: 'KZT',
rate: '25483546.66840868'
},
{
is_valid: true,
source: 'ETH',
target: 'RUB',
rate: '332729.10000000'
},
{
is_valid: true,
source: 'ETH',
target: 'USD',
rate: '4444.8'
},
{
is_valid: true,
source: 'ETH',
target: 'EUR',
rate: '3940.7907936'
},
{
is_valid: true,
source: 'ETH',
target: 'BYN',
rate: '11347.6055136'
},
{
is_valid: true,
source: 'ETH',
target: 'UAH',
rate: '120955.6712352'
},
{
is_valid: true,
source: 'ETH',
target: 'KZT',
rate: '1945915.1363136'
},
{
is_valid: true,
source: 'TON',
target: 'RUB',
rate: '223.07911600'
},
{
is_valid: true,
source: 'TON',
target: 'USD',
rate: '2.99000000'
},
{
is_valid: true,
source: 'TON',
target: 'EUR',
rate: '2.65095493'
},
{
is_valid: true,
source: 'TON',
target: 'BYN',
rate: '7.63349093'
},
{
is_valid: true,
source: 'TON',
target: 'UAH',
rate: '81.36641851'
},
{
is_valid: true,
source: 'TON',
target: 'KZT',
rate: '1309.00968718'
},
{
is_valid: true,
source: 'BNB',
target: 'RUB',
rate: '46613.00000000'
},
{
is_valid: true,
source: 'BNB',
target: 'USD',
rate: '622.7'
},
{
is_valid: true,
source: 'BNB',
target: 'EUR',
rate: '552.0901789'
},
{
is_valid: true,
source: 'BNB',
target: 'BYN',
rate: '1589.7574589'
},
{
is_valid: true,
source: 'BNB',
target: 'UAH',
rate: '16945.4410723'
},
{
is_valid: true,
source: 'BNB',
target: 'KZT',
rate: '272615.4957214'
},
{
is_valid: true,
source: 'BUSD',
target: 'RUB',
rate: '74.72000000'
},
{
is_valid: true,
source: 'BUSD',
target: 'USD',
rate: '1.00000000'
},
{
is_valid: true,
source: 'BUSD',
target: 'EUR',
rate: '0.88660700'
},
{
is_valid: true,
source: 'BUSD',
target: 'BYN',
rate: '2.55300700'
},
{
is_valid: true,
source: 'BUSD',
target: 'UAH',
rate: '27.21284900'
},
{
is_valid: true,
source: 'BUSD',
target: 'KZT',
rate: '437.79588200'
},
{
is_valid: true,
source: 'USDC',
target: 'RUB',
rate: '74.60840000'
},
{
is_valid: true,
source: 'USDC',
target: 'USD',
rate: '1.00000000'
},
{
is_valid: true,
source: 'USDC',
target: 'EUR',
rate: '0.88660700'
},
{
is_valid: true,
source: 'USDC',
target: 'BYN',
rate: '2.55300700'
},
{
is_valid: true,
source: 'USDC',
target: 'UAH',
rate: '27.21284900'
},
{
is_valid: true,
source: 'USDC',
target: 'KZT',
rate: '437.79588200'
},
{
is_valid: true,
source: 'USDT',
target: 'RUB',
rate: '74.73000000'
},
{
is_valid: true,
source: 'USDT',
target: 'USD',
rate: '1.00000000'
},
{
is_valid: true,
source: 'USDT',
target: 'EUR',
rate: '0.88660700'
},
{
is_valid: true,
source: 'USDT',
target: 'BYN',
rate: '2.55300700'
},
{
is_valid: true,
source: 'USDT',
target: 'UAH',
rate: '27.21284900'
},
{
is_valid: true,
source: 'USDT',
target: 'KZT',
rate: '437.79588200'
}
]
}
getCurrencies
Use this method to get supported currencies. Returns array of currencies
Example
const currencies = await myCryptoPay.getCurrencies()
console.log(currencies)
{
ok: true,
result: [
{
is_blockchain: true,
is_stablecoin: false,
is_fiat: false,
name: 'Bitcoin',
code: 'BTC',
url: 'https://bitcoin.org/',
decimals: 8
},
{
is_blockchain: true,
is_stablecoin: false,
is_fiat: false,
name: 'Ethereum',
code: 'ETH',
url: 'https://ethereum.org/',
decimals: 18
},
{
is_blockchain: true,
is_stablecoin: false,
is_fiat: false,
name: 'Toncoin',
code: 'TON',
url: 'https://ton.org/',
decimals: 9
},
{
is_blockchain: true,
is_stablecoin: false,
is_fiat: false,
name: 'Binance Coin',
code: 'BNB',
url: 'https://binance.org/',
decimals: 18
},
{
is_blockchain: false,
is_stablecoin: true,
is_fiat: false,
name: 'Binance USD',
code: 'BUSD',
url: 'https://www.binance.com/en/busd',
decimals: 18
},
{
is_blockchain: false,
is_stablecoin: true,
is_fiat: false,
name: 'USD Coin',
code: 'USDC',
url: 'https://www.centre.io/usdc',
decimals: 18
},
{
is_blockchain: false,
is_stablecoin: true,
is_fiat: false,
name: 'Tether',
code: 'USDT',
url: 'https://tether.to/',
decimals: 18
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Russian ruble',
code: 'RUB',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'United States dollar',
code: 'USD',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Euro',
code: 'EUR',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Belarusian ruble',
code: 'BYN',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Ukrainian hryvnia',
code: 'UAH',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Pound sterling',
code: 'GBP',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Renminbi',
code: 'CNY',
decimals: 8
},
{
is_blockchain: false,
is_stablecoin: false,
is_fiat: true,
name: 'Kazakhstani tenge',
code: 'KZT',
decimals: 8
}
]
}
Webhooks
Use Webhooks to get updates for the app, it will send an HTTPS POST request to the specified URL, containing a JSON-serialized Update. In case of an unsuccessful request, it will give up after a reasonable amount of attempts.
If you'd like to make sure that the Webhook request comes from Crypto Pay, recommend using a secret path in the URL, e.g. https://www.example.com/<token>
. Since nobody else knows your bot's token, you can be pretty sure it's from cryptopay.
Webhooks will send may at least one time.
How to enable Webhooks?
Open @CryptoBot or @CryptoTestnetBot (for testnet), open your app and tap Webhooks
section to set Webhooks URL
.
Webhooks Updates
- invoice_paid The update send when an invoice was paid by the user. The object includes paid invoice.