Inicio rápido
Pide los tiempos publicados de una película en un revelador. Todo está bajo https://www.35mm.org/api/public/v1; las respuestas son JSON con claves en snake_case y fechas ISO 8601 en UTC.
curl "https://www.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://www.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://www.35mm.org/api/public/v1/films?manufacturer=ilford"
| Parámetro | Significado |
|---|---|
| q | Busca por nombre o fabricante, ignorando la puntuación: hp5, ilford hp5. |
| manufacturer | El slug de un fabricante, como ilford. |
| format | El slug de un formato, como 135 o 120. |
| process | El proceso: bw, c41, e6, ecn2… |
| type | El tipo de película: bw_negative, color_negative, color_reversal… |
| still_made | 1 para las películas aún en producción, 0 para el resto. |
| has_times | 1 para las películas con un tiempo publicado, 0 para las que no lo tienen. |
| page, per_page | Consulta 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://www.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://www.35mm.org/api/public/v1/developers?manufacturer=ilford"
| Parámetro | Significado |
|---|---|
| q | Busca por nombre o fabricante. |
| manufacturer | El slug de un fabricante. |
| type | El tipo de química: bw_developer, c41_kit, fixer… |
| still_made | 1 para los que aún están en producción, 0 para el resto. |
| page, per_page | Consulta 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://www.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://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
| Parámetro | Significado |
|---|---|
| film | El slug de una película. |
| developer | El slug de un revelador. |
| dilution | La etiqueta de una dilución tal como se publica: Stock, 1+1… |
| ei | El índice de exposición al que se expuso la película. |
| temperature | La temperatura en °C. |
| format | El formato al que corresponde el tiempo: 135, 120, sheet o any. |
| page, per_page | Consulta 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
| Campo | Significado |
|---|---|
| time_seconds, time | El tiempo en segundos enteros y como m:ss. |
| ei, temperature_c | El índice de exposición y la temperatura en °C a los que corresponde el tiempo. |
| source | Siempre presente: type (manufacturer_datasheet, own_test, third_party, community), title y url tal como se guardan; null donde no hay ninguno registrado. |
| confidence | verified, community, unverified o disputed: hasta qué punto se ha comprobado el tiempo con su fuente. |
| inherited_from | El 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."] }
}
}
| HTTP | code | Significado |
|---|---|---|
| 401 | invalid_api_key | La clave es errónea o ha sido revocada. |
| 404 | not_found | Ninguna película ni revelador con ese slug. |
| 405 | method_not_allowed | La API es de solo lectura: usa GET. |
| 422 | invalid_parameter | Un parámetro no tiene un valor válido. |
| 429 | rate_limited | Demasiadas 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://www.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ámetro | Significado |
|---|---|
| film, developer | Los slugs de la película y del revelador. |
| dilution, ei, temp | Acota a un solo tiempo. Si se omite, se muestra el tiempo a sensibilidad nominal. |
| id | O un solo tiempo por su id, desde la API. |
| theme | light o dark. Si se omite, la tarjeta sigue el esquema de color del lector. |
| lang | en, 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.