---
title: "Bulk update child organization licensing"
method: POST
path: "/v0/organizations/mine/child-organizations/bulk-licensing"
tags: ["Organizations"]
---

# Bulk update child organization licensing

`POST /v0/organizations/mine/child-organizations/bulk-licensing`

## Request

- Base URL: `https://platform.sublime.security`
- URL: `https://platform.sublime.security/v0/organizations/mine/child-organizations/bulk-licensing`
- Auth: HTTP bearer

Apply license transitions to up to 200 child organizations in one call. Each organization is evaluated independently; per-organization failures are reported in the results array, not the HTTP status.

## Request body

- BulkPatchChildOrganizationLicensingInput
  - `items` HandlerTypesBulkLicensingItem[], required: Per-organization transitions to apply. Capped at 200 entries per call. The same org_id may not appear more than once. The caller must be able to manage licenses on every listed organization, or the entire request is rejected before any transition is attempted.
    - `licenses` HandlerTypesLicenseInput[], required: License transition to apply to this organization. Exactly one license per entry is supported today; the array shape is reserved for future multi-SKU support.
      - `sku` 'sublime_email_security', required: Identifies the product to license. "sublime_email_security" is the only SKU available today.
      - `status` string, required: Desired billing state for the license. Valid values: "trialing", "active", "canceled". Use "canceled" to downgrade an existing license back to free.
      - `trial_days` integer, nullable: Length of the trial in days (only used when status is trialing.) If not set, the default trial length will be used.
    - `org_id` string, uuid, required: ID of the child organization this entry targets. Must be a descendant of the calling organization.

## Response `200`

OK

- HandlerTypesBulkPatchChildOrganizationLicensingResponse
  - `results` HandlerTypesBulkLicensingResult[]: One entry per requested organization, in the same order as the request's items array. Inspect each entry's error field to detect partial failure.
    - `error` string: Human-readable failure reason; empty on success, populated when the transition failed for this organization. Safe to surface to end users.
    - `licenses` TypesLicense[]: Licenses present on the organization after the transition. Populated on success.
      - `sku` 'sublime_email_security': Identifies the licensed product. "sublime_email_security" is the only SKU available today.
      - `status` 'trialing' | 'active' | 'no_subscription' | 'past_due' | 'canceled' | 'unpaid' | 'incomplete' | 'incomplete_expired': Current billing status of this license. This reflects the underlying billing state and may differ from a requested transition target. Common values: "trialing" (within a time-limited trial — see trial_expires_at for the end date), "active" (a paid, current subscription), and "no_subscription" (free tier — no active subscription). Stripe-derived states such as "past_due", "canceled", "unpaid", "incomplete", and "incomplete_expired" may also appear.
      - `trial_expires_at` string, date-time, nullable: When the trial period ends. Present only while status is "trialing"; omitted otherwise.
    - `org_id` string, uuid: ID of the organization this result applies to.
    - `warnings` string[]: Non-fatal issues encountered while applying the transition for this organization.

---

[API](https://skmtc.dev/sublime/apis/multi-tenancy-api-beta.md) - [All operations](https://skmtc.dev/sublime/apis/multi-tenancy-api-beta/llms.txt) - [OpenAPI document](https://skmtc.dev/sublime/apis/multi-tenancy-api-beta/revisions/28da41b55c3f?raw)
