Pay with cryptocurrency
Add credit by sending cryptocurrency to your own deposit address, and follow each deposit until it is credited.
You pay in cryptocurrency by adding it to your credit balance. Coritan gives you a deposit address of your own, tells you exactly how much to send for the credit you want, and credits your balance in US dollars once the transfer has enough confirmations. That credit then pays for orders, renewals and hourly charges like any other credit (How Coritan spends credit).
Before you begin
Section titled Before you begin- Sign in to the dashboard.
- Have a wallet or exchange account that can send the coin on the network you choose. For XRP, it must be able to send a destination tag.
- Decide how much credit you want. In the dashboard, one deposit is between $1.00 and $10,000.00.
- Make sure Coritan has issued you an address for the network. The dashboard shows an address only once Coritan has issued it, and it does not issue the first one. If you have never had an address for the network, issue it with the API (Get your deposit address). One address serves six networks (Networks and addresses).
Send a deposit
Section titled Send a deposit- In the sidebar, select Billing. The Add credit card is on the Overview tab.
- Under Amount, choose the credit you want, or choose Other and type an amount in US dollars.
- Under Pay with, choose Crypto.
- Under Coin, choose the coin and the network you will send it on, for example
USDC on Base. The minimum for that coin shows under the list, for exampleMinimum $0.50 for USDC. - Select Show where to send. The card shows
Send USDC on Base, the amount under Send exactly, your address, a QR code and a countdown such asSend within 29:48. - From your wallet, send exactly that amount to that address before the countdown ends. Use Copy amount and Copy address, or scan the QR code, which carries the amount as well. For XRP, also send the destination tag shown under Include the destination tag (Copy destination tag).
- Select I have sent it. While the page is open, the card looks for your transfer every 15 seconds. Once the transfer appears, it shows its progress, for example
Seen on the network: 3 of 15 confirmations.
You can close the page after step 7. Coritan also watches your address in the background and credits the deposit without the page open. To stop the card looking, select Stop checking.
Result
Section titled ResultWhen the transfer has all its confirmations, the card shows Deposit credited to your balance. and your balance goes up. The deposit appears on the Transactions tab as a credit with a description such as 25.05 USDC deposit on Base, and Crypto under Paid with (Transactions and payment attempts).
While a deposit is confirming, the Overview tab lists it under a notice such as 1 crypto deposit on the way, with its confirmations so far.
The credit does not pay an open invoice by itself. Coritan takes it the next time it tries to collect a renewal, or you can pay the invoice with Account credit at once (Pay an invoice). To have a deposit pay a particular invoice as soon as it arrives, quote it for that invoice with the API (Get the amount to send).
How much you are credited
Section titled How much you are creditedThe amount under Send exactly is worked out from three parts, and the line under the address lists them:
- The coin's rate
- The market price less a spread, both shown in the quote. By default USDT and USDC have no spread and count as $1.00 each while they trade within 2 cents of $1.00. ETH and SOL have a 1.5% spread by default, and other coins 2%.
- The network fee
- What it costs to move your deposit on that network. It differs a lot from one network to another and changes with the network's own fees. Each quote shows it, so for a small amount, compare a few coins and choose one with a low fee.
- A margin for price changes
- For coins other than USDT and USDC, the amount includes an extra 2%, so a drop in price while you send does not leave you short.
Coritan credits what arrives: its value at the rate, less the network fee. Nothing is kept back from the margin, so the credit shown in the quote (Credits about $25.00) is often a little more than the amount you asked for. If you send less than the quote, you receive less credit; if you send more, you receive more.
The countdown is how long Coritan holds the rate: 30 minutes. A transfer that first appears on the network before the countdown ends is credited at the quoted rate, however long its confirmations take. If the price has gone up by then, you get the higher rate. If it has gone down by more than about 2%, the credit is less than quoted, because Coritan raises the new rate by no more than 2%. A transfer that appears after the countdown ends is credited at the rate at that time.
A transfer below the coin's minimum is still credited, less the network fee. A transfer worth less than its own network fee credits nothing.
Networks and addresses
Section titled Networks and addressesYour addresses are permanent: each one stays yours and receives any number of deposits. One address serves every network of the same kind.
| Network | Your address | Confirmations by default |
|---|---|---|
| Ethereum, BNB Smart Chain, Base, Polygon, Arbitrum One, OP Mainnet | One address for all six networks | Ethereum 6, BNB Smart Chain 7, Polygon 10, the others 15 |
| Solana | An address of its own | 1 |
| Tron | An address of its own | 10 |
| Dogecoin | An address of its own | 10 |
| XRP Ledger | Coritan's shared address, with a destination tag that is yours | 1 |
The Coin list shows which coins and networks Coritan accepts at the moment, such as USDT on Tron or ETH on Arbitrum One. Bitcoin is not accepted.
Warning
Send only a coin and network from the Coin list. Coritan credits a listed coin on any network your address serves, but it cannot recover a coin or network that is not in the list. On the XRP Ledger, a transfer without your destination tag cannot be matched to your account.
Troubleshooting
Section titled Troubleshooting- Crypto is not under Pay with
- Coritan is not taking crypto deposits at the moment. Add credit another way (Add credit to your balance).
- Crypto deposits are not available right now
- No coin can be credited at the moment. Pay by card or PayPal, or try again later.
- Could not load the coins you can send
- The list did not load. Select Try again.
- The address shows
—and there is no countdown - Coritan has not issued you an address for that network yet. Issue it with the API (Get your deposit address), then select Show where to send again. Do not send anything until the address shows.
Choose an amount first.- The amount is missing or outside $1.00 to $10,000.00. Choose another amount.
Could not work out how much to send- Coritan could not quote the coin, often because it has no current price for it. The message under it gives the reason. Try again in a few minutes, or choose another coin.
The network fee would use up this deposit. Choose another coin or a larger amount.- The amount is too small for that network's fee. Choose a network with a lower fee, or a larger amount.
- We no longer hold this rate
- The countdown ended before you sent. Do not send the old amount: select Get a new amount and send the new one. If you already sent the old amount after the countdown ended, Coritan credits it at the current rate.
- A deposit is on hold
- The Overview tab shows a notice such as
1 crypto deposit on hold, with the reason beside each deposit. When the reason is a price Coritan cannot read, it credits the deposit on its own once the price is available again. For any other reason, or if nothing changes, select Open a ticket. - A deposit has all its confirmations but is not credited
- Wait a few minutes and check again. If it is still not credited, contact support with the transaction hash.
- You sent XRP without the destination tag, or a coin that is not in the list
- Coritan cannot credit it automatically. Contact support with the transaction hash.
Related
Section titled Related- Add credit to your balance
- Pay an invoice
- Transactions and payment attempts
- Turn on automatic top-up
With the API
Section titled With the APIPaying through the API takes the same steps as the dashboard: choose a coin, make sure you have an address, get a quote, send, then follow the deposit. Every amount is in US dollars.
List the coins you can send
Section titled List the coins you can sendGET /billing/crypto/assets lists every coin Coritan can credit right now, one entry per coin and network:
curl https://api.coritan.com/api/v1/billing/crypto/assets \
-H "Authorization: Bearer $CORITAN_TOKEN"
{
"assets": [
{
"network": "base",
"network_name": "Base",
"asset": "USDC",
"display_name": "USD Coin (BASE)",
"chain_family": "evm",
"decimals": 6,
"is_stablecoin": true,
"contract_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"confirmations": 15,
"min_deposit_usd": "0.5000",
"spread_percent": "0",
"market_rate_usd": "1.000000000000000000",
"applied_rate_usd": "1.000000000000000000",
"notes": null
}
]
}
network and asset are the values the other calls take. applied_rate_usd is the market rate less the spread, and chain_family tells you which address a coin uses.
Compare the ways to pay an amount
Section titled Compare the ways to pay an amountGET /billing/crypto/plan quotes an amount on every coin at once, cheapest network fee first. recommended is the cheapest option that can pay the amount, and an option whose network fee would use up the deposit has viable false. Add invoice_id to plan for an invoice's unpaid balance instead: you still send amount, and Coritan uses the invoice's outstanding balance when it has one.
curl "https://api.coritan.com/api/v1/billing/crypto/plan?amount=25" \
-H "Authorization: Bearer $CORITAN_TOKEN"
{
"usd_target": "25.00",
"options": [
{
"network": "base",
"network_name": "Base",
"asset": "USDC",
"send_amount": "25.05",
"send_amount_raw": "25050000",
"decimals": 6,
"you_receive_usd": "25.0007",
"network_fee_usd": "0.0493",
"fee_share": "0.0020",
"market_rate_usd": "1.000000000000000000",
"spread_percent": "0",
"headroom_percent": "0",
"confirmations": 15,
"viable": true,
"good_value": true,
"note": "Credited at 1:1, less approximately $0.05 in network fees."
},
{
"network": "ethereum",
"network_name": "Ethereum",
"asset": "ETH",
"send_amount": "0.010456",
"send_amount_raw": "10456000000000000",
"decimals": 18,
"you_receive_usd": "25.5015",
"network_fee_usd": "0.2463",
"fee_share": "0.0099",
"market_rate_usd": "2500.000000000000000000",
"spread_percent": "1.5000",
"headroom_percent": "2.0",
"confirmations": 6,
"viable": true,
"good_value": true,
"note": "Network fees of approximately $0.25 apply."
}
],
"recommended": {"network": "base", "asset": "USDC"},
"note": "Send the exact amount shown. You are credited what arrives less the network fee, and the amount already allows for the price moving while the transfer confirms, so you will not end up short of the total."
}
good_value is false when the network fee is more than 5% of the amount. A plan holds no rate; get a quote before you send.
Get your deposit address
Section titled Get your deposit addressGET /billing/crypto/address returns your permanent address for a network, and issues it the first time you ask. Asking again, or asking for another network of the same kind, returns the same address.
curl "https://api.coritan.com/api/v1/billing/crypto/address?network=base" \
-H "Authorization: Bearer $CORITAN_TOKEN"
{
"account_id": 4127,
"chain_family": "evm",
"chain_family_name": "EVM",
"address": "0x4f2cexample9e8d7c6b5a4f3e2d1c0b9a8f7e6d5",
"destination_tag": null,
"x_address": null,
"requires_destination_tag": false,
"networks": ["ethereum", "bsc", "base", "polygon", "arbitrum", "optimism"],
"accepted": [
{
"network": "base",
"network_name": "Base",
"asset": "USDC",
"min_deposit_usd": "0.5000",
"confirmations": 15,
"contract_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
}
],
"explorer_url": "https://basescan.org/address/0x4f2cexample9e8d7c6b5a4f3e2d1c0b9a8f7e6d5",
"payment_uri": "ethereum:0x4f2cexample9e8d7c6b5a4f3e2d1c0b9a8f7e6d5@8453",
"qr_svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 45 45\">…</svg>",
"is_permanent": true
}
networks lists every network the address receives on, and accepted every coin Coritan accepts at it. For the XRP Ledger, requires_destination_tag is true, destination_tag is your tag, and x_address holds the address and the tag in one string, so a wallet that accepts it cannot leave the tag off.
Get the amount to send
Section titled Get the amount to sendGET /billing/crypto/quote takes network, asset and amount (more than 0, at most 100000), and optionally invoice_id. The quote holds its rate for 30 minutes (rate_lock_seconds) until rate_locked_until. With invoice_id, Coritan puts your balance towards that invoice as soon as the deposit is credited; pass the invoice's unpaid balance as amount.
curl "https://api.coritan.com/api/v1/billing/crypto/quote?network=base&asset=USDC&amount=25" \
-H "Authorization: Bearer $CORITAN_TOKEN"
{
"network": "base",
"asset": "USDC",
"decimals": 6,
"usd_target": "25.0000",
"market_rate_usd": "1.000000000000000000",
"spread_percent": "0",
"applied_rate_usd": "1.000000000000000000",
"send_amount": "25.05",
"send_amount_raw": "25050000",
"network_fee_amount": "0.05",
"network_fee_usd": "0.0493",
"headroom_percent": "0",
"credited_estimate_usd": "25.0007",
"covers_fee": true,
"minimum_usd": "0.5000",
"confirmations": 15,
"below_minimum": false,
"address": "0x4f2cexample9e8d7c6b5a4f3e2d1c0b9a8f7e6d5",
"destination_tag": null,
"payment_uri": "ethereum:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913@8453/transfer?address=0x4f2cexample9e8d7c6b5a4f3e2d1c0b9a8f7e6d5&uint256=25050000",
"qr_svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 45 45\">…</svg>",
"intent_id": 918,
"rate_locked_until": "2026-09-25T14:30:00.412233+00:00",
"rate_lock_seconds": 1800,
"invoice_id": null
}
Send send_amount (in whole coins; send_amount_raw is the same figure in the coin's smallest unit). payment_uri and qr_svg carry the amount, so a wallet that opens or scans them fills it in. covers_fee is false when the network fee would use up the deposit.
A quote carries address, rate_locked_until and the fields after them only when you already have an address for that network. Without one, it has none of them and holds no rate: get your address first. A new quote for the same invoice, or for a top-up, replaces the one before it, so send the amount from the latest quote.
Follow a deposit
Section titled Follow a depositPOST /billing/crypto/check asks Coritan to look for your transfer now, and answers with your deposits. Send network to look only at that network's address. Coritan reads the network for an address at most once every 20 seconds; in between, the call answers from what it already knows, with chain_checked false and next_check_in_seconds until the next read. The call answers 429 after 12 calls in a minute.
curl -X POST https://api.coritan.com/api/v1/billing/crypto/check \
-H "Authorization: Bearer $CORITAN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"network": "base"}'
The answer has chain_checked, next_check_in_seconds, found (new transfers this read found), and deposits and summary as GET /billing/crypto/deposits returns them. That call lists your deposits newest first (limit, default 50, at most 200), and summary.confirming holds up to five deposits that are not credited yet:
{
"deposits": [
{
"id": 7731,
"network": "base",
"network_name": "Base",
"asset": "USDC",
"amount": "25.05",
"amount_raw": "25050000",
"decimals": 6,
"tx_hash": "0xexampletransactionhash",
"explorer_url": "https://basescan.org/tx/0xexampletransactionhash",
"status": "detected",
"confirmations": 9,
"required_confirmations": 15,
"confirmation_percent": 60,
"credited_usd": null,
"market_rate_usd": null,
"spread_percent": null,
"hold_reason": null,
"first_seen_at": "2026-09-25T14:09:12",
"credited_at": null
}
],
"summary": {
"total": 1,
"pending": 1,
"held": 0,
"confirming": [
{
"id": 7731,
"network": "base",
"network_name": "Base",
"asset": "USDC",
"amount": "25.05",
"status": "detected",
"confirmations": 9,
"required_confirmations": 15,
"confirmation_percent": 60,
"hold_reason": null,
"tx_hash": "0xexampletransactionhash",
"explorer_url": "https://basescan.org/tx/0xexampletransactionhash"
}
]
}
}
GET /billing/crypto/deposits/{deposit_id} returns one deposit in the same shape. A deposit's status is one of these:
detected- Seen on the network and waiting for confirmations.
held- Confirmed, but not credited yet.
hold_reasonsays why, for exampleasset is not enabled for automatic credit, or a price Coritan cannot read, such asprice for ETH is 12 minutes old. credited- Added to your balance.
credited_usdis the amount, and0.0000for a transfer worth less than its network fee.
| Status | detail |
When |
|---|---|---|
404 |
Invoice not found |
The invoice_id is not one of your invoices. |
404 |
Deposit not found |
The deposit is not one of yours. |
409 |
USDC on base is not accepted |
Coritan does not accept that coin on that network. |
409 |
For example price for ETH is 12 minutes old |
Coritan has no current price for the coin, so it cannot quote it. |
409 |
unknown network dogechain or deposit addresses for this network are temporarily unavailable |
Coritan cannot give you an address for that network. |
422 |
A validation error | A parameter is missing, or amount is 0 or less or above 100000. |
429 |
rate_limited, with retry_after_seconds |
More than 12 checks in a minute. Wait for the time in the Retry-After header. |
API operations on this page
| Method | Path | What it does |
|---|---|---|
GET | /api/v1/billing/crypto/assets | Assets we can accept right now |
GET | /api/v1/billing/crypto/plan | Every way to pay this amount in crypto, cheapest first |
GET | /api/v1/billing/crypto/quote | How much to send for a target USD credit, itemised |
GET | /api/v1/billing/crypto/address | This user's permanent deposit address for the network's chain family |
POST | /api/v1/billing/crypto/check | Look for this customer's payment now, and say where it stands |
GET | /api/v1/billing/crypto/deposits | Deposit history, including transfers still confirming |
GET | /api/v1/billing/crypto/deposits/{deposit_id} | One deposit, for polling while it confirms |