Live Bitcoin · Ethereum · Litecoin · Polygon +4 more
Get paid in crypto.
Keep the books clean.
Share a payment link or call the API. Funds land in a balance you control, on a double-entry ledger that reconciles against the chain — then pay out one address or a thousand.
No card details ever touch your servers. Settlement is on-chain.
Website build — milestone 2
0.0125 BTC
tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx
8
Chains supported
Bitcoin, Ethereum, Litecoin, Polygon, Tron, BNB Chain, Dogecoin, Solana
18
Decimals of precision
Exact decimal maths, never floats
1,000
Recipients per batch
One approval, per-row status
2
Factors on every payout
Password plus an authenticator code
How it works
Three ways to get paid
Start with a link you can paste into an email. Move to the API when you are ready.
Payment links
Create a link with an amount and an expiry, then share it. The payer gets a hosted page with a QR, a countdown and live status.
Learn moreREST API
Create payment requests from your backend with an API key. Signed webhooks tell you the moment one settles.
Learn moreDashboard and app
Watch payments land, move balances between assets, and pay out from a browser or your phone.
Learn moreThe ledger
Your balance is not a number in a spreadsheet
Every movement is a double-entry group that sums to zero. Balances are a cache of the entries, and a scheduled job re-derives them from scratch to prove the two still agree.
What that buys you
-
Money is never a float
Amounts are exact decimal strings end to end. A float cannot hold 0.1, and a satoshi lost to rounding is gone for good.
-
Nothing is credited twice
Deposits are keyed on the chain transaction hash, canonicalised so a query string cannot make one hash look like two.
-
Holds, not optimism
A withdrawal takes a hold the moment it is requested, so the same balance cannot be spent twice while it waits for approval.
-
It is checked, not assumed
Reconciliation runs on a schedule and compares cached balances against re-derived ledger totals.
A deposit, in entries
Once the chain confirms it, a second group moves the same amount from pending to available. A group that does not sum to zero is refused before it is written.
For developers
An API you can read in one sitting
Authenticate with a key, create a payment request, verify the webhook signature. That is the whole integration.
curl -X POST https://cryptogate.foundrcode.com/api/merchant/v1/payment-requests \
-H "Authorization: Bearer $CRYPTOGATE_KEY" \
-H "Content-Type: application/json" \
-d '{
"asset_id": 1,
"title": "Invoice 1042",
"amount": "0.0125",
"reference": "ORD-1042",
"ttl_minutes": 60
}'
Amounts are strings
Send "0.0125", never 0.0125. A JSON number is a float, and a float cannot hold it exactly.
Signed callbacks
Every webhook carries an HMAC-SHA256 signature over the raw body. Compare it with hash_equals.
Idempotent by key
Pass an idempotency key on anything that moves money, and a retry resolves to one payment.
Security
Built for money, not for demos
The parts that protect funds were designed first, and every one of them is covered by a test that fails if it regresses.
Device-aware sign-in
A password from a device we have not seen earns an emailed code before any session exists.
Two factors on payouts
Every path that moves money out demands an authenticator code, on web and on mobile alike.
Secrets stored hashed
API secrets, one-time codes and device identifiers are hashed at rest. A stolen table is not a stolen account.
Sign-in history
Successes and failures both, with device and location, so a stranger trying your password is visible.
Maker and checker
The person who approves a payout batch is not the person who broadcasts it.
Reconciliation on a schedule
Cached balances are re-derived from the ledger and compared, automatically.
Ready to take your first payment?
Create a payment link in a minute, or read the API docs and integrate this afternoon.