Product
Payment links
A URL you can paste into an email, a chat, or a QR on a printed invoice. The payer opens it and sees exactly what to send, where to send it, and how long they have. No account, no app, no card form.
Website build — milestone 2
0.0125 BTC
tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx
Send only BTC on Bitcoin. Anything else is permanently lost.
Two kinds
An invoice, or an open link
The difference is whether you know the amount in advance. Everything else about them is the same.
Invoice
A fixed amount with a deadline. The page shows the exact figure to send and counts down; the request settles when that amount arrives.
- Amount
- Required, and must fit the asset's decimal places
- Expiry
- Defaults to 60 minutes, settable from 1 minute to 7 days
- On short payment
- Stays partial, and keeps accepting top-ups
- On overpayment
- Marked overpaid; the full amount is credited
Donation link
No amount and no deadline — a standing request you can publish once. The page invites any amount, and every payment that lands is credited and reported.
- Amount
- Refused. The payer decides
- Expiry
- None. It stays open until you cancel it
- Each payment
- Credited on arrival and reported as paid
- Best for
- Tip jars, recurring supporters, a public address you control
Both get their own address. A donation link used to reuse the standing deposit address, which broke attribution badly: two links collided, and an ordinary personal deposit to that address was captured by whichever link existed, flipping it to paid and firing a webhook for money that was never a donation. Every request now derives its own address, once, and keeps it.
The hosted checkout
What the payer actually sees
One page, no account, and nothing on it that belongs to you rather than to them.
A QR rendered here
The code is generated on our own server, never handed to a third-party QR service — sending a payment address to someone else's API to be drawn is an unnecessary place for it to be tampered with.
Copyable address and amount
Both are one tap, with the network named next to the address and a plain warning that sending the wrong asset loses it for good.
A countdown that ticks
Every second, in the browser. When it reaches zero the page flips to expired without waiting for a round trip.
Live status
The page polls every six seconds while the request is still payable, and stops the moment it settles or dies — an invoice polling forever is pure noise on someone's data plan.
Nothing of yours leaks
No merchant identity, no internal ids, and not your reference, which may carry order information. The page is marked noindex and sends no referrer.
A return path, if you set one
When a redirect URL is set, a settled page offers a Continue button. It is a button, not an automatic bounce: a payer who wants to screenshot the confirmation gets to.
Every state the page can be in
On any closed request the QR, the address and the explorer link are all withheld. There is nothing left to pay, so offering somewhere to send money would be an invitation to lose it.
Partial payments, in full
A customer who sends 0.004 against a 0.0125 invoice has not paid it.
The request goes to partial,
the page changes its heading from "Amount due" to "Remaining", and
the QR now encodes what is still outstanding.
-
Top-ups are welcome
A partial invoice keeps accepting payment even past its deadline. The customer's money is already on chain; expiring it would leave them paid and unserved.
-
Each payment is counted once
Credits are keyed on the chain transaction, so a redelivered confirmation cannot mark an invoice paid twice.
-
You are told about the shortfall
The running total and the outstanding remainder are on the object and in every callback, so your system can decide what a part-payment means to it.
Expiry and cancellation
A stale quote is not a promise
Crypto prices move. An invoice priced an hour ago in an asset that has moved 4% is a liability, which is why invoices carry a deadline by default.
Expiry
-
60 minutes by default
Settable from 1 minute up to 7 days when you create the request. Donation links ignore it entirely — they do not expire.
-
Swept on a schedule
A job runs every few minutes and closes invoices past their deadline, firing payment.expired as it does.
-
Untouched invoices only
A partially paid invoice is left alone by the sweep. Closing it would strand money someone has already sent.
-
Late money is still yours
A payment that lands on an expired invoice is credited, and reported as payment.late rather than payment.paid — so you are not told to ship an order you had written off.
Cancelling
One call closes a request early. The hosted page stops offering anywhere to pay and the public endpoint answers 404 — the link is dead, not merely discouraged.
curl -X POST \
https://cryptogate.foundrcode.com/api/merchant/v1/payment-requests/1042/cancel \
-H "Authorization: Bearer $CRYPTOGATE_KEY"
A request that has already settled cannot be cancelled, and the attempt is refused rather than accepted quietly. The money is on a chain — marking the record cancelled would make our story disagree with the ledger, and the ledger would be the one telling the truth.
Send your first link
Create one in the dashboard, or POST a payment request and paste the URL you get back.