Invoice Lifecycle

Understand how an invoice moves through its lifecycle.

Every invoice in Paisr moves through a defined set of states. Understanding these states helps you know what actions are available at each stage and how to respond to status changes in your integration.

Status Reference

StatusDescription
draftCreated without line items. Not finalised — cannot be sent or paid.
unpaidAt least one line item has been added. A checkout session is active and the invoice can be paid.
paidFull payment collected. The invoice is locked and funds are credited to your wallet at settlement.
voidManually voided or automatically voided when a linked subscription is cancelled or expired. Cannot be paid or reactivated.

Lifecycle Flow

Invoice Lifecycle Flow

Draft

An invoice enters draft when it is first created without any line items. In this state it is fully editable but it cannot be shared or paid. Add at least one line item to move it to unpaid.

Unpaid

Once a line item is added, the invoice transitions to unpaid and a hosted checkout session is generated. The invoice can be updated and sent to the customer. It remains in this state until payment is collected or the invoice is voided.

When the full invoice amount is collected, the status automatically updates to paid. The invoice is locked — no further edits or deletions are possible. Funds are credited to your wallet balance according to the payment method's settlement schedule.

If a paid payment is later refunded, the invoice returns to unpaid and can accept a new payment attempt.

Void

An invoice is voided when:

  • You manually void it from the dashboard or via the API
  • The subscription that generated it is cancelled or expired

A voided invoice cannot be paid, reactivated, or modified.

Subscription-linked Invoices

Invoices generated automatically by a subscription follow the same status rules but have additional constraints:

  • They cannot be edited or deleted directly
  • Cancelling the subscription voids all its unpaid invoices
  • Historical paid invoices from the subscription are retained

Webhooks

Use webhooks to react to invoice state changes in real time rather than polling the API. Subscribe to these events:

EventFired when
invoice.createdA new invoice has been created
invoice.updatedThe invoice details or line items changed
invoice.paidFull payment was collected
invoice.removedThe invoice was deleted

Retrieving Invoices

List invoices with optional filters:

curl -X GET "https://api.live.paisr.tech/v2/invoices?status=unpaid&currency=SRD&limit=50" \
  -H "Authorization: Bearer <token>" \
  -H "User-Agent: MyApp/1.0"

Retrieve a specific invoice including its full line items and session details:

curl -X GET "https://api.live.paisr.tech/v2/invoices/{invoice_id}" \
  -H "Authorization: Bearer <token>" \
  -H "User-Agent: MyApp/1.0"
Last updated on September 1, 2026.