ShipBob subpackage_products API

The subpackage_products API from ShipBob — 11 operation(s) for subpackage_products.

Operations 16

POST /2026-01/product Create Product #
GET /2026-01/product Get Products #
GET /2026-01/product/{productId} Get Product #
PATCH /2026-01/product/{productId} Update Product #
DELETE /2026-01/product/{productId} Delete Product Bundle #
GET /2026-01/product/{productId}/variants Get Product Variants #
POST /2026-01/product/{productId}/variants Add Product Variants #
PATCH /2026-01/product/{productId}/variants Update Product Variants #
POST /2026-01/variant/{variantId}:merge Merge Variants #
POST /2026-01/product/{productId}:moveVariants Move Variants Between Products #
POST /2026-01/product:moveVariants Move Variants to New Product #
GET /2026-01/packaging-requirement Get Packaging Requirement #
GET /2026-01/taxonomy Get Taxonomies #
GET /2026-01/taxonomy/{id} Get Taxonomy by ID #
GET /2026-01/taxonomy/{id}/parent Get Taxonomy Parent #
POST /2026-01/variant/{variantId}:convertToBundle Convert Variant to Bundle #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/shipbob-subpackage-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

shipbob-subpackage-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Reference subpackage_billing Subpackage Products API
  version: 1.0.0
servers:
- url: https://api.shipbob.com
- url: https://sandbox-api.shipbob.com
tags:
- name: subpackage_products
paths:
  /2026-01/product:
    post:
      operationId: create-product
      summary: Create Product
      description: Creates a new product with one or more variants. Requires a product name and at least one variant with a unique SKU.
      tags:
      - subpackage_products
      parameters:
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5'
      requestBody:
        description: The product to add
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.CreateProductRequestModelV5'
    get:
      operationId: get-products
      summary: Get Products
      description: Retrieves a paginated list of products. Supports filtering by search term, barcode, SKU, status, and other criteria.
      tags:
      - subpackage_products
      parameters:
      - name: Search
        in: query
        description: 'Search Products by name, sku, inventory id or product Id.

          '
        required: false
        schema:
          type: string
      - name: Barcode
        in: query
        description: 'Barcode Associated with variant

          '
        required: false
        schema:
          type: string
      - name: Barcodes
        in: query
        description: 'Barcodes Associated with variant

          '
        required: false
        schema:
          type: string
      - name: CategoryIds
        in: query
        description: 'List of Category Ids associated with product

          '
        required: false
        schema:
          type: string
      - name: ChannelIds
        in: query
        description: 'Looks for Products variants by their channel IDs

          '
        required: false
        schema:
          type: string
      - name: HasDigitalVariants
        in: query
        description: 'Looks for Products with/without digital variants

          '
        required: false
        schema:
          type: string
      - name: HasVariants
        in: query
        description: 'Looks for Products with/without variants

          '
        required: false
        schema:
          type: string
      - name: InventoryId
        in: query
        description: 'Looks for variants by its associated inventory id

          '
        required: false
        schema:
          type: string
      - name: IsInventorySyncEnabled
        in: query
        description: 'Looks for Products variants by their IsInventorySyncEnabled is true

          '
        required: false
        schema:
          type: string
      - name: LastUpdatedTimestamp
        in: query
        description: 'Looks for Products that have been updated since the given date

          '
        required: false
        schema:
          type: string
      - name: LegacyIds
        in: query
        description: 'Looks for Products with by Legacy Product Id(s)

          '
        required: false
        schema:
          type: string
      - name: Name
        in: query
        description: 'Looks for Products/Variants by name

          '
        required: false
        schema:
          type: string
      - name: OnHand
        in: query
        description: 'Looks for Products with inventory

          '
        required: false
        schema:
          type: string
      - name: PlatformIds
        in: query
        description: 'Looks for Products variants by their external Platform IDs

          '
        required: false
        schema:
          type: string
      - name: ProductId
        in: query
        description: 'Looks for Products with an assigned Id

          '
        required: false
        schema:
          type: string
      - name: ProductType
        in: query
        description: 'Looks for Products by type

          '
        required: false
        schema:
          type: string
      - name: ReviewsPending
        in: query
        description: 'Looks for Products by ReviewsPending

          '
        required: false
        schema:
          type: string
      - name: SalesChannel
        in: query
        description: "Looks for Products variants assigned to a platform/sales channel \n"
        required: false
        schema:
          type: string
      - name: SellerSKU
        in: query
        description: 'Looks for Products that match the provided Seller query

          '
        required: false
        schema:
          type: string
      - name: SKU
        in: query
        description: 'Looks for Products that match the provided Sku query

          '
        required: false
        schema:
          type: string
      - name: TaxonomyIds
        in: query
        description: 'Looks for Products variants by their taxonomy id or any descendants of the taxonomies sent separated by comma

          '
        required: false
        schema:
          type: string
      - name: VariantId
        in: query
        description: 'Looks for products that contain a variant with the given ID

          '
        required: false
        schema:
          type: string
      - name: VariantStatus
        in: query
        description: 'Looks for Products with variants that contain provided status

          '
        required: false
        schema:
          type: string
      - name: PageSize
        in: query
        description: '1-250

          '
        required: false
        schema:
          type: string
      - name: SortBy
        in: query
        description: 'Id, Name, Category, TotalOnHandQty

          '
        required: false
        schema:
          type: string
      - name: SortOrder
        in: query
        description: 'ASC,DESC

          '
        required: false
        schema:
          type: string
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5PagedResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Product.Bad.Request.Object'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Product.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
  /2026-01/product/{productId}:
    get:
      operationId: get-product
      summary: Get Product
      description: Retrieves a product with all its variants and details.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Product.ProductId.Bad.Request.Object'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Product.ProductId.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
    patch:
      operationId: update-product
      summary: Update Product
      description: Updates a product. Supports partial updates - only the fields provided will be updated. When updating variants through this endpoint, you must include the variant ID.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: 'The product identifier

          '
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.UpdateProductRequestModelV5'
    delete:
      operationId: delete-product-bundle
      summary: Delete Product Bundle
      description: Deletes a bundle product by ID. Delete operation not allowed for non-bundles.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: 'The product identifier

          '
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products_deleteProductBundle_Response_200'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Delete.Api.V5.Product.ProductId.Bad.Request.Object'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Delete.Api.V5.Product.ProductId.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
  /2026-01/product/{productId}/variants:
    get:
      operationId: get-product-variants
      summary: Get Product Variants
      description: Retrieves all variants for a specific product.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: 'The product id

          '
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.VariantViewModelV5Array'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Product.ProductId.Variants.Bad.Request.Object'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Product.ProductId.Variants.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
    post:
      operationId: add-product-variants
      summary: Add Product Variants
      description: Adds new variants to an existing product. The request body must be an array of variant objects, each requiring a unique SKU.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5'
      requestBody:
        description: The product variants to add to product
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.CreateProductVariantRequestModelV5Array'
    patch:
      operationId: update-product-variants
      summary: Update Product Variants
      description: Updates one or more product variants. The request body must be an array of variant objects. Each variant must include the variant ID, and only the fields provided will be updated.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.VariantViewModelV5Array'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.UpdateProductVariantModelV5'
  /2026-01/variant/{variantId}:merge:
    post:
      operationId: merge-variants
      summary: Merge Variants
      description: Merges multiple product variants into a target variant. Provide an array of variant IDs to merge into the target variant specified in the path. Inventory from the merged variants will be consolidated into the target variant.
      tags:
      - subpackage_products
      parameters:
      - name: variantId
        in: path
        description: 'The ID of the variant to use as the merge target

          '
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5'
      requestBody:
        description: The variants that should be merged to the target variant
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.MergeVariantRequestModelArray'
  /2026-01/product/{productId}:moveVariants:
    post:
      operationId: move-variants-between-products
      summary: Move Variants Between Products
      description: Moves variants from their current product to the target product specified in the path. Provide an array of variant IDs to move.
      tags:
      - subpackage_products
      parameters:
      - name: productId
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModel'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Post.Api.V5.Product.ProductId.MoveVariants.Bad.Request.Object'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Post.Api.V5.Product.ProductId.MoveVariants.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
      requestBody:
        description: Migration definition
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.MigrateVariantRequestModel'
  /2026-01/product:moveVariants:
    post:
      operationId: move-variants-to-new-product
      summary: Move Variants to New Product
      description: Creates a new product and moves existing variants from their current products into it. Provide the new product details and variant IDs.
      tags:
      - subpackage_products
      parameters:
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModel'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Post.Api.V5.Product.MoveVariants.Bad.Request.Object'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Post.Api.V5.Product.MoveVariants.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
      requestBody:
        description: Migration definition
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.MigrateVariantRequestModel'
  /2026-01/packaging-requirement:
    get:
      operationId: get-packaging-requirement
      summary: Get Packaging Requirement
      description: Retrieves all available packaging requirements that can be assigned to a product.
      tags:
      - subpackage_products
      parameters:
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.PackagingRequirementViewModelArray'
  /2026-01/taxonomy:
    get:
      operationId: get-taxonomies
      summary: Get Taxonomies
      description: Retrieves all available product taxonomies for categorizing products.
      tags:
      - subpackage_products
      parameters:
      - name: search
        in: query
        description: ''
        required: false
        schema:
          type: string
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.TaxonomyViewModelArray'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Unauthorized.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Forbidden.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '500':
          description: Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Server Error
          content:
            application/json:
              schema:
                description: Any type
  /2026-01/taxonomy/{id}:
    get:
      operationId: get-taxonomy-by-id
      summary: Get Taxonomy by ID
      description: Retrieves a specific taxonomy node and its details by taxonomy ID.
      tags:
      - subpackage_products
      parameters:
      - name: id
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int32
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.TaxonomyViewModel'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Id.Unauthorized.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Id.Forbidden.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Id.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '500':
          description: Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Server Error
          content:
            application/json:
              schema:
                description: Any type
  /2026-01/taxonomy/{id}/parent:
    get:
      operationId: get-taxonomy-parent
      summary: Get Taxonomy Parent
      description: Retrieves the parent taxonomy node for a given taxonomy ID.
      tags:
      - subpackage_products
      parameters:
      - name: id
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int32
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.TaxonomyViewModel'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Id.Parent.Unauthorized.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Id.Parent.Forbidden.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.Get.Api.V5.Taxonomy.Id.Parent.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails'
        '500':
          description: Server Error
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: Server Error
          content:
            application/json:
              schema:
                description: Any type
  /2026-01/variant/{variantId}:convertToBundle:
    post:
      operationId: convert-variant-to-bundle
      summary: Convert Variant to Bundle
      description: Converts an existing product variant into a bundle product. Provide the bundle definition specifying which variants and quantities make up the bundle.
      tags:
      - subpackage_products
      parameters:
      - name: variantId
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: int64
      - name: Authorization
        in: header
        description: Authentication using Personal Access Token (PAT) token or OAuth2
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Products.ProductViewModelV5'
      requestBody:
        description: The variant request that is to be converted to bundle
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Products.ConvertVariantToBundleRequest'
components:
  schemas:
    Products.MergeVariantRequestModelArray:
      type: array
      items:
        $ref: '#/components/schemas/Products.MergeVariantRequestModel'
      title: Products.MergeVariantRequestModelArray
    Products.VariantViewModel:
      type: object
      properties:
        additional_hazmat_attributes:
          $ref: '#/components/schemas/Products.AdditionalHazmatAttributesViewModel'
          description: Additional hazardous materials attributes for lithium batteries and dangerous goods
        associated_bundles:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/Products.AssociatedBundlesViewModel'
          description: List of bundle products that include this variant as a component
        bundle_definition:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/Products.BundleDefinitionViewModel'
          description: If this variant is a bundle, defines which variants and quantities make up the bundle
        created_on:
          type: string
          format: date-time
          description: Timestamp when the variant was created
        customs:
          $ref: '#/components/schemas/Products.CustomsViewModel'
          description: Customs and international shipping information (tariff codes, country of origin, declared value)
        dimension:
          $ref: '#/components/schemas/Products.DimensionViewModel'
          description: Physical dimensions of the variant (length, width, height)
        fulfillment_settings:
          $ref: '#/components/schemas/Products.FulfillmentSettingsViewModel'
          description: Fulfillment-specific settings (Prop 65, dangerous goods, serial scanning, case pick)
        gtin:
          type:
          - string
          - 'null'
          description: Global Trade Item Number - standardized product identifier
        id:
          type: integer
          format: int64
          description: Unique identifier for the variant
        inventory:
          $ref: '#/components/schemas/Products.InventoryViewModel'
          description: Current inventory information including on-hand quantity
        is_digital:
          type: boolean
          description: Flag indicating whether this is a digital product (no physical fulfillment)
        is_image_uploaded:
          type: boolean
          description: Flag indicating whether a product image has been uploaded for this variant
        lot_information:
          $ref: '#/components/schemas/Products.LotInformationViewModel'
          description: Lot tracking settings including whether lot tracking is enabled and minimum shelf life requirements
        merge_children:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/Products.MergedChildrenViewModel'
          description: List of variants that have been merged into this variant
        name:
          type:
          - string
          - 'null'
          description: Variant name or descriptor
        packaging_material_type:
          $ref: '#/components/schemas/Products.EnumViewModel'
          description: Type of packaging material used for this variant (ID and name)
        packaging_requirement:
          $ref: '#/components/schemas/Products.EnumViewModel'
          description: Special packaging requirements for this variant (ID and name)
        return_preferences:
          $ref: '#/components/schemas/Products.ReturnPreferencesViewModel'
          description: Customer return handling preferences including primary and backup actions
        reviews_pending:
          type:
          - array
          - 'null'
          items:
            type: string
          description: List of pending review types for this variant (e.g., compliance checks, quality reviews)
        sku:
          type:
          - string
          - 'null'
          description: Stock Keeping Unit - unique identifier for the variant used in inventory management
        status:
          type:
          - string
          - 'null'
          description: Current status of the variant (e.g., 'Active', 'Inactive')
        upc:
          type:
          - string
          - 'null'
          description: Universal Product Code - 12-digit barcode identifier
        updated_on:
          type:
          - string
          - 'null'
          format: date-time
          description: Timestamp when the variant was last updated
        weight:
          $ref: '#/components/schemas/Products.WeightViewModel'
          description: Weight of the variant including unit of measure
        barcode:
          type:
          - string
          - 'null'
        barcode_sticker_url:
          type:
          - string
          - 'null'
        channel_metadata:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/ProductsVariantViewModelChannelMetadataItems'
      title: Products.VariantViewModel
    Products.MergedChildrenViewModel:
      type: object
      properties:
        channel_ids:
          type:
          - array
          - 'null'
          items:
            type: integer
            format: int64
        completed_at:
          type: string
          format: date-time
        inventory_id:
          type:
          - integer
          - 'null'
          format: int64
        variant_id:
          type: integer
          format: int64
        variant_name:
          type:
          - string
          - 'null'
      title: Products.MergedChildrenViewModel
    Products.Get.Api.V5.Product.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails:
      oneOf:
      - $ref: '#/components/schemas/Products.ProblemDetails'
      - $ref: '#/components/schemas/Products.HttpValidationProblemDetails'
      title: Products.Get.Api.V5.Product.Not.Found.OneOf.ProblemDetails.HttpValidationProblemDetails
    Products.ShopifyChannelMetadataRequestModel:
      type: object
      properties:
        channel_id:
          type:
          - integer
          - 'null'
        currency:
          type:
          - string
          - 'null'
        id:
          type:
          - integer
          - 'null'
          format: int64
        is_inventory_sync_enabled:
          type: boolean
        legacy_product_id:
          type:
          - integer
          - 'null'
          format: int64
        platform:
          type:
          - string
          - 'null'
        platform_identifier:
          type:
          - string
          - 'null'
        platform_inventory_item_id:
          type:
          - string
          - 'null'
        price:
          type: number
          format: double
        seller_sku:
          type:
          - string
          - 'n

# --- truncated at 32 KB (108 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shipbob/refs/heads/main/openapi/shipbob-subpackage-products-api-openapi.yml