Skip to main content
The Get Product endpoint retrieves a single product by its unique identifier. By default, the response includes core product data — name, brand, category, pricing, regions, and hair profile. Pass ?include=ingredients to receive a complete ingredient breakdown, including sulphate, silicone, and paraben flags, protein and moisture levels, and porosity match data — all in one call.

Endpoint

GET https://api.blackhairapi.com/v1/products/{product_id}

Required header

HeaderValueDescription
X-API-Keybha_...Your Black Hair API key. All requests must include this header.
Requests without a valid X-API-Key header return a 401 Unauthorized response. Keep your key secret and never expose it in client-side code.

Path parameters

product_id
string (UUID)
required
The unique identifier of the product to retrieve. UUIDs are returned in the id field of the List Products response.

Query parameters

include
string
A comma-separated list of related data to expand inline. Currently supported value: ingredients. When included, the response body gains an ingredients object containing the full parsed ingredient analysis for the product.

Response

A successful request returns HTTP 200 with a JSON object representing the product.
id
string (UUID)
The product’s unique identifier.
name
string
The full product name as it appears on packaging.
brand
object
A summary of the product’s parent brand.
category
string
The product category (e.g., shampoo, conditioner, oil, styler).
description
string
A text description of the product and its intended use.
price_range
object
The typical retail price range for the product.
regions
array of strings
The regions where this product is available (e.g., ["US", "UK", "NG"]).
images
array of strings
URLs pointing to product images.
buy_url
string
A direct URL to purchase the product.
is_active
boolean
Whether the product is currently active in the catalog.
hair_profile
object
The hair profile this product is recommended for.
ingredients
object
Only present when you pass ?include=ingredients. Contains the parsed ingredient analysis for the product.

Examples

Without ingredient data

curl https://api.blackhairapi.com/v1/products/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "X-API-Key: bha_your_api_key"
Example response
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Honey Transforming Collection Moisturizing Leave-In",
  "brand": {
    "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "name": "Mielle Organics",
    "is_black_owned": true
  },
  "category": "leave-in",
  "description": "A lightweight leave-in conditioner infused with honey and ginger to deeply moisturize and strengthen natural hair.",
  "price_range": {
    "min": 9.99,
    "max": 12.99
  },
  "regions": ["US", "UK", "CA"],
  "images": [
    "https://cdn.blackhairapi.com/images/mielle-leave-in-front.jpg",
    "https://cdn.blackhairapi.com/images/mielle-leave-in-back.jpg"
  ],
  "buy_url": "https://mielleorganics.com/products/honey-leave-in",
  "is_active": true,
  "hair_profile": {
    "hair_types": ["4A", "4B", "4C"],
    "porosity": ["high", "normal"],
    "concerns": ["dryness", "breakage", "shrinkage"]
  }
}

With ingredient data (?include=ingredients)

curl "https://api.blackhairapi.com/v1/products/a1b2c3d4-e5f6-7890-abcd-ef1234567890?include=ingredients" \
  -H "X-API-Key: bha_your_api_key"
Example response
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "Honey Transforming Collection Moisturizing Leave-In",
  "brand": {
    "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "name": "Mielle Organics",
    "is_black_owned": true
  },
  "category": "leave-in",
  "description": "A lightweight leave-in conditioner infused with honey and ginger to deeply moisturize and strengthen natural hair.",
  "price_range": {
    "min": 9.99,
    "max": 12.99
  },
  "regions": ["US", "UK", "CA"],
  "images": [
    "https://cdn.blackhairapi.com/images/mielle-leave-in-front.jpg",
    "https://cdn.blackhairapi.com/images/mielle-leave-in-back.jpg"
  ],
  "buy_url": "https://mielleorganics.com/products/honey-leave-in",
  "is_active": true,
  "hair_profile": {
    "hair_types": ["4A", "4B", "4C"],
    "porosity": ["high", "normal"],
    "concerns": ["dryness", "breakage", "shrinkage"]
  },
  "ingredients": {
    "raw_list": "Water, Honey, Glycerin, Behentrimonium Methosulfate, Cetyl Alcohol, Ginger Root Extract, Biotin, Panthenol, Fragrance",
    "has_sulphates": false,
    "has_parabens": false,
    "has_silicones": false,
    "protein_level": "low",
    "moisture_level": "high",
    "porosity_match": ["high", "normal"],
    "flags": ["humectant", "emollient", "conditioning-agent"]
  }
}
The ingredients object is only included in the response when you explicitly pass ?include=ingredients. Products without an associated ingredient record will return null for this field even when the parameter is set.

Error responses

StatusCodeDescription
401UnauthorizedThe X-API-Key header is missing or the key is invalid.
404Not FoundNo product exists with the supplied product_id.
429Too Many RequestsYou have exceeded your plan’s monthly request limit. Upgrade to continue.