Customers

Update customer (partial)

Update specific fields on a customer. Send only the fields you want to change — anything you don't send stays as it is. To clear a nullable field, send null.

Set is_taxable to false to mark the customer as tax-exempt, or true to make them taxable. Omit the field to leave the current value unchanged.

Example — rename a customer:

{"name": "Acme Holdings, Inc."}

Example — update phone and website together:

{"phone": "555-0199", "website": "https://acme.example"}

Custom fields

Set custom fields by name:

{"custom_fields": [{"Partner": true}, {"Tier": "Gold"}]}

Each item is a one-key object where the key is the custom field's name and the value is whatever you want to set. Use null to clear a field. If the name doesn't match a custom field in your organization you'll get a 422 back — we won't silently ignore it. If you happen to have two custom fields with the same name, use the id-based shape:

{"custom_fields": [{"field": {"id": 42}, "value": {"custom_field_id": 42, "value": "Acme"}}]}

Omitting custom_fields from the request leaves existing values untouched.

patch/public/v1/customers/{customer_id}/

Path parameters

customer_idinteger required

Headers

Idempotency-Keystring

Optional. A unique value (a UUID works well) identifying this operation. If the request is repeated with the same key, the original response is replayed instead of the operation running again, so a retry cannot create a duplicate record. Results are replayable for 48 hours. Reusing a key with a different request body returns 422.

Request body

custom_fieldsobject[] nullable
namestring nullable
unique_idstring nullable
emailstring nullable
addressstring nullable
countrystring nullable
phonestring nullable
websitestring nullable
is_activeboolean nullable
record_status'draft' | 'posted' | 'archived'
is_taxableboolean nullable

Whether tax is calculated for this customer. Set to false to mark the customer as tax-exempt.

allowed_company_idsinteger[] nullable

Company IDs allowed to use this customer. Empty list means global (all companies). Omit or send null to leave unchanged.

Response

OK

created_atstring date-time required

Date and time the record was created

updated_atstring date-time required

Date and time the record was last updated

approval_statusstring nullable
idinteger required
codestring nullable
addressstring required
countrystring required
namestring required
unique_idstring nullable required
websitestring required
emailstring required
customer_typestring required
is_activeboolean required
phonestring required
record_statusstring required
is_taxableboolean required
default_tax_codestring required
tax_registration_numberstring required
allowed_company_idsinteger[]

Changes

Changed in 5 of the 27 revisions of this API.19

    • ○

      added the new optional request property

      new-optional-request-property

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the optional property to the response with the status

      response-optional-property-added

    • ○

      added the new optional request property

      new-optional-request-property

    • ○

      added the required property to the response with the status

      response-required-property-added

    • ○

      added the required property to the response with the status

      response-required-property-added

    This revision also has 1 change that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog

    • ●

      changed the pattern of the request property from ^[0-9\s\+\-\.\(\)]*$ to (?i)^(?:[0-9\s+\-.\(\)]*|[0-9\s+\-.\(\)]+(?:\s*(?:x|ext\.?|extension)\s*\d+))$

      request-property-pattern-changed

    • ○

      added the new optional request property

      new-optional-request-property

    • ○

      added the new optional request property

      new-optional-request-property

    • ○

      added the new optional header request parameter Idempotency-Key

      new-optional-request-parameter

Of the 27 revisions, 1 has no diff computed.