10ML Perfume Finder · para desarrolladores

API de recomendación de perfumes y API de perfumes similares

La API de recomendación de perfumes de 10ML es un conjunto de rutas GET gratuitas, sin clave API. /similar ordena los perfumes por notas y acordes compartidos y puede orientarlos hacia más fresco, más dulce u oscuro. /alternatives devuelve alternativas de otras casas. Las sugerencias según el gusto de una persona vienen de la herramienta recommend_perfumes del endpoint MCP.

API de perfumes similares

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

JSON por GET, OpenAPI 3.1. Gratis, sin clave API.

Los ocho endpoints

API de perfumes similares

GET /api/v1/similar?perfume= toma el nombre de un perfume del índice y devuelve los perfumes más cercanos. Cada resultado indica qué notas y acordes comparte y lo cerca que está: «very close» = muy cercano, «similar vibe» = vibra similar, «same spirit» = mismo espíritu. Se muestran dos resultados de catorce, abreviados, del 21 de octubre de 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"
}

Pasa house= cuando un nombre es ambiguo, gender= para quedarte con perfumes de hombre, de mujer o unisex, other_houses_only=true para excluir la casa del perfume de partida, y limit= y cursor= para paginar.

Orientar el resultado

steer= aleja el resultado del perfume de partida en una dirección: fresher, sweeter, darker, lighter, longer_lasting o more_projection. Las dos últimas necesitan un perfume que esté en el índice. El motivo de cada resultado nombra la dirección.

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"
}

Perfumes similares solo a partir de notas

Para un perfume que no está en el índice, pasa sus notes= y accords= en lugar de un nombre. El resultado ordena el índice según esa lista.

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"
}

Alternativas de otras casas

GET /api/v1/alternatives?perfume= devuelve las alternativas de los editores a un perfume famoso, siempre de otras casas, cada una con el motivo de su cercanía. closeness= conserva solo «very close» = muy cercano, «similar vibe» = vibra similar, «same spirit» = mismo espíritu.

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"
}

Recomendaciones según el gusto de una persona

Las sugerencias según el gusto no son una ruta REST: vienen de la herramienta recommend_perfumes del servidor MCP. Toma los perfumes que una persona ama o no le gustan, las notas que le gustan o evita, y el género, la estación, la ocasión, el estilo y la familia, y explica el motivo de cada sugerencia. El endpoint MCP https://mcp.10ml.com/mcp responde también a un simple POST JSON-RPC, así que cualquier código puede llamarlo. La respuesta de abajo es el structuredContent de la respuesta, abreviado.

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 asistente hace la misma llamada por ti: pregunta a Claude o a ChatGPT «mi perfume de cabecera es Dior Sauvage, ¿qué sigue?» una vez que hayas añadido el servidor MCP de perfumes.

Filtrar por notas, estación y ocasión

GET /api/v1/perfumes lista perfumes por notes_include, notes_exclude, accords, family, gender, season, occasion y style, además de texto libre. El ejemplo de abajo conserva los perfumes que llevan a la vez bergamota y 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"
}

Qué ruta para qué pregunta

La preguntaLa llamada
¿Qué perfumes se parecen a este?GET /api/v1/similar?perfume=
¿Como este, pero más fresco, más dulce u oscuro?GET /api/v1/similar?perfume=&steer=
Solo conozco las notas.GET /api/v1/similar?notes=
¿Qué alternativas hay de otras casas?GET /api/v1/alternatives?perfume=
¿Perfumes con estas notas para esta estación?GET /api/v1/perfumes?notes_include=&season=
¿Qué encaja con lo que esta persona ama y evita?MCP tool recommend_perfumes

El índice tiene más de 5400 perfumes y 285 notas. La página de la API de perfumes documenta cada endpoint, y la guía de la alternativa a la API de Fragrantica recoge los demás datos que buscan los desarrolladores.

Preguntas

¿Hay una API de recomendación de perfumes?

Sí. La API del 10ML Fragrance Index recomienda mediante tres rutas gratuitas: /similar para perfumes como uno que conoces, /alternatives para alternativas de otras casas y /perfumes para filtrar por notas, estación y ocasión. Las sugerencias a partir de los perfumes y notas que una persona ama y evita vienen de la herramienta recommend_perfumes en https://mcp.10ml.com/mcp. Sin clave API.

¿Hay una API de perfumes similares?

Sí: GET https://mcp.10ml.com/api/v1/similar?perfume=Creed+Aventus devuelve los perfumes más cercanos, cada uno con las notas y acordes que comparte y lo cerca que está («very close» = muy cercano, «similar vibe» = vibra similar, «same spirit» = mismo espíritu). steer= orienta el resultado hacia fresher, sweeter, darker, lighter, longer_lasting o more_projection.

¿Cómo se mide la similitud?

Por notas, acordes y estilo compartidos. Cada resultado lista lo que comparte e indica lo cerca que está. Es una comparación de los propios perfumes, no una puntuación basada en reseñas.

¿Puedo obtener perfumes similares para un perfume que no está en el índice?

Sí. Pasa sus notas y acordes a /similar en lugar de un nombre, por ejemplo notes=vanilla,saffron, y el índice se ordena según esa lista.

¿Puedo obtener recomendaciones según el gusto de un usuario por REST?

Hoy no mediante una ruta REST. La herramienta recommend_perfumes está en el endpoint MCP, que también responde a un simple POST JSON-RPC, como muestra el ejemplo de arriba. Las rutas REST cubren los perfumes similares, las alternativas y los filtros.

¿Es gratis?

Sí. No hay clave API, cuenta ni registro. Puede aplicarse una limitación de frecuencia por uso razonable (consulta las condiciones): guarda en caché lo que obtengas y mantén un ritmo educado en los procesos masivos.