vermilion
getting started

Quickstart

Take your first payment through Vermilion in about five minutes, entirely in the sandbox — no PSP account needed, no real money moved.

1 · Get your sandbox API key

Request sandbox access at hello@vermil.dev. You'll receive dashboard credentials; create a secret key under API keys. Keys are environment-scoped — sandbox keys start with sk_sandbox_ and can never touch live money.

2 · Create your first payment

Every mutating request needs an Idempotency-Key — retry with the same key and you'll get the original result back instead of a duplicate charge.

curl https://sandbox.api.vermil.dev/v1/payments \ -H "Authorization: Bearer sk_sandbox_…" \ -H "Idempotency-Key: quickstart-1" \ -H "Content-Type: application/json" \ -d '{ "amount": 1000, "currency": "EUR", "payment_method": { "type": "sim_card" } }'

sim_card is the built-in test PSP. Amounts are integers in minor units (1000 = €10.00), and the last two digits script the outcome — 1000 captures,1005 declines with insufficient_funds. See test cards for the full matrix.

3 · Read the result

{ "id": "pay_…", "status": "captured", "attempts": [{ "provider": "simulator", "status": "captured" }] }

The attempts array is the routing story: which PSP was tried, in what order, and why. Retrieve any payment later with GET /v1/payments/:id.

4 · Hear about it via webhook

Register an endpoint and you'll receive normalized events (payment.captured,payment.failed, refund.succeeded…) for every PSP the same way:

curl https://sandbox.api.vermil.dev/v1/webhook_endpoints \ -H "Authorization: Bearer sk_sandbox_…" \ -H "Idempotency-Key: quickstart-2" \ -d '{ "url": "https://example.com/hooks" }'

The response contains the signing secret exactly once — verify every delivery with it as described in webhooks.

Next steps