Saltar al contenido

La API de datos de 35mm.org

Películas, reveladores y tiempos de revelado como JSON: cada tiempo con la hoja técnica o tabla de la que se leyó. Solo lectura, y no hace falta clave para empezar.

Inicio rápido OpenAPI

Inicio rápido

Pide los tiempos publicados de una película en un revelador. Todo está bajo https://35mm.org/api/public/v1; las respuestas son JSON con claves en snake_case y fechas ISO 8601 en UTC.

curl "https://35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11"

Cada tiempo viene con su fuente: de qué tipo es, su título y su dirección tal como se guardan. Donde no hay ninguna registrada, los campos son null: no se rellena nada. Solo se sirven datos publicados: nunca borradores, sugerencias ni nada sobre personas.

Claves

Las solicitudes anónimas no necesitan nada. Para un límite mayor, pide una clave de API y envíala como token bearer:

curl -H "Authorization: Bearer 35mm_…" "https://35mm.org/api/public/v1/films"

Una clave errónea o revocada recibe un 401: nunca se trata discretamente como anónima. Las claves son para servidores y herramientas: no pongas una en una página web, donde cualquiera puede leerla.

Las claves se emiten a mano, previa solicitud.

Límites de uso

  • Sin clave: 60 solicitudes por minuto para cada dirección.
  • Con clave: su propio cupo, 600 por minuto salvo que se acuerde otra cosa.
  • Superado el límite, la respuesta es 429 con una cabecera Retry-After (segundos de espera). Cada respuesta lleva X-RateLimit-Limit y X-RateLimit-Remaining.

Las direcciones se cuentan en una caché y nunca se almacenan. El uso de una clave se cuenta por día: un número, nada más.

Atribución

Cada respuesta tiene un objeto attribution. Por favor, enlaza a 35mm.org dondequiera que muestres nuestros datos (la url de una película, un revelador o un tiempo apunta a su página) y muestra con cada tiempo su fuente: un tiempo de revelado sin su fuente es solo un número.

Los datos todavía no tienen una licencia declarada. Enlaza de vuelta, conserva la fuente de cada tiempo junto a él y pregunta si tienes dudas.

Endpoints

Todos son GET. Los ejemplos de abajo son respuestas reales de un pequeño catálogo de prueba, no datos de producción.

GET/films

Películas, de la A a la Z, cada una con su fabricante, formatos y número de tiempos publicados.

curl "https://35mm.org/api/public/v1/films?manufacturer=ilford"
Parámetros
ParámetroSignificado
qBusca por nombre o fabricante, ignorando la puntuación: hp5, ilford hp5.
manufacturerEl slug de un fabricante, como ilford.
formatEl slug de un formato, como 135 o 120.
processEl proceso: bw, c41, e6, ecn2…
typeEl tipo de película: bw_negative, color_negative, color_reversal…
still_made1 para las películas aún en producción, 0 para el resto.
has_times1 para las películas con un tiempo publicado, 0 para las que no lo tienen.
page, per_pageConsulta la paginación más abajo.
Ejemplo de respuesta
{
    "data": [
        {
            "id": 101,
            "slug": "ilford-hp5-plus",
            "name": "HP5 Plus",
            "full_name": "Ilford HP5 Plus",
            "manufacturer": {
                "slug": "ilford",
                "name": "Ilford"
            },
            "iso": 400,
            "type": "bw_negative",
            "process": "bw",
            "is_chromogenic_bw": false,
            "status": "in_production",
            "still_made": true,
            "formats": [
                {
                    "slug": "135",
                    "name": "35mm (135)"
                }
            ],
            "respool_of": null,
            "published_times_count": 2,
            "url": "https://35mm.org/film/ilford-hp5-plus",
            "api_url": "https://35mm.org/api/public/v1/films/ilford-hp5-plus",
            "updated_at": "2026-10-01T12:00:00Z"
        }
    ],
    "links": {
        "first": "https://35mm.org/api/public/v1/films?manufacturer=ilford&page=1",
        "last": "https://35mm.org/api/public/v1/films?manufacturer=ilford&page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 50,
        "from": 1,
        "to": 1,
        "total": 1
    },
    "attribution": {
        "text": "Data from 35mm.org — each time with its source. Please link back to 35mm.org.",
        "url": "https://35mm.org"
    }
}

GET/films/{slug}

Una película con sus especificaciones y todos sus tiempos de revelado publicados.

curl "https://35mm.org/api/public/v1/films/ilford-hp5-plus"
Ejemplo de respuesta
{
    "data": {
        "id": 101,
        "slug": "ilford-hp5-plus",
        "name": "HP5 Plus",
        "full_name": "Ilford HP5 Plus",
        "manufacturer": {
            "slug": "ilford",
            "name": "Ilford"
        },
        "iso": 400,
        "type": "bw_negative",
        "process": "bw",
        "is_chromogenic_bw": false,
        "status": "in_production",
        "still_made": true,
        "formats": [
            {
                "slug": "135",
                "name": "35mm (135)"
            }
        ],
        "respool_of": null,
        "published_times_count": 2,
        "url": "https://35mm.org/film/ilford-hp5-plus",
        "api_url": "https://35mm.org/api/public/v1/films/ilford-hp5-plus",
        "updated_at": "2026-10-01T12:00:00Z",
        "base": null,
        "emulsion_type": null,
        "spectral_sensitivity": null,
        "has_remjet": false,
        "first_released_year": 1989,
        "discontinued_year": null,
        "grain_rms": 14.0,
        "resolving_power_lpmm": null,
        "dmax": null,
        "latitude_stops_under": null,
        "latitude_stops_over": null,
        "datasheet_url": null,
        "image_url": null,
        "development_times": [
            {
                "id": 501,
                "film": {
                    "slug": "ilford-hp5-plus",
                    "name": "HP5 Plus",
                    "url": "https://35mm.org/film/ilford-hp5-plus"
                },
                "developer": {
                    "slug": "ilford-id-11",
                    "name": "ID-11",
                    "url": "https://35mm.org/developer/ilford-id-11"
                },
                "dilution": {
                    "label": "Stock",
                    "is_stock": true
                },
                "format": "any",
                "ei": 400,
                "temperature_c": 20.0,
                "time_seconds": 450,
                "time": "7:30",
                "agitation": "10 s at the start, then 10 s every minute",
                "process_type": "tank",
                "confidence": "verified",
                "notes": "Tank, 10 s initial agitation.",
                "source": {
                    "type": "manufacturer_datasheet",
                    "title": "ILFORD HP5 PLUS technical information, 2023",
                    "url": "https://example.com/ilford-hp5-plus-datasheet.pdf"
                },
                "inherited_from": null,
                "url": "https://35mm.org/film/ilford-hp5-plus/developed-in/ilford-id-11",
                "updated_at": "2026-10-01T12:00:00Z"
            },
            {
                "id": 502,
                "film": {
                    "slug": "ilford-hp5-plus",
                    "name": "HP5 Plus",
                    "url": "https://35mm.org/film/ilford-hp5-plus"
                },
                "developer": {
                    "slug": "ilford-id-11",
                    "name": "ID-11",
                    "url": "https://35mm.org/developer/ilford-id-11"
                },
                "dilution": {
                    "label": "1+1",
                    "is_stock": false
                },
                "format": "any",
                "ei": 800,
                "temperature_c": 20.0,
                "time_seconds": 600,
                "time": "10:00",
                "agitation": null,
                "process_type": "tank",
                "confidence": "community",
                "notes": null,
                "source": {
                    "type": "community",
                    "title": null,
                    "url": null
                },
                "inherited_from": null,
                "url": "https://35mm.org/film/ilford-hp5-plus/developed-in/ilford-id-11",
                "updated_at": "2026-10-01T12:00:00Z"
            }
        ]
    },
    "attribution": {
        "text": "Data from 35mm.org — each time with its source. Please link back to 35mm.org.",
        "url": "https://35mm.org"
    }
}

GET/developers

Reveladores y otra química.

curl "https://35mm.org/api/public/v1/developers?manufacturer=ilford"
Parámetros
ParámetroSignificado
qBusca por nombre o fabricante.
manufacturerEl slug de un fabricante.
typeEl tipo de química: bw_developer, c41_kit, fixer…
still_made1 para los que aún están en producción, 0 para el resto.
page, per_pageConsulta la paginación más abajo.
Ejemplo de respuesta
{
    "data": [
        {
            "id": 201,
            "slug": "ilford-id-11",
            "name": "ID-11",
            "full_name": "Ilford ID-11",
            "manufacturer": {
                "slug": "ilford",
                "name": "Ilford"
            },
            "type": "bw_developer",
            "form": "powder",
            "status": "in_production",
            "still_made": true,
            "reuse": "depends",
            "is_one_shot": false,
            "is_replenishable": null,
            "reuse_source": {
                "title": "ILFORD PERCEPTOL, ID-11 AND MICROPHEN FILM DEVELOPERS",
                "url": "https://www.ilfordphoto.com/wp/wp-content/uploads/2024/09/ILFORD-POWDER-CHEM-190824.pdf"
            },
            "published_times_count": 2,
            "url": "https://35mm.org/developer/ilford-id-11",
            "api_url": "https://35mm.org/api/public/v1/developers/ilford-id-11",
            "updated_at": "2026-10-01T12:00:00Z"
        }
    ],
    "links": {
        "first": "https://35mm.org/api/public/v1/developers?manufacturer=ilford&page=1",
        "last": "https://35mm.org/api/public/v1/developers?manufacturer=ilford&page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 50,
        "from": 1,
        "to": 1,
        "total": 1
    },
    "attribution": {
        "text": "Data from 35mm.org — each time with its source. Please link back to 35mm.org.",
        "url": "https://35mm.org"
    }
}

GET/developers/{slug}

Un revelador con sus diluciones y las películas para las que tiene tiempos publicados.

curl "https://35mm.org/api/public/v1/developers/ilford-id-11"
Ejemplo de respuesta
{
    "data": {
        "id": 201,
        "slug": "ilford-id-11",
        "name": "ID-11",
        "full_name": "Ilford ID-11",
        "manufacturer": {
            "slug": "ilford",
            "name": "Ilford"
        },
        "type": "bw_developer",
        "form": "powder",
        "status": "in_production",
        "still_made": true,
        "reuse": "depends",
        "is_one_shot": false,
        "is_replenishable": null,
        "reuse_source": {
            "title": "ILFORD PERCEPTOL, ID-11 AND MICROPHEN FILM DEVELOPERS",
            "url": "https://www.ilfordphoto.com/wp/wp-content/uploads/2024/09/ILFORD-POWDER-CHEM-190824.pdf"
        },
        "published_times_count": 2,
        "url": "https://35mm.org/developer/ilford-id-11",
        "api_url": "https://35mm.org/api/public/v1/developers/ilford-id-11",
        "updated_at": "2026-10-01T12:00:00Z",
        "shelf_life_unopened_months": 24,
        "shelf_life_opened_months": 3,
        "capacity_rolls_per_litre": 10.0,
        "datasheet_url": null,
        "dilutions": [
            {
                "label": "Stock",
                "is_stock": true,
                "parts_developer": 1.0,
                "parts_water": 0.0
            },
            {
                "label": "1+1",
                "is_stock": false,
                "parts_developer": 1.0,
                "parts_water": 1.0
            }
        ],
        "films": [
            {
                "slug": "ilford-hp5-plus",
                "name": "HP5 Plus",
                "published_times_count": 2,
                "times_url": "https://35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11"
            }
        ]
    },
    "attribution": {
        "text": "Data from 35mm.org — each time with its source. Please link back to 35mm.org.",
        "url": "https://35mm.org"
    }
}

GET/development-times

Busca tiempos publicados. Un reenrollado sin tiempos propios responde con los de su película original, marcados con inherited_from.

curl "https://35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
Parámetros
ParámetroSignificado
filmEl slug de una película.
developerEl slug de un revelador.
dilutionLa etiqueta de una dilución tal como se publica: Stock, 1+1…
eiEl índice de exposición al que se expuso la película.
temperatureLa temperatura en °C.
formatEl formato al que corresponde el tiempo: 135, 120, sheet o any.
page, per_pageConsulta la paginación más abajo.
Ejemplo de respuesta
{
    "data": [
        {
            "id": 501,
            "film": {
                "slug": "ilford-hp5-plus",
                "name": "HP5 Plus",
                "url": "https://35mm.org/film/ilford-hp5-plus"
            },
            "developer": {
                "slug": "ilford-id-11",
                "name": "ID-11",
                "url": "https://35mm.org/developer/ilford-id-11"
            },
            "dilution": {
                "label": "Stock",
                "is_stock": true
            },
            "format": "any",
            "ei": 400,
            "temperature_c": 20.0,
            "time_seconds": 450,
            "time": "7:30",
            "agitation": "10 s at the start, then 10 s every minute",
            "process_type": "tank",
            "confidence": "verified",
            "notes": "Tank, 10 s initial agitation.",
            "source": {
                "type": "manufacturer_datasheet",
                "title": "ILFORD HP5 PLUS technical information, 2023",
                "url": "https://example.com/ilford-hp5-plus-datasheet.pdf"
            },
            "inherited_from": null,
            "url": "https://35mm.org/film/ilford-hp5-plus/developed-in/ilford-id-11",
            "updated_at": "2026-10-01T12:00:00Z"
        }
    ],
    "links": {
        "first": "https://35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400&page=1",
        "last": "https://35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400&page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 50,
        "from": 1,
        "to": 1,
        "total": 1
    },
    "attribution": {
        "text": "Data from 35mm.org — each time with its source. Please link back to 35mm.org.",
        "url": "https://35mm.org"
    }
}

Un tiempo de revelado

Los campos de un tiempo de revelado
CampoSignificado
time_seconds, timeEl tiempo en segundos enteros y como m:ss.
ei, temperature_cEl índice de exposición y la temperatura en °C a los que corresponde el tiempo.
sourceSiempre presente: type (manufacturer_datasheet, own_test, third_party, community), title y url tal como se guardan; null donde no hay ninguno registrado.
confidenceverified, community, unverified o disputed: hasta qué punto se ha comprobado el tiempo con su fuente.
inherited_fromEl slug de la película original cuando un reenrollado toma sus tiempos; en otro caso, null.

Paginación

Las listas se paginan con page y per_page (50 por defecto, como máximo 100). links tiene las direcciones first, last, prev y next (null donde no hay ninguna) y meta tiene current_page, last_page, per_page, from, to y total. Sigue links.next hasta que sea null.

Caché

Las respuestas llevan ETag y Last-Modified y Cache-Control: public, max-age=300. Devuelve el ETag en If-None-Match y una respuesta sin cambios devuelve 304 sin cuerpo; aun así cuenta como solicitud. Por favor, almacena también en caché por tu parte: el catálogo no cambia cada minuto.

Los navegadores de cualquier sitio pueden leer estas rutas (CORS: GET desde cualquier origen).

Errores

Los errores comparten una misma forma, con details para un parámetro rechazado:

{
    "error": {
        "code": "invalid_parameter",
        "message": "One or more parameters are not valid.",
        "details": { "per_page": ["The per page field must not be greater than 100."] }
    }
}
Errores
HTTPcodeSignificado
401invalid_api_keyLa clave es errónea o ha sido revocada.
404not_foundNinguna película ni revelador con ese slug.
405method_not_allowedLa API es de solo lectura: usa GET.
422invalid_parameterUn parámetro no tiene un valor válido.
429rate_limitedDemasiadas solicitudes: espera los segundos de Retry-After o pide una clave.

OpenAPI

Toda la API se describe en un archivo OpenAPI 3.1: /api/public/v1/openapi.json. Impórtalo en Postman, Insomnia o un generador de código.

Incrustar una tarjeta de tiempo

Los blogs y foros pueden mostrar un tiempo de revelado como una pequeña tarjeta: película, revelador, dilución, sensibilidad, temperatura, el tiempo y su fuente, con un enlace a 35mm.org. Es una página sencilla (sin cookies, sin scripts, sin cargar nada de otros sitios) hecha para incrustarse en un marco.

<iframe src="https://35mm.org/embed/time?film=ilford-hp5-plus&developer=ilford-id-11&dilution=Stock&ei=400&temp=20" width="100%" height="214" style="border:0;max-width:440px" loading="lazy" title="HP5 Plus in ID-11 — 35mm.org"></iframe>
Parámetros
ParámetroSignificado
film, developerLos slugs de la película y del revelador.
dilution, ei, tempAcota a un solo tiempo. Si se omite, se muestra el tiempo a sensibilidad nominal.
idO un solo tiempo por su id, desde la API.
themelight o dark. Si se omite, la tarjeta sigue el esquema de color del lector.
langen, pl o uk.

Si ningún tiempo publicado coincide, la tarjeta lo dice y enlaza a la película; nunca muestra una coincidencia aproximada. El botón Incrustar de cualquier página película × revelador genera el código por ti, con vista previa.

Contamos cuántas veces se muestra una tarjeta, por día, por sitio (el host de la página donde está, nada más largo) y por combinación. Sin cookies, sin direcciones.