Receiving bitcoin payments

You need to create a 'charge' to receive payments through OpenNode. A charge contains both a Lightning Network BOLT11 invoice, capable of accepting payments through the LN protocol, and a on-chain address for standard on-chain transactions.

Webhooks

In order to receive notifications when a 'charge' changes its status, you need to subscribe to the 'charge' events. You can subscribe by passing a 'callback_url' parameter on the charge payload.
Charges Webhooks

❗️

Lightning Network limit

The API does not return a lightning invoice when creating a charge with an amount bigger than 500000000 sats (5 BTC).

Example

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'API_KEY'
  },
  body: '{"amount":"4.13","description":"sample_description","currency":"USD","customer_email":"[email protected]","notif_email":"[email protected]","customer_name":"nakamoto","order_id":"21","callback_url":"https://yourwebhook.com","success_url":"https://yoursuccessurl.com","auto_settle":false,"ttl":10}'
};

fetch('https://api.opennode.com/v1/charges', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
const opennode = require('opennode');
opennode.setCredentials('MY_API_KEY', 'dev');

const charge = {
  "amount":"4.13",
  "description":"sample_description",
  "currency":"USD",
  "customer_email":"[email protected]",
  "notif_email":"[email protected]",
  "customer_name":"nakamoto",
  "order_id":"21",
  "callback_url":"https://yourwebhook.com",
  "success_url":"https://yoursuccessurl.com",
  "auto_settle":false,
  "ttl":10
};

opennode.createCharge(charge)
    .then(charge => {
        console.log(charge);
    })
    .catch(error => {
        console.error(`${error.status} | ${error.message}`);
    });
curl --request POST \
  --url https://api.opennode.com/v1/charges \
  --header 'Authorization: API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "amount": "4.13",
    "description": "sample_description",
    "currency": "USD",
    "customer_email": "[email protected]",
    "notif_email": "[email protected]",
    "customer_name": "nakamoto",
    "order_id": "21",
    "callback_url": "https://yourwebhook.com",
    "success_url": "https://yoursuccessurl.com",
    "auto_settle": false,
    "ttl": 10
}'

If the request was correctly sent, the API will reply with a 201 status code and charge object:

{
    "data": {
        "id": "c9628482-2124-4e45-aa64-3708ccca8cdc",
        "description": "sample_description",
        "desc_hash": false,
        "created_at": 1661215876,
        "status": "unpaid",
        "amount": 19362,
        "callback_url": "https://yourwebhook.com",
        "success_url": "https://yoursuccessurl.com",
        "hosted_checkout_url": "https://checkout.opennode.com/c9628482-2124-4e45-aa64-3708ccca8cdc",
        "order_id": "21",
        "currency": "USD",
        "source_fiat_value": 4.13,
        "fiat_value": 4.13,
        "auto_settle": false,
        "notif_email": "[email protected]",
        "address": "2NAyVsR6N8opLW9na23yBhkWqizEmwDVwvm",
        "metadata": {
            "name": "nakamoto",
            "email": "[email protected]"
        },
        "chain_invoice": {
            "address": "2NAyVsR6N8opLW9na23yBhkWqizEmwDVwvm"
        },
        "uri": "bitcoin:2NAyVsR6N8opLW9na23yBhkWqizEmwDVwvm?amount=0.00019362&label=sample_description&lightning=lntb193620n1p3sgfyrpp5vsy5xumnky24rvt3aty94d4srrwy2rhp94yqzwu6er5x9eymh2zsdqawdsk6urvv40kgetnvdexjur5d9hkucqzpgxqzjhsp5uvmlp5xkteze6qmty35kuxe3j8cwzk25zsx7t9z84423peps9h9s9qyyssqp2ydxchkqceyzz4ma68kmjm58pr0pnx3anl48ajqlhfcgzqrpa0j7kxzjygdxujptkqjrkk6gxsag87yx9wcd7ugyauq45skvcg9aygqx5geqv",
        "ttl": 10,
        "lightning_invoice": {
            "expires_at": 1661216474,
            "payreq": "lntb193620n1p3sgfyrpp5vsy5xumnky24rvt3aty94d4srrwy2rhp94yqzwu6er5x9eymh2zsdqawdsk6urvv40kgetnvdexjur5d9hkucqzpgxqzjhsp5uvmlp5xkteze6qmty35kuxe3j8cwzk25zsx7t9z84423peps9h9s9qyyssqp2ydxchkqceyzz4ma68kmjm58pr0pnx3anl48ajqlhfcgzqrpa0j7kxzjygdxujptkqjrkk6gxsag87yx9wcd7ugyauq45skvcg9aygqx5geqv"
        }
    }
}

You can use OpenNode's native checkout experience by redirecting your user to the checkout endpoint:

Development - https://dev-checkout.opennode.com/ {id}
Production -https://checkout.opennode.com/ {id}

If you want to build your own checkout experience you can create BIP21 + BOLT11 QR code using the uri field.


What’s Next