Invoice number format
Invoice numbers follow the formatINV-XXXX where XXXX is a zero-padded counter that increments per merchant. Your first invoice is INV-0001, the second is INV-0002, and so on. The counter is tied to your merchant email, so it persists across CLI sessions and API calls.
Creating an invoice
- CLI (interactive)
- CLI (--stdin)
- REST API
Run You will be asked for your business address, the vendor’s name and email, line items, a due date, and where payments should land.
npx create-kibble and select kibble invoice when prompted. The CLI walks you through each field in sequence.Invoice fields
Merchant fields
These fields identify you as the billing party and appear on the PDF.Vendor fields
These fields identify the party being billed.Line items
Each line item has three fields. You can include between 1 and 30 line items per invoice.
The total for each line is
quantity × unit_price. Kibble sums all line totals to produce the total_amount.
Dates and metadata
Payment and automation
Downloading the PDF
The PDF is available at:invoice_id is returned when you create the invoice. The PDF is also attached to the email sent to your vendor.
Invoice statuses
Invoices move through a separate status lifecycle from payment links.An invoice moves from
draft to sent automatically when you create it with send_now: true (the default). If you create with send_now: false, the invoice sits in draft until you trigger sending via the API.Immutable fields
Invoice records are append-only for audit purposes. The following fields never change after creation, even if you update your merchant profile:merchant_name_snapshotmerchant_address_snapshotinvoice_number
Webhooks
If you pass awebhook_url, Kibble POSTs a signed JSON payload to that URL when the invoice status changes to paid, partial, or excess.
X-Kibble-Signature header formatted as sha256={hex}. Verify it using the webhook_secret returned when you created the invoice. See Webhooks for verification details.