Three steps from zero to your first successful charge.
~30 seconds
Sign up and navigate to the Dashboard. Sandbox keys are issued instantly — no credit card or business verification required during testing.
# Your test keys look like this
sk_test_Nj8tR3mXpK9wA4sL...
pk_test_Nj8tR3mXpK9wA4sL...
~2 minutes
Create a PaymentIntent using a test card number. The full payment lifecycle — created, confirmed, captured — is visible in the sandbox dashboard in real time.
# Test card — always succeeds
4242 4242 4242 4242
Exp: 12/28 CVC: 123
~5 minutes
Register an HTTPS endpoint to receive payment events. Verify the HMAC-SHA256 signature on every delivery before fulfilling orders — replay attacks are real.
# Verify webhook signature
pg-signature: t=1745308800,
v1=3c4f9a2b8e1d...
# Step 1 — Create PaymentIntent
curl -X POST https://api.paymentgate.com/v2/payment_intents \
-u sk_test_Nj8tR3mXpK9wA4sL: \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Idempotency-Key: test_$(uuidgen)" \
-d amount=9900 \
-d currency=eur \
-d "payment_method_types[]=card"
# Step 2 — Confirm with test card token
curl -X POST https://api.paymentgate.com/v2/payment_intents/pi_.../confirm \
-u sk_test_Nj8tR3mXpK9wA4sL: \
-d payment_method=pm_card_visa
# Step 3 — Receive webhook (payment_intent.succeeded)
POST https://your-server.example.com/webhooks/paymentgate
pg-signature: t=1745308800,v1=3c4f9a2b...
{
"type": "payment_intent.succeeded",
"data": { "object": { "id": "pi_3Qa9bL...", "amount": 9900 } }
}
Eight core resource groups covering the full payment lifecycle.
Create, confirm, capture, and cancel PaymentIntents across all supported payment methods.
24 endpointsIssue full or partial refunds. Query status and attach metadata for reconciliation.
8 endpointsStore customer profiles, attach payment methods, and query billing history for CRM sync.
14 endpointsRecurring billing with trials, proration, usage-based pricing, and dunning automation.
18 endpointsRegister HTTPS endpoints and subscribe to 60+ event types with guaranteed delivery.
10 endpointsSubmit evidence for chargebacks, track dispute status, and accept or contest per-case.
8 endpointsInitiate and track fund transfers to bank accounts or connected merchant accounts.
10 endpointsQuery available and pending balances, list balance transactions, and export CSV reports.
6 endpointsAll requests are authenticated with your secret API key. Never expose secret keys in client-side code.
Pass your secret key in the Authorization header as a Bearer token. Use the publishable key (pk_) only for client-side tokenisation via our hosted fields SDK.
# Secret key — server-side only
Authorization: Bearer sk_live_Nj8tR3mXpK9w...
# HTTP Basic Auth (username = secret key)
curl https://api.paymentgate.com/v2/charges \
-u sk_live_Nj8tR3mXpK9w:
Each account has two pairs of keys — test and live. Test mode is fully isolated; no real money moves and test events do not affect live data.
Every webhook delivery includes a pg-signature header containing an HMAC-SHA256 of the raw body. Verify this before processing to prevent replay attacks and spoofed payloads. Our SDKs provide a one-line helper for this.
// Node.js — one-liner verification
const event = pg.webhooks.constructEvent(
req.rawBody,
req.headers['pg-signature'],
process.env.PG_WEBHOOK_SECRET
);
// throws if signature invalid
Install with one command. Full types, auto-retry with exponential backoff, and webhook helpers built in.
npm install @paymentgate/node
pip install paymentgate
composer require paymentgate/php
go get github.com/paymentgate/go/v3
gem install paymentgate
Limits are applied per API key on a sliding 60-second window. Rate-limit headers are included on every response.
# Response headers on every request
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1745308860
# Limit exceeded — HTTP 429
{
"error": {
"type": "rate_limit_exceeded",
"message": "Too many requests.",
"retry_after": 22
}
}
We version the API via the URL path. Breaking changes are never introduced within a major version.
Active and fully supported. Cursor pagination, idempotent webhook delivery, 3DS2, and SEPA Direct Debit all landed in v2. All new features ship here.
Still operational but deprecated. No new features. End-of-life is 31 Dec 2026 — all v1 traffic will return 410 after that date. Migrate to v2 today.
v1 to v2 migration takes under an hour. The primary change is cursor-based pagination replacing offset-based. All resource IDs and event types are unchanged.
v1 → v2 migration guidev2.4 added idempotent webhook delivery, cursor pagination across all list endpoints, and SEPA Direct Debit across all SDKs.
View full changelog →Fully isolated test environment with test cards, mock bank accounts, simulated 3DS2 challenges, and webhook replay tooling.
Sandbox docs →Dedicated Slack channel for Growth and Enterprise plans. Community forum open to all. Average first response: under 90 minutes on business days.
Contact us →