COUNTCOUNT
Sign Up
CustomersAdd a customer

Add a customer

POST/partners/customers

Creates a new customer in the workspace.

Only customer (the name) is required. Addresses, contacts, and taxes can be created inline.

HMAC signature + Bearer access token
Try this request

Request body

customerstringrequired

Customer or business name. The only required field.

emailstring

Primary contact email. Optional; does not need to be unique.

mainPhonestring

Primary phone number. International format recommended.

websitestring

Website URL. Stored with an https:// prefix if the protocol is omitted.

notesstring

Free-text notes. HTML is sanitized.

statusenum

Customer status. Defaults to active.

One of: active, inactive

paymentTermstring

Default payment term for invoices (for example net30).

taxNumberstring

Tax registration number.

salesRepIdinteger

Id of the workspace person to assign as sales representative.

taxAutoCalculateboolean

Auto-calculate tax from the address. Defaults to false.

taxExcludedboolean

Treat amounts as tax-exclusive. Defaults to false.

taxesarray

Array of tax ids to apply when taxAutoCalculate is false.

billingAddressobject

Billing address for the customer.

streetstring

Street address.

citystring

City or locality.

statestring

State, province, or region.

zipCodestring

Postal or ZIP code.

countrystring

Country name or ISO code.

shippingAddressobject

Shipping address. Same shape as billingAddress.

contactsarray

Contact people for this customer. The first contact sets the derived contactName.

firstNamestringrequired

Contact's first name.

lastNamestringrequired

Contact's last name.

emailstring

Contact's email address.

phonestring

Contact's phone number.

isPrimaryboolean

Marks the primary contact.

Responses

201Customer created successfully.
400Bad request — validation failed.
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/customers
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 = '/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());
Response · 201
{
  "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"
    }
  }
}