Update a client
Changes name, contact, GSTIN or location. A new `pincode` decides its own state and district. The email is the client's portal login: changing it signs the old address out and tells it, and changes are capped per day (429 `email_change_limit`); taking it off is always allowed.
Headers
| Header | Value |
|---|---|
| Authorizationrequired | Bearer ck_live_… — your API key from Settings → API keys |
| Content-Typerequired | application/json |
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | The client id, as returned by the list endpoint. |
Request body
Any subset of fields; pass null to clear an optional field.
| Field | Type | Description |
|---|---|---|
| name | string | at most 200 characters |
| contactPerson | string or null | at most 200 characters |
| string (email) or null | ||
| phone | string or null | at most 20 characters |
| city | string or null | |
| pincode | string | 6-digit PIN code. The server fills stateCode and district from it when they are not sent.pattern ^[1-9][0-9]{5}$ |
| district | string | at most 80 characters |
| stateCode | string | 2-digit GST state code, e.g. "29" (Karnataka). 400 with field "pincode" when the PIN is not in that state.pattern ^[0-9]{2}$ |
| gstin | string or null | pattern ^[0-9A-Z]{15}$ |
Try it
This call changes data. Send runs it in your API sandbox — a practice company with sample data — with a sandbox key, never in your real company. To change real data, run the sample from your own machine with a live key. About the sandbox
curl -X PATCH 'https://rebaar.in/api/v1/clients/7d3f1c2a-5b8e-4f0a-9c61-2e4b7a9d0c13' \
-H 'Authorization: Bearer ck_live_xxxxxxxx_…' \
-H 'Content-Type: application/json' \
-d '{
"contactPerson": "Rahul Menon",
"pincode": "560034"
}'Only sandbox keys (ck_test_…) — make one in Settings → API keys. It reaches your practice company, never your real data. 30 calls a minute.
Responses
200Updated. The body is `{ "ok": true }` — GET the record for its new state.
{
"ok": true
}400Validation failed. `error` is the first problem found; `field` names it when it is a location, GSTIN, email or delivery-address field.
{
"error": "no fields to update"
}401No `Authorization: Bearer …` header was sent. Or: The key is unknown, revoked or expired — or the company cannot use it.
unauthenticated — No `Authorization: Bearer …` header was sent.{
"error": "unauthenticated",
"message": "Authorization: Bearer <api_key> required"
}invalid_token — The key is unknown, revoked or expired — or the company cannot use it.{
"error": "invalid_token",
"message": "API key not recognised, revoked, or expired"
}402The company is not on the Scale plan, which includes the API. Or: The subscription is not active (trial over, payment failed, cancelled, paused, locked or closing). `reason` says which.
plan_required — The company is not on the Scale plan, which includes the API.{
"error": "plan_required",
"message": "API access requires the Scale plan. This workspace is on Growth.",
"currentPlan": "growth",
"requiredPlan": "scale"
}access_expired — The subscription is not active (trial over, payment failed, cancelled, paused, locked or closing). `reason` says which.{
"error": "access_expired",
"reason": "payment_failed",
"message": "Workspace does not currently have an active Scale subscription."
}403The request came from an IP address that is not on the key's allowlist. Or: The key does not carry the scope this method needs: `read` for GET, `write` for POST, PATCH and DELETE.
ip_not_allowed — The request came from an IP address that is not on the key's allowlist.{
"error": "ip_not_allowed",
"message": "Source IP 203.0.113.7 is not on the key's allowlist."
}insufficient_scope — The key does not carry the scope this method needs: `read` for GET, `write` for POST, PATCH and DELETE.{
"error": "insufficient_scope",
"message": "This API key does not have the 'write' scope.",
"required": "write",
"granted": [
"read"
]
}404No such client in this workspace.
{
"error": "not_found"
}409The email changed while this request was being handled — read the client again and retry.
{
"error": "email_changed_meanwhile",
"message": "This client's email was changed while you were editing — reload and try again.",
"field": "email"
}429Too many requests, or too many email changes for this client today.
rate_limited{
"error": "Too many requests. Please try again later."
}email_change_limit{
"error": "email_change_limit",
"message": "This client's email has been changed 3 times in the last 24 hours — try again tomorrow.",
"field": "email"
}500Something failed on our side.
internal — Something failed on our side.{
"error": "internal"
}Errors
Errors every call can return
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 401 | unauthenticated | No `Authorization: Bearer …` header was sent. | Send your API key as `Authorization: Bearer ck_live_…` on every request. |
| 401 | invalid_token | The key is unknown, revoked or expired — or the company cannot use it. | Check you copied the whole key. Make a new one in Settings → API keys if it was revoked or has expired. |
| 403 | ip_not_allowed | The request came from an IP address that is not on the key's allowlist. | Call from an allowed address, or change the key's IP allowlist in Settings → API keys. |
| 402 | plan_required | The company is not on the Scale plan, which includes the API. | The Owner moves the company to Scale in Settings → Billing. |
| 402 | access_expired | The subscription is not active (trial over, payment failed, cancelled, paused, locked or closing). `reason` says which. | The Owner pays or renews in Settings → Billing; calls work again at once. |
| 429 | — | More than 120 requests in a minute with this key (30 with a sandbox key). | Wait the number of seconds in the `Retry-After` header. Every reply carries `RateLimit-Remaining`, so you can slow down before this happens. |
| 403 | insufficient_scope | The key does not carry the scope this method needs: `read` for GET, `write` for POST, PATCH and DELETE. | Make a key with the scope you need in Settings → API keys. |
| 500 | internal | Something failed on our side. | Retry with exponential backoff. If it keeps happening, email [email protected] with the time of the call. |