Add a customer
/partners/customersCreates a new customer in the workspace.
Only customer (the name) is required. Addresses, contacts, and taxes can be created inline.
Request body
customerstringrequiredCustomer or business name. The only required field.
emailstringPrimary contact email. Optional; does not need to be unique.
mainPhonestringPrimary phone number. International format recommended.
websitestringWebsite URL. Stored with an https:// prefix if the protocol is omitted.
notesstringFree-text notes. HTML is sanitized.
statusenumCustomer status. Defaults to active.
One of: active, inactive
paymentTermstringDefault payment term for invoices (for example net30).
taxNumberstringTax registration number.
salesRepIdintegerId of the workspace person to assign as sales representative.
taxAutoCalculatebooleanAuto-calculate tax from the address. Defaults to false.
taxExcludedbooleanTreat amounts as tax-exclusive. Defaults to false.
taxesarrayArray of tax ids to apply when taxAutoCalculate is false.
billingAddressobjectBilling address for the customer.
streetstringStreet address.
citystringCity or locality.
statestringState, province, or region.
zipCodestringPostal or ZIP code.
countrystringCountry name or ISO code.
shippingAddressobjectShipping address. Same shape as billingAddress.
contactsarrayContact people for this customer. The first contact sets the derived contactName.
firstNamestringrequiredContact's first name.
lastNamestringrequiredContact's last name.
emailstringContact's email address.
phonestringContact's phone number.
isPrimarybooleanMarks the primary contact.
Responses
201Customer created successfully.400Bad request — validation failed.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/customersimport 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 = '/customers';
const timestamp = Math.floor(Date.now() / 1000).toString();
const body = {
"customer": "Acme Corporation",
"email": "contact@acme.com",
"mainPhone": "+1234567890",
"website": "https://acme.com",
"status": "active",
"paymentTerm": "net30",
"billingAddress": {
"street": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zipCode": "94102",
"country": "USA"
},
"contacts": [
{
"firstName": "John",
"lastName": "Doe",
"email": "john@acme.com",
"isPrimary": true
}
]
};
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/customers`, {
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": "success on creating customer",
"data": {
"customer": {
"id": "dfa3219e-6af8-4c53-997a-037534f63a35",
"customer": "Acme Corporation",
"email": "contact@acme.com",
"mainPhone": "+1234567890",
"website": "https://acme.com",
"status": "active",
"notes": "Preferred customer. Net-30 terms.",
"paymentTerm": "net30",
"taxNumber": null,
"taxAutoCalculate": false,
"taxExcluded": false,
"contactName": "John Doe",
"billingAddress": {
"id": "0b2c1f5e-7a9d-4f2b-9c1e-2a4b6d8e0f12",
"street": "123 Main St",
"city": "San Francisco",
"state": "CA",
"zipCode": "94102",
"country": "USA"
},
"shippingAddress": null,
"contacts": [
{
"id": "a5da3577-bf85-4e3a-aa73-df85ca69bc67",
"firstName": "John",
"lastName": "Doe",
"email": "john@acme.com",
"phone": "+1234567890",
"isPrimary": true
}
],
"taxes": [],
"salesRep": null,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-28T14:22:30.000Z"
}
}
}