Create a new series under a brand

Creates a new series under the specified brand with the provided name, slug, logo, cover image, and description. Validates that the parent brand exists and that the series name and slug are unique.

POST/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series
API
Management
Updated
Apr 26, 2026

management-api:POST:/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series

Creates a new series under the specified brand with the provided name, slug, logo, cover image, and description. Validates that the parent brand exists and that the series name and slug are unique.

API ownership

  • API family: Management API
  • Best for: Trusted back-office workflows that create, update, organize, or delete merchant-owned data.
  • Do not use from: Browser-only storefront code or public clients.
  • Guide route: /apis/management/latest

The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation.

Operation

  • Method: POST
  • Path: /api/v1/\{team_slug\}/\{app_slug\}/brands/\{brand_id\}/series
  • Summary: Create a new series under a brand
  • Description: Creates a new series under the specified brand with the provided name, slug, logo, cover image, and description. Validates that the parent brand exists and that the series name and slug are unique.
  • OpenAPI contract: management-api
  • Operation ID: Not documented in the OpenAPI contract.

Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID.

Parameters3 parameters
NameInRequiredTypeDescription
app_slugpathYesstringApp slug
team_slugpathYesstringTeam slug
brand_idpathYesstringId of brand
Request bodyDocumented body
  • Required: Yes
  • Description: data on series
  • Content: application/json (object)

Brand Series Request

PropertyTypeRequiredDetails
cover_idstringNo-
descriptionstringNo-
emailstringNo-
logo_idstringNo-
namestringYes-
slugstringYes-

Generated example (synthetic):

{
  "cover_id": "string",
  "description": "string",
  "email": "string",
  "logo_id": "string",
  "name": "string",
  "slug": "string"
}
Responses4 statuses
StatusDescriptionContent
200Series created successfullyapplication/json (object)
400Invalid request (e.g. bad UUID, validation error)application/json (object)
401Unauthorized accessapplication/json (object)
500Internal server errorapplication/json (object)

200 - object

Series

PropertyTypeRequiredDetails
dataobjectNo-
detailsstring[]NoAdditional contextual information about the response. Used to provide supplementary details beyond the main data payload, such as validation warnings or processing notes
successbooleanNo-
Series
PropertyTypeRequiredDetails
brandobjectNobrand for which the series belong to
coverobjectNo-
created_atstringNo-
descriptionstringNoseries description
emailstringNoseries email
idstringNoid of series
logoobjectNo-
namestringNoname of series
slugstringNoslug of series
translationsobjectNo-
updated_atstringNo-
Brand Parent
PropertyTypeRequiredDetails
idstringNoid of brand
namestringNoname of brand
slugstringNoslug of brand
Image
PropertyTypeRequiredDetails
altstringNo-
app_idstringNo-
attributesobject[]No-
blurhashstringNo-
copyrightstringNo-
customobjectNo-
folder_idstringNo-
idstringNo-
parent_idstringNo-
publicbooleanNo-
source_app_idstringNo-
source_idstringNo-
statusstringNo-
titlestringNo-
translationsobjectNo-
urlstringNo-
Image Translation
PropertyTypeRequiredDetails
altobject[]No-
copyrightobject[]No-
titleobject[]No-
Brand Translations
PropertyTypeRequiredDetails
descriptionobject[]No-
{
  "data": {
    "brand": {
      "id": "string",
      "name": "string",
      "slug": "string"
    },
    "cover": {
      "alt": "string",
      "app_id": "string",
      "attributes": [
        {
          "created_at": null,
          "description": null,
          "filterable": null,
          "id": null,
          "key": null,
          "name": null,
          "template_key": null,
          "template_name": null,
          "translatable": null,
          "translations": null,
          "updated_at": null,
          "values": null
        }
      ],
      "blurhash": "string",
      "copyright": "string",
      "custom": {},
      "folder_id": "string",
      "id": "string",
      "parent_id": "string",
      "public": false,
      "source_app_id": "string",
      "source_id": "string",
      "status": "string",
      "title": "string",
      "translations": {
        "alt": [],
        "copyright": [],
        "title": []
      },
      "url": "string"
    },
    "created_at": "string",
    "description": "string",
    "email": "string",
    "id": "string",
    "logo": {
      "alt": "string",
      "app_id": "string",
      "attributes": [
        {
          "created_at": null,
          "description": null,
          "filterable": null,
          "id": null,
          "key": null,
          "name": null,
          "template_key": null,
          "template_name": null,
          "translatable": null,
          "translations": null,
          "updated_at": null,
          "values": null
        }
      ],
      "blurhash": "string",
      "copyright": "string",
      "custom": {},
      "folder_id": "string",
      "id": "string",
      "parent_id": "string",
      "public": false,
      "source_app_id": "string",
      "source_id": "string",
      "status": "string",
      "title": "string",
      "translations": {
        "alt": [],
        "copyright": [],
        "title": []
      },
      "url": "string"
    },
    "name": "string",
    "slug": "string",
    "translations": {
      "description": [
        {
          "id": null,
          "locale": null,
          "value": null
        }
      ]
    },
    "updated_at": "string"
  },
  "details": [
    "string"
  ],
  "success": false
}

400 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

401 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

500 - object

Error Message

PropertyTypeRequiredDetails
detailsstring[]No-
messagestringNo-
successbooleanNo-

Generated example (synthetic):

{
  "details": [
    "string"
  ],
  "message": "string",
  "success": false
}

Contract identity

Use these fields to confirm you are implementing the intended endpoint contract.

  • API family: Management API
  • Method: POST
  • Path: /api/v1/\{team_slug\}/\{app_slug\}/brands/\{brand_id\}/series
  • Operation ID: Not documented in the OpenAPI contract.
  • OpenAPI tag: Brands
  • OpenAPI summary: Create a new series under a brand

Create a new series under a brand

# Create a new series under a brand Creates a new series under the specified brand with the provided name, slug, logo, cover image, and description. Validates that the parent brand exists and that the series name and slug are unique.
POST /api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series
Purpose

Creates a new series under the specified brand with the provided name, slug, logo, cover image, and description.

Required inputs

app_slug path team_slug path brand_id path

Primary response

200 ยท Series created successfully

Operation key

management-api:POST:/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series

## API ownership - API family: Management API - Best for: Trusted back-office workflows that create, update, organize, or delete merchant-owned data. - Do not use from: Browser-only storefront code or public clients. - Guide route: [/apis/management/latest](/apis/management/latest) The OpenAPI contract defines the method, path, parameters, request body, and responses for this operation. ## Operation - Method: `POST` - Path: `/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series` - Summary: Create a new series under a brand - Description: Creates a new series under the specified brand with the provided name, slug, logo, cover image, and description. Validates that the parent brand exists and that the series name and slug are unique. - OpenAPI contract: management-api - Operation ID: Not documented in the OpenAPI contract. - Stable operation key: `management-api:POST:/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series` Operation key uses API family, method, and path because this OpenAPI contract does not publish an operation ID. ## Parameters | Name | In | Required | Type | Description | | --- | --- | --- | --- | --- | | app_slug | path | Yes | string | App slug | | team_slug | path | Yes | string | Team slug | | brand_id | path | Yes | string | Id of brand | ## Request body - Required: Yes - Description: data on series - Content: application/json (object) ### Brand Series Request | Property | Type | Required | Details | | --- | --- | --- | --- | | `cover_id` | string | No | - | | `description` | string | No | - | | `email` | string | No | - | | `logo_id` | string | No | - | | `name` | string | Yes | - | | `slug` | string | Yes | - | **Generated example (synthetic):** ```json { "cover_id": "string", "description": "string", "email": "string", "logo_id": "string", "name": "string", "slug": "string" } ``` ## Responses | Status | Description | Content | | --- | --- | --- | | 200 | Series created successfully | application/json (object) | | 400 | Invalid request (e.g. bad UUID, validation error) | application/json (object) | | 401 | Unauthorized access | application/json (object) | | 500 | Internal server error | application/json (object) | ### 200 - object #### Series | Property | Type | Required | Details | | --- | --- | --- | --- | | `data` | object | No | - | | `details` | string[] | No | Additional contextual information about the response. Used to provide supplementary details beyond the main data payload, such as validation warnings or processing notes | | `success` | boolean | No | - | ##### Series | Property | Type | Required | Details | | --- | --- | --- | --- | | `brand` | object | No | brand for which the series belong to | | `cover` | object | No | - | | `created_at` | string | No | - | | `description` | string | No | series description | | `email` | string | No | series email | | `id` | string | No | id of series | | `logo` | object | No | - | | `name` | string | No | name of series | | `slug` | string | No | slug of series | | `translations` | object | No | - | | `updated_at` | string | No | - | ##### Brand Parent | Property | Type | Required | Details | | --- | --- | --- | --- | | `id` | string | No | id of brand | | `name` | string | No | name of brand | | `slug` | string | No | slug of brand | ##### Image | Property | Type | Required | Details | | --- | --- | --- | --- | | `alt` | string | No | - | | `app_id` | string | No | - | | `attributes` | object[] | No | - | | `blurhash` | string | No | - | | `copyright` | string | No | - | | `custom` | object | No | - | | `folder_id` | string | No | - | | `id` | string | No | - | | `parent_id` | string | No | - | | `public` | boolean | No | - | | `source_app_id` | string | No | - | | `source_id` | string | No | - | | `status` | string | No | - | | `title` | string | No | - | | `translations` | object | No | - | | `url` | string | No | - | ##### Image Translation | Property | Type | Required | Details | | --- | --- | --- | --- | | `alt` | object[] | No | - | | `copyright` | object[] | No | - | | `title` | object[] | No | - | ##### Brand Translations | Property | Type | Required | Details | | --- | --- | --- | --- | | `description` | object[] | No | - |
Generated example (synthetic) ```json { "data": { "brand": { "id": "string", "name": "string", "slug": "string" }, "cover": { "alt": "string", "app_id": "string", "attributes": [ { "created_at": null, "description": null, "filterable": null, "id": null, "key": null, "name": null, "template_key": null, "template_name": null, "translatable": null, "translations": null, "updated_at": null, "values": null } ], "blurhash": "string", "copyright": "string", "custom": {}, "folder_id": "string", "id": "string", "parent_id": "string", "public": false, "source_app_id": "string", "source_id": "string", "status": "string", "title": "string", "translations": { "alt": [], "copyright": [], "title": [] }, "url": "string" }, "created_at": "string", "description": "string", "email": "string", "id": "string", "logo": { "alt": "string", "app_id": "string", "attributes": [ { "created_at": null, "description": null, "filterable": null, "id": null, "key": null, "name": null, "template_key": null, "template_name": null, "translatable": null, "translations": null, "updated_at": null, "values": null } ], "blurhash": "string", "copyright": "string", "custom": {}, "folder_id": "string", "id": "string", "parent_id": "string", "public": false, "source_app_id": "string", "source_id": "string", "status": "string", "title": "string", "translations": { "alt": [], "copyright": [], "title": [] }, "url": "string" }, "name": "string", "slug": "string", "translations": { "description": [ { "id": null, "locale": null, "value": null } ] }, "updated_at": "string" }, "details": [ "string" ], "success": false } ```
### 400 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ### 401 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ### 500 - object #### Error Message | Property | Type | Required | Details | | --- | --- | --- | --- | | `details` | string[] | No | - | | `message` | string | No | - | | `success` | boolean | No | - | **Generated example (synthetic):** ```json { "details": [ "string" ], "message": "string", "success": false } ``` ## Contract identity Use these fields to confirm you are implementing the intended endpoint contract. - API family: Management API - Method: `POST` - Path: `/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series` - Operation ID: Not documented in the OpenAPI contract. - Stable operation key: `management-api:POST:/api/v1/{team_slug}/{app_slug}/brands/{brand_id}/series` - OpenAPI tag: Brands - OpenAPI summary: Create a new series under a brand