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

# Get a product by ID

> Returns a single product scoped to the caller's portal. When the product has exactly one price, that price is embedded in the response.



## OpenAPI

````yaml /api-reference/openapi.json get /v1/products/{id}
openapi: 3.0.0
info:
  contact: {}
  title: Assembly API
  version: 0.0.1
servers:
  - url: https://api.assembly.com
security: []
paths:
  /v1/products/{id}:
    get:
      tags:
        - Products
      summary: Get a product by ID
      description: >-
        Returns a single product scoped to the caller's portal. When the product
        has exactly one price, that price is embedded in the response.
      operationId: retrieve-product
      parameters:
        - description: ID of the product to retrieve
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/product.Product'
          description: OK
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: Missing or invalid API key
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: API key lacks the payments permission
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: Product not found in the caller's portal
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispatcher.Error'
          description: Unexpected server error
      security:
        - APIKeyHeader: []
components:
  schemas:
    product.Product:
      properties:
        createdAt:
          type: string
        creatorId:
          type: string
        data:
          type: string
        description:
          description: Description is an optional free-text description of the product.
          example: Access to all premium features
          type: string
        id:
          type: string
        identityId:
          type: string
        imageUrls:
          description: ImageUrls holds the URLs of images associated with the product.
          example:
            - https://assets.example.com/products/premium.png
          items:
            type: string
          nullable: true
          type: array
        isUsed:
          description: >-
            IsUsed reports whether the product is referenced elsewhere and
            therefore cannot be deleted.
          example: false
          type: boolean
        name:
          description: >-
            Name is the human-readable product name. Required on create and must
            be unique within the portal.
          example: Premium Plan
          type: string
        object:
          type: string
        portalId:
          description: >-
            PortalID is the ID of the portal that owns the product. Assigned by
            the server.
          example: 550e8400-e29b-41d4-a716-446655440000
          format: uuid
          type: string
        previousAttributes:
          additionalProperties: true
          type: object
        price:
          allOf:
            - $ref: '#/components/schemas/price.Price'
          description: Price is only populated when the product has exactly one price.
        priceIds:
          description: PriceIDs holds the IDs of the prices belonging to this product.
          example:
            - price_1a2b3c
          items:
            type: string
          type: array
        prices:
          description: Prices holds the full price objects associated with the product.
          items:
            $ref: '#/components/schemas/price.Price'
          type: array
        ref:
          type: string
        status:
          allOf:
            - $ref: '#/components/schemas/product.ProductStatusType'
          description: >-
            Status indicates whether the product is active or archived. Assigned
            by the server on create.
          enum:
            - active
            - archived
          example: active
        taxPercentage:
          description: >-
            TaxPercentage is the tax rate applied to the product, expressed as a
            percentage.
          example: 8.5
          type: number
        updatedAt:
          type: string
      type: object
    dispatcher.Error:
      properties:
        code:
          type: string
        data: {}
        message:
          type: string
      type: object
    price.Price:
      properties:
        amount:
          description: >-
            Amount is the price amount in the smallest currency unit (e.g.
            cents).
          example: 5000
          type: integer
        createdAt:
          type: string
        creatorId:
          type: string
        currency:
          default: usd
          description: >-
            Currency is the ISO-4217 currency code. Defaults to usd when
            omitted.
          example: usd
          type: string
        data:
          type: string
        id:
          type: string
        identityId:
          type: string
        interval:
          allOf:
            - $ref: '#/components/schemas/billingutils.BillingPeriodType'
          description: Interval is the recurring billing period. Omit for one-time prices.
          enum:
            - day
            - week
            - month
            - quarterly
            - biannually
            - year
            - semiannually
          example: month
        intervalCount:
          description: >-
            IntervalCount is the number of intervals between billings for a
            recurring price.
          example: 1
          nullable: true
          type: integer
        isUsed:
          description: >-
            IsUsed indicates whether the price is already referenced by a
            subscription or invoice and therefore cannot be deleted.
          example: false
          type: boolean
        object:
          type: string
        portalId:
          description: PortalID is the ID of the portal that owns this price.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
          type: string
        previousAttributes:
          additionalProperties: true
          type: object
        productId:
          description: ProductId is the ID of the product this price belongs to.
          example: d1f8c9e2-3b4a-4c5d-9e6f-7a8b9c0d1e2f
          format: uuid
          type: string
        ref:
          type: string
        type:
          allOf:
            - $ref: '#/components/schemas/price.PriceType'
          description: >-
            Type is a computed field and should not be used in any logic on BE
            or Webapp
          enum:
            - oneTime
            - recurring
          example: recurring
        updatedAt:
          type: string
      type: object
    product.ProductStatusType:
      enum:
        - active
        - archived
      type: string
      x-enum-varnames:
        - ProductStatusTypeActive
        - ProductStatusTypeArchived
    billingutils.BillingPeriodType:
      enum:
        - day
        - week
        - month
        - quarterly
        - biannually
        - year
        - semiannually
      type: string
      x-enum-varnames:
        - BillingPeriodTypeDay
        - BillingPeriodTypeWeek
        - BillingPeriodTypeMonth
        - BillingPeriodTypeQuarter
        - BillingPeriodTypeBiannual
        - BillingPeriodTypeYear
        - BillingPeriodTypeSemiAnnually
    price.PriceType:
      enum:
        - oneTime
        - recurring
      type: string
      x-enum-varnames:
        - PriceTypeOneTime
        - PriceTypeRecurring
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-API-KEY
      type: apiKey

````