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

# Create a new Product in an Organization



## OpenAPI

````yaml https://manage.nervescloud.com/api/openapi post /api/orgs/{org_name}/products
openapi: 3.0.0
info:
  description: >
    The NervesCloud API gives users full access to their

    Orgs, Products, and corresponding Device fleets.


    The API can be used to integrate with your own systems, providing full
    access to your Product and Device data.


    The API is documented using the OpenAPI 3.0 specification.
  title: NervesCloud API
  version: 2.0.0
servers:
  - url: https://manage.nervescloud.com
    variables: {}
security:
  - bearer_auth: []
tags:
  - description: User authentication and API token creation
    name: Auth
  - description: Organization Certificate Authority management
    name: CA Certificates
  - description: >-
      Device management, including action requests eg. upgrade, reboot,
      reconnect
    name: Devices
  - description: Log lines Devices have sent over the logging extension
    name: Device Logs
  - description: >-
      Device management, including action requests eg. upgrade, reboot,
      reconnect
    name: Devices (short URL)
  - description: Device Certificate management
    name: Device Certificates
  - description: Identities a Device holds on networks NervesHub does not run
    name: Network Identities
  - description: Deployment Group and release management
    name: Deployment Groups
  - description: Firmware uploading and management
    name: Firmwares
  - description: Organization iroh endpoint id registration
    name: Iroh Endpoints
  - description: Organization management
    name: Organizations
  - description: Organization User membership management
    name: Organization Members
  - description: Product management
    name: Products
  - description: Organization Signing Key management
    name: Signing Keys
  - description: Product Support Script management
    name: Support Scripts
  - description: Platform healthcheck
    name: Platform Status
paths:
  /api/orgs/{org_name}/products:
    post:
      tags:
        - Products
      summary: Create a new Product in an Organization
      operationId: NervesHubWeb.API.ProductController.create
      parameters:
        - description: Organization Name
          example: example_org
          in: path
          name: org_name
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductCreationRequest'
        description: Product creation request body
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductShowResponse'
          description: Product response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Forbidden
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChangesetErrorResponse'
          description: Unprocessable Entity
      callbacks: {}
      security:
        - bearer_auth: []
components:
  schemas:
    ProductCreationRequest:
      description: POST body for creating a product
      example:
        product:
          name: ExampleProduct
      properties:
        product:
          properties:
            name:
              type: string
          required:
            - name
      required:
        - product
      title: ProductCreationRequest
      type: object
    ProductShowResponse:
      description: Response schema for a single Product
      example:
        data:
          allow_unsigned_atomvm_firmware: false
          allow_unsigned_esp_idf_firmware: false
          allowed_update_tools:
            - fwup
          name: Example Product
          require_unique_firmware_version: true
      properties:
        data:
          $ref: '#/components/schemas/Product'
      title: ProductShowResponse
      type: object
    ErrorResponse:
      description: Error response
      example:
        errors:
          detail: Resource Not Found or Authorization Insufficient
      properties:
        errors:
          properties:
            detail:
              type: string
          type: object
      title: ErrorResponse
      type: object
    ChangesetErrorResponse:
      description: Validation error response
      example:
        errors:
          identifier:
            - can't be blank
      properties:
        errors:
          additionalProperties:
            items:
              type: string
            type: array
          type: object
      title: ChangesetErrorResponse
      type: object
    Product:
      example:
        allow_unsigned_atomvm_firmware: false
        allow_unsigned_esp_idf_firmware: false
        allowed_update_tools:
          - fwup
        name: Example Product
        require_unique_firmware_version: true
      properties:
        allow_unsigned_atomvm_firmware:
          description: |
            Accept AtomVM packbeam archives that carry no signature entry.

            Nothing in the AtomVM toolchain signs by default, so a product built
            without `nh-avm` has no way to sign yet.

            This excuses a missing signature and nothing else: an archive that
            does carry one is always verified against the organization's
            registered signing keys.
          type: boolean
        allow_unsigned_esp_idf_firmware:
          description: >
            Accept ESP-IDF images that carry no Secure Boot v2 signature block.


            This excuses a missing signature and nothing else: an image that
            does

            carry a signature is always verified against the organization's

            registered signing keys.
          type: boolean
        allowed_update_tools:
          description: >
            The firmware formats this product accepts. `fwup` is always present.


            A format also has to be enabled for the instance before a product
            can

            list it — see the ESP-IDF support documentation.
          items:
            enum:
              - fwup
              - esp-idf
              - atomvm
            type: string
          type: array
        name:
          pattern: '[a-zA-Z][a-zA-Z0-9_]+'
          type: string
        require_unique_firmware_version:
          description: >-
            Reject uploaded firmware whose version already exists for this
            product's platform and architecture.
          type: boolean
      title: Product
      type: object
  securitySchemes:
    bearer_auth:
      scheme: bearer
      type: http

````