COUNTCOUNT
Sign Up
Recurring Invoice TemplatesCreate a recurring invoice template

Create a recurring invoice template

POST/partners/recurring-invoice-templates

Creates 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.

HMAC signature + Bearer access token
Try this request

Request body

customerUuiduuid

UUID of the customer billed on each generated invoice. Required only when isDraft is false.

recurrencePatternstringrequired

Schedule cadence: daily, weekly, biweekly, monthly, quarterly, or yearly.

invoiceTypeenum

Document type. Defaults to invoice. Must not be memo.

One of: invoice, estimate

invoiceNumberstringrequired

Invoice number shown on the generated invoice.

datedaterequired

Initial invoice date (ISO).

dueDatedaterequired

Due date on generated invoices (ISO). Effectively required because memo invoiceType is rejected on this endpoint.

currencystring

ISO 4217 currency code. Defaults to workspace currency.

recurrenceIntervalinteger

Interval multiplier for the pattern. Defaults to 1.

recurrenceEndDatedate

Optional end date for the schedule (ISO).

occurrenceCountinteger

Limit total occurrences when set.

inAdvanceCreationDaysinteger

Days before each scheduled date to create the invoice instance.

emailCustomerboolean

Email the customer when each invoice is generated.

isDraftboolean

When true (default), the template is paused until resumed.

productsarrayrequired

Products or services on each generated invoice.

productUuiduuid

Product UUID from list_products. `uuid` is accepted as an alias.

descriptionstring

Line description.

quantitynumberrequired

Quantity billed.

unitPricenumberrequired

Price per unit.

nonTaxableboolean

When true, clears tax on the line.

tagUuidsarray

Tag UUIDs to attach to generated invoices.

projectUuiduuid

Optional 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. Troubleshoot
403The credential does not have access to this workspace or resource. Troubleshoot
429Rate limit exceeded (100 requests per minute per clientId). Retry after the Retry-After header. Troubleshoot
POSThttps://api.getcount.com/partners/recurring-invoice-templates
Request
import 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());
Response · 201
{
  "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"
    }
  }
}