10ML Perfume Finder · pour les développeurs

API de recommandation de parfums et API de parfums similaires

L’API de recommandation de parfums de 10ML est un ensemble de routes GET gratuites, sans clé API. /similar classe les parfums selon les notes et accords partagés et peut les orienter vers plus frais, plus sucré ou plus sombre. /alternatives renvoie des alternatives d’autres maisons. Les suggestions selon les goûts d’une personne viennent de l’outil recommend_perfumes sur l’endpoint MCP.

API de parfums similaires

https://mcp.10ml.com/api/v1/similar

JSON par GET, OpenAPI 3.1. Gratuit, sans clé API.

Les huit endpoints

API de parfums similaires

GET /api/v1/similar?perfume= prend le nom d’un parfum de l’index et renvoie les parfums qui en sont les plus proches. Chaque résultat indique quelles notes et quels accords il partage et à quel point il est proche : « very close » = très proche, « similar vibe » = même ambiance, « same spirit » = même esprit. Deux résultats sur quatorze sont montrés, abrégés, du 21 octobre 2026.

curl "https://mcp.10ml.com/api/v1/similar?perfume=Creed+Aventus&limit=2"
{
  "results": [
    {
      "perfume": {
        "name": "Club de Nuit Intense Man Parfum",
        "house": "Armaf",
        "family": "Fruity woody"
      },
      "closeness": "very close",
      "shared_notes": ["pineapple", "bergamot", "apple", "black currant", "birch", "jasmine"],
      "shared_accords": ["fruity", "woody", "smoky", "fresh"],
      "why": "shares pineapple, bergamot, apple, black currant"
    },
    {
      "perfume": {
        "name": "Club de Nuit Intense Man EDT",
        "house": "Armaf",
        "family": "Fruity woody"
      },
      "closeness": "similar vibe",
      "shared_notes": ["pineapple", "bergamot", "apple", "black currant", "birch", "jasmine"],
      "shared_accords": ["fruity", "woody", "smoky", "musky"],
      "why": "shares pineapple, bergamot, apple, black currant"
    }
  ],
  "total": 14,
  "source": "10ML Fragrance Index"
}

Passez house= quand un nom est ambigu, gender= pour garder les parfums pour homme, pour femme ou unisexes, other_houses_only=true pour écarter la maison du parfum de départ, ainsi que limit= et cursor= pour paginer.

Orienter le résultat

steer= éloigne le résultat du parfum de départ dans une direction : fresher, sweeter, darker, lighter, longer_lasting ou more_projection. Les deux dernières exigent un parfum présent dans l’index. La raison donnée dans chaque résultat nomme la direction.

curl "https://mcp.10ml.com/api/v1/similar?perfume=Creed+Aventus&steer=fresher&limit=2"
{
  "target": {
    "name": "Aventus",
    "house": "Creed"
  },
  "results": [
    {
      "perfume": {
        "name": "Club de Nuit Intense Man EDT",
        "house": "Armaf",
        "gender": "men",
        "family": "Fruity woody",
        "accords": ["citrus", "fruity", "smoky"]
      },
      "closeness": "very close",
      "shared_notes": ["pineapple", "bergamot", "apple", "black currant", "birch", "jasmine"],
      "why": "shares pineapple, bergamot, apple, black currant; fresher than the starting point"
    },
    {
      "perfume": {
        "name": "Club de Nuit Intense Man Parfum",
        "house": "Armaf",
        "gender": "men",
        "family": "Fruity woody",
        "accords": ["fruity", "smoky", "woody"]
      },
      "closeness": "very close",
      "shared_notes": ["pineapple", "bergamot", "apple", "black currant", "birch", "jasmine"],
      "why": "shares pineapple, bergamot, apple, black currant; fresher than the starting point"
    }
  ],
  "total": 1989,
  "source": "10ML Fragrance Index"
}

Des parfums similaires à partir des seules notes

Pour un parfum absent de l’index, passez ses notes= et accords= au lieu d’un nom. Le résultat classe l’index selon cette liste.

curl "https://mcp.10ml.com/api/v1/similar?notes=vanilla,saffron&limit=2"
{
  "target": {
    "name": "your notes",
    "notes": ["vanilla", "saffron"]
  },
  "results": [
    {
      "perfume": {
        "name": "Vanille & Ambre",
        "house": "Berdoues",
        "gender": "unisex",
        "family": "Vanilla amber",
        "accords": ["vanilla", "amber", "sweet"]
      },
      "closeness": "very close",
      "shared_notes": ["vanilla", "saffron"],
      "why": "shares vanilla, saffron"
    },
    {
      "perfume": {
        "name": "Liquid Brun",
        "house": "French Avenue",
        "gender": "unisex",
        "family": "Gourmand spicy",
        "accords": ["warm spicy", "sweet", "vanilla"]
      },
      "closeness": "very close",
      "shared_notes": [],
      "why": "a similar overall profile"
    }
  ],
  "total": 2612,
  "source": "10ML Fragrance Index"
}

Des alternatives d’autres maisons

GET /api/v1/alternatives?perfume= renvoie les alternatives des rédacteurs à un parfum célèbre, toujours issues d’autres maisons, chacune avec la raison de sa proximité. closeness= ne garde que « very close » = très proche, « similar vibe » = même ambiance, « same spirit » = même esprit.

curl "https://mcp.10ml.com/api/v1/alternatives?perfume=Creed+Aventus&limit=2"
{
  "total": 5,
  "original": {
    "name": "Creed Aventus",
    "id": "creed-aventus-edp"
  },
  "alternatives": [
    {
      "name": "Armaf Club de Nuit Intense Man",
      "closeness": "very close",
      "why": "Pineapple, lemon, birch smoke and musk make it smell similar, a popular alternative at a different weight.",
      "id": "armaf-club-de-nuit-intense-man-parfum",
      "house": "Armaf",
      "source": "editors"
    },
    {
      "name": "Al Haramain L'Aventure",
      "closeness": "very close",
      "why": "Fruity-smoky opening over woods and musk follows the same blueprint.",
      "id": "al-haramain-laventure",
      "house": "Al Haramain",
      "source": "editors"
    }
  ],
  "source": "10ML Fragrance Index"
}

Des suggestions selon les goûts d’une personne

Les suggestions selon les goûts ne sont pas une route REST : elles viennent de l’outil recommend_perfumes du serveur MCP. Il prend les parfums qu’une personne aime ou n’aime pas, les notes qu’elle apprécie ou évite, ainsi que le genre, la saison, l’occasion, le style et la famille, et donne la raison de chaque suggestion. L’endpoint MCP https://mcp.10ml.com/mcp répond aussi à un simple POST JSON-RPC, n’importe quel code peut donc l’appeler. La réponse ci-dessous est le structuredContent de la réponse, abrégé.

curl -X POST https://mcp.10ml.com/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"recommend_perfumes","arguments":{"likes":["Dior Sauvage"],"avoided_notes":["patchouli"],"season":"summer","limit":2}}}'
{
  "total": 3916,
  "picks": [
    {
      "perfume": {
        "name": "L'Immensité",
        "house": "Louis Vuitton",
        "gender": "men",
        "family": "Aromatic aquatic",
        "accords": ["fresh", "aquatic", "amber"],
        "key_notes": ["sage", "labdanum", "ambroxan", "amber", "ginger"]
      },
      "why": "shares bergamot, labdanum, ambroxan with Sauvage Eau de Parfum; suits summer"
    },
    {
      "perfume": {
        "name": "Jean Lowe Immortel",
        "house": "Maison Alhambra",
        "gender": "men",
        "family": "Fresh aromatic",
        "accords": ["fresh", "aromatic", "woody"],
        "key_notes": []
      },
      "why": "suits summer"
    }
  ],
  "taste": {
    "liked_perfumes": ["Sauvage Eau de Parfum"],
    "liked_notes": [],
    "avoided_notes": ["patchouli"]
  },
  "source": "10ML Fragrance Index"
}

Un assistant fait le même appel pour vous : demandez à Claude ou à ChatGPT « mon parfum signature est Dior Sauvage, et ensuite ? » une fois le serveur MCP parfum ajouté.

Filtrer par notes, saison et occasion

GET /api/v1/perfumes liste les parfums par notes_include, notes_exclude, accords, family, gender, season, occasion et style, ainsi que par texte libre. L’exemple ci-dessous garde les parfums qui portent à la fois la bergamote et l’ambroxan.

curl "https://mcp.10ml.com/api/v1/perfumes?notes_include=bergamot,ambroxan&limit=2"
{
  "total": 90,
  "results": [
    {
      "name": "Imagination",
      "house": "Louis Vuitton",
      "family": "Citrus woody",
      "key_notes": ["ginger", "cinnamon", "amberwood", "ambroxan", "citron"]
    },
    {
      "name": "L'Immensité",
      "house": "Louis Vuitton",
      "family": "Aromatic aquatic",
      "key_notes": ["sage", "labdanum", "ambroxan", "amber", "ginger"]
    }
  ],
  "filters": {
    "notes_include": "bergamot, ambroxan"
  },
  "relaxed": false,
  "source": "10ML Fragrance Index"
}

Quelle route pour quelle question

La questionL’appel
Quels parfums ressemblent à celui-ci ?GET /api/v1/similar?perfume=
Comme celui-ci, mais plus frais, plus sucré ou plus sombre ?GET /api/v1/similar?perfume=&steer=
Je ne connais que les notes.GET /api/v1/similar?notes=
Quelles sont les alternatives d’autres maisons ?GET /api/v1/alternatives?perfume=
Des parfums avec ces notes pour cette saison ?GET /api/v1/perfumes?notes_include=&season=
Qu’est-ce qui correspond à ce que cette personne aime et évite ?MCP tool recommend_perfumes

L’index compte 5 400+ parfums et 285 notes. La page de l’API parfum documente chaque endpoint, et le guide de l’alternative à l’API Fragrantica présente les autres données que les développeurs cherchent.

Questions

Existe-t-il une API de recommandation de parfums ?

Oui. L’API 10ML Fragrance Index propose des suggestions par trois routes gratuites : /similar pour des parfums comme un parfum que vous connaissez, /alternatives pour des alternatives d’autres maisons et /perfumes pour filtrer par notes, saison et occasion. Les suggestions à partir des parfums et des notes qu’une personne aime et évite viennent de l’outil recommend_perfumes à https://mcp.10ml.com/mcp. Sans clé API.

Existe-t-il une API de parfums similaires ?

Oui : GET https://mcp.10ml.com/api/v1/similar?perfume=Creed+Aventus renvoie les parfums les plus proches, chacun avec les notes et accords qu’il partage et son degré de proximité (« very close » = très proche, « similar vibe » = même ambiance, « same spirit » = même esprit). steer= oriente le résultat vers fresher, sweeter, darker, lighter, longer_lasting ou more_projection.

Comment la similarité est-elle mesurée ?

Par les notes, accords et styles partagés. Chaque résultat liste ce qu’il partage et indique à quel point il est proche. C’est une comparaison des parfums eux-mêmes, pas une note issue d’avis.

Puis-je obtenir des parfums similaires pour un parfum absent de l’index ?

Oui. Passez ses notes et accords à /similar au lieu d’un nom, par exemple notes=vanilla,saffron, et l’index est classé selon cette liste.

Puis-je obtenir des suggestions selon les goûts d’un utilisateur en REST ?

Pas sur une route REST aujourd’hui. L’outil recommend_perfumes se trouve sur l’endpoint MCP, qui répond aussi à un simple POST JSON-RPC, comme le montre l’exemple ci-dessus. Les routes REST couvrent les parfums similaires, les alternatives et les filtres.

Est-ce gratuit ?

Oui. Il n’y a ni clé API, ni compte, ni inscription. Une limitation de débit pour usage raisonnable peut s’appliquer (voir les conditions) : mettez en cache ce que vous récupérez et gardez un rythme poli pour les traitements en masse.