Create a recurring invoice template
/partners/recurring-invoice-templatesCreates a draft invoice plus a recurring template with the supplied schedule.
Same UUID payload rules as invoice create, plus required `recurrencePattern`. `invoiceType` defaults to invoice; memo is rejected, which also makes `dueDate` effectively required. `isDraft` defaults to true, so `customerUuid` is not required unless `isDraft` is set to false — resume the template to start generation.
Request body
customerUuiduuidUUID of the customer billed on each generated invoice. Required only when isDraft is false.
recurrencePatternstringrequiredSchedule cadence: daily, weekly, biweekly, monthly, quarterly, or yearly.
invoiceTypeenumDocument type. Defaults to invoice. Must not be memo.
One of: invoice, estimate
invoiceNumberstringrequiredInvoice number shown on the generated invoice.
datedaterequiredInitial invoice date (ISO).
dueDatedaterequiredDue date on generated invoices (ISO). Effectively required because memo invoiceType is rejected on this endpoint.
currencystringISO 4217 currency code. Defaults to workspace currency.
recurrenceIntervalintegerInterval multiplier for the pattern. Defaults to 1.
recurrenceEndDatedateOptional end date for the schedule (ISO).
occurrenceCountintegerLimit total occurrences when set.
inAdvanceCreationDaysintegerDays before each scheduled date to create the invoice instance.
emailCustomerbooleanEmail the customer when each invoice is generated.
isDraftbooleanWhen true (default), the template is paused until resumed.
productsarrayrequiredProducts or services on each generated 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.
tagUuidsarrayTag UUIDs to attach to generated invoices.
projectUuiduuidOptional project UUID.
Responses
201Template and draft invoice created.400Validation failed — missing recurrencePattern, invoiceNumber, date, or dueDate; memo invoiceType; or invalid UUID references.401Missing or invalid HMAC signature, expired timestamp, or invalid Bearer token. Troubleshoot403The credential does not have access to this workspace or resource. Troubleshoot429Rate limit exceeded (100 requests per minute per clientId). Retry after the Retry-After header. Troubleshoothttps://api.getcount.com/partners/recurring-invoice-templatesimport 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 = '/recurring-invoice-templates';
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",
"recurrencePattern": "monthly",
"recurrenceInterval": 1,
"inAdvanceCreationDays": 0,
"emailCustomer": true,
"isDraft": true,
"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/recurring-invoice-templates`, {
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",
"message": "Invoice and recurring template created",
"data": {
"invoice": {
"id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"invoiceNumber": "INV-1042"
},
"recurringTemplate": {
"id": "c4d5e6f7-a8b9-0123-cdef-456789012345",
"invoiceTitle": "Monthly consulting retainer",
"summary": "Recurring monthly invoice for Acme Corporation",
"email": "contact@acme.com",
"currency": "USD",
"subtotal": 1000,
"taxTotal": 85,
"total": 1085,
"invoiceType": "invoice",
"customer": {
"id": "dfa3219e-6af8-4c53-997a-037534f63a35",
"customer": "Acme Corporation",
"email": "contact@acme.com",
"contactName": "John Doe"
},
"invoiceProducts": [
{
"id": "d5e6f7a8-b9c0-1234-defa-567890123456",
"productServiceId": "aa11bb22-cc33-dd44-ee55-ff6677889900",
"description": "Consulting services",
"quantity": 10,
"unitPrice": 100,
"price": 100,
"nonTaxable": false
}
],
"createdInvoiceTemplate": {
"recurrencePattern": "monthly",
"recurrenceInterval": 1,
"occurrenceCount": null,
"remainingOccurrence": null,
"recurrenceEndDate": null,
"nextInvoiceDate": "2026-04-01",
"inAdvanceCreationDays": 0,
"creationDate": "2026-04-01",
"emailCustomer": true
},
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-28T14:22:30.000Z"
}
}
}