Payments

Read every payment — from checkout, invoices, links and plugins — through one endpoint.

Payments

A Payment is a single money movement from a customer to your account. It is created for you when a Checkout Session completes, an invoice is paid or a payment link is used — you never create one directly.

Base URL https://api.southbill.com · Auth Authorization: Bearer sk_live_… · Scope payments:read (read-only — any non-GET returns 405).

Endpoints

Method Path Purpose
GET /v1/payments List payments, newest first.
GET /v1/payments/{id} Retrieve by payment id, payment_intent or charge.

List payments

curl "https://api.southbill.com/v1/payments?limit=20&status=succeeded" \
  -H "Authorization: Bearer $SOUTHBILL_SECRET_KEY"
const payments = await fetch(
  "https://api.southbill.com/v1/payments?limit=20&status=succeeded",
  { headers: { Authorization: `Bearer ${process.env.SOUTHBILL_SECRET_KEY}` } },
).then((r) => r.json());

for (const p of payments.data) {
  console.log(p.id, p.amount, p.currency, p.status);
}
import os, requests

payments = requests.get(
    "https://api.southbill.com/v1/payments",
    headers={"Authorization": f"Bearer {os.environ['SOUTHBILL_SECRET_KEY']}"},
    params={"limit": 20, "status": "succeeded"},
    timeout=30,
).json()
<?php
$ch = curl_init("https://api.southbill.com/v1/payments?limit=20&status=succeeded");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("SOUTHBILL_SECRET_KEY")],
]);
$payments = json_decode(curl_exec($ch), true);

Response:

{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "id": "cs_01J…",
      "object": "payment",
      "livemode": true,
      "status": "succeeded",
      "amount": 4990,
      "currency": "eur",
      "application_fee_amount": 132,
      "payment_intent": "pi_3P…",
      "charge": "ch_3P…",
      "checkout_session": "cs_01J…",
      "customer": "cus_9f2c…",
      "customer_email": "jane@example.com",
      "customer_name": "Jane Doe",
      "description": "Order 12345",
      "reference": "ORDER-12345",
      "payment_method_type": "card",
      "metadata": {},
      "source": "checkout",
      "created": 1756000000,
      "succeeded_at": 1756000042
    }
  ]
}

Query parameters

Parameter Behaviour
limit 1–100, default 25.
starting_after Payment id, payment_intent or charge — returns rows created before it.
status succeeded (settled) or pending (not completed yet).
customer Customer id.

Status values

Status Meaning
succeeded Captured; your fee is already deducted.
pending Created but not completed — abandoned checkout or async method still clearing.
refunded / partially_refunded See Refunds.
disputed A chargeback was opened. Handle it in the dashboard.

Rate limit: 300 requests/min per key.