> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wisepim.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a product

> POST /products on the WISEPIM Public API: create one product by SKU with content, prices, SEO fields, categories and attributes. Requires products:write.



## OpenAPI

````yaml openapi.json POST /api/public/v1/products
openapi: 3.1.0
info:
  title: WISEPIM Public API
  version: 1.0.0
  description: >-
    Manage your WisePIM catalogue, prompts and knowledge, and launch enrichment,
    translation and bulk jobs. Authenticate with `Authorization: Bearer wpk_…`;
    create keys under Settings → API keys. Each key is bound to one project and
    to the scopes it was created with.
  summary: >-
    Manage catalog entities, prompts and knowledge; launch enrichment,
    translation and bulk actions and track jobs.
  termsOfService: https://wisepim.com/terms
  contact:
    name: WISEPIM support
    url: https://wisepim.com/contact
    email: info@wisepim.com
  x-logo:
    url: >-
      https://docs.wisepim.com/logo/wisepim-logo-horizontal-transparant-lightmode.png
    altText: WISEPIM
servers:
  - url: https://wisepim.com
    description: Production. Every path below already starts with /api/public/v1.
security:
  - ProjectApiKeyAuth: []
tags:
  - name: Key and project
    description: Key and project endpoints for the project bound to your API key.
  - name: Products
    description: Products endpoints for the project bound to your API key.
  - name: Categories
    description: Categories endpoints for the project bound to your API key.
  - name: Attributes
    description: Attributes endpoints for the project bound to your API key.
  - name: Dictionary Entries
    description: Dictionary Entries endpoints for the project bound to your API key.
  - name: Keywords
    description: Keywords endpoints for the project bound to your API key.
  - name: Import Templates
    description: Import Templates endpoints for the project bound to your API key.
  - name: Export Templates
    description: Export Templates endpoints for the project bound to your API key.
  - name: Attribute Groups
    description: Attribute Groups endpoints for the project bound to your API key.
  - name: Product Families
    description: Product Families endpoints for the project bound to your API key.
  - name: Value Code Sets
    description: Value Code Sets endpoints for the project bound to your API key.
  - name: Code Set Values
    description: Code Set Values endpoints for the project bound to your API key.
  - name: Uom Code Sets
    description: Uom Code Sets endpoints for the project bound to your API key.
  - name: Uom Values
    description: Uom Values endpoints for the project bound to your API key.
  - name: Prompts
    description: Prompts endpoints for the project bound to your API key.
  - name: Knowledge Libraries
    description: Knowledge Libraries endpoints for the project bound to your API key.
  - name: Enrichments
    description: Enrichments endpoints for the project bound to your API key.
  - name: Translations
    description: Translations endpoints for the project bound to your API key.
  - name: Bulk Actions
    description: Bulk Actions endpoints for the project bound to your API key.
  - name: Jobs
    description: Jobs endpoints for the project bound to your API key.
  - name: Family Attributes
    description: Family Attributes endpoints for the project bound to your API key.
  - name: Product Categories
    description: Product Categories endpoints for the project bound to your API key.
externalDocs:
  description: WISEPIM API reference and guides
  url: https://docs.wisepim.com/en/api-reference/introduction
paths:
  /api/public/v1/products:
    post:
      tags:
        - Products
      summary: Create a product
      description: |-
        Create one product. `sku` is required and must be unique within the
        project (409 `sku_conflict`). Every other field is optional; see the
        schema for the writable set — `main_image`, `product_type` and
        `parent` are not writable here. `category_ids` must belong to this
        project and `attributes` keys must be attribute codes of this project
        (422 `unknown_category` / `unknown_attribute`). Creating a product
        the owner's plan has no room for is a 403 `product_limit_exceeded`.
        Requires `products:write`.
      operationId: public_v1_create_product
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[!-~]+$
          description: >-
            Reuse this key for retries of the same write. Scoped to this API
            key; retained until key deletion. Different requests with the same
            key return 409.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductCreateIn'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductOut'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '413':
          description: Content Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
        '422':
          description: Unprocessable Content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorOut'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorOut'
      security:
        - ProjectApiKeyAuth: []
components:
  schemas:
    ProductCreateIn:
      additionalProperties: false
      properties:
        ean:
          anyOf:
            - maxLength: 255
              type: string
            - type: 'null'
          title: Ean
        upc:
          anyOf:
            - maxLength: 12
              type: string
            - type: 'null'
          title: Upc
        manufacturer_part_number:
          anyOf:
            - maxLength: 255
              type: string
            - type: 'null'
          title: Manufacturer Part Number
        brand:
          anyOf:
            - maxLength: 255
              type: string
            - type: 'null'
          title: Brand
        name:
          anyOf:
            - maxLength: 500
              type: string
            - type: 'null'
          title: Name
        name_long:
          anyOf:
            - maxLength: 500
              type: string
            - type: 'null'
          title: Name Long
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        short_description:
          anyOf:
            - type: string
            - type: 'null'
          title: Short Description
        name_localized:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          description: 'Locale code → name, e.g. {"nl": "Boormachine"}.'
          title: Name Localized
        description_localized:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Description Localized
        short_description_localized:
          anyOf:
            - additionalProperties:
                type: string
              type: object
            - type: 'null'
          title: Short Description Localized
        status:
          anyOf:
            - type: string
            - type: 'null'
          description: One of active, inactive, pending, archived.
          title: Status
        meta_title:
          anyOf:
            - maxLength: 255
              type: string
            - type: 'null'
          title: Meta Title
        meta_description:
          anyOf:
            - type: string
            - type: 'null'
          title: Meta Description
        meta_keywords:
          anyOf:
            - maxLength: 255
              type: string
            - type: 'null'
          title: Meta Keywords
        price:
          anyOf:
            - type: string
            - type: integer
            - type: 'null'
          description: >-
            Decimal string with at most two decimals ("19.99") or an integer.
            Null clears it.
          title: Price
        special_price:
          anyOf:
            - type: string
            - type: integer
            - type: 'null'
          description: >-
            Decimal string with at most two decimals ("14.99") or an integer.
            Null clears it.
          title: Special Price
        special_price_start_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Special Price Start Date
        special_price_end_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Special Price End Date
        category_ids:
          anyOf:
            - items:
                type: integer
              maxItems: 200
              type: array
            - type: 'null'
          description: >-
            Replaces the product's category set. Every id must belong to this
            project.
          title: Category Ids
        attributes:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          description: >-
            Attribute values keyed by attribute code. A value is a scalar or
            list, or {"value": ..., "unit": "kg"}; null removes the value. Only
            the codes sent are touched.
          title: Attributes
        sku:
          maxLength: 255
          minLength: 1
          title: Sku
          type: string
      required:
        - sku
      title: ProductCreateIn
      type: object
    ProductOut:
      properties:
        id:
          title: Id
          type: integer
        sku:
          title: Sku
          type: string
        ean:
          anyOf:
            - type: string
            - type: 'null'
          title: Ean
        upc:
          anyOf:
            - type: string
            - type: 'null'
          title: Upc
        manufacturer_part_number:
          anyOf:
            - type: string
            - type: 'null'
          title: Manufacturer Part Number
        brand:
          anyOf:
            - type: string
            - type: 'null'
          title: Brand
        name:
          title: Name
          type: string
        name_long:
          title: Name Long
          type: string
        description:
          anyOf:
            - type: string
            - type: 'null'
          title: Description
        short_description:
          anyOf:
            - type: string
            - type: 'null'
          title: Short Description
        name_localized:
          additionalProperties: true
          title: Name Localized
          type: object
        description_localized:
          additionalProperties: true
          title: Description Localized
          type: object
        short_description_localized:
          additionalProperties: true
          title: Short Description Localized
          type: object
        status:
          title: Status
          type: string
        product_type:
          title: Product Type
          type: string
        parent_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Parent Id
        family:
          anyOf:
            - $ref: '#/components/schemas/FamilyRefOut'
            - type: 'null'
        price:
          anyOf:
            - type: string
            - type: 'null'
          description: Decimal string, e.g. "19.99".
          title: Price
        special_price:
          anyOf:
            - type: string
            - type: 'null'
          description: Decimal string, e.g. "14.99".
          title: Special Price
        special_price_start_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Special Price Start Date
        special_price_end_date:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Special Price End Date
        main_image:
          anyOf:
            - type: string
            - type: 'null'
          title: Main Image
        meta_title:
          anyOf:
            - type: string
            - type: 'null'
          title: Meta Title
        meta_description:
          anyOf:
            - type: string
            - type: 'null'
          title: Meta Description
        meta_keywords:
          anyOf:
            - type: string
            - type: 'null'
          title: Meta Keywords
        category_ids:
          items:
            type: integer
          title: Category Ids
          type: array
        attributes:
          items:
            $ref: '#/components/schemas/AttributeValueOut'
          title: Attributes
          type: array
        version:
          title: Version
          type: integer
        created_at:
          format: date-time
          title: Created At
          type: string
        updated_at:
          format: date-time
          title: Updated At
          type: string
      required:
        - id
        - sku
        - name
        - name_long
        - name_localized
        - description_localized
        - short_description_localized
        - status
        - product_type
        - category_ids
        - attributes
        - version
        - created_at
        - updated_at
      title: ProductOut
      type: object
    ErrorOut:
      description: |-
        The shared error envelope every NinjaAPI instance renders.

        `code` is present for :class:`user_app.ninja_api.errors.ApiError`
        (`insufficient_scope`, `rate_limited`, `invalid_cursor`, …) so machine
        clients can branch without parsing `error`.
      properties:
        error:
          title: Error
          type: string
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
        request_id:
          title: Request Id
          type: string
      required:
        - error
        - request_id
      title: ErrorOut
      type: object
    ValidationErrorOut:
      description: 'HTTP 422: `detail` carries Ninja''s per-field validation errors.'
      properties:
        error:
          title: Error
          type: string
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
        request_id:
          title: Request Id
          type: string
        detail:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Detail
      required:
        - error
        - request_id
      title: ValidationErrorOut
      type: object
    FamilyRefOut:
      properties:
        id:
          title: Id
          type: integer
        code:
          title: Code
          type: string
        name:
          title: Name
          type: string
      required:
        - id
        - code
        - name
      title: FamilyRefOut
      type: object
    AttributeValueOut:
      properties:
        code:
          title: Code
          type: string
        label:
          title: Label
          type: string
        type:
          title: Type
          type: string
        value:
          title: Value
        unit:
          anyOf:
            - type: string
            - type: 'null'
          title: Unit
      required:
        - code
        - label
        - type
      title: AttributeValueOut
      type: object
  securitySchemes:
    ProjectApiKeyAuth:
      type: http
      scheme: bearer
      x-scopes:
        project:read: Read the project's identity, locales and limits.
        products:read: >-
          List and read products, including attribute values and category
          membership.
        products:write: Create and update products and their catalogue content.
        products:delete: Delete products from this project.
        categories:read: List the project's category tree.
        categories:write: Create and update the project's categories.
        categories:delete: Delete the project's categories.
        attributes:read: List the project's attribute definitions.
        attributes:write: Create and update the project's attribute definitions.
        attributes:delete: Delete the project's attribute definitions.
        attribute-groups:read: Read the project's attribute groups.
        attribute-groups:write: Create and update the project's attribute groups.
        attribute-groups:delete: Delete the project's attribute groups.
        product-families:read: Read the project's product families.
        product-families:write: Create and update the project's product families.
        product-families:delete: Delete the project's product families.
        family-attributes:read: Read the project's family attribute bindings.
        family-attributes:write: Create and update the project's family attribute bindings.
        family-attributes:delete: Delete the project's family attribute bindings.
        product-categories:read: Read the project's product category memberships.
        product-categories:write: Create and update the project's product category memberships.
        product-categories:delete: Delete the project's product category memberships.
        value-code-sets:read: Read the project's controlled vocabularies.
        value-code-sets:write: Create and update the project's controlled vocabularies.
        value-code-sets:delete: Delete the project's controlled vocabularies.
        code-set-values:read: Read values in the project's controlled vocabularies.
        code-set-values:write: Create and update values in the project's controlled vocabularies.
        code-set-values:delete: Delete values in the project's controlled vocabularies.
        uom-code-sets:read: Read the project's unit-of-measure sets.
        uom-code-sets:write: Create and update the project's unit-of-measure sets.
        uom-code-sets:delete: Delete the project's unit-of-measure sets.
        uom-values:read: Read units in the project's unit-of-measure sets.
        uom-values:write: Create and update units in the project's unit-of-measure sets.
        uom-values:delete: Delete units in the project's unit-of-measure sets.
        prompts:read: Read prompts visible to the key issuer in this project.
        prompts:write: >-
          Create prompts and update the key issuer's own prompts in this
          project.
        prompts:delete: Delete the key issuer's own prompts in this project.
        knowledge-libraries:read: Read this project's knowledge library.
        knowledge-libraries:write: Create and update this project's knowledge library.
        knowledge-libraries:delete: Delete this project's knowledge library.
        keywords:read: Read the project's keywords.
        keywords:write: Create and update the project's keywords.
        keywords:delete: Delete the project's keywords.
        dictionary-entries:read: Read the project's translation dictionary entries.
        dictionary-entries:write: Create and update the project's translation dictionary entries.
        dictionary-entries:delete: Delete the project's translation dictionary entries.
        import-templates:read: Read the project's reusable import templates.
        import-templates:write: Create and update the project's reusable import templates.
        import-templates:delete: Delete the project's reusable import templates.
        export-templates:read: Read the project's reusable export templates.
        export-templates:write: Create and update the project's reusable export templates.
        export-templates:delete: Delete the project's reusable export templates.
        enrichment:execute: >-
          Start product enrichment using this project's native pipelines and
          credit limits.
        translations:execute: >-
          Start product translation using this project's native pipelines and
          credit limits.
        bulk-actions:execute: Start bulk actions against this project's products.
        jobs:read: Read this project's background job status and progress.
        jobs:cancel: Request cooperative cancellation of this project's background jobs.
      bearerFormat: Project API key (wpk_...)
      description: >-
        Use a project API key from **Settings > API Access**. Send it as
        `Authorization: Bearer wpk_...`. See [authentication and
        scopes](/en/api-reference/authentication) for setup and permissions.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.