Add the MCP server
claude mcp add --transport http veracity-pay https://pay.veracity.se/mcp
Ask your coding agent to use Veracity Pay. Through MCP it asks which payment partners to emulate, registers the account and e-mails you the keys – without ever seeing a secret.
4 payment partners: Stripe, Nets Easy, Adyen and Kustom. SEK 0.
claude mcp add --transport http veracity-pay https://pay.veracity.se/mcp
“I want us to use Veracity Pay to emulate payments in this project.”
Merchant ID, keys and ready commands arrive in your inbox. The agent sees no secrets.
The customer enters an e-mail, picks card, Swish, invoice or bank transfer and approves with the code. In the test panel you choose whether the payment is approved, declined, pending or needs 3-D Secure.
Read about test modeCheckout Sessions, PaymentIntents, subscriptions, refunds and webhooks with the same objects and id prefixes as Stripe. Stripe’s own SDK works against the base URL.
Read about the Stripe flavourPayment API v1 with the hosted payment page: create the payment, send the customer to the page and charge it. Webhooks go to your URLs with your Authorization.
Read about the Nets Easy flavourCheckout API v71: sessions with Hosted Checkout, /payments with test cards and HMAC-signed notifications with AUTHORISATION and REFUND.
Read about the Adyen flavourCheckout v3 (formerly Klarna Checkout): the order returns an html_snippet with the checkout, a push when the purchase is done and order management for capture and refunds.
Read about the Kustom flavourconst session = await vp.checkout
.sessions.create({
mode: "subscription",
line_items: [{ price: planId }],
customer_email: user.email,
client_reference_id: org.id,
success_url: `${APP}/klar`,
cancel_url: `${APP}/planer`,
});
{ "order": {
"items": [{ … }],
"amount": 50000,
"currency": "SEK" },
"checkout": {
"integrationType":
"HostedPaymentPage",
"returnUrl": "…/klar",
"termsUrl": "…/villkor" } }
// X-API-Key: vp_sk_test_…
{ "merchantAccount": "acct_…",
"amount": { "value": 12500,
"currency": "SEK" },
"reference": "order-1042",
"mode": "hosted",
"countryCode": "SE",
"returnUrl": "…/retur" }
{ "purchase_country": "SE",
"purchase_currency": "SEK",
"order_amount": 50000,
"order_tax_amount": 10000,
"order_lines": [{ … }],
"merchant_urls": {
"confirmation": "…/tack",
"push": "…/push" } }
Every event carries Veracity-Signature, an HMAC-SHA256 you verify with your secret. If your app does not answer 2xx, we retry for a day.
8 attempts with backoff, from 10 s to 24 h
Every attempt with its status code in the dashboard
Resend with one button
export async function POST(req) {
const raw = await req.text();
const sig = req.headers
.get("veracity-signature");
const ev = await constructEvent(
raw, sig, SECRET);
await handle(ev);
return Response.json({ ok: true });
}
Insufficient funds, a blocked card, 3-D Secure or a timeout – per payment or for the next renewal.
Move the clock a month: the invoice is created, charged without a code and invoice.paid is sent.
Complete a checkout through the API with the outcome you pick, without a browser, and check webhooks in CI.
Codes, receipts and invoices land in a searchable inbox. With a Resend key they are also sent for real.
No. It is a test environment and no money moves.
No. The keys are e-mailed to you, and the test tools read the key from the MCP configuration.
Yes, for the common calls. Point it at the base URL with your vp_sk_test key.
Move the test clock a month. The renewal is charged without a code and sends invoice.paid.
They last one month at a time. Extend with one click in the dashboard or with extend_key.
Card, Swish, invoice and instalments, bank transfer and wallets.