Skip to content
Hardcount
Run it locally
Pre-1.0 · one maintainer · Stripe and cards only · no SDKs (client libraries) yet · no production users yet. Docs describe v0.9.1 (29 Oct 2026) · What’s new →

Trigger billing cycle

POST
/v1/billing/run
curl --request POST \
--url http://localhost:8080/v1/billing/run \
--header 'Authorization: Bearer <token>'
Idempotency-Key
string

Makes the call safe to retry. Send a unique value (a UUID works) and the same value on every retry. For 24 hours, a repeat with the same key, method, path and body gets the first response again, with an Idempotent-Replayed: true header, instead of running again. The error cases are in docs/api-surface.md. The usage routes do not take it: each usage event carries its own idempotency_key.

Every due subscription was billed. errors is empty.

Media typeapplication/json
object
invoices_generated
required
integer
errors
required
Array<string>

Example generated

{
"invoices_generated": 1,
"errors": [
"example"
]
}

errors is not empty. The invoices the run made are kept. Each entry is one of:

  • subscription <id>: billing failed: that subscription could not be billed.
  • billing run failed: the run stopped before it reached every due subscription, because the list of due subscriptions could not be read or the request ran out of time (30 seconds). The subscriptions it did not reach are still due, and the next billing run bills them.
  • billing run completed but its audit record failed: the run’s audit record could not be written.
Media typeapplication/json
object
invoices_generated
required
integer
errors
required
Array<string>

Example generated

{
"invoices_generated": 1,
"errors": [
"example"
]
}