Cards through Stripe
Card payments through Stripe, charged on the merchant's own Stripe account, are the only payment method PAID offers today. Other rails are not offered.
Card payments through Stripe, charged on your own Stripe account, with every event on a cryptographically auditable ledger. Integrate in minutes — no demo required, no sales call to ship.
# One random key per checkout you create. Keep it with the order and
# send it again only to retry this same create.
KEY="$(uuidgen)"
curl https://api.trustfabric.ai/v1/checkout/sessions \
-H "Authorization: Bearer $PAID_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $KEY" \
-d '{
"mode": "payment",
"currency": "USD",
"payment_method_types": ["card"],
"line_items": [{
"ad_hoc": {"amount": 4999, "currency": "USD", "description": "Pro plan"},
"quantity": 1
}],
"success_url": "https://example.com/thanks",
"cancel_url": "https://example.com/cancel"
}'Why builders trust PAID
No demoware. Every feature is wired to the same production ledger that runs the Trust Fabric.
Card payments through Stripe, charged on the merchant's own Stripe account, are the only payment method PAID offers today. Other rails are not offered.
Every financial event is hash-chained and append-only. Reconciliation reads the chain against the processor's statement, hourly.
API keys in minutes. No sales call required to integrate or test in live mode.
Tenant admission gate, attestation receipts, and provider health surfaced to every customer.
Hosted checkout and Stripe Elements integration keep card data out of your servers.
Provider health, fraud signals, settlement timing, and disputes in one dashboard.
The full integration path. No live demo, no waiting.
Sign up, verify your business, and grab your live API keys — no demo required.
One API call returns the session and its hosted checkout URL. Send the buyer there yourself, or let the embed button do it.
Receive a signed webhook on success. Reconciliation is automatic. Funds settle on your schedule.
One line of HTML on any page or app. Your server creates the checkout with its secret key; the button sends the buyer to PAID's hosted page for it, and PAID notifies you over webhook on completion.
Embed reference<!-- {{ checkout.id }}: the id your server got back from
POST /v1/checkout/sessions (created with your secret key). -->
<button data-paid-checkout
data-session-id="{{ checkout.id }}">
Pay $49.99
</button>
<script async src="https://paid.trustfabric.ai/v1/embed.js"></script>Every event is signed with your webhook secret using HMAC-SHA256. Verify in one call and react. Retries are automatic with exponential backoff and a dead-letter queue.
Webhook reference// POST https://your-app.com/api/webhooks/paid
// PAID signs every event with your endpoint's whsec_ secret:
// Webhook-Signature: t=<unix_ts>,v1=<hmac_sha256_hex over "<ts>.<raw body>">
// Companion headers (Standard Webhooks-style names): Webhook-ID for
// idempotency, Webhook-Timestamp for replay rejection.
import crypto from "node:crypto";
function verifyPaidSignature(payload: string, header: string, secret: string): boolean {
const [tPart, sPart] = header.split(",");
const t = (tPart ?? "").replace(/^t=/, "");
const s = (sPart ?? "").replace(/^v1=/, "");
const expected = crypto
.createHmac("sha256", secret)
.update(t + "." + payload)
.digest("hex");
return (
s.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(s))
);
}
export async function POST(req: Request) {
const payload = await req.text();
const sig = req.headers.get("Webhook-Signature") ?? "";
if (!verifyPaidSignature(payload, sig, process.env.PAID_WEBHOOK_SECRET!)) {
return new Response("bad signature", { status: 400 });
}
const event = JSON.parse(payload);
switch (event.type) {
case "payment_intent.captured":
await grantEntitlement(event.data.customer_id);
break;
case "payment_intent.failed":
await notifyCustomer(event.data.customer_id, event.data.last_error);
break;
}
return new Response("ok");
}One flat rate — 1% per transaction, plus 10¢ only on payments over $20 — on every plan. No setup fees. No monthly minimums. You only pay for successful charges. Your payment provider's own fees (e.g. Stripe's 2.9% + 30¢ per card) are separate and additional; we never hide them inside our rate. See full pricing →
Create an account and have your first checkout session live before your coffee is cold.