v1 · live · 99.99% uptime

Ship a live charge
before your coffee's cold.

A fully idempotent payments API with native SDKs for Node, Python, Go and Rust, signed webhooks you can actually trust, and typed errors. Forged for builders who read the docs.

$ npm i @forgepay/node
  • SOC 2 Type II
  • ·PCI DSS L1
  • ·135+ currencies
  • ·p99 47ms
$48,213,904processed today
POST /v1/chargescurl
requestIdempotency-Key: req_8f21c0a4
{
"amount": 4200,
"currency": "usd",
"source": "tok_visa",
"capture": true
}
200 OKsucceeded · 47ms · livemode
responsecontent-type: application/json
{
"id": "ch_3PFx7d2eZvKYlo2C0a9bQ1xT",
"object": "charge",
"amount": 4200,
"currency": "usd",
"status": "succeeded",
"livemode": true
}
forgepay-version: 2026-06-01signed
live telemetry

Numbers we publish, not promises we pitch.

Pulled from production. Latency at the 99th percentile, not the median your dashboard likes to show.

0ms
p99 API latency

us-east · edge-terminated TLS

0.00%
uptime · trailing 12 mo

measured at the load balancer

0
edge regions

anycast · sub-30ms to 90% of users

0
PII stored

tokenized at the edge · PCI-DSS L1

<0.0s
webhook delivery p95

signed · idempotent · auto-retried

all systems operational·measured over the last 90 days·status.forgepay.dev
QUICKSTART

Your first charge in three calls.

No sandbox sprawl, no 12-step onboarding. Install, authenticate, and move real money before your coffee gets cold.

  1. 01

    Install the SDK

    One package. Typed clients for Node, Python, Go, Ruby & PHP.

    npm i @forgepay/node
  2. 02

    Create a charge

    POST /v1/charges with an amount, currency and source token.

    fp.charges.create({ … })
  3. 03

    Confirm & ship

    Read charge.status, fire a webhook, settle in T+1.

    status === "succeeded"
  4. Full reference at docs.forgepay.dev/charges
create_charge.ts
1// npm i @forgepay/node
2import Forgepay from "@forgepay/node";
3
4const fp = new Forgepay(process.env.FORGEPAY_SECRET_KEY!);
5
6const charge = await fp.charges.create(
7 {
8 amount: 4200, // cents
9 currency: "usd",
10 source: tokenId,
11 description: "Forge Pro — annual",
12 },
13 { idempotencyKey: "ch_req_8fa31c" },
14);
15
16console.log(charge.status); // "succeeded"
201 · charge.succeeded · 41msGet keys
API Reference

A REST API you can actually read.Predictable. Versioned. Yours.

Resource-oriented endpoints, predictable HTTP semantics, idempotent writes and a single dated version header. No surprises in production.

https://api.forgepay.devv1 · stable
Endpoints8 resources
POST/v1/chargesCharge

Capture funds from a payment source. Fully idempotent — replay the same Idempotency-Key and you get the original charge back, never a duplicate.

request
curl https://api.forgepay.dev/v1/charges \  -H "Authorization: Bearer sk_live_51Mx…" \  -H "Idempotency-Key: req_8f21c0a4" \  -d amount=4200 \  -d currency=usd \  -d source=tok_visa
201 Createdcontent-type: application/json
responsecharge object
Architecture

From tap to settled, in one hop.

Watch the money move. Every payment streams through a single, idempotent path — tokenized at the edge, authorized in milliseconds, settled to you.

01
card.present

Customer

Tap, swipe, or a card on file.

tokenize 12ms
02
checkout.tokenize

Forgepay Checkout

Card data tokenized in-browser.

authorize 31ms
03
api.authorize

Forgepay API

Idempotent authorize, risk-scored.

route 18ms
04
networks.route

Card networks

Visa · Mastercard · Amex.

webhook <2s
05
payout.settle

Your payout

Funds settle to your account.

No PII ever touches your serversPCI scope reduced to SAQ-Ap99 47ms end-to-end authorize
sdks & libraries

One API. Every stack.

Idiomatic, fully-typed, open-source SDKs for the languages you already ship. Hand-written ergonomics on top of a generated core, so the types are always in sync with the API.

  • 8.2k

    Node.js

    v4.2.1·MIT
    npm i @forgepay/node
  • 6.7k

    Python

    v3.9.0·MIT
    pip install forgepay
  • 4.1k

    Go

    v2.5.3·MIT
    go get forgepay.dev/go
  • 2.9k

    Ruby

    v3.1.4·MIT
    gem install forgepay
  • 3.4k

    PHP

    v3.0.2·MIT
    composer require forgepay/forgepay
  • 1.8k

    Java

    v2.8.0·MIT
    mvn dev.forgepay
  • 1.5k

    .NET

    v2.3.1·MIT
    dotnet add package Forgepay
  • 2.2k

    Rust

    v0.9.2·MIT
    cargo add forgepay

+ official plugins & integrations

ShopifyWooCommerceStripeVercelCloudflarePostmanGraphQLZapierSupabaseDenoKotlinSwiftShopifyWooCommerceStripeVercelCloudflarePostmanGraphQLZapierSupabaseDenoKotlinSwift
GraphQL APICLIOpenAPI 3.1 specWebhooks
Browse all SDKs on GitHub

100% open-source · MIT licensed · semver-stable

RELIABILITY & SECURITY

Built for the 3am pager. Boring where it counts.

The fun part is shipping. The part that keeps you employed is the money never moving twice. We obsess over the second one so you don't get paged for it.

Signed webhooks

HMAC-SHA256 · constant-time

Every event ships with a signature header. Verify in one call — forged or replayed payloads never reach your handler.

webhook_handler.tsverified
// reject anything we didn't sign
const event = fp.webhooks.verify(
payload, // raw request body
req.headers["fp-signature"],
process.env.FP_WEBHOOK_SECRET!,
);
// throws SignatureError on mismatch →
// HMAC-SHA256, constant-time compare
p99 latency · live
62ms

Response latency

Routing decisions in well under a frame. This is the last 32 samples from the live edge.

Idempotency keys

Retry a request a hundred times — it charges the card once. Safe POSTs by design.

Idempotency-Key: a1b2c3d4-…

Retries with backoff

Transient 5xx and network blips are retried with jittered exponential backoff, capped at 5 attempts.

backoff: 1s · 2s · 4s · 8s

Event replay

At-least-once delivery. Re-drive any event from the last 30 days from the dashboard or API.

POST /v1/events/{id}/replay

Sandbox & test mode

A full parallel ledger keyed on test secrets. No real cards, identical surface.

sk_test_4eC39H…

Immutable audit log

Every key, refund and config change is append-only, signed, and exportable for compliance.

audit.entry · write-once

Uptime

99.99% uptime · last 90 days

Every bar is a day. Hover for the daily figure.

day -90 · 100.00%
day -89 · 100.00%
day -88 · 100.00%
day -87 · 100.00%
day -86 · 100.00%
day -85 · 100.00%
day -84 · 100.00%
day -83 · 100.00%
day -82 · 100.00%
day -81 · 100.00%
day -80 · 100.00%
day -79 · 100.00%
day -78 · 100.00%
day -77 · 100.00%
day -76 · 100.00%
day -75 · 100.00%
day -74 · 100.00%
day -73 · 100.00%
day -72 · 100.00%
day -71 · 100.00%
day -70 · 100.00%
day -69 · 100.00%
day -68 · 100.00%
day -67 · 100.00%
day -66 · 100.00%
day -65 · 100.00%
day -64 · 100.00%
day -63 · 100.00%
day -62 · 100.00%
day -61 · 100.00%
day -60 · 100.00%
day -59 · 100.00%
day -58 · 100.00%
day -57 · 100.00%
day -56 · 99.7%
day -55 · 100.00%
day -54 · 100.00%
day -53 · 100.00%
day -52 · 100.00%
day -51 · 100.00%
day -50 · 100.00%
day -49 · 100.00%
day -48 · 100.00%
day -47 · 100.00%
day -46 · 100.00%
day -45 · 100.00%
day -44 · 100.00%
day -43 · 100.00%
day -42 · 100.00%
day -41 · 100.00%
day -40 · 100.00%
day -39 · 100.00%
day -38 · 100.00%
day -37 · 100.00%
day -36 · 100.00%
day -35 · 100.00%
day -34 · 100.00%
day -33 · 100.00%
day -32 · 100.00%
day -31 · 100.00%
day -30 · 100.00%
day -29 · 100.00%
day -28 · 100.00%
day -27 · 100.00%
day -26 · 100.00%
day -25 · 100.00%
day -24 · 100.00%
day -23 · 100.00%
day -22 · 100.00%
day -21 · 100.00%
day -20 · 100.00%
day -19 · 99.7%
day -18 · 100.00%
day -17 · 100.00%
day -16 · 100.00%
day -15 · 100.00%
day -14 · 100.00%
day -13 · 100.00%
day -12 · 100.00%
day -11 · 100.00%
day -10 · 100.00%
day -9 · 100.00%
day -8 · 100.00%
day -7 · 100.00%
day -6 · 100.00%
day -5 · 100.00%
day -4 · 100.00%
day -3 · 100.00%
day -2 · 100.00%
day -1 · 100.00%
Audited & certified

Compliance is table stakes, not a sales call. Reports on request.

  • PCI DSS Level 1
  • SOC 2 Type II
  • 3D Secure 2 / SCA
WEBHOOKS & EVENTS

Events, delivered. Your stack, always in sync.

Real-time, cryptographically signed, at-least-once delivery — with automatic retries and dashboard replay. If your server hiccups, we keep knocking.

events.streamLIVE
timeeventdelivery
  • 14:02:38.685charge.succeeded 200
  • 14:02:36.948charge.refunded 200
  • 14:02:35.211payout.paid 200
  • 14:02:33.474charge.succeeded 200
  • 14:02:31.737customer.created 200
  • 14:02:30.000charge.succeeded 200
$forgepay listen--forwardlocalhost:3000/webhook
  • Signed payloads

    Every request carries an HMAC-SHA256 signature in the Forgepay-Signature header. Verify in one line before you trust a byte.

    HMAC-SHA256
  • Automatic retries

    At-least-once delivery with exponential backoff — up to 8 attempts over 3 days until your endpoint returns 2xx.

    8 attempts · 72h
  • Replay anything

    Re-send any past event from the dashboard or CLI. Rebuild local state after an outage without touching production.

    dashboard · CLI
  • Typed event catalog

    40+ documented event types with versioned, strongly-typed payloads. Autocomplete the whole envelope in your editor.

    40+ types
signed event · POST /webhookapplication/json
{
"id": "evt_3PFxQ9aL2",
"type": "charge.succeeded",
"api_version": "2026-04-01",
"created": 1781784161,
"data": {
"object": {
"id": "ch_3PFx8Km0",
"amount": 4200,
"currency": "usd",
"status": "succeeded"
}
}
}
headerForgepay-Signature: t=1781784161,v1=9a7f…c2e1
Browse the full event catalog at docs.forgepay.dev/eventsAdd an endpoint
PRICING

Usage-based. No surprises.

Test mode is free forever. You only pay on a successful live charge — no monthly fee, no setup, no minimums.

per successful charge
2.9%+ $0.30

One flat rate on every successful card charge. Declined and test transactions are always free.

$0
monthly fee
$0
setup cost
$0
minimums
$ estimateeffective rate 3.30%

Monthly volume estimator

avg ticket
volume$50,100/mo
$1,000$2,000,000+
gross volume
$50,100
percentage fee · 2.9%
$1,452.90
per-transaction fee · $0.30 × 668
$200.40
total fees
$1,653.30
net payout
$48,446.70
you save

$17.40 saved vs a flat 2.9% + $0.30

668 successful charges. Estimate only.

Standard

2.9% + $0.30

Self-serve. Live in minutes.

Scale

Interchange++ / custom

For high-volume teams.

Per-charge rate
2.9% + $0.30
Interchange++ / custom
Full REST API + webhooks
All SDKs — Node, Python, Go, Ruby, PHP
Unlimited test mode
Signed, replayable webhooks
Radar fraud + 3D Secure
Volume discounts
Interchange+ pricing
99.99% uptime SLA
99.9%
99.99%
Priority support
Community + email
Dedicated Slack + on-call
SAML SSO + audit logs

Every Forgepay account ships with the full API, all SDKs and unlimited test mode — on day one.

GET STARTED

Ship your first charge tonight.

Create an account, grab your test keys, and POST your first charge in minutes — no sales call required.

$ export FORGEPAY_SECRET_KEY=sk_live_••••••••••••••••••••

// decorative preview · click to generate a sample test key

  • test mode free
  • no credit card
  • live in minutes
  • SOC 2 Type II
  • PCI DSS L1
~/forgepay — first_charge.sh live
$ curl https://api.forgepay.dev/v1/charges \
-u $FORGEPAY_SECRET_KEY: \
-d amount=4200 -d currency=usd \
-d source=tok_visa
→ 201 Created · ch_3Pk9qXr2 · succeeded