Update Customer
PUT/api/customers/:customer
Update an existing customer. All fields are optional. Default settings (pricing tier, store, shipping methods, warehouse) can only be set on update.
customers:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Optional fields:
- tags: Customer tags (array of tag names, max 64 chars each). Omit to leave existing tags unchanged; send an array to replace them. Unknown names are created automatically.
- payment_term_id: The customer's default payment term for sales orders (integer, nullable). Must reference a sales-applicable, non-archived payment term; send null to clear. New orders for this customer derive their payment due date from this term when the order has no explicit term of its own.
- credit_hold: Manual credit hold (boolean). While true, every new unpaid order for this customer is held in Reserved until released.
- tax_exempt: Whether sales to this customer are tax exempt (boolean). Omit to leave unchanged.
- tax_exemption_reference: Exemption certificate or resale number (string, max 255, nullable) — send null to clear.
- website: The customer's business website (string, max 255, nullable).
- tax_id: Business tax / registration number such as an EIN or VAT number (string, max 100, nullable). Separate from tax_exemption_reference.
Permissions: credit_limit and credit_hold are accepted only from users holding the customer credit management permission (customers.manage_credit); without it these fields are ignored.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.