For developers

Build on ezPayments.

A REST API for payment links, transactions and webhooks. Test keys and live keys, idempotent writes, and signed events.

Create a link

curl -X POST https://app.ezpayments.co/api/v3/payment-links/ \
  -H "Authorization: Bearer sk_test_…" \
  -H "Idempotency-Key: 8c1e2f…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "250.00",
    "description": "Logo design, final invoice",
    "customer_email": "client@example.com",
    "send_email": true
  }'

Response

{
  "data": {
    "id": "62f1ac1b-fde0-4351-b004-00c2e89606a4",
    "url": "https://app.ezpayments.co/pay/62f1ac1b-…/",
    "amount": "250.00",
    "status": "active"
  },
  "meta": { "request_id": "req_a0261129fc684ca6", "mode": "test" }
}

Webhook

POST /your/webhook
X-EzPayments-Event: payment_link.paid
X-EzPayments-Delivery: 9b2f5a10-…
X-EzPayments-Signature: t=…,v1=…

{ "id": "62f1ac1b-…", "status": "paid", "amount": "250.00", … }

Documentation

Four resources

/api/v3/payment-links/

Payment links

Create, update, cancel and list links. Each returns its URL and fee breakdown.

/api/v3/transactions/

Transactions

Read payments with status, fee and settlement date.

/api/v3/webhook-endpoints/

Webhook endpoints

Register URLs and choose the events each one receives.

/api/v3/api-keys/

API keys

Create, list and revoke test and live keys.

Signed webhooks

Every event is POSTed to your endpoint with an HMAC-SHA256 signature over the timestamp and the payload, so you can verify it came from ezPayments.

  • payment_link.created
  • payment_link.paid
  • payment_link.expired
  • payment_link.cancelled
X-EzPayments-Signature: t=1793134247,v1=5d41…
X-EzPayments-Event: payment_link.paid
X-EzPayments-Delivery: 9b2f…

signature = HMAC_SHA256(secret,
  "{timestamp}.{raw_body}")

Safe to retry. Safe to ship.

Test and live keys

Build against sk_test_, switch to sk_live_ when you go live.

Idempotency keys

Send an Idempotency-Key on POST and a retry never creates a second link.

IP allowlists

Ask us to lock a key to the addresses your servers call from.

Rate limits

60 requests per minute per key, with a Retry-After header on 429.

No code needed?