---
title: "Create Product"
method: POST
path: "/v1/products"
tags: ["Products"]
---

# Create Product

`POST /v1/products`

Creates a new product. Flex automatically determines the product's HSA/FSA eligibility from the supplied name, description, identifiers, and URL; if it can't be resolved synchronously, the product is created with eligibility pending and classification continues in the background, after which a `product.updated` event may fire. A `product.created` event is sent to your configured webhook endpoints on success.

## Request body

- ProductBodyForCreateProductRequest — An envelope wrapping a single product object.
  - `product` CreateProductRequest, required — Parameters for creating a product. HSA/FSA eligibility is determined automatically by Flex from the name, description, and identifiers you provide, and cannot be set directly.
    - `name` string, required — The product's name, meant to be displayed to the customer.
    - `description` string, nullable — The product's description, a short blurb meant to be displayed to the customer.
    - `upc_code` string, nullable — The product's UPC code. If provided, this will be used to check whether the product is on the eligible product list.
    - `gtin` string, nullable — The product's GTIN. If provided, this will be used to check whether the product is on the eligible product list.
    - `reference_gtin` string, nullable — If the product is HSA/FSA eligible through private label, this should be provided.
    - `url` string, nullable — A URL of a publicly-accessible image of the product.
    - `client_reference_id` string, nullable — An optional identifier for the product set by the client. Immutable after creation.
    - `metadata` object, nullable — Set of key-value pairs that you can attach to a product. This can be useful for storing additional information about the product in a structured format.
    - `image_urls` string[], nullable — URLs of publicly-accessible product images for eligibility determination.
    - `categories` string[], nullable — Product categories (e.g., "Vitamins", "First Aid").
    - `components` string[], nullable — Product components or ingredients (e.g., "Vitamin C", "Zinc").

## Response `200`

An envelope wrapping a single product object.

- ProductBodyForProduct — An envelope wrapping a single product object.
  - `product` Product, required — A Product defines what you sell. Flex determines its HSA/FSA eligibility from the name, description, and identifiers you provide.
    - `product_id` string, required — The unique identifier for the product.
    - `owner_partner_id` string, nullable — The ID of the account that owns this product. For products shared across an organization this may be a sibling account; otherwise it is your own account ID.
    - `name` string, required — The name of the product.
    - `description` string, nullable — The description of the product.
    - `document_description` string, nullable — Medical-grade description optimized for use in Letters of Medical Necessity and receipts.
    - `receipt_description` string, nullable — Shortened description tailored to receipt line items
    - `created_at` string, required — A timestamp encoded as an RFC 3339 / ISO 8601 string (e.g. `2026-06-15T14:30:00Z`).
    - `visit_type` 'cbtSleep' | 'notApplicable' | 'metabolomics' | 'tinnitus' | 'gym' | 'exerciseDiet' | 'orthopedic' | 'alcohol' | 'airPurification' | 'vaginalHealth' | 'menstrual' | 'canopy' | 'alopecia' | 'genate' | 'weightBlanket' | 'bedJet' | 'siderAl' | 'sunwinkPowder' | 'wavWatch' | 'bodyComplete' | 'ageRate' | 'nitrousOxide' | 'happyV' | 'groupChat' | 'icalmAnxiety' | 'redBloom' | 'foodom' | 'branchErgonomicFurniture' | 'curalife' | 'eloraInfantWellness' | 'nutriHealth' | 'olipop' | 'goldIntimate' | 'touchStoneEssentials' | 'utiva' | 'sleepGeekz' | 'figBrew' | 'auBabyBlanket' | 'babySleepSack' | 'oshWellness' | 'currentBodyRedLight' | 'mito' | 'circularRing' | 'lymaRedLight' | 'goodAirRx' | 'tastermonial' | 'karunaHome' | 'ergoStandingChair' | 'jbaGlucoseControl' | 'bloomNutrition' | 'buoyDrops' | 'luxeWonderWig' | 'saunaMarketplace' | 'amrioreEyewear' | 'pivotOrthoShoe' | 'lumenCynergy' | 'roga' | 'pulsetto' | 'mitoRedLight' | 'gutPersonal' | 'goFlaus' | 'myHixel' | 'calmigo' | 'dotFit' | 'stripesBeauty' | 'mixHers' | 'pmd' | 'positivityWithPurpose' | 'techRing' | 'popVeneers' | 'vertaClean' | 'lumen' | 'medicalMeal' | 'emnHealth' | 'detergentAllergy' | 'lowImpactExercise' | 'mediumImpactExercise' | 'highImpactExercise' | 'gardening' | 'babyCarrier' | 'smartGlasses' | 'coolingBed' | 'posture' | 'supplements' | 'sleep' | 'redLightTherapy' | 'fitness' | 'smartRing' | 'womensVaginalHealth' | 'fertilitySupport' | 'femaleReproduction' | 'femaleReproductionFood' | 'pregnancyLiterature' | 'iceBath' | 'orthopedicShoes' | 'sexualHealth' | 'glucose' | 'metabolicTest' | 'skinCare' | 'oralHealth' | 'oralAnxiety' | 'blueLightGlasses' | 'anxiety' | 'brainHealth' | 'babyMonitor' | 'compressionSocks' | 'compressionShorts' | 'waterPurification' | 'medSpa' | 'essentialOils' | 'sleepBuds' | 'latchLight' | 'nutritionist' | 'rairflow' | 'enduranceTraining' | 'hydration' | 'hairGrowth' | 'eD' | 'postureFitness' | 'childDevelopment' | 'adaptiveClothing' | 'adaptiveShoes' | 'sleepConsulting' | 'hairRemoval' | 'menopause' | 'maleFertility' | 'anxietyHealth' | 'bidets' | 'speechHealth' | 'artOfLiving' | 'breastMilk' | 'breathWork' | 'petSupport' | 'diapers' | 'gutSupplements' | 'smartWatch' | 'medicalBotox' | 'biomechanicalAssessment' | 'erectileReset' | 'femaleOrgasm' | 'pornAddiction' | 'memorySupport' | 'oralHealthMasticGum' | 'orthopedicSandals' | 'childDevelopmentAnxietySleep' | 'childDevelopmentAdjustment' | 'childDevelopmentBehavior' | 'childDevelopmentIdentity' | 'emnHealthMobility' — The name of the telehealth visit type.
    - `active` boolean, required — Determines if the product is active or not.
    - `upc_code` string, nullable — The upc code of the product.
    - `gtin` string, nullable — The gtin code of the product.
    - `reference_gtin` string, nullable — The GTIN of a private-label reference product, used to establish HSA/FSA eligibility.
    - `hsa_fsa_eligibility` 'not_eligible' | 'auto_substantiation' | 'private_label' | 'letter_of_medical_necessity' | 'prescription' | 'vision' | 'service' | 'pending', required — How a product qualifies for HSA/FSA payment, which determines the substantiation required to pay with a benefits card. `pending` means the product is still awaiting Flex's automatic classification, so its eligibility is not yet determined.
    - `test_mode` boolean, required — Whether the product is in test mode or not.
    - `metadata` object, nullable — Metadata associated with the product.
    - `url` string, nullable — The URL of the product.
    - `client_reference_id` string, nullable — An optional identifier for the product set by the client at creation time. Immutable after creation.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict
- `422` — Validation Error
- `429` — Too Many Requests

---

[API](https://skmtc.dev/withflex/apis/flex-api.md) · [All operations](https://skmtc.dev/withflex/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/withflex/flex-api/revisions/b1560fc2f199/schema)
