Bulk Import Container Profiles

Bulk Import Container Profiles

POST https://api.ocamba.com/v1/hood/containers/{id}/profiles/bulk-update
Applies the same custom-properties patch to every subscribed profile bound to the container. Equivalent to POST /profiles/bulk-update with filters=container_id={id}.

Note
Requires the profiles.import permission. The container must exist, belong to the authenticated company, not be deleted, and have status=active. Unknown or inactive containers return 400. custom_properties uses the same rules as POST /profiles/import: 1–100 keys, each key non-empty and at most 255 characters. type must be omitted or string. A non-empty value writes the property; JSON null deletes that key; empty string is rejected. Keys omitted from the patch are left unchanged. Only subscribed (status=1), non-deleted profiles in the container are updated. A 202 Accepted response means the bulk update was queued. It does not mean that matching profiles have been updated. Zero matching profiles still returns 202. There is no public job-status API. Overlapping requests enqueue. One unfinished bulk-update job runs per company, oldest first (FIFO).
Tip
Use POST /profiles/bulk-update when you need filters beyond a single container, such as lists or user_data fields.

Rate limits:

  • Burst: 10/s
  • Steady: 150/m

Path parameters

parameters

Request schema

body

Response schemas

curl -X POST \
 "https://api.ocamba.com/v1/hood/containers/{id}/profiles/bulk-update" \
  -H "Authorization: Bearer {TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
  "custom_properties": {
    "is_push_delivery_active": {
      "value": "true"
    },
    "old_flag": {
      "type": "string",
      "value": null
    }
  }
}'
const url = 'https://api.ocamba.com/v1/hood/containers/{id}/profiles/bulk-update';
const options = {
  method: 'POST',
  headers: {
    Authorization: "Bearer {TOKEN}",
    'Content-Type': "application/json"
  },
  body: JSON.stringify(
    {
      "custom_properties": {
        "is_push_delivery_active": {
          "value": "true"
        },
        "old_flag": {
          "type": "string",
          "value": null
        }
      }
    }
  )
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
$ch = curl_init("https://api.ocamba.com/v1/hood/containers/{id}/profiles/bulk-update");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  "Authorization: Bearer {TOKEN}",
  "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(
  [
    "custom_properties" => [
      "is_push_delivery_active" => [
        "value" => "true"
      ],
      "old_flag" => [
        "type" => "string",
        "value" => null
      ]
    ]
  ]
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

Responses

202 Accepted

{
  "message": "Profile bulk update has been queued for processing.",
  "publish_time": "2026-04-28 12:00:00",
  "request_id": "0193c1a2-7b4e-7d21-8f3a-2c9e4b6d8a10",
  "status": "accepted"
}

400 Bad Request

{
  "code": 400,
  "title": "Bad request.",
  "message": "The request is not valid.",
  "trace_id": "99a84211-f73d-4ff8-acdf-eb3e06bb9d62"
}

500 Internal Server Error

{
  "code": 500,
  "title": "Internal server error.",
  "trace_id": "99a84211-f73d-4ff8-acdf-eb3e06bb9d62"
}
Responses