StrimzStrimz
API Reference

Invoices

Invoices with line items, paid through hosted checkout.

Create

POST /v1/invoices
{
  "customerName": "Acme Inc.",
  "customerEmail": "ap@acme.com",
  "currency": "USDC",
  "lineItems": [
    { "description": "Hosting", "quantity": 1, "unitAmount": "50000000" },
    { "description": "Support", "quantity": 2, "unitAmount": "10000000" }
  ],
  "note": "Net 14",
  "dueInDays": 14
}

Returns:

{
  "id": "cmq4wmx7q000aje6l9h4r1spe",
  "number": "2026-0001",
  "subtotal": "70000000",
  "total": "70000000",
  "currency": "USDC",
  "status": "draft",
  "sessionId": "cmq4wmx9t000bje6l0d6g3kfu",
  "dueAt": "2026-05-13T...",
  "lineItems": [...],
  ...
}

Send

POST /v1/invoices/{id}/send

Emails the customer a link to the hosted checkout for the backing session. Requires customerEmail to be set; returns 403 otherwise. A voided invoice can't be sent.

Void

POST /v1/invoices/{id}/void

Cannot void a paid invoice. Issue a refund instead. Voiding cancels the backing payment session.

Read

GET  /v1/invoices/{id}
GET  /v1/invoices?status=overdue

The list also takes customerId. It returns invoices whose payment session belongs to that customer, so an invoice nobody has opened yet won't match. from and to limit it to invoices created in a range. See List filters.

Lifecycle

draft  →  sent  →  paid
              ↘
               overdue  →  void

An hourly scheduler job flips sent invoices past dueAt to overdue and fires invoice.overdue. Any invoice that isn't paid can be voided.

Webhook events

EventFires when
invoice.createdA new invoice was created
invoice.paidThe backing session confirmed
invoice.overduedueAt passed without payment

Sending an invoice doesn't fire a webhook.

On this page