Skip to main content
For flavor & product-development teams

Run it on your own ingredients.

Bring a real brief — a reformulation, an off-note to mask, a new SKU to ideate — and we'll run the engine on your ingredient list. A transparent, paper-grounded per-pair score you can inspect input by input, across 857 ingredients and 5,240 aroma compounds. Not a black-box prediction.

Building software instead? Explore the JSON API ↓

857
Ingredients
5,240
Flavor Compounds
298,783
Scored Pairings
612,557
Curated Recipe Corpus
Scoped pilot

Start with your problem, not our pricing.

A short, time-boxed engagement on a single brief of yours. We agree on one or two success criteria up front, run the engine on your ingredients with you, and you see the result before committing to anything bigger.

  • Your ingredients, your brief — run live with you
  • Every score inspectable: overlap, co-occurrence, perceptual weighting
  • Grounded in 40,000+ peer-reviewed papers — not a black box

Built for Food Companies

The same flavor science behind CompKitchen, delivered as structured data for your product.

Recipe & Content Platforms

"Given this recipe, here are 5 ingredient additions ranked by flavor compatibility." Enrich recipe pages with pairing suggestions, substitution options, and flavor profiles.

  • Ingredient pairing recommendations
  • Substitution suggestions with similarity scores
  • Compound profiles for editorial content

CPG & Flavor R&D

"Given these 4 ingredients in our product, what novel flavor combinations could create a new SKU?" Accelerate product ideation with molecular compatibility data.

  • Novel pairing discovery (high compound, low recipe)
  • Aroma profile vectors (14 dimensions)
  • Gap analysis across ingredient sets

Meal Kits & Grocery

"Given this week's ingredient inventory, optimize pairings across 6 recipes." Maximize flavor compatibility within supply constraints using pantry analysis.

  • Pantry optimization (best pairings from inventory)
  • Buy-next recommendations
  • Dietary filtering (vegetarian, vegan, etc.)

API Endpoints

Simple REST endpoints returning structured JSON. Every response includes compound overlap, shared compound count, scoring breakdown, and data quality metadata.

Read the full API reference

Every endpoint's score means something different — the reference says which, and publishes the limits of the data.

GET /api/pair

Find best pairings for 1 ingredient, bridge for 2, gap analysis for 3+. Supports cuisine and diet filters.

Returns: ingredient, score, shared compounds, compound/recipe breakdown, category, novelty flag
GET /api/novel

Find scientifically compatible pairings that rarely appear together in recipes. High compound overlap, low co-occurrence.

Returns: ingredient, score, shared compounds, novelty flag (always true)
GET /api/sub

Find substitutes ranked by compound set similarity (Jaccard). Swap ingredients while preserving the flavor profile.

Returns: ingredient, similarity score, shared compounds, category
GET /api/mood?mood=smoky

Search by flavor descriptor: smoky, citrus, umami, floral. Returns ingredients matching the aroma profile. Accepts ?mood= or ?descriptor=.

Returns: ingredient, intensity score, matching compound count
GET /api/pantry

Analyze an ingredient set: pair scores, trio analysis, and buy-next recommendations with breadth bonus.

Returns: pair matrix, top trios, buy-next list, suggested recipes
GET /api/info

Full compound profile for one ingredient: compound list and counts, compound profiles, category, recipe count and top connections.

Returns: compounds list, category, compound count, recipe count, flavor notes
POST /api/batch

Send up to 50 ingredients in one request, get top pairings for each. Designed for bulk processing — product catalogs, inventory analysis, menu optimization.

Body: {"ingredients": [...], "top_n": 5, "scoring": "classic"} — Returns: keyed results object with pairings per ingredient

Free, Pro & Enterprise

Every endpoint is publicly callable — what changes between tiers is response depth, throughput, and access to bulk endpoints. Same URL, same query: the server gates the payload based on your API key.

  Free Developer
API key — talk to us
Enterprise
from $500/mo
Unlocked rows per response Top 5 All All
Rows 6+ returned as locked stubs Yes (tease) — —
compound_details panel
per-compound thresholds, OAVs, aroma categories
— ✓ ✓
/api/batch (POST, up to 50) 402 ✓ ✓
CSV export /api/export/pair.csv 402 ✓ ✓
Rate limit 120 req/min 600 req/min (website: 300 signed-in) Custom · SLA
Auth None X-API-Key X-API-Key + allowlist
Support Community Email Dedicated · SLA

Same query, two responses

GET /api/pair?ingredients=cinnamon&top_n=10

Free (anonymous)
{
  "query": { "ingredients": ["cinnamon"], "top_n": 10, "scoring": "classic" },
  "mode": "top_pairings",
  "count": 10,
  "is_pro": false,
  "truncated": true,
  "free_limit": 5,
  "total_count": 10,
  "locked_count": 5,
  "results": [
    {
      "ingredient": "nutmeg",
      "final_score": 0.9923,
      "measured_score": 0.7464,
      "compound_score": 0.5094,
      "recipe_score": 0.6977,
      "taste_score": 0.7202,
      "shared_compounds": ["cis-methylisoeugenol", "gingerol",
                          "acetyleugenol", "citronellal", ...],
      "shared_compound_count": 262,
      // compound_details panel: Pro only
      "recipe_cooccurrence": 9310,
      "compound_count": 305,
      "recipe_base_count": 29963,
      "is_novel": false,
      "is_expert": false,
      "category": "spice",
      "novelty_tier": "common",
      "pairing_strength": "moderate",
      "why_it_pairs": "Both share caryophyllene (spicy,
                       woody, clove-like), eucalyptol,
                       3-(methylthio)propionaldehyde
                       (+298 more).",
      "suggested_application": "Infuse into warm custard
                                sauce for classic spiced
                                warmth with floral undertones.",
      "recipe_direction": "Steep cinnamon stick and nutmeg in
                           hot cream at 180°F for 8 minutes;
                           their shared floral compounds create
                           a silky, aromatic base.",
      "chef_note": "paired in warm spice blends for ras el
                    hanout, mulled wine and north african
                    braises",
      "chef_cuisine": "moroccan"
    },
    // 4 more full unlocked rows (same field set) ...

    {
      "ingredient": "elderberry",
      "category": "fruit-berry",
      "novelty_tier": "common",
      "shared_compound_count": 267,
      "is_novel": false,
      "is_expert": false,
      "locked": true
    },
    // 4 more locked stubs ...
  ],
  "data_quality": { "...": "..." }
}
Pro & Enterprise same shape, both tiers
{
  "query": { "ingredients": ["cinnamon"], "top_n": 10, "scoring": "classic" },
  "mode": "top_pairings",
  "count": 10,
  "is_pro": true,
  "truncated": false,
  "results": [
    {
      "ingredient": "nutmeg",
      "final_score": 0.9923,
      "measured_score": 0.7464,
      "compound_score": 0.5094,
      "recipe_score": 0.6977,
      "taste_score": 0.7202,
      "shared_compounds": ["cis-methylisoeugenol", "gingerol",
                          "acetyleugenol", "citronellal", ...],
      "shared_compound_count": 262,
      "compound_details": [
        {
          "name": "caryophyllene",
          "flavor": "spicy, woody, clove-like",
          "odor_threshold_ppb": 16.87,
          "max_oav": 280.0,
          "oav_confidence": "estimated",
          "aroma_category": "herbal",
          "chemical_class": "terpene",
          "odor_description": "sweet woody spice clove dry",
          "literature_key_aroma": true,
          "cas": "13877-93-5"
        },
        // ... up to 14 more compounds, each with thresholds,
        // OAVs, aroma categories, chemical class, CAS ...
      ],
      "recipe_cooccurrence": 9310,
      "compound_count": 305,
      "recipe_base_count": 29963,
      "is_novel": false,
      "is_expert": false,
      "category": "spice",
      "novelty_tier": "common",
      "pairing_strength": "moderate",
      "why_it_pairs": "Both share caryophyllene (spicy,
                       woody, clove-like), eucalyptol,
                       3-(methylthio)propionaldehyde
                       (+298 more).",
      "suggested_application": "Infuse into warm custard
                                sauce for classic spiced
                                warmth with floral undertones.",
      "recipe_direction": "Steep cinnamon stick and nutmeg in
                           hot cream at 180°F for 8 minutes;
                           their shared floral compounds create
                           a silky, aromatic base.",
      "chef_note": "paired in warm spice blends for ras el
                    hanout, mulled wine and north african
                    braises",
      "chef_cuisine": "moroccan"
    },
    // 9 more full rows, each with compound_details ...
  ],
  "data_quality": { "...": "..." }
}
Anatomy of a locked stub

Free responses keep rank-6+ rows in the results array as compact stubs — ingredient, category, novelty_tier, shared_compound_count, and locked: true — rather than truncating the list. Your UI can still render the full ranked set; the locked stubs become a natural Pro-conversion surface. Detect them by checking row.locked === true or by reading the top-level free_limit and locked_count fields.

Academic pricing? Educator and Classroom plans are discounted for teaching. Classroom includes API access; Educator covers the website.

Illustrative responses. Actual scores are computed live from the current dataset.

Data & Methodology

Transparent scoring with full provenance. Every response includes a data quality block so you always know what's behind the numbers.

Compound Scoring

IDF-weighted Jaccard similarity across volatile compound sets. Rare compounds (high IDF) count more than ubiquitous ones, so sharing a distinctive molecule matters more than both containing water.

Scoring methodIDF-weighted Jaccard
Data sourcesFlavorDB, FooDB, VCF, TGSC, +6 more
Compound coverage5,240 unique compounds

Recipe Scoring

NPMI (Normalized Pointwise Mutual Information) computed over 432,799 curated recipes. Measures how much more often two ingredients co-occur than chance, normalized to [-1, 1].

Scoring methodNPMI co-occurrence
Recipe corpusOpenRecipes + PD cookbooks (432,799)
Update cadenceContinuous enrichment

Aroma Profiles

14-dimension aroma vectors (citrus, green, floral, spicy, woody, etc.) derived from compound classifications. Enables cosine similarity matching and mood-based search.

Dimensions14 aroma categories
SourceFoodpairing + compound classification
CoverageAll 857 ingredients

Known Limitations

We're transparent about where the data is strongest and where gaps remain. Compound coverage varies by ingredient — well-studied foods may have 200+ compounds while others have fewer than 20.

Recipe corpus biasWestern-skewing (English-language recipes)
Compound variance5–250+ per ingredient
Full methodologyHow It Works →

Get Started

Tell us about your use case and we'll set up API access. Commercial licensing available for production integrations.