Create an invoice
/partners/invoicesCreates an invoice, estimate, or credit memo (invoiceType: "memo").
Required: exactly one of customerUuid OR inline customer object, date, invoiceNumber, and products[] with productUuid OR inline product on each line. Optional isDraft (false posts revenue journals for migrations). Response may include _partnerInlineCreated.
Request body
customerUuiduuidExisting customer UUID. Mutually exclusive with customer.
customerobjectInline customer when customerUuid is omitted.
customerstringrequiredCustomer display name.
invoiceTypeenumDocument type. Defaults to invoice.
One of: invoice, estimate, memo
datedaterequiredInvoice date (ISO).
dueDatedateDue date (ISO).
currencystringISO 4217 currency code.
invoiceNumberstringrequiredInvoice number shown to the customer.
productsarrayrequiredThe products or services billed on this invoice.
productUuiduuidProduct UUID from list_products. `uuid` is accepted as an alias.
descriptionstringLine description.
quantitynumberrequiredQuantity billed.
unitPricenumberrequiredPrice per unit.
nonTaxablebooleanWhen true, clears tax on the line.
appliedToInvoiceUuiduuidFor credit memos: link to an open invoice at create time.
isDraftbooleanWhen false, approves and posts revenue journals immediately (migration use case). Defaults to draft.
Responses
201Invoice created successfully.400Bad request — validation failed.404Customer or product not found.https://api.getcount.com/partners/invoicesimport crypto from 'node:crypto';
const BASE_URL = 'https://api.getcount.com';
const CLIENT_ID = process.env.COUNT_CLIENT_ID;
const CLIENT_SECRET = process.env.COUNT_CLIENT_SECRET;
const ACCESS_TOKEN = process.env.COUNT_ACCESS_TOKEN;
const method = 'POST';
const signingPath = '/invoices';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = {
"customerUuid": "dfa3219e-6af8-4c53-997a-037534f63a35",
"invoiceType": "invoice",
"invoiceNumber": "INV-1042",
"date": "2026-03-01",
"dueDate": "2026-03-31",
"currency": "USD",
"products": [
{
"productUuid": "aa11bb22-cc33-dd44-ee55-ff6677889900",
"description": "Consulting services",
"quantity": 10,
"unitPrice": 100,
"nonTaxable": false
}
]
};
const bodyString = JSON.stringify(body);
const bodyHash = crypto.createHash('sha256').update(bodyString).digest('hex');
const baseString = `${method}:${signingPath}:${timestamp}:${bodyHash}`;
const signature = crypto.createHmac('sha256', CLIENT_SECRET).update(baseString).digest('hex');
const response = await fetch(`${BASE_URL}/partners/invoices`, {
method,
headers: {
'x-client-id': CLIENT_ID,
'x-timestamp': timestamp,
'x-signature': signature,
'Content-Type': 'application/json',
Authorization: `Bearer ${ACCESS_TOKEN}`,
},
body: bodyString,
});
console.log(await response.json());{
"status": "success",
"data": {
"invoice": {
"id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"invoiceNumber": "INV-1042",
"invoiceType": "invoice",
"customerUuid": "dfa3219e-6af8-4c53-997a-037534f63a35",
"date": "2026-03-01",
"dueDate": "2026-03-31",
"currency": "USD",
"status": "draft",
"isDraft": true,
"approved": false,
"isSent": false,
"paymentStatus": "unpaid",
"subtotal": 1000,
"taxTotal": 85,
"total": 1085,
"amountDue": 1085,
"products": [
{
"productUuid": "aa11bb22-cc33-dd44-ee55-ff6677889900",
"description": "Consulting services",
"quantity": 10,
"unitPrice": 100,
"nonTaxable": false
}
],
"createdAt": "2026-03-01T09:00:00.000Z",
"updatedAt": "2026-03-02T11:15:00.000Z"
}
}
}