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_genesis --free-for-life --cost 0 run it →

Accept Bitcoin.
Own every sat.

BoreLine Pay is fully non-custodial. Every payment goes from your customer straight to your own wallet, on chain, with no middleman and no KYC.

No KYC. No card. Just your ZPUB. Pick a plan later from your dashboard.
// 0 Third parties
// 0 KYC, ever
// 0 Code, share a link
// 1 API call to automate
Two ways to get paid: share a ready made payment link with no code, or call one API endpoint from your own checkout.
POST /api/invoice
// Your checkout sends one request
 
curl -X POST https://api.borelinepay.uk/api/invoice
  -H "X-API-Key: sk_live_••••••••••"
  -d '{"email":"alice@example.com",
      "tier":"pro","months":1}'
 
// BoreLine Pay responds instantly
 
{
  "invoice_url": "https://api.borelinepay.uk/pay/INV-...",
  "btc_address": "bc1qxy2kgdygjrsqtzq...",
  "btc_amount": 0.00045210,
  "status": "pending"
}
 
// Payment confirmed → webhook fires
✓ POST https://yoursite.com/webhooks/payment
✓ Customer access granted

Four steps.
Fully automatic.

From registering your public key to a confirmed payment in your own wallet. No email, no passwords, no third-party custody, ever.

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.

Built for businesses
that take Bitcoin seriously.

01/12
Custody

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.

Fresh address per invoice, from your ZPUB. Funds land straight in your wallet, we never touch your Bitcoin.

Integration

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.

Share a no-code payment link, or create invoices with one plain-HTTP API call. No SDK.

Reliability

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.

The moment a payment confirms, we notify your site with a signed webhook. Nothing to poll, nothing missed.

Selling

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.

Define products and prices in the dashboard. Your checkout picks the product and duration per sale.

Dashboard

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.

Real-time invoices, revenue, and copy-paste code in one clean dashboard, from any browser.

Integration

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.

Plain HTTP works with any stack, React, WordPress, Shopify, custom code. If it can POST, it works.

Security

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.

No passwords to leak. API keys stored as hashes, and your ZPUB fingerprint is checked before every derivation.

Reliability

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.

Payments are re-checked for 6 blocks. If a reorg drops the block, access is revoked and you are alerted.

Custody

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.

No account holds your funds for anyone to freeze. Payments go straight to your wallet, only you can move them.

Reliability

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.

If a payment lands after expiry, we catch it and alert you. No silent payments slip through.

Security

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.

Before your first sale, compare the derived addresses to your wallet and sign once to confirm.

Selling

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.

Charge a custom one-off amount with no code. Optionally collect shipping details, auto-deleted after fulfilment.

Swipe, use the arrows, or your ← → keys
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.
Read whitepaper or download the PDF ↓

Two ways to get paid.
Pick what fits.

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
  • Charge a custom one off amount straight from the dashboard
  • Replay-protected signed webhooks on every payment
  • Blockchain reorg detection built in
Start with a link Read the integration guide
For developers · the API
JAVASCRIPT
// Add to your checkout button handler

async function payWithBitcoin(email, tier, telegram = '') {
  const res = await fetch('https://api.borelinepay.uk/api/invoice', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': YOUR_API_KEY
    },
    body: JSON.stringify({ email, tier, months: 1, telegram })
  });

  const { invoice_url, amount_sats } = await res.json();
  window.location.href = invoice_url;
}
GENESIS BLOCK · 03 JAN 2009 BLOCK 0
// Satoshi's message in Bitcoin's first block

"The Times 03/Jan/2009 Chancellor on
brink of second bailout for banks"

Flat pricing.
No transaction fees.

No percentage cuts, no surprise charges. One flat monthly rate, pick your plan, and keep every satoshi you earn.

... $ ... £ ... CHF ... BLOCK sat/vB
fetching...
Free for life
Genesis
0
forever
one product
Sell one product and take Bitcoin for it, free for life. No card, no trial clock, no catch.
  • One product, unlimited sales
  • No code payment link
  • Hosted invoice page
  • Payments dashboard
  • Non-custodial, funds to your wallet
Start free
Starter
20
... sats
per month
For freelancers and solo operators accepting Bitcoin for the first time.
  • Up to 3 product tiers
  • No code payment links, one per product
  • Hosted invoice pages
  • REST API and signed webhooks
  • Invoice dashboard
  • Set your product prices in any currency
Get started
Most popular
Pro
40
... sats
per month
For online businesses with active customer bases and subscription products.
  • Up to 15 product tiers
  • No code payment links, one per product
  • Hosted invoice pages
  • REST API and signed webhooks
  • Invoice dashboard
  • Set your product prices in any currency
Get Pro access
Business
90
... sats
per month
For teams and high volume operations that need multiple API keys and advanced controls.
  • Everything in Pro
  • Up to 30 product tiers
  • Multiple API keys for your team and sites
  • Higher invoice rate limits
Get Business
PAID IN BITCOIN NO CREDIT CARDS CANCEL ANYTIME ZERO TRANSACTION FEES

Check every payout address against your own key.

BoreLine derives each invoice address from your own wallet. An open-source verifier you run yourself re-derives every address from your key and flags any that does not match, so a compromised server could never reroute your Bitcoin without you catching it. It needs no private key, and your key never leaves your machine.

Runs in your browser, nothing to install Or one click on your computer Optional live monitoring Reconciles payments on chain One file, read every line
SELF TEST · RUNS OFFLINE, NO KEY NEEDED BIP84
// re-derive the public BIP84 test vector, locally
[ok] m/0/0   bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
[ok] m/0/1   bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g
[ok] fingerprint   e06675e6...96fd074
ALL PASSED, this verifier derives honestly
How verification works Open-source verifier

Verifying is optional. You never need it to accept payments. It is simply how we let you check us, any time, instead of asking you to trust us. We built it because we are paranoid about security ourselves.

Frequently asked.

01/13
Custody

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.

Never. Payments go straight from the sender to your hardware wallet. We have no ability to move your funds.

Setup

What's a ZPUB and how do I get it?

A ZPUB is a view-only public key from your hardware wallet's Native SegWit (BIP84) account. 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.

A view-only public key from your wallet's Native SegWit (BIP84) account. It generates receive addresses but cannot spend.

Best practice

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.

No. Use a fresh hardware wallet just for the business, kept separate from your savings. It is the single best practice here.

Payments

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.

Invoices need the exact BTC amount or more. Underpaid ones stay pending until they expire. Each address is unique per invoice.

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.

We keep watching the address for days. If a late payment lands, you get an alert, so nothing slips through silently.

Confirmations

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.

About 10 minutes for one confirmation. We then watch 6 more blocks for reorgs, revoking access and alerting you if one hits.

Integration

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.

The payment is still recorded and the webhook retries automatically. Delivery status shows in your dashboard, nothing is lost.

Trust

Can I verify the addresses are really mine?

Yes. Your dashboard's Verify page shows the derivation path, a SHA-256 fingerprint of your registered ZPUB, and the derived addresses to compare against your Trezor, Ledger, or Sparrow wallet. For every invoice, an open-source verifier you run yourself re-derives the address from your own key and flags any that does not match. If they match, you do not have to trust us.

Yes. The Verify page and an open-source verifier re-derive every address from your own key. If they match, you do not have to trust us.

Security

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.

Yes. It takes two signatures and a 48-hour hold. Your old key keeps receiving until then, and no one can reroute funds without your current device.

Pricing

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.

Never. A flat monthly fee, we take nothing from your transactions. Every satoshi goes directly to your wallet.

Integration

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.

Yes. Share a no-code payment link, or use the API with copy-paste snippets for JavaScript, Python, and PHP.

Billing

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.

In Bitcoin, a flat monthly rate with zero transaction fees on top. No percentage cuts, no hidden charges.

Disclosure

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.

Please tell us, responsible disclosure is welcome. Email borelineapp@proton.me and report security issues privately first.

Swipe, use the arrows, or your ← → keys
Want the full technical picture? Read the BoreLine whitepaper, the complete architecture, security model, and roadmap.

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.

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.

Email support
Our only support channel. Replies land within one business day, usually much faster.
Disclosure
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.

Merchant Portal
Sign in with your username and a one time signature from your hardware device, or request access.
The username you chose when requesting access.
Please wait...
Overview
Live · mainnet
0 of 4
Dashboard
Welcome.
Here is what your wallet received. Funds settle directly on chain, BoreLine never touches them.
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
Received
€0
0 sats
Last 30 days
No payments in this period
Paid invoices
0
received in full
Pending
0
awaiting payment
Expired
0
no payment received
Net kept
100%
zero fees taken
Recent Invoices
No invoices yet
Complete your setup and your first invoice will appear here.
Payments
Invoices
Every payment request across your links, API and point of sale, grouped by the wallet that received it.
Received · paid
0 sats
Paid
0
Pending
0
Expired
0
InvoiceCustomerProductSourceSatsFiatStatusDate
Loading...
Security
Change wallet
Rotate the extended public key (ZPUB) that receives your payments. A deliberate, guarded operation, read what it triggers before you begin.
Current receiving wallet
Verified · you control it
ZPUB HASH
Loading...
m/84'/0'/0'
Derivation
BIP84
Standard
Native SegWit
Address format

This wallet stays active and keeps receiving payments right up until any change you make below completes its security hold. Nothing is interrupted.

What a rotation does
01
48-hour security hold
The change is queued, not instant. You can cancel any time during the hold.
02
Login switches over
After the hold, you sign in with the new wallet only, the old one loses access.
03
Re-verification required
Prove you control the new wallet before any new invoice can be created.
04
Address index resets to 0
Derivation starts fresh at the first address of the new key.
05
History stays intact
Past invoices remain tagged to the wallet that received them, nothing is rewritten.
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.

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
Products
Reusable price tiers. Each one has its own payment link and drops straight into your checkout or API.
Active products
0
Paid orders
0
Revenue
0 sats
Best seller
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.

Setup · Step 3
API keys
Authenticate your requests. Keep it secret, rotate it if it ever leaks. Your webhooks are verified with a separate Webhook Secret on the Settings page.
Keys in use
1 / 1
Plan
Last used
Webhook signing
HMAC-SHA256
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
Setup · Step 4
Integrate
One authenticated call creates an invoice. A signed webhook tells you the moment it's paid, funds land straight in your wallet.
Base URL
https://api.borelinepay.uk/api
Auth
X-API-Key header
Format
JSON
Status
Operational
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. Prefer to read the code first? Runnable Node.js and Python examples are on GitHub ↗.

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.

HTML · CSS
<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:2px; 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>
Step 2 · Create an invoice from your backend

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.

curl https://api.borelinepay.uk/api/invoice \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $BORELINE_PAY_KEY" \
  -d '{ "email": "buyer@example.com", "tier": "starter" }'
// On your backend, e.g. /api/pay
const 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' })
});
const { invoice_url } = await res.json();
return { redirect: invoice_url };
import os, requests
res = requests.post("https://api.borelinepay.uk/api/invoice",
    headers={"X-API-Key": os.environ["BORELINE_PAY_KEY"]},
    json={"email": customer_email, "tier": "starter"})
invoice_url = res.json()["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 against your Webhook Secret (also on the Settings page), then run your own fulfilment. The secret is separate from your API key, so you can rotate it without touching your key.

JavaScript · Node.js
app.post('/webhooks/payment', (req, res) => {
  const sig = req.headers['x-boreline-sig'];
  const ts  = parseInt(req.headers['x-boreline-time']);
  if (Math.abs(Date.now() / 1000 - ts) > 300)
    return res.status(400).send('Replay');
  // HMAC-SHA256 the raw body with your Webhook Secret (Settings page).
  const expected = hmac(WEBHOOK_SECRET, 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 expiry
  if (req.body.event === 'payment.reversed')
    revokeAccess(req.body.email);
  res.status(200).end();
});
Endpoints
POST/api/invoiceCreate
HOOKyour webhookconfirmed · late · reversed
Webhook signing
AlgorithmHMAC-SHA256
Signing keysha256(api_key)
Signed overraw request body
SignatureX-BoreLine-Sig
TimestampX-BoreLine-Time
Key hintX-BoreLine-Key
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
Your account, plan, and integration preferences. Your Bitcoin stays in your own wallet, nothing here can touch your funds.
Plan
Invoice expiry
Webhook
Urgent contact
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.

Webhook
Called on payment.confirmed and payment.reversed events.
HMAC-SHA256 your webhooks with this to verify they came from BoreLine. Separate from your API key.
Changes take effect on your account as soon as you save.
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.

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 wallet
Confirm the wallet you registered is really yours. We derive an address from your ZPUB, you check it matches your own wallet, and no funds move.
Address we derived from your ZPUB · index 0
m/84'/0'/0'/0/0
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
How to check
01
Open your wallet
Sparrow, BlueWallet, Electrum, anything that imported this ZPUB as watch-only.
02
Go to Receive
Find the very first receiving address (index 0, path …/0/0).
03
Compare character by character
It must be identical to the address above. If it differs, your ZPUB is wrong.
04
Confirm below
Sign the confirmation message with that address and submit.
Want to check every invoice automatically, around the clock?
The open source Core Verifier re-derives every invoice address from your key and compares it against what our server issued, live. Optional, and it is on its own page now.
Addresses don't match?
You likely pasted the wrong extended key (an xpub/ypub instead of a zpub, or a different account). Re-enter the correct ZPUB, don't verify until they match.
Derived Addresses tap 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.
Security
Core Verifier Optional
Watch our server in real time, without us revealing any secret. The open source verifier re-derives every invoice address from your own key and compares it against the address BoreLine actually issued. If they ever disagree, you know instantly.
It is all open source on GitHub
Read every line, check the file signatures, and download the tools directly from the public repository.
Open on GitHub ↗
What it does
It is not a demo, and it is not just "derive your own addresses". Using a read only verification token it fetches the addresses we issued for your invoices, and against every one it puts the address you derive locally from your key. Two independent sources, your key on your machine versus our live output, checked side by side. A compromised server could never reroute your funds without you catching it, because it never supplies the key the check runs against. It never sees your private key and cannot move money. It can also reconcile payments against the chain, so a "paid" we report with no on chain funds gets flagged too. Optional. You never need it to accept payments, and skipping it changes nothing about how you get paid. It exists so the security conscious merchant can check us instead of trusting us, and we built it because we are paranoid about security ourselves.
Run it in your browser
One file, nothing to install. Open it, paste your zpub and a verification token, and it checks every address. Leave the tab open and it re-checks on a timer, with an optional desktop notification if a check fails.
Get verify.html ↗
Run it on your computer
No commands to type. Double-click the launcher, use the single-key menu, and after first setup tick "start on reboot" so a window opens by itself and watches around the clock. It can ping your phone over your own Telegram bot, and freeze the account on a mismatch.
Get the tools ↗
Read how verification works →
Your verification token
The verifier needs your zpub and a verification token: a dedicated, revocable credential that unlocks only your address feed, nothing else. It cannot read customer data, move funds, or change settings, and it is separate from any phone you have paired. Generate a new one any time to rotate it, or revoke it to cut off access.
After you rotate your wallet
When you change your ZPUB, invoices created before the change still belong to your old wallet, so the verifier needs both keys to check everything: 1. Put your new zpub in the verifier as usual. 2. Add your previous zpub in the "previous zpub(s)" field of the HTML tool, or pass --prev-zpub to the script (repeatable). Your pre-rotation invoices then verify too. 3. Keep the same verification token. Rotating your wallet does not change it, and does not require a new one. An old invoice shown as "unverified" right after a rotation usually just means you have not added that previous zpub yet. Add it first. Only treat an address as suspicious, or report it, if it stays unverified after you have entered all of your own keys and you did not rotate.
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.
Active pairings
0 / 3
Access
Read only
Each pairing lasts
30 days
Can touch funds
Never
Scan to pair
Open your phone camera and point it at the code.
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.