Skip to main content
An invoice is money a customer owes the business. The business creates it for one of its contacts, Cleo emails the customer a link, and the customer pays on Cleo’s hosted page. Bills the business owes its vendors are payables, a separate resource. invoices:write does not include reads. Most integrations request both scopes.

Status

paymentStatus tracks the payments on the invoice with the same values as on a payable: none, scheduled, processing, held, settled, failed and clawback.

Creating an invoice

  • The total is the sum of the line totals. It must be at least $1.00.
  • Each item needs a name and a unitAmountCents of at least 1. quantity defaults to 1 and can be up to 99,999,999.
  • The contact must be active, not archived, and set to bidirectional or can_be_paid.
  • Without send, the invoice is a draft. With send, Cleo checks that the business can receive, finalizes the invoice and emails it. send needs the edit permission that invoices:write grants.
  • send.emails overrides the recipients. By default Cleo uses the customer’s email on file. send.subject and send.message change the email.
If the invoice is created but the email fails, the error names the invoice id. A retry with the same Idempotency-Key returns that answer instead of creating a second invoice. Send it with POST /v1/invoices/{invoiceId}/send.
enabled is true only while the customer can pay through the link: the link is on and not expired, the invoice is open with money still due, and the business can receive. The hosted page refuses draft, awaiting-approval, declined and blocked invoices. The PDF is never attached to the email; the hosted page offers it.

Can the business receive?

GET /v1/receiving answers before you send:
Sends and link changes that cannot proceed answer with the same codes.

Voiding and marking paid

  • Void: only the business that created the invoice can void it. Paid, partly paid and scheduled invoices cannot be voided, and an invoice with a payment in flight answers payment_in_progress. The customer sees reason.
  • Mark paid: records amountCents (default: what is still due), method (check, ach, zelle, wire_transfer, cash, venmo, credit_card or other) and a note. It works on an open invoice awaiting payment, a partly paid one, or one whose Cleo payment failed.

Events

Invoices send invoice.sent and invoice.paid, plus the payable.* events. See Webhooks.