API documentation
Two ways in. Paste a line of HTML and you're taking payments; call the API when you need the amount to come from your own system. Card details are entered inside CardPointe's frame and never touch your servers or ours.
Quick start
The shortest path: define a price in your dashboard, paste one line, done. No server code.
<script src="https://brijee.com/embed.js" data-price="PRICE_ID"></script>That renders a button. Clicking it opens the checkout in a pop-up over your page. The amount is read from the price in your account, so nobody can change it by editing the HTML.
Checkout API
When the amount comes from a cart or an invoice, your server creates the checkout and the browser only ever sees its id.
curl -X POST https://brijee.com/api/v1/checkout \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": "49.00",
"description": "Order 1042",
"successUrl": "https://yoursite.com/thanks"
}'
{ "ok": true,
"id": "3f9c…",
"url": "https://brijee.com/checkout/3f9c…" }Send the customer to url, or embed it in your own page:
<script src="https://brijee.com/embed.js" data-checkout="3f9c…"></script>amountrequiredDollars, e.g. "49.00".descriptionoptionalShown at checkout and on the receipt.successUrloptionalWhere to send them after paying.cancelUrloptionalWhere a cancel link goes.Keys live in your dashboard under Add Brijee to your site. Keep them on your server — a key in a web page can be read by anyone.
Subscriptions
Charge every month without writing a billing system. Define the price once; we do the rest.
In your dashboard, add a price and set it to monthly or yearly. Then it's the same one line as anything else:
<script src="https://brijee.com/embed.js" data-price="PRICE_ID"></script>When someone pays, the subscription starts. From then on we charge their card on schedule, email them three days before each renewal, and give them a link to cancel without logging in or contacting you. A declined card is retried; after three failures in a row we stop and tell you.
payment.succeededwebhookSent for the first payment and for every renewal.subscription.payment_failedwebhookTheir card was declined. Includes whether we've given up.Open access on the first, close it on the second — that's the whole integration. The renewal event carries renewal: true if you want to treat signup differently.
Webhooks
Set a URL in your dashboard and we post to it when a payment succeeds. Use this for anything that matters — a customer who closes the tab still gets their order.
POST https://yoursite.com/your-webhook
Brijee-Signature: t=1753651200,v1=9f86d081884c7d65…
{
"type": "payment.succeeded",
"created": 1753651200,
"data": {
"checkoutId": "3f9c…",
"transactionId": "8a21…",
"amount": "49.00",
"method": "card",
"retref": "208947053044",
"businessName": "Kona Coffee Co."
}
}Check the signature before you trust the body — anyone can post to your URL, and this request is what tells you to hand over the goods. Sign "{t}.{raw body}" with your webhook secret and compare:
const [t, v1] = req.header("Brijee-Signature")
.split(",").map(function (p) { return p.split("=")[1]; });
const expected = crypto
.createHmac("sha256", process.env.BRIJEE_WEBHOOK_SECRET)
.update(t + "." + rawBody) // the raw body, before JSON.parse
.digest("hex");
if (v1 !== expected) return res.status(400).send("bad signature");If you only need to update the page the customer is looking at, the embed also fires a brijee:paid event in the browser.
Testing
Every new account starts in test mode, so you can build the whole flow before a single real dollar moves.
Payments in test mode appear in your dashboard exactly as real ones do — they just aren't settled to your bank.
Ready to start?
Apply for an account and you'll have keys in a few minutes.