Update a client

PATCHhttps://rebaar.in/api/v1/clients/{id}View as Markdown

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

HeaderValue
AuthorizationrequiredBearer ck_live_… — your API key from Settings → API keys
Content-Typerequiredapplication/json

Parameters

NameInTypeDescription
idrequiredpathstringThe client id, as returned by the list endpoint.

Request body

Any subset of fields; pass null to clear an optional field.

FieldTypeDescription
namestringat most 200 characters
contactPersonstring or nullat most 200 characters
emailstring (email) or null
phonestring or nullat most 20 characters
citystring or null
pincodestring6-digit PIN code. The server fills stateCode and district from it when they are not sent.pattern ^[1-9][0-9]{5}$
districtstringat most 80 characters
stateCodestring2-digit GST state code, e.g. "29" (Karnataka). 400 with field "pincode" when the PIN is not in that state.pattern ^[0-9]{2}$
gstinstring or nullpattern ^[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
StatusCodeMeaningWhat to do
401unauthenticatedNo `Authorization: Bearer …` header was sent.Send your API key as `Authorization: Bearer ck_live_…` on every request.
401invalid_tokenThe 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.
403ip_not_allowedThe 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.
402plan_requiredThe company is not on the Scale plan, which includes the API.The Owner moves the company to Scale in Settings → Billing.
402access_expiredThe 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.
403insufficient_scopeThe 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.
500internalSomething failed on our side.Retry with exponential backoff. If it keeps happening, email [email protected] with the time of the call.