Home Supported Assets Docs FAQ Contact Get Started

The simplest way
to accept crypto.

Add crypto to your checkout in minutes. Bitcoin, Monero and ten more coins, no KYC, a flat 1%, and you withdraw to your own wallet anytime.

Payments landing now
Add it to your store

Live on your store in minutes.

PrivCart works on any store: Shopify, WooCommerce, BigCommerce, or a plain HTML page. Create your account, add it to your checkout, and start taking crypto the same day.

Shopify
Add PrivCart to your checkout
WooCommerce
Drop it into your cart
BigCommerce
Add it to your storefront
Custom HTML
One line of code, any page
Create your account

See the developer docs to add PrivCart to your checkout.

Why PrivCart

Built for crypto.

Legacy processors treat crypto like a credit card. PrivCart treats it like what it is.

No KYC, ever

No sign up, no ID, no waiting on approval. You drop in your API key and start taking payments the same day.

Flat 1% fee

One percent, deducted when the payment confirms on chain. Nothing monthly, no setup cost, and no conversion spread hiding in the rate.

Open source

The code is going public, so you can read exactly what the gateway does with a payment instead of taking our word for it.

Privacy first coins

Real Monero at checkout with no forced swap to something else. Private by design, from payment to withdrawal.

No chargebacks

Once a payment confirms, it is yours. No bank clawing it back weeks later, no friendly fraud to write off.

5 minute setup

Grab an API key, create an invoice, send the buyer to the hosted checkout. No app store review, no contract, no sales call.

Withdraw anytime

Your balance is yours. Send it to any wallet you control whenever you want, with no minimums and no payout schedule.

No tracking

Taking a payment should not mean tracking the buyer. PrivCart never profiles your customers or logs who they are.

Twelve assets, one install

Bitcoin, Monero, stablecoins and more from one integration. You choose what to accept, your buyers choose how to pay.

High risk stores

Built for the stores banks won't touch.

Card processors flag whole industries as high risk by category, then charge two to three times the rate, hold a rolling reserve, and freeze funds without warning. PrivCart does not classify merchants, run underwriting, or hold a reserve. If what you sell is legal, you can take crypto for it, at a flat 1% with no freezes and no chargebacks.

CBD & hempPeptides & researchOnline gamingForex & tradingSaaS & subscriptionsTicketing
Supplements & nutraAdult contentVape & e-liquidDigital goodsDatingTelehealth

No MCC classification. No rolling reserve. No fund freezes. No chargebacks. No country lockouts. A high risk payment gateway that just settles the payment and gets out of your way.

How the money moves

What your customer sees.

Four steps from checkout to money in your wallet. The card is the exact hosted page your buyer sees.

Select cryptocurrency
  • Monero
    XMR · Native
  • Bitcoin
    BTC · Native
  • Ethereum
    ETH · Native
  • Solana
    SOL · Native
  • Tether
    USDT · ERC 20
  • USD Coin
    USDC · ERC 20
  • Dai
    DAI · ERC20
  • Litecoin
    LTC · Native
  • Wrapped Bitcoin
    WBTC · ERC20
  • Frankencoin
    ZCHF · ERC20
  • Sky USD
    USDS · ERC20
  • Tether Gold
    XAUT · ERC20
12 assets live across BTC, ETH, SOL, XMR networks
USDC
316.79 USDC
Waiting for payment
Expires in 14m 51s
0x82827D3776e5c18e186D3c82Dd24Bb2E1bbf1fF9Copy
0 / 12 confirmations
Own a business and want to accept crypto? PrivCart can help!
Awaiting confirmation

Confirming on chain

Customer paid. Waiting for network confirmations.

6 of 12 confirmations
Network Ethereum
Amount 316.79 USDC

Payment received

$316.79

Network Ethereum
Received 316.79 USDC
Fee (1%) 3.17 USDC
Net to balance 313.62 USDC
Point of sale

A crypto POS that works in person, too.

PrivCart is not only an online gateway. Create an invoice, show the QR code at your counter, and the customer scans and pays from their phone. Same flat 1%, same instant on chain confirmation, no terminal hardware to rent and no card rails. Take crypto in your shop, at a market stall, or anywhere you do business.

Ready to accept crypto?

Add PrivCart to any online store and start accepting 12 cryptocurrencies, without handing your business to a payment processor.

Supported Assets

All 12 assets are live and production ready. Settled payments are final, with no chargeback risk.

Majors

Bitcoin, Ethereum, Monero and the core payment coins

XMR

Monero

Digital cash. Ring signatures and stealth addresses make every payment opaque by default.

Reference price
$0.00
0.00%

BTC

Bitcoin

The most recognized crypto in the world and the largest user base at any checkout.

Reference price
$0.00
0.00%

ETH

Ethereum

Home to most of DeFi. One address serves ETH and every ERC 20 token.

Reference price
$0.00
0.00%

LTC

Litecoin

A decade old workhorse. 2.5 minute blocks and fees under a cent.

Reference price
$0.00
0.00%

SOL

Solana

400ms finality and fees under $0.001. Faster than card authorization.

Reference price
$0.00
0.00%

Stablecoins

Dollar and franc pegged, no volatility

USDT

Tether

The most traded stablecoin. What your customer pays is exactly what you receive.

Reference price
$0.00
0.00%

USDC

USD Coin

Circle's regulated stablecoin, fully reserved and attested monthly.

Reference price
$0.00
0.00%

USDS

Sky USD

DAI's successor from the Sky ecosystem. Same decentralized peg, newer governance.

Reference price
$0.00
0.00%

DAI

Dai

The original decentralized stablecoin. No single entity can freeze it.

Reference price
$0.00
0.00%

ZCHF

Frankencoin

A Swiss Franc stablecoin. Take CHF denominated payments on chain from Swiss and European customers.

Reference price
$0.00
0.00%

Wrapped and Commodities

Tokenized Bitcoin and gold

WBTC

Wrapped Bitcoin

Bitcoin on Ethereum rails, backed 1 to 1 with proof of reserves. BTC holders pay without selling their position.

Reference price
$0.00
0.00%

XAUT

Tether Gold

One troy ounce of vaulted Swiss gold per token. Reach precious metals buyers no other gateway touches.

Reference price
$0.00
0.00%

Build your integration with AI

Not a developer? Copy the prompt below and paste it into ChatGPT, Claude, Gemini, or your site builder's assistant. It carries the real PrivCart endpoints, so the assistant writes a correct integration for your platform. You never touch the API by hand.

01

Copy the prompt

Hit copy on the block below. It already contains the live PrivCart endpoints, so the AI will not invent any.

02

Paste and name your stack

Paste into the assistant and tell it your platform: WordPress, Shopify, Next.js, Laravel, plain PHP, whatever you run.

03

Add your key server side

Drop the code in and put your pck_ key on the server, never in the browser. You are taking crypto.

The prompt

Replace the one <...> placeholder with your platform, then paste.

Copy prompt for AI
You are helping me add PrivCart crypto payments to my website.

PrivCart is a REST payment gateway.
  Base URL: https://privcart.xyz
  Auth: every /v1 request needs the header  Authorization: Bearer pck_MY_API_KEY
  My API key is a SECRET. Use it only from my server, never in browser or client code.

Integration flow:

1. My server creates an invoice:
   POST https://privcart.xyz/v1/invoices
   Headers: Authorization: Bearer pck_MY_API_KEY
            Content-Type: application/json
   Body: {"amount":"0.001","asset":"BTC","order_id":"my-order-123","callback_url":"https://MY-SITE/privcart-webhook"}
   amount is a STRING (avoids float rounding).
   asset is one of: BTC, LTC, ETH, SOL, XMR, USDC, USDT, DAI, USDS, WBTC, XAUT, ZCHF
   The 201 response includes: id (the invoice id), receive_address, status ("pending").

2. Send the customer to the hosted checkout page (shows QR, address, amount, live status; no key needed):
   https://privcart.xyz/checkout/INVOICE_ID

3. PrivCart POSTs a signed webhook to my callback_url whenever the status changes.
   Header:  X-PrivCart-Signature: sha256=HEX
   Verify it: HMAC-SHA256 of the RAW request body using my webhook secret, compared constant time to the header value.
   Body shape:
     {"id":"EVENT_ID","event":"invoice.settled","created_at":1700000000000,
      "data":{"invoice":{"id":"INVOICE_ID","order_id":"my-order-123","status":"settled","asset":"BTC","amount":"0.001"}}}
   Events: invoice.created, invoice.confirming, invoice.settled, invoice.expired, invoice.cancelled.
   When event === "invoice.settled", mark the order paid using data.invoice.order_id.

Now write the full integration for my platform: <TELL ME YOUR PLATFORM, e.g. WordPress/WooCommerce, Shopify, Next.js, Laravel, plain PHP>.
Rules: keep the API key on the server only; do not invent endpoints or fields beyond the ones above; use my amount exactly as given.

Security: your API key stays on your server, and a PrivCart invoice's amount is fixed on PrivCart's server, so the browser or the AI's code can never change what a customer is charged. Paste the key into your server config yourself, never give it to the AI.

WordPress integration

Add a crypto checkout to any WordPress or WooCommerce site in about five minutes. One snippet, one shortcode, no plugin to install. Your API key stays on your server.

01

Get an API key

Sign up at privcart.xyz, or grab one instantly with a single request.

02

Paste the snippet

Add the PHP to your theme's functions.php. Your key lives here, server side only.

03

Drop the shortcode

Put [privcart_pay] on any page or product to show a crypto checkout.

1 · Get your API key

Register at privcart.xyz/signup for a dashboard and self serve withdrawals, or get a key instantly with no email.

POST /v1/merchants
curl -X POST https://privcart.xyz/v1/merchants \
  -H "Content-Type: application/json" \
  -d '{"name":"your-shop-name"}'

Save the api_key (pck_...) it returns, it is shown only once.

2 · Add the payment code

In WordPress admin open Appearance, then Theme File Editor, open functions.php, and paste this at the bottom. Replace the key with yours.

functions.php
<?php
// === PRIVCART CRYPTO PAYMENTS ===
// Your API key (KEEP SECRET, server side only).
define('PRIVCART_API_KEY', 'pck_PUT_YOUR_KEY_HERE');

// Shortcode: [privcart_pay asset="BTC" amount="0.0001"]
add_shortcode('privcart_pay', function ($atts) {
    $asset  = $atts['asset']  ?? 'BTC';
    $amount = $atts['amount'] ?? '0.0001';

    $ch = curl_init('https://privcart.xyz/v1/invoices');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            'Authorization: Bearer ' . PRIVCART_API_KEY,
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS => json_encode(['asset' => $asset, 'amount' => $amount]),
    ]);
    $res  = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($code !== 201 && $code !== 200) return '<p>Payment system temporarily unavailable.</p>';
    $invoice = json_decode($res, true);
    if (empty($invoice['id'])) return '<p>Could not create invoice.</p>';

    $url = 'https://privcart.xyz/checkout/' . $invoice['id'];
    return '<iframe src="' . esc_url($url) . '" title="Crypto Payment" '
         . 'style="width:100%;max-width:480px;height:600px;border:none;border-radius:12px;"></iframe>';
});

3 · Add a payment button to any page

Edit a page or product and drop in a shortcode. Change the amount to whatever you charge.

Shortcodes
[privcart_pay asset="BTC"  amount="0.0001"]
[privcart_pay asset="ETH"  amount="0.001"]
[privcart_pay asset="SOL"  amount="0.005"]
[privcart_pay asset="XMR"  amount="0.005"]
[privcart_pay asset="USDC" amount="10"]
[privcart_pay asset="USDT" amount="10"]

What your customer sees

A QR code, the payment address, the exact amount, a 60 minute countdown, and a live status that flips from Waiting for payment to Confirmed to Complete on its own. Works on desktop and mobile. You do nothing manually. PrivCart watches the chain and settles automatically.

Fees

Customer paysFee (1%)Your net credit
0.001 BTC0.00001 BTC0.00099 BTC
0.01 ETH0.0001 ETH0.0099 ETH
10 USDC0.10 USDC9.90 USDC

New accounts are 1%. The fee is taken when the payment confirms on chain, and the rest is credited to your balance, which you withdraw yourself from the dashboard.

Troubleshooting

ProblemFix
Payment system temporarily unavailableYour host may not have PHP curl enabled. Ask them to enable php-curl.
Checkout shows not foundThe invoice expired after 60 min. Refresh the page to mint a new one.
Paid but status did not changeConfirmations take time. BTC about 20 min, ETH about 3 min, SOL near instant. Give it a few minutes.
Wallet says invalid addressThe customer is sending the wrong coin. A BTC wallet cannot pay an ETH address.
Your API key lives only in functions.php on your server, so it never appears in any page a visitor can see, and the checkout iframe carries only a random invoice id, never your key.

Developers

PrivCart is a small REST API. Create an invoice, send the buyer to a hosted checkout, and get a signed webhook when it settles. No SDK, no KYC. Base URL https://privcart.xyz.

Authenticate every /v1 request with your secret key as a bearer token, Authorization: Bearer pck_.... Keys are per merchant, and the public checkout and SSE endpoints need no key. Requests are rate limited to 300 per 60s per IP. The full machine readable spec is at privcart.xyz/docs.

01

Create an invoice

POST an amount and asset from your server. PrivCart returns a unique receive address.

02

Send to checkout

Redirect the buyer to the hosted checkout, QR, address, amount, live status.

03

Verify the webhook

PrivCart POSTs a signed callback when the invoice settles. Verify, then mark the order paid.

1 · Create an invoice, server side

From your backend, never the browser, the API key is a secret. Amounts are strings to avoid float loss.

POST /v1/invoices
curl -X POST https://privcart.xyz/v1/invoices \
  -H "Authorization: Bearer $PRIVCART_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "0.001",
    "asset": "BTC",
    "order_id": "order-12345",
    "callback_url": "https://your-site.com/api/privcart-webhook"
  }'

Request fields:

FieldTypeReqNotes
amountstringyesBase units as a string, e.g. "0.001".
assetstringyesA supported symbol, see below.
order_idstringnoYour reference, up to 128 chars. Echoed in the webhook.
callback_urlstringnoPublic HTTPS webhook target, SSRF guarded.
merchant_addressstringnoOverride receive address, up to 128 chars.
ttl_msintegernoLifetime 1000 to 86400000, default 900000 which is 15 min.
201 Created
{
  "id": "0da553a9-e7f0-4b72-b050-0fdd0db1ccca",
  "order_id": "order-12345",
  "asset": "BTC",
  "amount": "0.001",
  "receive_address": "bc1ql6lc9p7z5ua358zhw8vxlctt0lagnhr9yzfq37",
  "status": "pending",
  "confirmations": 0,
  "min_confirmations": 2,
  "tx_id": null,
  "expires_at": 1782535910571,
  "settled_at": null,
  "created_at": 1782535010000,
  "updated_at": 1782535010000
}

2 · Send the buyer to checkout

PrivCart hosts the checkout, QR, address, amount, and live status over SSE. No key needed for the customer page. Redirect or link to:

Hosted checkout URL
https://privcart.xyz/checkout/<invoice.id>

Building your own checkout UI? Read public invoice fields from GET /v1/invoices/:id/checkout and subscribe to live updates at GET /v1/invoices/:id/stream. A stream event:

GET /v1/invoices/:id/stream (SSE)
data: {"status":"confirming","confirmations":1,"min_confirmations":2}

3 · Verify the webhook

On every status change PrivCart POSTs a signed JSON callback with headers X-PrivCart-Signature: sha256=<hex> and X-PrivCart-Event-Id. Verify the HMAC over the raw body before trusting it.

POST your callback_url
const crypto = require('crypto');

// Mount with the RAW body, e.g. express.raw({ type: 'application/json' })
app.post('/api/privcart-webhook', (req, res) => {
  const raw = req.body;                               // Buffer / raw string
  const sig = req.get('X-PrivCart-Signature') || '';  // "sha256=<hex>"
  const expected = 'sha256=' + crypto
    .createHmac('sha256', process.env.PRIVCART_WEBHOOK_SECRET)
    .update(raw)
    .digest('hex');

  const a = Buffer.from(expected), b = Buffer.from(sig);
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
    return res.status(401).send('invalid signature');
  }

  const evt = JSON.parse(raw);
  // evt.id                    -> event id (dedupe on this)
  // evt.event                 -> "invoice.settled"
  // evt.data.invoice.id       -> the invoice id
  // evt.data.invoice.order_id -> your order reference
  if (evt.event === 'invoice.settled') {
    markOrderPaid(evt.data.invoice.order_id);
  }
  res.status(200).send('ok');   // 2xx acks; non-2xx triggers retry + backoff
});

Get your signing secret (prefix wcs_) from the dashboard, or rotate it with POST /v1/webhooks/rotate-secret. Delivery is at least once with exponential backoff, dedupe on evt.id.

Webhook events

EventFires when
invoice.createdInvoice created.
invoice.confirmingPayment detected on chain, below the confirmation threshold.
invoice.settledPayment reached the confirmation threshold. Mark the order paid here.
invoice.expiredTTL elapsed with no payment.
invoice.cancelledMerchant cancelled the invoice.

Endpoints

Method and pathAuthPurpose
POST /v1/invoiceskeyCreate an invoice.
GET /v1/invoiceskeyList invoices, filter by status, asset, limit, offset.
GET /v1/invoices/:idkeyOne invoice.
GET /v1/invoices/:id/detailkeyInvoice plus lifecycle timeline and webhook deliveries.
POST /v1/invoices/:id/cancelkeyCancel an unpaid invoice.
GET /v1/invoices/:id/checkoutpublicCustomer facing invoice fields, the UUID is the token.
GET /v1/invoices/:id/streampublicSSE live status stream.
GET /v1/assetskeySupported assets plus live config.
GET /v1/dashboardkeyAggregate stats by status and asset.
GET /v1/balanceskeyReceived and swept summaries plus explorer links.
GET /v1/merchants/me/balancekeyWithdrawable balance per asset, confirmed minus fees.
GET / PUT /v1/settingskeyRead or set the default callback_url.
POST /v1/webhooks/rotate-secretkeyRotate the webhook signing secret.
GET /v1/webhooks/eventskeyWebhook delivery log.
POST /v1/merchantspublicSelf serve signup, returns a new key.

Supported assets

SymbolNameKindMin confirmations
BTCBitcoinnative2
LTCLitecoinnative3
ETHEthereumnative12
SOLSolananative1
XMRMoneronative10
USDC USDT DAI USDS WBTC XAUT ZCHFERC-20 tokenstoken (ETH)12

Tokens settle on Ethereum. Decimals: USDC, USDT, XAUT 6; WBTC 8; DAI, USDS, ZCHF 18. Call GET /v1/assets for the authoritative live list and contract addresses.

Errors

StatusErrorCause
400bad_requestMalformed JSON or missing field.
401unauthorizedMissing or invalid API key.
404not_foundResource does not exist.
422validation_errorInvalid amount, unsupported asset, unsafe callback URL.
429rate_limitedRate limit exceeded, 300 per 60s per IP.

All errors return { "error": "type", "message": "detail" }.

Building an integration? Reach the team on Telegram at t.me/privcartsupport, or explore every endpoint interactively at privcart.xyz/docs.

Frequently Asked Questions

Everything merchants ask before installing PrivCart. Still have questions? Reach out on Telegram.

Getting started
Do you require KYC or account registration? +
No. You don't need to register an account or upload ID documents. PrivCart is software you install, not a service you subscribe to.
Which platforms does PrivCart work with? +
Any online store. You get an API key from privcart.xyz and add PrivCart to your checkout; that covers Shopify, WooCommerce, BigCommerce, and custom HTML carts alike.
Which countries does PrivCart work in? +
Everywhere. PrivCart has no regional lockouts and no country approval step. Because there is no KYC and settlement is in crypto, it works the same whether you are in Europe, Asia, Latin America, or anywhere else, including places other processors have pulled out of.
Do I need a specific wallet to use PrivCart? +
No, any wallet works. Payments settle to your PrivCart balance once they confirm, and you withdraw to any wallet you control, whenever you want.
Fees and money
What are the transaction fees? +
A flat 1% per payment, deducted on chain at confirmation. Aside from that, only standard network fees apply when you withdraw.
Can I get paid in fiat or to my bank account? +
No. PrivCart settles in crypto, not fiat. You withdraw your balance in the coins you accepted to a wallet you control. If you want dollars or euros in a bank account, accept a stablecoin like USDC or USDT and convert it yourself at any exchange. PrivCart does not touch fiat or banking rails, which is part of how it stays no KYC.
How are exchange rates calculated? +
PrivCart uses live market data to lock the exact crypto amount at checkout, so it matches your product price in dollars.
How does PrivCart handle price volatility? +
We support stablecoins like USDT and USDC. They hold a 1 to 1 dollar peg, so you can accept crypto without taking on price swings.
What if a customer sends the wrong amount? +
Overpayments go through. Underpayments clear only if they are within 1% of the invoice; otherwise the buyer tops up before the invoice expires or requests a new one. PrivCart does not manually refund customer mistakes.
How do refunds work? +
You send refunds yourself, from your own wallet, back to the customer's address like any other crypto payment. PrivCart does not process refunds for you.
Can I process refunds automatically? +
No. Refunds are manual. You send them from your own wallet; PrivCart never moves money out of a wallet you control.
Privacy and custody
Why Monero? +
Monero is digital cash. Unlike Bitcoin, where everyone can see your balance and history, Monero keeps your business and customer data private. It protects you from surveillance and targeted ads by default.
Why LTC and BTC? +
They are popular. Supporting them helps you reach more customers. We also use their latest privacy features to keep transactions as private as possible within their limitations.
What happens to my funds if PrivCart shuts down? +
The gateway would stop generating new checkouts. Anything you have withdrawn sits in your own wallet where PrivCart cannot touch it, which is a good reason to withdraw regularly rather than letting a balance build up.
Can PrivCart freeze my funds? +
No. We do not freeze balances, place holds, or run account reviews. Your balance is yours to withdraw to any wallet you control, at any time. And once you withdraw, the money sits in a wallet only you control.
Why choose PrivCart over BitPay or Coinbase Commerce? +
Custodial gateways act like banks: KYC, frozen balances, account reviews, high fees. Coinbase Commerce also stopped serving merchants outside the US and Singapore in March 2026. PrivCart works anywhere and skips most of that. No ID upload, no account reviews, no surprise holds, flat 1% per payment, and you withdraw to your own wallet anytime. The trade off is that you take the volatility on volatile coins, but that is yours to manage.
Project
Is PrivCart open source? +
The codebase is going public for audit. You don't have to trust us on backdoors or security, you can read the code yourself.
How can I contribute? +
Read the code, report bugs, or join the community chat. Developers and testers are always wanted.

Contact

Follow PrivCart on social or reach the team directly.

Get in touch
PrivCart
PrivCart
Official X Account

Product announcements, integration news, and commentary on the crypto payments space.

Follow on X
J
John
Founder

Partnerships, press, integrations, and anything strategic. Fastest reply via DM.

Contact via X