{
 "openapi": "3.1.0",
 "info": {
  "title": "Datos abiertos de sinAzucar.org",
  "version": "1.1.0",
  "summary": "Archivo de fotos de sinAzucar.org: cada producto con su azúcar en gramos y en terrones.",
  "description": "Un JSON estático, sin clave ni registro. Un terrón de azúcar = 4 g.\n\n**Archivo de fotos** (`/datos/fotos.json`): todas las fichas del archivo, con gramos y terrones según su etiqueta. Las fotos del archivo reservado de Premium y las de la colección 2018–2026 aún en exclusiva llevan `premium: true` (estas, además, `publico_desde`): sus datos de azúcar son públicos, pero su foto sin pixelar es solo para Premium.\n\nCada ficha tiene además su versión Markdown (`url_markdown`). No hay API pública de búsqueda de productos.\n\nAtribución: Fuente: sinAzucar.org (Antonio Rodríguez Estrada (ARE)), https://www.sinazucar.org/. Datos leídos de la tabla nutricional de la etiqueta de cada producto.\nCondiciones de uso de las fotos y de este archivo: Se pueden compartir sin alterarlas ni quitar el logotipo, citando sinAzucar.org. Uso comercial: pedir permiso a contacto@sinazucar.org.",
  "contact": {
   "name": "sinAzucar.org",
   "email": "contacto@sinazucar.org",
   "url": "https://www.sinazucar.org/acerca-de/"
  },
  "license": {
   "name": "Condiciones de uso (ver descripción)",
   "url": "https://www.sinazucar.org/acerca-de/"
  }
 },
 "servers": [
  {
   "url": "https://www.sinazucar.org",
   "description": "Producción"
  }
 ],
 "externalDocs": {
  "description": "Resumen del proyecto para agentes de IA",
  "url": "https://www.sinazucar.org/llms.txt"
 },
 "tags": [
  {
   "name": "Archivo de fotos",
   "description": "Datos estáticos del archivo fotográfico."
  }
 ],
 "paths": {
  "/datos/fotos.json": {
   "get": {
    "tags": [
     "Archivo de fotos"
    ],
    "operationId": "archivoFotos",
    "summary": "Todas las fotos del archivo con su azúcar",
    "description": "Un único JSON con todas las fotos: producto, ración, gramos de azúcar, terrones de 4 g y URL de la ficha. Las del archivo reservado de Premium llevan `premium: true` (su imagen nítida es de pago; los datos son públicos).",
    "responses": {
     "200": {
      "description": "El archivo completo.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Archivo"
        },
        "examples": {
         "ejemplo": {
          "summary": "Dos fotos: una abierta y una reservada",
          "value": {
           "total": 2,
           "fotos": [
            {
             "slug": "coca-cola",
             "titulo": "Coca-Cola",
             "producto": "Coca-Cola",
             "marca": "Coca-Cola",
             "marca_url": "https://www.sinazucar.org/marcas/coca-cola/",
             "categorias": [
              "refrescos"
             ],
             "url": "https://www.sinazucar.org/foto/coca-cola/",
             "url_markdown": "https://www.sinazucar.org/foto/coca-cola/index.md",
             "premium": false,
             "racion": {
              "cantidad": 500,
              "unidad": "ml"
             },
             "azucar_g": 53,
             "azucar_por_100": 10.6,
             "porcentaje_azucar": null,
             "terrones_4g": 13.25,
             "terrones_aproximado": false,
             "imagen": "https://www.sinazucar.org/wp-content/uploads/2016/12/04_coca_cola.jpg"
            },
            {
             "slug": "limon-nada",
             "titulo": "Limón&Nada",
             "producto": "Limón&Nada",
             "marca": null,
             "marca_url": null,
             "categorias": [
              "refrescos"
             ],
             "url": "https://www.sinazucar.org/foto/limon-nada/",
             "url_markdown": "https://www.sinazucar.org/foto/limon-nada/index.md",
             "premium": true,
             "racion": {
              "cantidad": 300,
              "unidad": "ml"
             },
             "azucar_g": 39,
             "azucar_por_100": 13,
             "porcentaje_azucar": null,
             "terrones_4g": 10,
             "terrones_aproximado": true,
             "imagen": null,
             "nota": "La foto nítida (sin pixelar) de este producto es contenido Premium; sus datos de azúcar son públicos."
            }
           ]
          }
         }
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Archivo": {
    "type": "object",
    "properties": {
     "nombre": {
      "type": "string"
     },
     "descripcion": {
      "type": "string"
     },
     "metodologia": {
      "type": "object"
     },
     "atribucion": {
      "type": "string"
     },
     "condiciones_de_uso": {
      "type": "string"
     },
     "total": {
      "type": "integer"
     },
     "fotos_premium": {
      "type": "integer",
      "description": "Cuántas llevan premium: true (archivo reservado y colección aún en exclusiva)."
     },
     "categorias": {
      "type": "array",
      "items": {
       "type": "object"
      }
     },
     "fotos": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Foto"
      }
     }
    }
   },
   "Foto": {
    "type": "object",
    "required": [
     "slug",
     "titulo",
     "url",
     "premium"
    ],
    "properties": {
     "slug": {
      "type": "string"
     },
     "titulo": {
      "type": "string"
     },
     "producto": {
      "type": "string"
     },
     "marca": {
      "type": [
       "string",
       "null"
      ]
     },
     "marca_url": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "Página de la marca en sinAzucar.org (/marcas/{marca}/), si la tiene."
     },
     "categorias": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "url": {
      "type": "string",
      "format": "uri",
      "description": "Ficha de la foto (HTML)."
     },
     "url_markdown": {
      "type": "string",
      "format": "uri"
     },
     "premium": {
      "type": "boolean",
      "description": "true: foto del archivo reservado o de la colección 2018–2026 aún en exclusiva. Sus datos de azúcar son públicos; solo la imagen nítida es de pago."
     },
     "publico_desde": {
      "type": "string",
      "format": "date",
      "description": "Solo en las fotos de la colección 2018–2026 aún en exclusiva: el día en que pasan a estar en abierto."
     },
     "racion": {
      "type": [
       "object",
       "null"
      ],
      "properties": {
       "cantidad": {
        "type": "number"
       },
       "unidad": {
        "type": "string"
       }
      }
     },
     "azucar_g": {
      "type": [
       "number",
       "null"
      ],
      "description": "Gramos de azúcar en la ración."
     },
     "azucar_por_100": {
      "type": [
       "number",
       "null"
      ],
      "description": "Gramos de azúcar por cada 100 g o 100 ml."
     },
     "porcentaje_azucar": {
      "type": [
       "number",
       "null"
      ],
      "description": "Solo en fotos que dan el porcentaje en lugar de la ración."
     },
     "terrones_4g": {
      "type": [
       "number",
       "null"
      ],
      "description": "Terrones de 4 g en la ración."
     },
     "terrones_aproximado": {
      "type": "boolean",
      "description": "true si la foto da una cifra aproximada («casi 10»)."
     },
     "imagen": {
      "type": [
       "string",
       "null"
      ],
      "format": "uri",
      "description": "JPG original. null en las fotos premium."
     },
     "nota": {
      "type": "string",
      "description": "Solo en las fotos premium."
     }
    }
   }
  }
 }
}