Saltar al contenido

Escenarios comunes

Funciones reales, construidas con las cuatro palancas de Consultas. Cada una es un request que puedes llevar directo a tu aplicación.

Código de barras → alimento

El flujo canónico de "escanear un producto": resuelve un código de barras a un alimento con un filtro exacto. Un data vacío significa que no hay coincidencia en el catálogo.

Manda el código tal como se escaneó. Los códigos se guardan como GTIN de 14 dígitos, y el filtro rellena tu valor a esa forma antes de comparar. El UPC de 12 dígitos que te da un escáner (041570110645) encuentra el mismo alimento que 00041570110645:

GET
curl -G https://api.noms.sh/v1/foods \
  --data-urlencode "barcode=041570110645" \
  --data-urlencode "include=brand" \
  -H "Authorization: Bearer $NOMS_KEY"
Response
200 OK
{
"data": [
{
"id": "TIgbNPnzCIjX",
"barcode": "00041570110645",el GTIN-14 canónico al que se resolvió tu código de 12 dígitos
"name": "Roasted salted almonds",
"description": null,
"scientific_name": null,
"country_of_origin": null,
"ingredients_text": "Almonds, sunflower oil, sea salt.",
"is_foundational": false,
"basis_unit": "grams",
"brand_id": "XoluRyOx9o3C",
"food_group_id": "NUTS_AND_SEEDS",
"brand": {
"id": "XoluRyOx9o3C",
"name": "Blue Diamond"
}
}
],
"links": {
"self": "/v1/foods?barcode=041570110645",
"next": null
},
"meta": {
"has_more": false,
"page_size": 10
}
}

Buscador tolerante a errores

Alimenta un autocompletado con ?q=. Recorta la respuesta a solo lo que muestra el desplegable con fields[foods], y mantén la página pequeña para resultados ágiles. Un fieldset devuelve exactamente los campos que nombras: pide id si lo quieres de vuelta:

GET
curl -G https://api.noms.sh/v1/foods \
  --data-urlencode "q=chedar chese" \
  --data-urlencode "fields[foods]=id,name,brand_id" \
  --data-urlencode "page_size=5" \
  -H "Authorization: Bearer $NOMS_KEY"
Response
200 OK
{
"data": [
{
"id": "EdRXJHInAjqg",
"name": "Sharp cheddar cheese",coincidió pese a dos errores de tipeo
"brand_id": "ELETQYRrJGh5"
},
{
"id": "3FleO3dlJk6Q",
"name": "Mingles cheddar sour cream",
"brand_id": "3fMsXSaGpkq5"
},
{
"id": "TRUdGUy9AlJ4",
"name": "Smokey cheddar",
"brand_id": "bXLwForHev9r"
},
{
"id": "2GPtKLexfv2m",
"name": "Rippled sour cream & cheddar potato chips",
"brand_id": "DjvsLWiPgDSc"
}
],
"links": {
"self": "/v1/foods?q=chedar+chese&page_size=5",
"next": "/v1/foods?...&cursor=b3V0..."
},
"meta": {
"has_more": true,
"page_size": 5
}
}

Desglose nutricional completo

Renderiza una etiqueta nutricional: obtén un alimento con sus nutrientes y sus tamaños de porción, y convierte cada valor a la porción. Datos nutricionales explica el modelo completo; la versión corta es value × serving[basis_unit] / 100.

GET
curl -G https://api.noms.sh/v1/foods/TIgbNPnzCIjX \
  --data-urlencode "include=nutrients,serving_sizes" \
  -H "Authorization: Bearer $NOMS_KEY"
Response
200 OK
{
"data": {
"id": "TIgbNPnzCIjX",
"barcode": "00041570110645",
"name": "Roasted salted almonds",
"description": null,
"scientific_name": null,
"country_of_origin": null,
"ingredients_text": "Almonds, sunflower oil, sea salt.",
"is_foundational": false,
"basis_unit": "grams",valores por 100 gramos → divide por serving.grams
"brand_id": "XoluRyOx9o3C",
"food_group_id": "NUTS_AND_SEEDS",
"nutrients": [
{
"id": "ADDED_SUGARS",
"name": "Sugars, added",
"value": "0.0",
"unit": "g"
},
{
"id": "ALPHA_TOCOPHEROL",
"name": "Vitamin E (alpha-tocopherol)",
"value": "25.1625",
"unit": "mg"
},
{
"id": "BIOTIN",
"name": "Biotin",
"value": "43.214286",
"unit": "mcg"
},
{
"id": "CALCIUM",
"name": "Calcium, Ca",
"value": "285.714286",
"unit": "mg"
},
{
"id": "CARBOHYDRATE",
"name": "Carbohydrate, by difference",
"value": "17.857143",
"unit": "g"
},
],
"serving_sizes": [
{
"unit": "g",
"descriptor": null,
"quantity": "28.0",
"grams": "28.0",value × grams/100 → cantidad por porción
"milliliters": null,
"is_default": true
},
{
"unit": "each",
"descriptor": "nuts",
"quantity": "28.0",
"grams": "28.0",
"milliliters": null,
"is_default": false
}
]
}
}

Rankear y filtrar por nutriente

Construye una función de dieta o fitness, como "las carnes más altas en proteína", ordenando por el valor de un nutriente y filtrando por grupo. Esta recorta la respuesta con fields[foods], así las filas vuelven solo con las claves que la lista necesita:

GET
curl -G https://api.noms.sh/v1/foods \
  --data-urlencode "food_group_id=MEAT" \
  --data-urlencode "sort=-nutrient[PROTEIN]" \
  --data-urlencode "fields[foods]=id,name,basis_unit" \
  --data-urlencode "page_size=3" \
  -H "Authorization: Bearer $NOMS_KEY"
Response
200 OK
{
"data": [
{
"id": "HcUGQ2h7BU18",
"name": "Filet mignon poivre",la mayor proteína por 100 g del grupo
"basis_unit": "grams"
},
{
"id": "SD4O7gsEv8Fl",
"name": "Artisan sausage, spinach pesto",
"basis_unit": "grams"
},
{
"id": "9Mpi5wXD9I3p",
"name": "Chicken breast pieces",
"basis_unit": "grams"
}
],
"links": {
"self": "/v1/foods?food_group_id=MEAT&sort=-nutrient[PROTEIN]",
"next": "/v1/foods?...&cursor=b3V0..."
},
"meta": {
"has_more": true,
"page_size": 3
}
}

Dos cosas que conviene saber al ordenar por un nutriente. Ordenar por él no lo incluye en la respuesta: agrega include=nutrients si quieres los valores. Y cuando lo hagas, nombra también nutrients en fields[foods], o el fieldset recortará la relación incorporada junto con todo lo que no pediste.

Sigue explorando

Estos son puntos de partida. Combina q, los filtros, sort, include y fields libremente. El explorador de la API lista cada campo y operador que puedes alcanzar.

Próximos pasos