magento Categories API

Category tree management including creation, retrieval, update, and deletion of catalog categories and their product assignments.

OpenAPI Specification

magento-categories-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Magento REST Authentication Categories API
  description: 'The Adobe Commerce (Magento) REST API provides a comprehensive set of endpoints for interacting with all major aspects of an e-commerce store, including catalog management, orders, customers, inventory, shipping, and payments. It supports three authentication mechanisms: OAuth 1.0a for third-party integrations, token-based authentication for mobile apps and administrators, and guest access for select public endpoints. The API follows REST conventions and returns JSON responses, enabling developers to build integrations, automate store operations, and power headless commerce storefronts. All endpoints are versioned under the /V1 prefix and support searchCriteria query parameters for filtering, sorting, and paginating collection responses.'
  version: '2.4'
  contact:
    name: Adobe Commerce Developer Support
    url: https://developer.adobe.com/commerce/webapi/rest/
  termsOfService: https://www.adobe.com/legal/terms.html
servers:
- url: https://{store_domain}/rest/{store_code}
  description: Production Server
  variables:
    store_domain:
      default: your-store.example.com
      description: The hostname of your Adobe Commerce store
    store_code:
      default: V1
      description: Store code followed by API version. Use "all" as store code for admin-scope operations, or the specific store view code for store-scoped operations. The V1 version path segment follows.
security:
- bearerAuth: []
tags:
- name: Categories
  description: Category tree management including creation, retrieval, update, and deletion of catalog categories and their product assignments.
paths:
  /V1/categories:
    get:
      operationId: listCategories
      summary: List categories
      description: Returns the full category tree starting from the specified root category. The response is a nested tree structure with each category containing its children. Use the rootCategoryId parameter to start from a specific category node, and the depth parameter to limit tree traversal depth.
      tags:
      - Categories
      parameters:
      - name: rootCategoryId
        in: query
        description: Root category ID to start the tree from. Defaults to the default root category.
        required: false
        schema:
          type: integer
      - name: depth
        in: query
        description: Maximum depth of the category tree to return.
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Category tree
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoryTree'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createCategory
      summary: Create a category
      description: Creates a new product category. The parent_id field determines where in the category tree the new category is placed. The position field controls sort order among sibling categories. Custom category attributes can be set via the custom_attributes array.
      tags:
      - Categories
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CategoryRequest'
      responses:
        '200':
          description: Category created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /V1/categories/{categoryId}:
    get:
      operationId: getCategory
      summary: Get category by ID
      description: Retrieves a single category by its numeric identifier. Returns the category data including its name, path, parent ID, and custom attributes. Does not include the full subtree; use the list endpoint for tree traversal.
      tags:
      - Categories
      parameters:
      - $ref: '#/components/parameters/categoryId'
      responses:
        '200':
          description: Category object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateCategory
      summary: Update a category
      description: Updates an existing category identified by its numeric ID. Fields included in the request body overwrite existing values. Custom attributes in the custom_attributes array replace their corresponding stored values.
      tags:
      - Categories
      parameters:
      - $ref: '#/components/parameters/categoryId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CategoryRequest'
      responses:
        '200':
          description: Updated category object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Category'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteCategory
      summary: Delete a category
      description: Permanently deletes a category by its numeric ID. Products assigned only to the deleted category will not be deleted but may become uncategorized. Child categories of the deleted category are also deleted recursively.
      tags:
      - Categories
      parameters:
      - $ref: '#/components/parameters/categoryId'
      responses:
        '200':
          description: Category deleted successfully
          content:
            application/json:
              schema:
                type: boolean
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Category:
      type: object
      description: A product category in the catalog category tree.
      properties:
        id:
          type: integer
          description: Numeric category entity ID.
        parent_id:
          type: integer
          description: Numeric ID of the parent category.
        name:
          type: string
          description: Display name of the category.
        is_active:
          type: boolean
          description: Whether the category is active and visible in the storefront.
        position:
          type: integer
          description: Sort position among sibling categories.
        level:
          type: integer
          description: Depth level of the category in the tree (root = 1).
        children:
          type: string
          description: Comma-separated list of child category IDs.
        created_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the category was created.
        updated_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the category was last updated.
        path:
          type: string
          description: Path string of category IDs from root to this category, separated by slashes.
        include_in_menu:
          type: boolean
          description: Whether this category appears in the navigation menu.
        custom_attributes:
          type: array
          description: Custom EAV attribute values for this category.
          items:
            $ref: '#/components/schemas/CustomAttribute'
    CustomAttribute:
      type: object
      description: A key-value pair representing a custom EAV attribute on a catalog entity.
      required:
      - attribute_code
      - value
      properties:
        attribute_code:
          type: string
          description: The unique attribute code identifier.
        value:
          description: The attribute value. Can be a string, integer, or array depending on the attribute type.
    CategoryTree:
      allOf:
      - $ref: '#/components/schemas/Category'
      - type: object
        properties:
          children_data:
            type: array
            description: Nested child category objects forming the category tree.
            items:
              $ref: '#/components/schemas/CategoryTree'
    CategoryRequest:
      type: object
      description: Request body for creating or updating a category.
      required:
      - category
      properties:
        category:
          $ref: '#/components/schemas/Category'
    Error:
      type: object
      description: Standard error response returned for 4xx and 5xx responses.
      properties:
        message:
          type: string
          description: Human-readable error message.
        parameters:
          type: array
          description: Additional error context parameters.
          items:
            type: object
  responses:
    Unauthorized:
      description: Unauthorized — missing or invalid authentication token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request — invalid input parameters or request body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found — the requested resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    categoryId:
      name: categoryId
      in: path
      description: The numeric category entity ID.
      required: true
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token obtained from the /V1/integration/admin/token or /V1/integration/customer/token endpoint. Include in the Authorization header as "Bearer {token}".
externalDocs:
  description: Adobe Commerce REST API Documentation
  url: https://developer.adobe.com/commerce/webapi/rest/