← Back to home
Merchant Guide

Accept Bitcoin,
your way.

There are two ways to take payments with BoreLine. The easy way needs no code at all, you share a payment link. The developer way uses our API for full control and automation. Most people start with links and never need more. Pick whichever fits you, you can always switch later.

7 DAYS FREE New to BoreLine? Start a free trial with a fresh empty wallet, create a small test invoice, pay it yourself, and watch the money land in your own wallet before you commit a cent.
THE EASY WAY · NO CODE
Share a payment link

If you can copy and paste a link, you can accept Bitcoin. No coding, no API key, nothing to install. This is the right path for most sellers.

Set up your account once
Register your ZPUB and define your products in the dashboard, each with a name and price. You do this one time. See the Security Guide for how registering your ZPUB keeps your funds fully in your control.
Copy your payment links
Open the Integrate page in your dashboard. Each product has its own ready made payment link. Copy the one you want. There is nothing to configure.
Share it anywhere
Put the link on a button, in an email, in your social bio, or send it in a message. When someone opens it, they see a Bitcoin payment page with the amount and a QR code. They pay from any wallet, and the money lands directly in yours. You can watch every payment confirm in your dashboard.
That is the whole flow
No backend, no API key to protect, no code to write. The link is safe to share publicly, it can only ever create a payment to your own wallet for the product you chose. If you only need to get paid and see it confirmed, you are done here. Read on only if you want automatic order fulfilment or a custom checkout.
Selling physical goods? Collect shipping details
For any product, you can tick Ship in your dashboard to ask the buyer for their name, address, and contact at checkout. Those details appear against the paid order in your dashboard and in your webhook, so you know who to ship to. You are the data controller for that information, BoreLine only stores it to pass to you and automatically deletes it after 90 days. Leave the tick off for digital products and nothing personal is collected.
THE DEVELOPER WAY · API
Integrate with code

Use the API when you want payments built into your own checkout, or you want your site to automatically unlock an order, grant access, or send a download the moment a payment confirms. This path needs a developer and a backend. Everything below is the developer way.

THE BIG PICTURE
Three moving parts

Before the steps, here is the whole flow in one breath, so the rest makes sense.

Your button
A button you design and place on your own site. When a customer clicks it, your site sends one request to BoreLine. You control its look, text, and position completely.
The invoice request
Your site asks BoreLine to create an invoice, sending which product was bought. You can optionally include the customer's email or your own order id as a reference. BoreLine replies with a payment page link. Your site sends the customer to that link.
The confirmation
The customer pays on the hosted page. The moment it confirms on chain, BoreLine alerts your site so you can unlock the order or grant access. The Bitcoin goes directly to your wallet, never through us.
Shipping collection works on the API path too, automatically
You do not have to build shipping or contact collection yourself. The API returns an invoice_url, the same hosted payment page the no code links use. If you send the customer to that invoice_url and the product has Ship ticked in your dashboard, the buyer is asked for their name, address, and contact before paying, exactly like the no code path. Those details arrive in your dashboard and in your webhook, so you know who to ship to, with no extra code on your side. The only time you collect details yourself is if you choose not to use our hosted page and instead build your own payment screen from the raw btc_address and amount we also return. In that fully custom case, our shipping form never appears, so you would gather any details in your own checkout. For almost everyone, redirecting to invoice_url is the simplest path and keeps shipping collection for free.
STEP 1
Build your own button

There is no BoreLine button to embed. Use any button that fits your design. It just needs to run a little code when clicked.

There is no BoreLine button to embed, you use your own. If you just want one that looks good and works, copy the ready made button below. It runs payWithBitcoin() when clicked, which you will set up in the next step.
Live preview
Copy this
<button class="btc-pay-btn" onclick="payWithBitcoin()">
  ₿ Pay with Bitcoin
</button>

<style>
.btc-pay-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: #F0B429;
  color: #0a0a0a;
  font-family: inherit;
  font-size: 15px;
  font-weight: 600;
  border: none;
  border-radius: 8px;
  padding: 14px 28px;
  cursor: pointer;
  transition: transform .15s, box-shadow .15s;
  box-shadow: 0 4px 14px rgba(240,180,41,.25);
}
.btc-pay-btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 6px 20px rgba(240,180,41,.4);
}
</style>
Paste it into your page, change the colours to match your brand if you like, and you are done with the button. The next step is what payWithBitcoin does when it is clicked.
Prefer no code at all? You do not need a button or any of these steps. Just use your product's payment link from the Integrate page, paste it as a normal link on any button your site builder gives you. The steps below are only for a custom coded checkout.
STEP 2
Ask BoreLine to create an invoice

When the button is clicked, your website sends one request to BoreLine with your API key. This call must happen on your website's backend, never in the browser.

Backend only. Never put your API key in front end code.
Your API key is a secret. It must live and be used only on your server, the private side of your site. Never paste it into browser JavaScript, a React or Vue app, a mobile app, an HTML page, or anything a visitor can open and inspect. Anything shipped to the browser can be read by anyone, and a leaked key lets a stranger create invoices on your account. The flow is always: your button calls your own backend, your backend holds the key and calls BoreLine, then returns only the payment link to the browser. If you cannot run a backend, do not use the API, use the no code payment link instead, it is safe to expose because it carries no secret.
Your ZPUB stays with us, handled with care, and off your pages
Your ZPUB is watch only, it can generate receiving addresses but can never spend your funds, so even in the worst case no money is at risk. You register it once and we derive every invoice address from it on our server. We also keep a SHA-256 fingerprint of it and check that the stored ZPUB still matches that fingerprint before deriving any address, so if the ZPUB were ever tampered with in our database, the server refuses to derive, locks the account, and alerts us immediately, no payment could be routed to an altered key. You can verify the same fingerprint yourself at any time on the Verify page. Because it is only a public key, registering it is not handing over custody, your private keys and seed never leave your hardware wallet and we never see them. You also never need to put your ZPUB into your website, app, or checkout code, that work lives entirely on our side. Keeping it out of your front end protects your privacy too, since publishing it would link all your addresses together.
Send a request to https://api.borelinepay.uk/api/invoice with your API key in the header and the order details in the body.
POST https://api.borelinepay.uk/api/invoice
Header:  X-API-Key: your_secret_api_key
Body (JSON):
{
  "email": "customer@example.com",
  "tier":  "starter",
  "months": 1
}
tier is the product key you set in your dashboard, for example starter or pro, this is the only required field. email is optional, just a label so you can tie the payment to a customer or order on your side, BoreLine never emails anyone. months is optional and defaults to 1, useful if you sell access in multiples. You can also send an optional note or a metadata object to carry your own order id.
STEP 3
Send the customer to the payment page

BoreLine replies with everything you need. The one field that matters most is the payment page link.

The reply looks like this.
{
  "invoice_url": "https://api.borelinepay.uk/pay/INV-...",
  "amount_sats": 51275,
  "fiat_amount": 29.00,
  "currency":    "EUR",
  "expires_at":  "2026-06-17T12:00:00Z"
}
Redirect the customer to invoice_url. That hosted page shows the amount, a QR code, and a Bitcoin address. The customer pays from any wallet. You build nothing for this page, it is fully handled for you.
STEP 4
Get told when payment confirms

You should not make customers wait while you watch the blockchain. Instead, give BoreLine a webhook URL in your dashboard settings, and we alert your site automatically the moment payment confirms.

How the alert works
When a payment confirms on chain, BoreLine sends a message to your webhook URL containing the product, the invoice id, and any reference you attached such as an email or order id. Your site reacts however you need, marking the order paid, sending a download link, or granting account access. If a payment is ever reversed by a rare blockchain reorganisation, you get a second alert so you can undo access. Each alert is cryptographically signed so your site can confirm it truly came from BoreLine and not an impostor.
No webhook? You are still covered
Every payment also appears in your dashboard, and the payment page itself updates the customer live. The webhook simply automates fulfilment. If your site is briefly down when an alert is sent, BoreLine retries automatically, so nothing is lost.
PLATFORMS
Where your API key goes

You do not need to run a server. The only rule is that your API key stays in the private side of whatever platform you already use, the part a customer cannot see by opening their browser tools. Every platform below already has that private side. Here is exactly where to put the key and what calls what, in each case.

First, what "private side" means
Your website has two parts. The public part is everything a visitor can see or inspect, your pages, your theme, your JavaScript. The private part is where your platform runs its own logic out of sight, WordPress calls it PHP, hosted platforms call it a function or an app. Your API key must live in the private part and the call to BoreLine must happen there. You are not setting up new infrastructure, you are using the private side your platform already gives you.
Custom built website
If you or a developer built your site, you already have a backend, the code that runs on your host rather than in the browser.

1. Save your API key as an environment variable on your host, for example BORELINE_KEY, so it never appears in your page code.
2. Add one small route on your backend, for example /create-invoice, that reads the API key, calls the BoreLine invoice endpoint, and returns the payment link.
3. Your pay button calls your own /create-invoice route, then sends the customer to the payment link it gets back.

The customer's browser never sees the key. It only ever talks to your own route.
Shopify
Shopify theme files are public, so the key cannot go there. Shopify gives you a private side in two common ways, pick whichever fits.

Option A, a serverless function. Use a free function host such as Cloudflare Workers, Vercel, or Netlify Functions. Store the key there, have the function call BoreLine and return the payment link, and point your storefront button at that function.
Option B, a small private app. If you already run any external service for your store, hold the key there and let it create the invoice.

Either way, your storefront button sends the order details to your function or app, never directly to BoreLine, and then redirects the customer to the returned payment link.
WordPress or WooCommerce
WordPress already runs private code in PHP, so you do not need anything extra.

1. Put your API key in wp-config.php as a constant, or in the settings of a small custom plugin. Both run privately on your host, not in the visitor's browser.
2. Add a short PHP function, hooked to your checkout or a button, that reads the key and calls the BoreLine invoice endpoint using WordPress's built in request function.
3. Take the payment link it returns and redirect the customer to it.

Nothing here lives in a page template or theme file, so the key stays private.
No backend at all? Static site or link in bio
If your whole presence is a static page or a link in bio with no private side anywhere, you cannot safely hold an API key. Use a free function host such as Cloudflare Workers or Netlify Functions as a tiny middle layer, the same as Shopify Option A. It takes minutes to set up and is free at your volume. If that is not an option, talk to us and we will help you find the simplest path for your setup.
Go live checklist
Registered your ZPUB and confirmed a derived address matches your hardware wallet
Defined your products in the dashboard and noted their tier keys
Copied your API key and stored it on your backend, never in the browser
Your button calls your backend, which calls the invoice endpoint
You redirect the customer to the returned payment link
Set a webhook URL so fulfilment happens automatically
Tested with one small real payment from end to end

Once your products are set and your button calls the endpoint, your first invoice is live in minutes.

See plans and pricing