⚡Funds go direct to your wallet⚡Zero custody risk⚡Sign in with your signature⚡Reorg protection built in⚡Webhook on every payment⚡Verify your addresses yourself⚡Works with any website⚡No third parties, ever⚡Funds go direct to your wallet⚡Zero custody risk⚡Sign in with your signature⚡Reorg protection built in⚡Webhook on every payment⚡Verify your addresses yourself⚡Works with any website⚡No third parties, ever
$start_trial--days7--cost0run it →
Accept Bitcoin. Own every sat.
BoreLine Pay is fully non-custodial. We never hold, touch, or move your money. Invoices derive straight from your own cold wallet ZPUB, so every payment goes from your customer to your wallet, on chain, with no middleman.
From registering your public key to a confirmed payment in your own wallet. No email, no passwords, no third-party custody, ever.
Whitepaper
Want the full picture before you start?
The complete model, security architecture, and trust assumptions, in plain language.
Read the whitepaper →
01
Request access
Choose a username and share your watch only ZPUB, the public key that can receive but never spend. Prove the ZPUB is yours with a one time message signature. No funds move, your seed never leaves your hardware device.
02
Confirm and set up
Check your derived addresses against your hardware wallet and sign once to unlock invoicing. Then define your products and share a no code link, or call the API from your own checkout.
03
We watch the chain
BoreLine Pay polls mempool.space every 60 seconds. When payment appears with sufficient confirmations, it triggers automatically.
04
You get paid
The payment lands in your wallet and shows in your dashboard. If you set a webhook, we also POST a signed alert so your site can grant access or mark the order paid automatically.
Why BoreLine Pay
Built for businesses that take Bitcoin seriously.
Zero custody
Invoices derive fresh addresses directly from your ZPUB. Funds land in your hardware wallet the moment they're sent. We never hold, route, or touch your Bitcoin.
No code or one API call
Sell with zero code by sharing a payment link, one per product, or create invoices programmatically with a single POST request that returns the address, exact amount, and a hosted payment page. No SDK, plain HTTP.
Instant payment alerts
The moment a payment confirms on chain, BoreLine notifies your website automatically so it can unlock the order or grant access. Each alert is cryptographically signed, so your site knows it truly came from us. You never poll or check manually, and a payment is never missed.
Your products, your prices
Define your products in the dashboard, each with a name and a price in your chosen currency, from three on Starter up to thirty on Business and unlimited on Enterprise. Your checkout picks the product and the duration per sale, so the same product works for a single purchase or several months at once.
Merchant dashboard
Real-time invoice tracking, payment history, revenue stats, and ready-to-paste integration code. All in a clean dashboard you log into from any browser.
Works with anything
Plain HTTP API means it integrates with any stack. React, WordPress, Shopify, custom Python, whatever you run. If it can make a POST request, it works.
Built to be audited
There are no passwords to leak, you log in by signing a message with your hardware device. API keys are stored only as SHA-256 hashes, never in plaintext. We keep a SHA-256 fingerprint of your ZPUB and check it before deriving any address, so if the stored key were ever altered, the server refuses to derive, locks the account, and alerts us at once. Every ZPUB change is logged and alerts you. Address derivation is atomic, so reused addresses and race conditions are impossible by design.
Reorg protection
Confirmed payments are re-verified for 6 blocks after confirmation. If a blockchain reorganisation removes the confirming block, access is automatically revoked, you are alerted, and the invoice returns to pending. No other simple payment tool handles this.
No custodial accounts
Unlike Coinbase Commerce, there is no account holding your funds for anyone to freeze. Every payment goes straight from your customer to your own wallet on chain. You register only a watch only ZPUB that can receive but never spend, your seed never leaves your hardware wallet, and only you can ever move your money.
Late payment recovery
If a customer's transaction arrives after the invoice expired, we keep watching the address and catch it. You get an alert with the details so you can honour the order or refund. No more silent payments that slip through during network congestion.
Verify before you sell
Before any invoice can be created, you compare the derived addresses against your hardware wallet and sign once to confirm them. This catches a wrong key at setup, so you never accept a payment to an address you do not control.
Custom amounts and shipping
Charge a one off custom amount straight from the dashboard, no code needed. Selling physical goods? Turn on shipping collection per product to capture the buyer's name, address, and contact at checkout, delivered to you and auto deleted after the retention window. This works the same whether you share a no code link or create the invoice through the API, as long as you send the buyer to the hosted payment page.
Read the whitepaper
Understand exactly how it works, before you trust it.
The full technical and security model in plain language: BIP84 derivation, the non-custodial architecture, the trust model, honest limitations, and the roadmap. Everything you need to evaluate BoreLine on your own terms.
The easy way needs no code at all: share a payment link, one per product. The developer way uses the API for a custom checkout and automatic fulfilment. Most sellers start with links and never need more.
Every product gets its own payment link, share it anywhere
No code and no API key needed to start taking payments
Charge a custom one off amount straight from the dashboard
Or use the API for a custom checkout and automatic fulfilment
Reply within one business day, typically much faster.
Not sure yet? Try any plan free for 7 days, no card, no payment, just your ZPUB. Start free →
Questions
Frequently asked.
Do you ever hold my Bitcoin?
Never. BoreLine Pay derives receiving addresses directly from your ZPUB, a view-only public key. Payments go straight from the sender to your hardware wallet. We have no ability to move your funds under any circumstances.
What's a ZPUB and how do I get it?
A ZPUB (or XPUB) is a view-only public key from your hardware wallet. It lets us generate unique receive addresses without any ability to spend. In Trezor Suite: Accounts → Show public key. In Ledger Live: Accounts → Edit → Advanced. In Sparrow: Master Public Keys section.
Should I use my main wallet for this?
No. Set up a fresh hardware wallet just for your business, kept completely separate from any wallet holding your savings, treasury, or investments. Your business wallet's addresses are shared publicly on every invoice and it sees high transaction volume. Keeping it separate protects the privacy and security of the funds you want to keep safe. A new hardware wallet costs little and is the single best practice you can follow here.
What happens if a payment is underpaid?
Invoices require the exact BTC amount or more to confirm. If a customer sends less, the invoice stays pending until it expires. Each address is unique per invoice so there's no confusion between payments.
What if a customer pays after the invoice expires?
We have you covered. Invoices stay open for 6 hours by default, but if a payment still arrives late, for example during heavy network congestion, BoreLine keeps watching the address for several days afterward. If the funds land, you get an alert with the invoice details so you can honour the order or refund the customer. The money is in your wallet either way, and nothing slips through silently.
How long does payment confirmation take?
One on-chain confirmation takes roughly 10 minutes. Once confirmed, BoreLine Pay continues monitoring the payment for 6 more blocks to detect blockchain reorganisations. If a reorg removes the confirming block, access is automatically revoked and you are alerted. No other simple payment tool handles this.
What if my webhook fails?
If your website is temporarily down, the payment is still recorded and the webhook retries automatically on the next monitor cycle. Every confirmed payment in your dashboard shows delivery status. No payment is ever silently lost.
Can I verify the addresses are really mine?
Yes. Your dashboard has a Verify page that shows the derivation path, a SHA-256 fingerprint of your registered ZPUB, and the first derived addresses. Compare them against your Trezor, Ledger, or Sparrow wallet. If they match, you do not have to trust us. You can see it yourself.
Can I change my registered ZPUB later?
Yes, and it is deliberately protected. Changing your registered ZPUB takes two signatures, one from your current hardware device to authorise it and one from the new device to prove you own it, followed by a 48 hour security hold you can cancel any time. Your old key keeps receiving the whole time, and payments only switch once the hold completes. Even someone who got into your account cannot reroute your money without your physical current hardware device.
Do you take a percentage of my sales?
Never. BoreLine Pay charges a flat monthly subscription fee. We take nothing from your transactions. Whether you process one invoice or ten thousand in a month, your fee is the same. Every satoshi your customer pays goes directly to your wallet.
Can I use this with WordPress, Shopify or Ghost?
Yes. The simplest way needs no code at all: share a payment link, one per product, on a button, in an email, or in your bio. For automatic order fulfilment or a custom checkout, use the API, your Integrate page includes copy-paste snippets for JavaScript, Python, and PHP that work with any platform that can make an HTTP request or run custom code.
How do I pay my monthly fee?
You pay in Bitcoin, of course. Your subscription renews monthly at a flat rate with zero transaction fees on top. There are no percentage cuts, no hidden charges, and no surprises. You always know exactly what you owe, and every satoshi your customers pay goes straight to your wallet.
Found a bug or security issue?
Please tell us. Responsible disclosure is genuinely welcome. If you spot a bug, a vulnerability, or anything that looks off, email borelineapp@proton.me. If you suspect a security issue, please report it privately first and give us a chance to fix it before disclosing it publicly. We will never ask for your seed phrase or private keys.
Want the full technical picture? Read the BoreLine whitepaper, the complete architecture, security model, and roadmap.
Get started today
Start accepting Bitcoin in under an hour.
Sign a message to register your ZPUB, then define your products. Share a payment link, no code needed, or paste one snippet for a custom checkout. Your first invoice can be live before the hour is out.
Accepting Bitcoin means you are your own bank. That is the whole point, and it comes with responsibility. This guide covers everything you need to keep your funds, your privacy, and your business secure. Read it once, set things up properly, and you can operate with confidence.
01
Keep your business wallet separate
The single most important rule. Your business wallet and your savings should never be the same wallet.
Use a fresh hardware wallet for receiving payments
Buy a new hardware wallet dedicated only to your business. Never use the same wallet that holds your savings, treasury, or long-term investments. A new device costs little and is the foundation of everything else in this guide.
Sweep funds to cold storage regularly
Do not let large balances accumulate in your receiving wallet. When your business wallet builds up a meaningful amount, move the bulk of it to a separate cold storage wallet that has never been exposed publicly. Keep only what you need for operations in the business wallet. A wallet whose addresses are published on invoices should never hold your life savings.
Treat the business wallet as semi-public
Every invoice exposes a receiving address derived from your ZPUB. Anyone you transact with can observe those addresses. Assume your business wallet activity is visible and plan accordingly. The less it holds, the less anyone can learn about your finances.
02
Protect your seed phrase
Your seed phrase is the master key to your funds. Anyone who has it can take everything. Anyone who loses it loses everything.
Never type your seed phrase into anything connected to the internet
Not into a website, not into a chat, not into a notes app, not into a photo. Your seed phrase should only ever exist on paper or steel, generated and stored offline. BoreLine Pay will never ask for it. No legitimate service ever will.
Back it up on metal, not paper
Paper burns, fades, and gets water damaged. Stamp or engrave your seed phrase onto a steel backup plate and store it somewhere secure. Consider a second copy in a separate physical location in case of fire or theft.
Tell no one
Do not share your seed phrase with business partners, family, support staff, or anyone claiming to help. If someone needs access to business funds, set up a proper multi-signature arrangement instead of sharing a seed.
03
Guard your privacy
Bitcoin is transparent by design. Every transaction is public forever. A few habits keep your financial life private.
Understand that addresses link together
When you spend from multiple addresses in one transaction, you reveal that they belong to the same wallet. This is called common-input ownership. Be mindful when consolidating funds, since it links your receiving addresses together on the public ledger.
Move to private storage in deliberate steps
When sweeping business income to cold storage, send it to a fresh wallet that has no public association with your business. Avoid mixing business funds with personal funds in a way that links your identity to your savings.
Do not publicly tie your name to your business wallet
Avoid posting your business ZPUB or addresses anywhere that links them to your real identity. The more separation between your public business activity and your personal holdings, the safer you are.
04
Secure your operations
Your API key, your website backend, and your devices are part of your attack surface. Lock them down.
Protect your API key like a password
Your API key lets a website create invoices on your account. Store it as a server-side environment variable, never in client-side JavaScript, never committed to a public code repository, never pasted into a support chat. If it leaks, replace it immediately from your dashboard.
What happens if your API key leaks
Good news, your funds are never at risk from a leaked API key. The API key can only create invoices and read your basic profile. It cannot touch your wallet, change your ZPUB, redirect payments, or access any funds. Every payment address is derived from your registered ZPUB, which an API key cannot change. So even in the worst case, all customer payments still flow to your own wallet, never to an attacker. The only nuisance a leaked key allows is someone creating spam invoices on your account. The moment you suspect a leak, open your dashboard and generate a new key. The old one stops working instantly.
How to add your API key without exposing it
Your API key belongs on your website's backend, never in the browser. The rule is simple. Any code a visitor can view by opening their browser developer tools must never contain your API key. Here is how that looks on common setups. On a custom site, store the key as a server-side environment variable and call BoreLine Pay from your backend, never from front-end JavaScript. On Shopify, do not paste the key into theme files or script tags, since those are public. Instead use a small server-side app, a serverless function, or an approved app that holds the key on its own backend, and have your storefront call that. On WordPress or WooCommerce, store the key in wp-config.php or your plugin settings, which live on the backend, not in a page template. The principle never changes. The customer's browser asks your backend to create an invoice, and your backend, holding the key privately, talks to BoreLine Pay. The key never travels to the customer. You never run any Bitcoin server yourself. BoreLine is the payment server. Your backend only makes a single API call to us.
Always verify webhook signatures
Every payment webhook is signed and timestamped. Verify the signature and reject anything older than five minutes before granting access to a customer. This stops attackers from forging fake payment confirmations. Your Integrate page has the exact code.
Keep your devices clean
The device you use to access your dashboard and sign messages should be free of malware. Keep your operating system updated, avoid pirated software, and consider a dedicated device or browser profile for business operations.
Multiple API keys, if your plan includes them
On the Business plan you can create more than one API key, for example one per website or team member. Each key can be revoked on its own from the dashboard without affecting the others, so if one leaks you cut off just that key. Every key, no matter how many you hold, only ever creates payments to your one registered wallet. Keys can never point anywhere else, and creating or revoking them does not touch your wallet. Give each key a clear name so you know what it is for, and revoke any you no longer use.
Payment links are safe to share publicly
Your no code payment links are meant to be public. A link only does one thing, it opens a payment page for a product you defined, and that payment goes straight to your registered wallet. A link contains no API key, no wallet details, and no amount that anyone can tamper with. Even if someone copies or edits your link, they cannot redirect a payment, change your products, or reach your account. The worst anyone can do is pay you. The link is the safe, public front door, your API key is the private back door, never mix the two.
05
Recognise scams
Most losses in Bitcoin come from social engineering, not broken cryptography. Know the patterns.
Anyone asking for your seed phrase is a scammer
There are zero exceptions. Not support, not an admin, not a security alert, not a wallet upgrade. The instant anyone asks for your seed phrase or private key, you know it is an attack. Walk away.
Verify who you are talking to
Scammers impersonate support staff on messaging apps and social media. BoreLine Pay only ever provides support by email, and we will never message you first asking you to take urgent action with your wallet. If someone contacts you claiming to be BoreLine Pay support and creates pressure or urgency, stop and verify through official channels.
Check every link and address twice
Fake websites and clipboard-hijacking malware can swap addresses. Always confirm you are on the correct domain before signing in. When verifying your receiving addresses, compare them directly against your hardware wallet screen, which is the one display an attacker cannot fake.
06
Your account login
BoreLine Pay uses your Bitcoin wallet as your login. This is stronger than any password, but understand how it works.
Signing in is a signature, not a password
There is no password to steal. To sign in, you sign a one-time message with your hardware device, a bit like a fingerprint that proves the device is really yours. This never reveals your private key or seed phrase, and you never type or share them. Even if someone knows your username, they cannot reach your account without your physical hardware device. Once signed in, your dashboard session stays active across page refreshes for up to one hour of inactivity, then asks you to sign in again. Keep your hardware device safe and your account is safe.
ZPUB changes are protected by a 48 hour hold
Changing your registered ZPUB takes two separate signatures, one from your current hardware device to authorize the change and one from the new device to prove you own it. After both are verified, the change is still held for 48 hours before taking effect, and you can cancel instantly during that window. Even someone inside your account cannot reroute your payments without your physical current device. This gives you both a hard cryptographic gate and time to react.
Your username is just a label, not a secret
Your username is only how you find your account at sign in. It is not a secret and it cannot be used to access anything on its own. There is no password tied to it. Even if someone knows your username, they cannot sign in, change your ZPUB, or touch your funds without a signature from your physical hardware device. The thing to protect is your hardware device and its seed phrase, not your username.
07
What happens if something leaks
Security is about layers. Here is exactly what an attacker can and cannot do in each scenario, so you understand how protected you really are.
If your ZPUB leaks on its own
A ZPUB is view-only. Someone who has it can see your receiving addresses, your transaction history, and your balance for that wallet. They cannot spend your funds, cannot sign in, and cannot change anything. A leaked ZPUB is a privacy concern, not a theft risk. This is exactly why we recommend a separate business wallet and regular sweeping. The less it holds, the less anyone learns.
If someone learns your username
Your username alone gives an attacker nothing of value here. They still cannot sign into your dashboard, because signing in requires a signature from your physical hardware device. They cannot start a ZPUB change either, because that can only be initiated from inside an authenticated dashboard session, and it then needs a signature from your current hardware device. Your funds and your account stay out of reach.
If your ZPUB leaks and your username is known
Even in this worst case, your funds stay safe. An attacker holding both still cannot sign into your dashboard, because that requires a signature from your hardware device. And even if they somehow reached an open session, they still cannot change your registered ZPUB, because a change now demands a fresh signature from your current hardware device to authorize it, then a signature from the new device, then a 48 hour hold. Without your physical device, the key can never be rerouted. The one thing you must always keep safe is your hardware device and its seed phrase.
How a ZPUB change actually works
Changing your registered ZPUB is a deliberate, multi-step process designed so no single point of failure can move your funds. It takes two separate signatures, not just one. First, you authorize the change by signing a unique challenge with your current hardware device, proving the request comes from the real owner who still holds the existing ZPUB. This step is what stops a stolen login session, a hijacked cookie, or anyone inside your account from rerouting your funds, because without your current physical device the change cannot even begin. Second, using your new hardware device, you sign a fresh unique message to prove you control the new ZPUB too. Once both signatures are verified, a 48 hour security embargo begins. Throughout the entire embargo your current ZPUB stays fully active, so you keep receiving payments without any interruption, and you can cancel at any point during the hold. When the 48 hours complete, the new ZPUB takes the place of the old one, and from that moment your payments arrive at addresses from your new ZPUB. Logging in is a separate signature from authorizing a change, so even an attacker sitting in an open session still cannot reroute your payments without your current device in hand.
7 DAYS FREEDon't trust us. Verify us.
The best way to be sure about how BoreLine works is to test it yourself, with nothing at stake. Use the 7-day free trial to do exactly that:
Register a fresh ZPUB from a brand new wallet that holds zero funds.
Open the Verify page and check the derived addresses against your wallet, then approve them.
Create an invoice for a tiny amount, 5 dollars for example.
Pay that invoice yourself and watch exactly where the money lands. It goes straight to your wallet.
Repeat as many times as you like. Wait for each payment to confirm in your own wallet before the next.
You never have to trust us, and you can check everything for as long as you want. The flow never changes, it is hard coded. Once you have seen it work with your own eyes and your own coins, you can register your real business wallet with confidence.
Your security checklist
✓Fresh hardware wallet dedicated only to the business
✓Seed phrase backed up on metal, stored offline, shared with no one
✓Large balances swept to separate cold storage regularly
✓API key stored server-side, never exposed publicly
✓Webhook signatures verified before granting access
✓Receiving addresses verified against the hardware wallet screen
✓Confident that no one will ever get your seed phrase
Found a bug or security issue?
Responsible disclosure is genuinely welcome. If you find a bug, a vulnerability, or anything that looks off, please email borelineapp@proton.me. For a suspected security issue, report it privately first and give us a chance to fix it before it goes public. BoreLine Pay will never ask for your seed phrase or private keys, and neither will anyone legitimate.
Set up properly once, and you can run your Bitcoin business with total peace of mind.
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 FREENew 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.
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.
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.
BoreLine Pay ("BoreLine", "we", "us") is operated by BoreLine Pay, based in Germany, Europe. We provide non-custodial Bitcoin payment infrastructure that lets merchants ("you") accept Bitcoin payments directly to their own wallets. By creating an account or using the service, you agree to these terms.
2. What the service does
BoreLine generates unique Bitcoin receiving addresses derived from your own extended public key (ZPUB), monitors the blockchain for incoming payments, and notifies you when a payment confirms. BoreLine is non-custodial. We never hold, control, or have the ability to move your funds. Every payment goes directly from your customer to a wallet that only you control.
3. Your ZPUB and your responsibility
You are solely responsible for the security of your hardware wallet, seed phrase, and private keys. We never see them and can never recover them.
You are responsible for providing a correct ZPUB. Funds sent to addresses derived from a ZPUB you do not control cannot be recovered by us.
You are responsible for verifying that derived addresses match your hardware wallet before accepting payments. We provide tools to do this.
You are responsible for fulfilling orders, handling refunds, and any tax obligations arising from your sales.
4. Subscriptions and payment
Access to BoreLine requires an active subscription paid in Bitcoin, billed at the flat monthly rate shown for your chosen plan. Subscriptions are paid in advance. We take no percentage of your transactions. If a subscription lapses, your account is suspended but your ZPUB, products, and settings are preserved. Because payments are made in Bitcoin and are irreversible, subscription fees are generally non-refundable except where required by applicable law.
5. Acceptable use
You agree not to use BoreLine for any unlawful purpose, including money laundering, financing of illegal activity, fraud, or the sale of goods or services prohibited in your jurisdiction. You are responsible for complying with all laws applicable to your business, including licensing, consumer protection, and anti-money-laundering rules. We may suspend or terminate accounts that violate these terms or applicable law.
6. Availability and "as is"
We work to keep the service reliable, but it is provided "as is" and "as available" without warranties of any kind. We do not guarantee uninterrupted operation, error-free monitoring, or that every payment will be detected within a specific time. Blockchain conditions, network congestion, and third-party data sources are outside our control.
7. Limitation of liability
To the maximum extent permitted by law, BoreLine is not liable for any indirect, incidental, or consequential damages, lost profits, or lost funds arising from your use of the service, including missed or delayed payment detection, incorrect wallet configuration, or blockchain reorganisations. Because we never hold your funds, we are not responsible for the custody, loss, or theft of your Bitcoin. Nothing in these terms limits liability that cannot be limited by law.
8. Changes and termination
We may update these terms; material changes will be posted here with a new date. You may stop using the service at any time. We may suspend or end access for breach of these terms, non-payment, or legal reasons.
9. Governing law
These terms are governed by the laws of Germany, without regard to conflict-of-law rules. Disputes are subject to the competent courts of Germany.
10. Contact
Questions about these terms: email borelineapp@proton.me.
Privacy Policy
Last updated: 23 June 2026
1. Controller
The data controller is BoreLine Pay, based in Germany, Europe. Contact for privacy matters: email borelineapp@proton.me.
2. What we collect
Account data: your chosen username and your extended public key (ZPUB). The ZPUB is view-only; it lets us derive receiving addresses but cannot spend funds.
Payment metadata: invoice records, amounts, derived addresses, transaction IDs, and timestamps. These are public blockchain facts plus the records needed to operate the service.
Customer details you collect: if you enable shipping or contact collection on your invoices, the data your customers enter (such as name and address) passes through our system to you. You are the controller of that data toward your customers.
Technical data: IP address and basic request logs, used for security, rate limiting, and abuse prevention.
3. What we do NOT collect
We never collect your seed phrase, private keys, or any information that could move your funds. We do not require your legal name or email to operate a merchant account. We do not sell your data, and we do not run third-party advertising or tracking.
4. Why we process it (legal bases)
Contract: to provide the service you signed up for (deriving addresses, monitoring payments, notifying you).
Legitimate interests: security, fraud and abuse prevention, and keeping the service reliable.
Legal obligation: where we must retain or disclose data to comply with the law.
5. How long we keep it
We keep account and invoice data for as long as your account is active and as needed to operate the service and meet legal retention requirements. Customer details collected at checkout are retained only as long as needed and then deleted. When you delete your account, we remove your merchant record, ZPUB, API keys, and related data.
6. Sharing
We use a small number of service providers to operate (for example, blockchain data and messaging delivery). We share only what is necessary for them to perform their function. We do not sell personal data to anyone.
7. Your rights
Under the GDPR you have the right to access, correct, delete, restrict, or port your data, and to object to certain processing. You can exercise the two most common rights yourself, instantly, from your dashboard: go to Settings, where Download my data exports everything we hold about your account as a file, and Delete my account permanently removes your merchant record, ZPUB, API keys, and related data. For any other request, or if you need help, email us at borelineapp@proton.me. You also have the right to lodge a complaint with your data protection authority.
8. International transfers
Where data is processed outside your country, we rely on appropriate safeguards as required by law.
9. Changes
We may update this policy; the latest version is always shown here with its date.
Cookie Policy
Last updated: 23 June 2026
Our approach
BoreLine is built to be privacy-respecting. We do not use advertising cookies, third-party tracking, or analytics that profile you across sites.
What we do use
Essential session storage: when you sign in to your dashboard, we store a session token in your browser so you stay logged in. This is strictly necessary for the service to work and is removed when you sign out or the session expires.
No analytics or ad cookies: we do not set marketing or cross-site tracking cookies.
Managing storage
Because we only use strictly necessary storage, no consent banner is required for tracking. You can clear your browser storage at any time through your browser settings; doing so will sign you out of the dashboard.
Changes
If we ever introduce non-essential cookies, we will update this policy and request consent where the law requires it.
Whitepaper
Non-Custodial Bitcoin Payment Infrastructure
Version 1.0 · June 2026 · BoreLine Pay, Germany, Europe
BoreLine Pay is non-custodial Bitcoin payment infrastructure. A merchant accepts Bitcoin payments that settle directly to an account only the merchant holds the keys to, while BoreLine never holds, touches, or is able to move the funds at any point.
Conventional payment processors stand between a merchant and their revenue. They hold balances, take a percentage of every transaction, and retain the power to freeze, reverse, or withhold settlement. BoreLine removes that intermediary by design. A merchant registers the extended public key, known as a ZPUB, of the native SegWit account on their own hardware signing device. From that key alone, BoreLine derives a unique Bitcoin address for each invoice, observes the public blockchain for payment, and notifies the merchant when funds confirm. The value never passes through BoreLine. It cannot, as a structural property of the system rather than a matter of policy.
This document sets out the model, the technical architecture, the security and trust assumptions, and the explicit limitations of the system, so that a technically literate reader can evaluate the claims and verify them independently.
1The problem with custodial settlement
When a merchant accepts Bitcoin through a conventional processor, the Bitcoin does not arrive at the merchant. It arrives at the processor, who records a balance and settles later, often subject to fees, delays, and conditions. This reintroduces the very problems Bitcoin was created to remove:
Custody risk. A third party holds the funds. If that party is breached, becomes insolvent, or chooses to freeze an account, the merchant's revenue is exposed.
Permissioned settlement. The processor can refuse service, demand documentation, or reverse a payout. The merchant receives funds only at the processor's discretion.
Per-transaction fees. A percentage of each sale is taken, scaling with revenue rather than with any real cost of providing the service.
Forfeited sovereignty. The principle that holding the keys is the only true ownership applies to merchants as much as to individuals. A processor-held balance is a claim, not Bitcoin.
For a merchant who adopted Bitcoin precisely for its self-sovereign properties, routing revenue through a custodian defeats the purpose.
2The BoreLine model
BoreLine is built on a single principle: the operator must never be able to reach merchant funds. This is not a promise to behave well. It is a structural consequence of how the system is constructed.
A merchant registers only a ZPUB, the extended public key of the native SegWit account on their hardware signing device. A ZPUB is a public key. It can derive receiving addresses and observe balances, but it carries no spending authority of any kind. The private keys that authorise spending never leave the merchant's signing device and are never transmitted to or seen by BoreLine.
When a customer pays, the transaction is broadcast to the Bitcoin network and arrives at an address derived from the merchant's own key. BoreLine learns that this happened by reading the public blockchain. At no point does value flow through, or rest in, anything BoreLine controls. The merchant receives every satoshi the customer sends, directly, on chain.
The core guarantee. BoreLine derives addresses and observes the chain for payment. It holds no private keys, takes no custody, and has no mechanism to move, freeze, or reverse a single satoshi. Merchant funds are always, and only, under the merchant's own keys.
How a payment flows
The diagram below shows the path of a single payment. The funds move directly from the customer to the merchant's own account on the Bitcoin network. BoreLine sits to the side, deriving addresses from the public key and observing the chain, never on the path the money takes.
Merchant registers ZPUB with BoreLine. Public key only, no private keys ever leave the hardware device.
BoreLine derives a unique address per invoice from that ZPUB and gives it to the customer.
Customer pays directly on chain. The Bitcoin moves customer to merchant, never through BoreLine.
BoreLine only watches the public chain to detect the payment and notify the merchant.
The green line never passes through BoreLine.
3Technical architecture
3.1 Address derivation (BIP84)
BoreLine follows the BIP84 standard for native SegWit pay-to-witness-public-key-hash addresses, the modern bc1q format. From the registered ZPUB at derivation path m/84'/0'/0', BoreLine derives external-chain receiving addresses at successive indexes, m/0/0, m/0/1, m/0/2, and onward. Each invoice is assigned its own freshly derived address, so payments never collide and each is tracked independently.
3.2 A unique address for every invoice
Address reuse harms privacy and complicates accounting. BoreLine derives a new address for each invoice and enforces non-reuse at the database level. There is no practical ceiling. Derivation behaves identically at index five or index five million, so a heavily used account is never a constraint.
3.3 On-chain monitoring
BoreLine observes each invoice address for incoming transactions by querying public blockchain data. A payment is recognised only when a transaction of sufficient value arrives after the invoice was created. A historical balance on a previously used address can never be mistaken for a new payment. This is an important correctness property that prevents a stale transaction from falsely marking an invoice as paid.
3.4 Confirmation and reorganisation handling
An invoice is marked confirmed once the payment receives its first on-chain confirmation. BoreLine continues to observe for several further blocks to detect a chain reorganisation. If a reorganisation removes the confirming block, the merchant is alerted and any access granted on the strength of that payment can be revoked. This is a safeguard that simpler tools omit.
4Security architecture
4.1 What is stored, and what is never seen
✓Stored, and harmless
✓ The registered ZPUB, a public key
✓ A SHA-256 fingerprint of the ZPUB for tamper detection
✓ Invoice records and derived addresses
✓ API keys, stored only as SHA-256 hashes
✕Never stored, never seen
✕ The recovery phrase
✕ Private keys
✕ Any spending authority
✕ Customer card or bank details, of which there are none
Everything under Stored, and harmless is public or one-way hashed. None of it can move a single satoshi.
The ZPUB is retained so that addresses can be derived server side. It is a public key. Possessing it reveals a merchant's addresses and balances, but confers no ability to spend. An exposed ZPUB is therefore a privacy consideration, not a theft risk, which is why BoreLine recommends a dedicated business account and regular sweeping of received funds into cold storage.
The fingerprint is enforced, not merely available. Before deriving any payment address, the server recomputes the SHA-256 of the stored ZPUB and compares it to the stored fingerprint. If the two ever diverge, the telltale sign of the ZPUB having been altered outside the signed change flow, for example by direct tampering with the database, the server refuses to derive, locks the account, and raises an alert. No payment can be routed to a substituted key, because a key that fails this check is never used. The merchant can verify the same fingerprint independently at any time.
4.2 Authentication without passwords
There are no passwords to be leaked. A merchant authenticates by signing a challenge message with their key, cryptographically proving control of the registered account. API keys are stored only as SHA-256 hashes and are shown in full only once, at the moment of creation.
Because the key itself is never retained, it can never be shown again or recovered. This is deliberate. A database that only holds hashes cannot leak usable keys. If a merchant loses a key, the answer is not recovery but replacement: they generate a fresh key, and the lost one stops working at once. Every key action, rotating all keys, revoking a single key, or replacing one key in place, requires a fresh signature from the registered hardware device. A merchant on a plan with several active keys can replace a single lost key without disturbing the others, so one compromised integration never forces the rest to be rebuilt.
4.3 Protected key changes
Changing the registered ZPUB is a sensitive operation and is deliberately resistant to abuse. It requires two signatures, one from the current hardware device authorising the change and one from the incoming device proving control of the new ZPUB, followed by a security hold during which the previous ZPUB continues to receive. An attacker who compromised a merchant's session alone could not silently redirect funds, because the merchant's physical signing device is still required.
4.4 Operational hardening
The server employs atomic writes, an append-only audit log, rate limiting, login lockouts, threading locks for safe concurrency, and standard HTTP security headers. Administrative access is gated and can be restricted to an explicit IP allowlist.
4.5 Scoped read-only access
A merchant often wants to glance at payments from a phone without carrying out any sensitive action. For this, BoreLine issues a separate class of access token, created only from an already authenticated session, that grants read-only visibility and nothing more. A paired device can see invoices, balances, payment history, and the ZPUB fingerprint, but it can never change settings, rotate or reveal an API key, alter the registered ZPUB, or move funds. Those actions remain gated behind a hardware signature.
The distinction is enforced on the server, not merely hidden in the interface. A read-only token is presented in its own request header and can reach only a fixed set of read endpoints; it is structurally incapable of authenticating any operation that changes state. Each pairing carries an expiry and can be revoked at any time from the desktop dashboard, and rotating the registered ZPUB revokes every paired device automatically. A leaked read-only token therefore exposes only the ability to look, never to touch.
5The trust model: do not trust, verify
BoreLine does not ask to be trusted. The system is designed so that every claim in this document can be confirmed by the merchant, independently, before any real money is involved.
Each account includes a verification view showing the derivation path, the SHA-256 fingerprint of the registered ZPUB, and the derived addresses. The merchant compares these against the same key in their own software, whether Trezor Suite, Ledger Live, Sparrow, or any BIP84-compatible tool. If the addresses match, the merchant has proven, without trusting BoreLine, that payments will arrive at their account and nowhere else.
Verify with a free trial, with nothing at stake. Register a fresh ZPUB from a newly created account that holds no funds. Check the derived addresses against your own software and approve them. Create a small invoice, for example five dollars. Pay it yourself and observe exactly where the funds arrive, in your own account. Repeat as many times as you wish, waiting for each payment to confirm. The flow does not change, because it is fixed in code. Only once you have seen it work with your own coins do you register the key for your real business account.
6Payment lifecycle
Invoice created. A unique address is derived from the merchant's ZPUB and assigned to the invoice, together with an amount and an expiry window.
Customer pays. The customer sends Bitcoin to that address, and the transaction is broadcast to the network.
Detection. BoreLine observes the incoming transaction on chain, requiring the full amount or more and a timestamp later than the invoice creation time.
Confirmation. On the first confirmation the invoice is marked paid and the merchant's site is notified through its webhook. Observation continues to guard against a reorganisation.
Late payments. If a payment arrives after expiry, for instance during network congestion, BoreLine keeps observing the address for a grace period and alerts the merchant if funds arrive, so that nothing is silently lost.
Integration is flexible. A merchant can share a no-code hosted payment link, one for each product, or call a single API endpoint for a custom checkout with automatic fulfilment by way of a signed webhook.
7Pricing philosophy
BoreLine charges a flat monthly subscription, paid in Bitcoin. It takes no percentage of any transaction. Whether a merchant settles one invoice or ten thousand in a month, the fee is identical, because the cost of deriving an address and observing the chain does not scale with the value being moved.
This aligns incentives honestly. A percentage-based processor earns more as the merchant grows, extracting rent from that growth. A flat fee charges for the service actually rendered. Every satoshi a customer pays reaches the merchant, and the subscription is the merchant's only cost, known in advance.
A new merchant can begin with a seven-day free trial that carries the full Starter feature set with no payment, then select any plan from the dashboard when ready.
8Limitations and honest disclosures
A credible whitepaper states what a system is not, as plainly as what it is.
BoreLine is infrastructure, not custody and not insurance. Because it never holds funds, it cannot recover, refund, or reverse a payment. Bitcoin transactions are final.
Key security is the merchant's responsibility. BoreLine never sees the recovery phrase or the private keys and therefore can never restore them. A lost recovery phrase means lost funds, exactly as in any self-custody arrangement.
Correct registration matters. Funds derived from a key the merchant does not in fact control cannot be recovered by BoreLine. The verification step exists precisely to rule this out before going live.
Blockchain conditions apply. Confirmation times depend on the state of the network, and detection relies on public blockchain data sources. BoreLine cannot guarantee a specific confirmation time.
Not legal or tax advice. Merchants remain responsible for their own compliance, licensing, consumer-protection, and tax obligations in their jurisdiction.
Provided as is. BoreLine targets high reliability but provides the service without warranty, as set out in its Terms of Service.
9Roadmap
BoreLine's direction follows its founding constraint: strengthen self-sovereignty without ever introducing custody. Planned and exploratory directions include the following.
Area
Direction
Nostr integration
Optional, opt-in payment notifications and a decentralised coordination channel, reducing reliance on any single messaging platform.
Encryption at rest
Encrypting the stored ZPUB so that even the public key is protected at rest, beyond the existing tamper-detection fingerprint.
Hardware status display
A small local-network device that shows incoming payment status at a glance, for merchants who prefer a physical indicator.
Self-host friendliness
Continued reduction of external dependencies so the most sovereignty-minded merchants can run their own instance.
Broader device guidance
Expanded and verified setup paths for additional BIP84-compatible signing devices and software.
Roadmap items describe intent rather than commitment and may change. None of them introduces custody of merchant funds. That constraint is permanent.
10Conclusion
Bitcoin gave individuals the ability to hold money that no other party can touch. BoreLine extends that same property to the act of getting paid. By deriving addresses from a merchant's own public key and never holding funds, it offers the convenience of a payment processor without the custody, the percentage cuts, or the permission.
The design is deliberately verifiable. A merchant need not take any of this on faith. Every claim can be checked against the merchant's own key, with the merchant's own coins, before the system is trusted with a single satoshi. That is the standard self-custody Bitcoiners apply to everything else, and it is the standard BoreLine was built to meet.
Accept Bitcoin. Own every sat. Not a slogan, but a structural fact of how BoreLine operates.
Ready to see it for yourself?
Start a 7-day free trial with no payment, register a fresh ZPUB, and verify a real payment landing in your own wallet before you commit a single sat.
BoreLine Pay · Germany, Europe · boreline.app · Contact: borelineapp@proton.me. This document is informational and does not constitute legal, financial, or tax advice. Bitcoin payments are irreversible. Review the Terms of Service and Privacy Policy before use. Version 1.0, June 2026.
Support
Get in touch.
Reach out any time. You will get a direct reply from someone who knows the system, not a scripted response from a ticket queue.
Our only support channel. Replies land within one business day, usually much faster.
Found a bug or security issue?
Responsible disclosure is genuinely welcome. If you find a bug, a vulnerability, or anything that looks off, email borelineapp@proton.me. For a suspected security issue, please report it privately first and give us a chance to fix it before it goes public. BoreLine Pay will never ask for your seed phrase or private keys.
BoreLine Pay will never ask for your seed phrase or private keys, and will never contact you first asking you to move funds or take urgent action with your account. Anyone who does is an impostor, even if they use our name.
BoreLine Pay
Merchant Portal
Sign in with your username and a one time signature from your hardware device, or request access.
Signing only proves you control the key. It never moves funds and never reveals your private key or seed phrase.
Please wait...
Recover your username.
Prove you control your registered ZPUB and we will show you your username instantly. Nothing here moves funds.
Generate a challenge, sign it with any receiving address from your registered ZPUB, then paste your ZPUB, the address, and the signature.
Sign this in your hardware wallet, then fill in below.
Your username is
Please wait...
1Plan2Details3Verify
Starter
€29/mo
Up to 3 products
Pro
€49/mo
Up to 15 products
Business
€99/mo
Up to 30 products
7-day free trial
Full Starter features. No payment. No card. Just your ZPUB.
FREE
Start free, then choose any plan from your dashboard when you are ready. One trial per wallet.
Use a fresh wallet, and never share your seed phrase.
We only need your ZPUB, a view-only public key. It cannot move your funds.
Set up a new hardware wallet just for receiving payments, separate from any wallet holding your savings, treasury, or investments. This wallet's addresses are shared publicly on invoices and it sees high transaction volume. It should never be the same wallet that stores funds you want to keep private.
3 to 20 characters, lowercase letters, numbers, and underscores. This is how you sign in. There is no password.
Found in Trezor Suite, Ledger Live, or Sparrow under account settings.
First receiving address
This is where a payment would land. It is derived from your key, so only your wallet controls it. You can verify it against your wallet any time.
Tip: a fresh wallet account works best. If your address is not recognised, your wallet may be far along from heavy use, just create a new account in your hardware wallet and use its ZPUB.
Sign in your wallet, paste the signature below.
Wallet heavily used? Set the address index
Leave blank for a normal wallet. Only needed if your wallet is far along from heavy use: enter the index shown next to the address you signed with.
Submitting...
Overview
Setup
0 of 4
Dashboard
Welcome.
Here is everything happening with your Bitcoin payments.
01
→
Confirm Wallet
Check your addresses and sign to confirm
02
2
Define Products
Set up your tiers and pricing
03
3
Get API Key
Copy your API key to authenticate requests
04
4
Start accepting
Share a payment link or integrate the API
Setup complete. Your wallet is confirmed and you are accepting payments.
Revenue received
€0
0 sats from customers
0 paid0 pending0 expired
Last 30 days
No payments in this period
Spending on BoreLine
€0
Your subscription, not revenue
Net position
€0
Revenue minus spending
Plan renews
—
Subscription period
Next address index
0
Your ZPUB derivation
Recent Invoices▼
⚡
No invoices yet
Complete your setup and your first invoice will appear here.
You can upgrade your plan any time from Settings. Your ZPUB, products, and API key stay exactly the same.
Payments
Invoices
Every invoice in one place: payments your customers make to you, and your own subscription payments to BoreLine under "My spending." Tap any invoice for full details.
Invoice
Customer
Product
Source
Sats
Fiat
Status
Date
Loading...
Invoice details
Delete account
Permanently delete your account?
This removes your account and all associated data, your invoices, API keys, settings, and history. It cannot be undone.
Your wallet and funds are not affected. BoreLine only ever held your watch only public key. You will sign with your wallet next to confirm this is really you.
Paired phones
Revoke all paired phones?
Every phone currently paired will lose access immediately. Each one will need to scan a new code to reconnect.
This only affects read only viewing on phones. Your account, funds, and API keys are not touched.
Security
Change Your ZPUB
Your wallet was registered when you signed up. Use this page only if you need to switch to a different hardware wallet. It is a deliberate, two signature process with a 48 hour security hold.
Current registered wallet
ZPUB HASH
Loading...
This wallet stays active and keeps receiving payments right up until any change you make below completes its security hold. Nothing is interrupted.
ZPUB change in progress
NEVER SHARE YOUR SEED PHRASE. Changing your wallet only needs your ZPUB (a public key) and two signatures. We will never ask for your seed.
Step 1 · Authorize with your current device
First, prove you still control your current ZPUB. This is what stops anyone with a stolen login from rerouting your funds. Sign this message with your current registered hardware device.
✓ Current wallet authorization captured.
Step 2 · Add and prove your new wallet
Paste your new ZPUB, check the derived address, then sign a message with the new wallet to prove you own it.
Paste the ZPUB from your new hardware wallet.
New wallet first address
Confirm this matches the first receive address of your new wallet.
Step 3 · Start the 48 hour hold
Submitting begins a 48 hour security hold. Your current wallet keeps receiving the whole time. When the hold ends, payments switch to your new wallet automatically. You can cancel any time during the hold.
Setup · Step 2
Your Products
Each product gets its own payment link. The product key is part of that link, so the server always knows which product and price to charge.
Saved products▼
Add or edit products
Edit a row to change a product. Use the × to remove one. Click Save products to apply your changes.
Tier Key
Display Name
Price
Ship
Tier keys lowercase, no spaces. Tick Ship for physical products to collect the buyer's name, address and contact at checkout.
Currency
Custom one off invoice
For a one time charge that is not one of your fixed products. Enter any amount and get a payment link to send. Nothing is saved as a product, it is a single invoice.
Payment link ready
Setup · Step 3
Your API Key
Use this key to authenticate every request your website makes to BoreLine Pay.
Treat your API key like a password. Never commit it to public repositories or expose it in client-side JavaScript. Store it as a server environment variable.
Live API Key
Generate your key to see it here
You do not have an API key yet. Generate one to start accepting payments through your own checkout. Copy it as soon as it appears, for security it is shown only once.
Your API key is ready. Copy it now and store it safely, it is shown only once.
Lost or leaked your key?
If you lost your API key or it was exposed, generate a new one here. This is the safe fix, we never store your key so it cannot be shown again, but a fresh one takes seconds. The old key stops working immediately.
You will sign with your wallet to confirm, then update your website with the new key. Your checkout keeps working once you paste the new key in.
You have several keys. This resets ALL of them to a single new key. If you only lost one, use Replace next to that key below instead, it leaves your other keys working.
Team API keys
Create separate keys for different sites or team members. Each can be revoked on its own without affecting the others. All keys send payments to your one registered wallet.
New API key created. Copy it now, it is shown only once.
Setup · Step 4
Integrate
Two ways to accept payments. Pick the one that fits you.
No code needed · Payment links▼
The simplest way to get paid. Each product below has its own link. Share it anywhere, a button, an email, your bio, a message. When someone opens it, they get a Bitcoin payment page and the money lands in your wallet. No code, no API key, nothing to install.
These links work only after you have registered your wallet and defined your products.
Define your products first to get payment links.
For developers · API integration
Want automatic order fulfilment, a custom checkout, or payments embedded in your own app? Use the API. The three steps below are the whole flow: a button that calls your backend, your backend creating the invoice, and a webhook telling you when it is paid.
Backend only. Your API key is a secret. Use it only on your server, never in browser JavaScript, a mobile app, or any page a visitor can inspect. A leaked key lets anyone create invoices on your account. If you cannot run a backend, use the no code payment links above instead, they carry no secret.
Step 1 · Add a button to your site
There is no BoreLine button to embed, you use your own. Here is a styled one ready to paste. It calls payWithBitcoin(), which you wire up in Step 2.
Your button calls your own server, your server holds the API key and calls BoreLine, then sends the customer to the returned payment page. Pass a saved product with tier, or a custom amount with amount_fiat.
JavaScript · Node.js
// On your backend, e.g. /api/payconst res = await fetch('https://api.borelinepay.uk/api/invoice', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.BORELINE_PAY_KEY
},
body: JSON.stringify({
email: customer.email,
tier: 'starter'// a saved product key// or for a custom amount instead of tier:// amount_fiat: 49.99, note: 'Custom order'
})
});
const { invoice_url } = await res.json();
// send the customer to the hosted payment pagereturn { redirect: invoice_url };
Step 3 · Verify the webhook and fulfil the order
When the payment confirms on chain, we POST a signed event to your webhook URL (set it on the Settings page). Verify the signature, then run your own fulfilment. The X-BoreLine-Key header tells you which of your keys signed it — matters only if you run several active keys on Business or Enterprise.
JavaScript · Node.js
app.post('/webhooks/payment', (req, res) => {
const sig = req.headers['x-boreline-sig'];
const ts = parseInt(req.headers['x-boreline-time']);
const hint = req.headers['x-boreline-key']; // prefix of the signing keyif (Math.abs(Date.now() / 1000 - ts) > 300)
return res.status(400).send('Replay');
// One key on Starter/Pro; several on Business/Enterprise — pick the// one named by the hint, then sign with its SHA-256 hex.const key = WEBHOOK_KEYS.find(k => k.startsWith(hint)) || YOUR_API_KEY;
const keyHash = sha256(key);
const expected = hmac(keyHash, req.rawBody);
if (!timingSafeEqual(sig, expected)) return res.status(401).end();
if (req.body.event === 'payment.confirmed')
grantAccess(req.body.email, req.body.tier);
if (req.body.event === 'payment.late')
handleLatePayment(req.body.email); // paid after expiryif (req.body.event === 'payment.reversed')
revokeAccess(req.body.email);
res.status(200).end();
});
Full integration guide
Step by step walkthrough with a live button preview, the no code path, and copy paste snippets for JavaScript, Python, and PHP.
Account
Settings
Account
—Permanent
Your username is your account identity and cannot be changed. If you ever forget it, recover it from the sign in screen by signing with your registered ZPUB.
minutes
How long a customer has to pay before the invoice expires. A longer window helps during network congestion. Default is 360 minutes (6 hours).
Urgent contact Optional
If you want us to be able to reach you fast about something urgent on your account, you can leave a Telegram handle. This is entirely your choice. It is never used to sign in, it does not affect your account, and you can remove it at any time.
We will only ever message you first about a security or billing matter, and we will never ask you to move funds or share a seed phrase.
Leave this off and we will only ever contact you by email.
Webhook
Called on payment.confirmed and payment.reversed events.
Your plan
You are on the Starter plan.
Upgrading gives you a fresh month on the new plan starting today, at the new plan price. You keep your ZPUB, products, and API key.
You are on the top self-serve plan. For higher limits, contact us about Enterprise.
Your data
You are in control of your data. Download everything BoreLine holds about your account at any time, or delete your account entirely. Your Bitcoin is never held by BoreLine, it stays in your own wallet, so nothing here can touch your funds.
Delete account
This permanently deletes your account and all associated data: your invoices, API keys, settings, and history. It cannot be undone.
Your wallet and funds are not affected. BoreLine only ever held your watch only public key. To confirm this is really you, you will sign with your wallet, the same way you authorise key changes.
Security
Verify ZPUB and Derivation
Confirm that the addresses we derive from your ZPUB match your hardware wallet. You do not have to trust us, check it yourself.
ZPUB Fingerprint
SHA-256 hash of your registered ZPUB. The server checks the stored key against this fingerprint before deriving any address, and locks the account if they ever differ. You can compare it yourself any time. If it changes without your action, contact support.
ZPUB HASH
Not configured
Derivation Path
Pathm/84h/0h/0h/0/{index}
TypeBIP84 Native SegWit
Next index0
Derived Addressestap to show or hide▼
These are receiving addresses derived from your ZPUB. Open your hardware wallet receive screen and compare them against your address list. They must match exactly, in the same order. This proves the addresses on your invoices are truly yours.
We keep the most recent 30 addresses visible here to keep this view clean. Older used addresses scroll out of view, they are never lost, they always live in your hardware wallet and on the Bitcoin network.
No addresses yet
Your derived addresses will appear here.
Index
Path
Address
Confirm these are your addresses
✓
Wallet confirmed. You have signed to confirm these addresses are yours. You are ready to accept payments.
Once you have checked that the addresses above match your hardware wallet, sign a short message with that same wallet to confirm. This proves you control the wallet and that you want to receive payments to this ZPUB. It moves no funds and changes nothing on chain.
Click Generate confirmation message below.
Pick any of your wallet's receiving addresses from the list above. Tapping a row fills it in here for you, along with its index.
Copy the message and sign it in your wallet with that same address (in Trezor Suite: Sign and Verify, paste, sign).
Paste the signed message back here and confirm.
Mobile
Pair a Phone for Read Only
Scan the code with your phone to check payments, balances, and invoices on the go. A paired phone can only look, never change anything, never touch funds. No sign in needed on the phone.
Scan to pair
Open your phone camera and point it at the code.
Or open this link on the phone:
Paired phones
Active pairings: 0 of 3
Each pairing lasts 30 days, then the phone asks you to scan again. You can pair up to three phones. Adding a fourth drops the oldest automatically.
What a paired phone can do
See invoices, payments, balances, transactions, and your ZPUB fingerprint. Nothing else. It can never change settings, rotate your ZPUB, create keys, or move funds. Those always need a sign in with your hardware device.
Changing your ZPUB automatically revokes all paired phones for safety.