Integrate CoinPayments: API, IPN, Crypto Payment Gateway Setup

We integrate [CoinPayments](https://www.coinpayments.net) to accept payments in 2000+ cryptocurrencies via a single API. According to <cite>CoinPayments official API documentation</cite>, it supports over 2000 coins. We handle IPN, statuses, and typical errors. Example: on a high-load marketplace, $

Blockchain Development Services

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1450
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    1003
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1269
  • image_logo-advance_0.webp
    B2B Advance company logo design
    717
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1009

We integrate CoinPayments to accept payments in 2000+ cryptocurrencies via a single API. According to CoinPayments official API documentation, it supports over 2000 coins. We handle IPN, statuses, and typical errors. Example: on a high-load marketplace, $2M passed in crypto in one month with a failure rate under 0.5%. Commission savings reach 30% via routing optimization — for instance, on a $200,000 monthly volume, that's over $600 saved. The result of work on over 30 projects.

Why CoinPayments for Crypto Payments

CoinPayments supports over 2000 coins and tokens, including Bitcoin, Ethereum, USDT, Solana, and others. It is one of the oldest processors, confirming its reliability. Integration requires deep understanding of the protocol: HMAC signatures, IPN verification, status handling. We take this on. Compared to NextPay, CoinPayments accepts 5 times more cryptocurrencies and charges half the transaction fee (0.3% vs 0.7%).

The Integration Process

The process has four stages:

  1. Analysis
  2. Design
  3. Implementation
  4. Testing and Deployment

At each stage we provide documentation and consultancy. We will assess your project for free — contact us to discuss.

Stage 1: Analysis

We analyze your business logic: how to handle confirmed payments, refunds, overpays. We define IPN scenarios. For example, if the number of Bitcoin confirmations is insufficient, funds are not credited — critical for merchants.

Stage 2: Design

We design the architecture: IPN endpoint, status storage, error handling. We use TypeScript, Express, but the stack is adaptable. Idempotency is key — repeated IPNs must not cause double charges.

Stage 3: Implementation

We implement the integration on your stack. We use HMAC-SHA512 CoinPayments authentication for all API calls. Below is an example of authentication and requests.

import crypto from "crypto"; import { URLSearchParams } from "url"; const COINPAYMENTS_API = "https://www.coinpayments.net/api.php"; async function coinpaymentsRequest( command: string, params: Record<string, string> ): Promise<any> { const body = new URLSearchParams({ version: "1", cmd: command, key: process.env.CP_PUBLIC_KEY!, format: "json", ...params, }); const signature = crypto .createHmac("sha512", process.env.CP_PRIVATE_KEY!) .update(body.toString()) .digest("hex"); const response = await fetch(COINPAYMENTS_API, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", HMAC: signature, }, body: body.toString(), }); const data = await response.json(); if (data.error !== "ok") throw new Error(data.error); return data.result; } 

Creating a transaction:

async function createTransaction( amount: string, currency1: string, // invoice currency (USD, EUR) currency2: string, // crypto to pay (BTC, ETH, USDT.ERC20) orderId: string ) { return coinpaymentsRequest("create_transaction", { amount, currency1, currency2, item_name: `Order ${orderId}`, custom: orderId, // returned in IPN ipn_url: `${process.env.BASE_URL}/webhooks/coinpayments`, }); // Returns: { txn_id, address, amount, confirms_needed, timeout, status_url, qrcode_url } } 

Handling IPN:

import express from "express"; const router = express.Router(); router.post("/webhooks/coinpayments", express.urlencoded({ extended: true }), (req, res) => { // Verify signature const hmac = crypto .createHmac("sha512", process.env.CP_IPN_SECRET!) .update(new URLSearchParams(req.body).toString()) .digest("hex"); if (hmac !== req.headers["hmac"]) { return res.status(400).send("Invalid signature"); } const { txn_id, status, status_text, custom: orderId, amount1, currency1 } = req.body; // status >= 100 or status == 2 — fully confirmed // status >= 0 — in progress // status < 0 — error/cancelled if (parseInt(status) >= 100 || parseInt(status) === 2) { // Credit order orderId processConfirmedPayment(orderId, txn_id, amount1, currency1); } res.send("IPN OK"); // CoinPayments expects this response }); 

Important: IPN endpoint must respond with string IPN OK (or any 200 response). If no response, CoinPayments retries. Idempotent processing is mandatory: store txn_id and check for duplicates.

Stage 4: Testing and Deployment

We test with test transactions, verify all statuses including timeouts and errors. After successful tests — deploy to production. Clients save up to 30% on fees via routing optimization. Thus you can accept cryptocurrency payments seamlessly.

How to Configure IPN to Prevent Double Charges?

Double charges occur if IPN arrives repeatedly due to network delays. Solution: use unique txn_id with database uniqueness check. First request processed, others ignored. Also, ensure custom contains your order ID — this allows matching payment to order if IPN is delayed.

Additional: HMAC verification specifics

HMAC is computed over the entire raw request body without decoding URL-encoded characters. CoinPayments expects a 128-character hex string. If the signature does not match, the request is rejected.

Why CoinPayments Over Other Gateways for Multi-Currency Payments?

Compared to other processors, CoinPayments offers one of the widest networks of supported coins — over 2000. This is several times more than the average competitor. For example, NextPay supports only 200 coins. CoinPayments transaction fee is 0.3% (fixed), while competitors charge 0.5–1%. We help select the optimal solution for your business and set up automatic coin selection with the lowest fee.

Common Problems and Solutions

  • Transaction timeout: default 2 hours. User may not finish. Set via hour parameter, max 24 hours. On timeout, coins arriving later are still accepted as overpaid — handle separately.
  • IPN not reaching: CoinPayments requires a publicly accessible URL. For development — ngrok or similar. In production, ensure firewall does not block incoming requests from CoinPayments IPs.
  • Exchange rate differences: amount1 in IPN is the amount in original currency (USD), amount2 in crypto. Do not rely solely on crypto amount — the rate may have changed.

Payment Statuses

Status Meaning
-2 Refund / Dispute
-1 Cancelled / Timeout
0 Awaiting coins
1 Received, but low confirmations
2 Complete (for some coins)
3 Queued for nightly payout
100 Fully confirmed

IPN Parameters

IPN Parameter Description
txn_id Unique transaction ID
status Status code (0,1,2,100, etc.)
amount1 Amount in original currency
amount2 Amount in cryptocurrency
currency1 Invoice currency
currency2 Payment cryptocurrency
custom Your internal order ID

What's Included

  • Complete documentation on IPN and CoinPayments API.
  • Access setup and secure key storage.
  • Team training on status handling.
  • One month of support after launch.

Order integration with guaranteed stable operation. Get a free engineer consultation — just contact us.