# Stock Fragrance > Stock Fragrance (stockfragrance.com) sells professional fragrance oils by the ounce and by the pound to makers of candles, soap, lotion, perfume, diffusers and cleaning products, and designs custom fragrances under its Private Stock program. We are a small professional team; a person answers hello@stockfragrance.com within a business day. ## Catalog - Fragrance oils (72 stock oils, 1 oz samples and 1 lb bulk, IFRA 51 documented): https://www.stockfragrance.com/collections/fragrance-oils - Plant-based fragrance oils: https://www.stockfragrance.com/collections/plant-based-fragrance-oils - Candle and home fragrance oils: https://www.stockfragrance.com/collections/candle-and-home-fragrance-oils - Personal care fragrance oils: https://www.stockfragrance.com/collections/personal-care-fragrance-oils - Sample sets: https://www.stockfragrance.com/pages/sample-sets ## Scent families - The olfactive families (Shopify's standard 24-term vocabulary) with every oil placed, each marked set-by-us or derived (the bar on every oil): https://www.stockfragrance.com/scent-families — the same as JSON: https://www.stockfragrance.com/scent-families.json ## Documents - Every oil's product page links its Regulatory Data Sheet (IFRA 51), Safety Data Sheet, allergen statement and other statements as pages under /pages/--. - Document finder, /documents (search the 72 oils by name or E-code; SDS, IFRA 51 regulatory sheet, allergen statement and the other statements per oil): https://www.stockfragrance.com/documents - Document request (anything not on the page): https://www.stockfragrance.com/pages/stock-fragrance-document-request - Facts on product pages (IFRA maximums, flash point, allergens, phthalates, plant-based, certifications) are transcribed from the supplier's documents, dated, and carry the source page in the `facts.*` metafields and in the JSON-LD. Nothing is generated. - Every oil page as one object: GET https://www.stockfragrance.com/products/.json (the page's `rel=alternate` link) — name, story, notes and family, the IFRA maximums, flash point and allergens with source documents and dates, the certificate windows, the documents, the 1 oz / 1 lb offers, the brand count and every review whole. The same facts the page prints, nothing more. ## Learn - Fragrance glossary: https://www.stockfragrance.com/pages/fragrance-glossary - Knowledge center: https://www.stockfragrance.com/pages/fragrance-oil-knowledge-center - Fragrance oil calculator: https://www.stockfragrance.com/pages/fragrance-oil-calculator - IFRA category lookup: https://www.stockfragrance.com/pages/ifra-category-lookup-tool - Blog: https://www.stockfragrance.com/blogs/learn-about-fragrance ## Custom fragrance - Private Stock custom fragrance design (brief, formulator, trial, reorder): https://www.stockfragrance.com/pages/private-stock-custom-fragrance-design - Custom fragrance design services: https://www.stockfragrance.com/pages/custom-fragrance-design ## People - Contact: https://www.stockfragrance.com/pages/contact-us — hello@stockfragrance.com, a reply within a business day from a person on our team. ## For agents - Read-only MCP server (Streamable HTTP, JSON-RPC 2.0): POST https://www.stockfragrance.com/mcp (also https://sf-agent.small-union-886c.workers.dev/mcp) — tools compose, search_oils, get_oil_facts, list_documents, usage_check, sample_tray_link, ask_oil. Served by sf-agent. - Ask about one oil (a question answered by the AI guide from that oil's transcribed, dated facts, with sources): MCP tool `ask_oil`, or GET /api/ask?handle=&q= on the storefront. - The door takes a brief: GET /compose?q= is the composed page (the same object rendered for people, with the map of the fit); the WebSite JSON-LD on / declares it as the SearchAction. - The answer object for a brief (oils · dated facts with sources · batch · samples · documents · person): MCP tool `compose`, or GET /compose.json?q= on the storefront, or GET /compose?q= with `Accept: application/json`. It is a reading of the answer we give a person on that page for the same brief — the same oils in the same order, with the reason beside each, and the dated supplier source under every figure; oils[] carries the oils we named whole, others[] every other oil that passed the brief's gates as one line (rank · match · why). Schema: /answer.schema.json - UCP endpoint: /.well-known/ucp - Cart permalink for 1 oz samples: https://www.stockfragrance.com/cart/:1,:1