Update stores in bulk

Update up to 100 stores in a single request.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Update stores in bulk

Update up to 100 stores in a single request. Each row is validated and persisted independently — a failure in one item does not block the others. The response reflects the outcome of each item individually, and the HTTP status reflects the overall result: 200 if all items succeeded, 207 if some failed, or 400 if all failed.

Each row identifies the store to update using identifierName and identifierValue. All other fields are optional and use patch semantics: fields absent from the request JSON are left unchanged. For nullable fields, setting the value to null clears the stored value; see each field's description for fields that cannot be set to null.

Example request

curl -X PUT "https://{host}/v2/locations/stores?inheritLocale=false" \
  -H "Authorization: Basic {base64-encoded-credentials}" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "identifierName": "CODE",
      "identifierValue": "store-north-01",
      "name": "North Flagship Store",
      "latitude": "28.6139",
      "longitude": "77.2090",
      "customFields": {
        "storeType": "flagship"
      }
    }
  ]'

Prerequisites

  • Authenticate using Basic authentication (Base64-encoded username:password).

Query parameters

FieldTypeRequiredDescription
inheritLocalebooleanOptionalWhen true, locale fields (language, currency, timezone) are inherited from the store's parent zone when not explicitly provided. Defaults to false.

Body parameters

Pass a JSON array of store update objects. Maximum 100 items per request.

Note: The Updatable column indicates whether the field can be changed after creation. identifierName and identifierValue identify the target store and are never updated themselves.

FieldTypeRequiredDescriptionUpdatable
identifierNamestringRequiredHow the target store is identified. Must be one of: ID (internal system ID), CODE (store code), EXTERNAL_ID (external identifier value). Case-insensitive.No
identifierValuestringRequiredThe identifier value matching identifierName.No
namestringOptionalDisplay name for the store. Cannot be set to null or empty. Cannot equal ROOT (any case). Max 100 characters. Accepts letters, digits, underscores, and spaces.Yes
descriptionstringOptionalFree-text description. Set to null to clear the stored value.Yes
isAdminbooleanOptionalWhether the store has admin access.Yes
isActivebooleanOptionalWhether the store is active. Deactivation fails if any child entities (tills) are still active. Activation fails if any parent entities are inactive.Yes
latitudestringOptionalLatitude coordinate of the store. Set to null to clear.Yes
longitudestringOptionalLongitude coordinate of the store. Set to null to clear.Yes
emailstringOptionalContact email address for the store. Set to null to clear.Yes
mobilestringOptionalContact mobile number for the store. Set to null to clear.Yes
landlinestringOptionalContact landline number for the store. Set to null to clear.Yes
areaParentCodestringOptionalCode of the parent zone. Must be a valid active zone code. Cannot be set to null.Yes
groupParentCodestringOptionalCode of the parent concept. Must be a valid active concept code. Cannot be set to null.Yes
externalIdsobjectOptionalKey-value map of external identifiers ({"typeName": "value"}). Omit to preserve existing values. Set to null to clear all external identifiers. Set a key's value to null to remove that specific key. Pass {} to make no change. Maximum five entries. Keys and values must not exceed 200 characters each.Yes
customFieldsobjectOptionalKey-value map of custom field values. Omit to preserve existing values. Set to null to clear all custom field values. Set a key's value to null to remove that specific key. Pass {} to make no change. Keys must match custom fields configured for the org.Yes
languagestringOptionalIETF BCP 47 language code for the store (for example, en-IN). Must be enabled for the org. Cannot be set to null.Yes
currencystringOptionalISO 4217 currency code for the store (for example, INR). Must be enabled for the org. Cannot be set to null.Yes
timezonestringOptionalIANA timezone name for the store (for example, Asia/Kolkata). Must be enabled for the org. Cannot be set to null.Yes

Example response

{
  "response": [
    {
      "entityId": 75001001,
      "result": {
        "identifierName": "CODE",
        "identifierValue": "store-north-01",
        "name": "North Flagship Store",
        "latitude": "28.6139",
        "longitude": "77.2090",
        "customFields": {
          "storeType": "flagship"
        }
      },
      "errors": [],
      "warnings": []
    }
  ],
  "totalCount": 1,
  "failureCount": 0
}

Partial failure example (HTTP 207):

{
  "response": [
    {
      "entityId": 75001001,
      "result": {
        "identifierName": "CODE",
        "identifierValue": "store-north-01",
        "name": "North Flagship Store"
      },
      "errors": [],
      "warnings": []
    },
    {
      "result": {
        "identifierName": "CODE",
        "identifierValue": "invalid-code"
      },
      "errors": [
        {
          "status": false,
          "code": 1235,
          "message": "Store name not found"
        }
      ],
      "warnings": []
    }
  ],
  "totalCount": 2,
  "failureCount": 1
}

Response parameters

FieldTypeDescription
responsearrayOne entry per input item, in the same order as the request.
.entityIdintegerSystem-assigned ID of the store. Present when the store was identified, regardless of whether the update succeeded. Absent when the store could not be identified or when a batch-level error occurs.
.resultobjectObject containing the fields submitted for this store, echoed from the request. Present for all items regardless of success or failure.
.errorsarrayErrors for this item. Empty when the item succeeded.
..codeintegerNumeric error code.
..messagestringError message.
..statusbooleanStatus flag for the error entry.
.warningsarrayNon-fatal warnings for this item.
..codeintegerNumeric warning code.
..messagestringWarning message.
..statusbooleanStatus flag for the warning entry.
totalCountintegerTotal number of items in the request.
failureCountintegerNumber of items that failed to update.

Error & warning codes

CodeError numberTypeDescription
BULK_REQUEST_LIMIT_EXCEEDED1246ErrorThe request contains more than 100 items. Maximum allowed is 100. HTTP 400.
IDENTIFIER_REQUIRED1249ErroridentifierName or identifierValue is missing or blank. HTTP 400.
INVALID_IDENTIFIER_TYPE1250ErroridentifierName must be ID, CODE, or EXTERNAL_ID. HTTP 400.
IDENTIFIER_VALUE_INVALID1251ErroridentifierValue is not a valid integer when identifierName is ID. HTTP 400.
STORE_NAME_NOT_FOUND1235ErrorNo store found for the given identifier. HTTP 400.
DUPLICATE_ENTITY_IN_REQUEST1253ErrorThe second (and subsequent) occurrence of the same store in the request is rejected; the first occurrence succeeds. HTTP 207.
NAME_CANNOT_BE_NULL1252Errorname is set to null or an empty string. HTTP 400.
NAME_ROOT_NOT_ALLOWED1210Errorname cannot equal ROOT (any case). HTTP 400.
PARENT_PARAM_REQUIRED1257ErrorareaParentCode or groupParentCode is set to null explicitly. HTTP 400.
PARAM_TYPE_IS_NOT_VALID1217ErrorEmitted for multiple causes: a parent zone or concept code does not match any active entity in the org; a customFields key is not a custom field configured for the org; a locale value (language, currency, or timezone) is not enabled for the org; or the net count of externalIds entries after the update would exceed five. HTTP 400.
PARENT_NOT_ACTIVE1258ErrorisActive is set to true but one or more parent entities are inactive. HTTP 400.
CHILDREN_STILL_ACTIVE1259ErrorisActive is set to false but the store has active child entities (tills). HTTP 400.
DUPLICATE_EXTERNAL_ID_IN_REQUEST1248ErrorThe second item in the request that assigns an already-claimed externalIds value is rejected; the first item succeeds. HTTP 207.
EXTERNAL_ID_ALREADY_EXISTS_ORG1245ErrorOne or more externalIds values are already assigned to another entity in the org. HTTP 400.
EXTERNAL_ID_KEY_TOO_LONG1261ErrorAn externalIds key exceeds 200 characters. HTTP 400.
EXTERNAL_ID_VALUE_TOO_LONG1262ErrorAn externalIds value exceeds 200 characters. HTTP 400.
REGEX_MATCH_FAILED1219Errorname contains characters that are not letters, digits, underscores, or spaces. HTTP 400.
NAME_LENGTH_EXCEEDS_LIMIT1264Errorname exceeds 100 characters. HTTP 400.
NAME_ALREADY_EXISTS_ORG1206ErrorThe second item in the request that sets an already-used name value is rejected; the first item succeeds. HTTP 207.
GLOBAL_ERR_MISSING_MANDATORY_FIELD403ErrorA locale field (language, currency, or timezone) was set to null; an externalIds key or value is blank; or inheritLocale=true but the parent zone has no locale configured for that field. HTTP 400.
Query Params
boolean
Defaults to false

When true, locale fields are inherited from the parent zone when not explicitly provided.

Body Params
Headers
string
string
Responses

401

Authentication failed. The token is missing, expired, or invalid.

Language
Credentials
Basic
base64
:
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json