BunnyDoc
API

Invoicing API

There is no public Invoicing API yet — here's what you can automate for invoices, quotes, and expenses today, and what's coming.

Not available yet

There are no public endpoints for invoices, quotes, credit notes, recurring invoices, inventory, or expenses. https://api2.bunnydoc.com/v1 currently serves the E-Signing API only. Anything you read elsewhere about calling /v1/invoices is not something we offer.

Invoicing is managed in the app. If you're planning an integration, here is exactly what is and isn't possible right now, so you can design around it rather than discover it mid-build.

What you can automate today

Receive invoicing events by webhook

This is the one programmatic hook into invoicing, and for most integrations it's the important one — it lets your system react to a payment without polling.

Set it up in the app under Settings → Webhooks, choosing Invoicing as the product. You cannot create these subscriptions through the API (/v1/webhooks manages E-Signing subscriptions only), but once registered they deliver exactly like E-Signing webhooks: same envelope, same HMAC signature, same retry and auto-disable behaviour.

EventFires when
invoice.issuedAn invoice was issued.
invoice.sentAn invoice was sent to the customer.
invoice.viewedThe customer opened the invoice.
invoice.partially_paidA partial payment was applied.
invoice.paidAn invoice was paid in full.
invoice.voidedAn invoice was voided.
invoice_payment.succeededA payment against an invoice succeeded.
invoice_payment.failedA payment against an invoice failed.
invoice_payment.refundedA payment against an invoice was refunded.
expense.confirmedAn expense was confirmed out of draft.
expense.ocr_completedOCR finished extracting data from a receipt.
expense.ocr_failedOCR could not extract data from a receipt.

Invoicing webhooks are entitled separately from E-Signing webhooks, and all of the events above are in the standard invoicing tier.

No invoice.overdue event

"Overdue" is a computed filter (due_date in the past), not a stored status — nothing ever transitions an invoice into it, so no such event could fire. Track due dates on your side from invoice.issued or invoice.sent.

To verify signatures, handle retries, and understand the delivery envelope, use the webhooks guide — sections 2 through 5 apply to every subscription regardless of product.

Take payment inside a document being signed

If what you actually want is "charge the customer when they sign", that's E-Signing, not Invoicing, and it is fully available through the API. Put a payment block on the template, send it with POST /v1/envelopes/from-template, and subscribe to payment.succeeded.

Bring the data out of the app

  • Reports can be exported to CSV/XLSX — see Reports.
  • Email receipts and the public pay page cover the customer-facing side without any integration work. See The public pay page.

What is not possible yet

  • Creating, issuing, sending, or voiding an invoice programmatically.
  • Reading invoice, quote, or credit-note data over HTTP.
  • Managing products, stock, categories, discounts, or tax rates.
  • Creating or reading expenses. (Expenses can be created by emailing receipts to your expense inbox — see Email inbox — which is a practical substitute for an ingest API.)

On this page