Démarrage rapide
Demandez les temps publiés d’un film dans un révélateur. Tout se trouve sous https://www.35mm.org/api/public/v1 ; les réponses sont en JSON avec des clés en snake_case et des dates ISO 8601 en UTC.
curl "https://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11"
Chaque temps vient avec sa source : de quel type elle est, son titre et son adresse tels qu’enregistrés. Là où aucune n’est enregistrée, les champs valent null – rien n’est complété. Seules les données publiées sont servies : jamais les brouillons, les suggestions ni rien concernant des personnes.
Clés
Les requêtes anonymes n’ont besoin de rien. Pour une limite plus élevée, demandez une clé d’API et envoyez-la comme jeton bearer :
curl -H "Authorization: Bearer 35mm_…" "https://www.35mm.org/api/public/v1/films"
Une clé erronée ou révoquée reçoit la réponse 401 – elle n’est jamais traitée discrètement comme anonyme. Les clés sont destinées aux serveurs et aux outils : n’en mettez pas dans une page web, où tout le monde peut la lire.
Les clés sont délivrées à la main, sur demande.
Limites de débit
- Sans clé : 60 requêtes par minute pour chaque adresse.
- Avec une clé : son propre quota, 600 par minute sauf accord contraire.
- Au-delà de la limite, la réponse est 429 avec un en-tête Retry-After (secondes à attendre). Chaque réponse porte X-RateLimit-Limit et X-RateLimit-Remaining.
Les adresses sont comptées dans un cache et jamais conservées. L’utilisation d’une clé est comptée par jour – un nombre, rien de plus.
Attribution
Chaque réponse comporte un objet attribution. Merci de renvoyer vers 35mm.org partout où vous montrez nos données – l’url d’un film, d’un révélateur ou d’un temps pointe vers sa page – et d’afficher la source de chaque temps avec lui : un temps de développement sans sa source n’est qu’un nombre.
Les données n’ont pas encore de licence précisée. Renvoyez vers nous, conservez la source de chaque temps avec lui, et demandez en cas de doute.
Points d’accès
Tous sont en GET. Les exemples ci-dessous sont de vraies réponses pour un petit catalogue de test, pas des données de production.
GET/films
Les films, de A à Z, chacun avec son fabricant, ses formats et le nombre de temps publiés.
curl "https://www.35mm.org/api/public/v1/films?manufacturer=ilford"
| Paramètre | Signification |
|---|---|
| q | Recherche dans le nom ou le fabricant, sans tenir compte de la ponctuation : hp5, ilford hp5. |
| manufacturer | Le slug d’un fabricant, par exemple ilford. |
| format | Le slug d’un format, par exemple 135 ou 120. |
| process | Le procédé : bw, c41, e6, ecn2… |
| type | Le type de film : bw_negative, color_negative, color_reversal… |
| still_made | 1 pour les films encore en production, 0 pour les autres. |
| has_times | 1 pour les films avec un temps publié, 0 pour ceux sans. |
| page, per_page | Voir la pagination ci-dessous. |
Exemple de réponse
{
"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}
Un film avec ses caractéristiques et tous ses temps de développement publiés.
curl "https://www.35mm.org/api/public/v1/films/ilford-hp5-plus"
Exemple de réponse
{
"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
Les révélateurs et autres produits chimiques.
curl "https://www.35mm.org/api/public/v1/developers?manufacturer=ilford"
| Paramètre | Signification |
|---|---|
| q | Recherche dans le nom ou le fabricant. |
| manufacturer | Le slug d’un fabricant. |
| type | Le type de produit : bw_developer, c41_kit, fixer… |
| still_made | 1 pour ceux encore en production, 0 pour les autres. |
| page, per_page | Voir la pagination ci-dessous. |
Exemple de réponse
{
"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 révélateur avec ses dilutions et les films pour lesquels il a des temps publiés.
curl "https://www.35mm.org/api/public/v1/developers/ilford-id-11"
Exemple de réponse
{
"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
Recherche dans les temps publiés. Un rebobinage sans temps propres répond avec ceux de sa pellicule d’origine, marqués inherited_from.
curl "https://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
| Paramètre | Signification |
|---|---|
| film | Le slug d’un film. |
| developer | Le slug d’un révélateur. |
| dilution | L’intitulé d’une dilution tel que publié : Stock, 1+1… |
| ei | L’indice d’exposition auquel le film a été exposé. |
| temperature | La température en °C. |
| format | Le format auquel le temps s’applique : 135, 120, sheet ou any. |
| page, per_page | Voir la pagination ci-dessous. |
Exemple de réponse
{
"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 temps de développement
| Champ | Signification |
|---|---|
| time_seconds, time | Le temps en secondes entières, et au format m:ss. |
| ei, temperature_c | L’indice d’exposition et la température en °C auxquels le temps s’applique. |
| source | Toujours présent : type (manufacturer_datasheet, own_test, third_party, community), title et url tels qu’enregistrés – null là où aucun n’est enregistré. |
| confidence | verified, community, unverified ou disputed : dans quelle mesure le temps a été vérifié auprès de sa source. |
| inherited_from | Le slug de la pellicule d’origine lorsqu’un rebobinage reprend ses temps, sinon null. |
Pagination
Les listes sont paginées avec page et per_page (50 par défaut, 100 au plus). links contient les adresses first, last, prev et next – null là où il n’y en a pas – et meta contient current_page, last_page, per_page, from, to et total. Suivez links.next jusqu’à ce qu’il soit null.
Cache
Les réponses portent ETag et Last-Modified ainsi que Cache-Control: public, max-age=300. Renvoyez l’ETag dans If-None-Match et une réponse inchangée renvoie 304 sans corps – elle compte tout de même comme une requête. Merci de mettre en cache de votre côté aussi : le catalogue ne change pas à la minute.
Les navigateurs, sur n’importe quel site, peuvent lire ces routes (CORS : GET depuis n’importe quelle origine).
Erreurs
Les erreurs partagent une même forme, avec details pour un paramètre refusé :
{
"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 | Signification |
|---|---|---|
| 401 | invalid_api_key | La clé est erronée ou a été révoquée. |
| 404 | not_found | Aucun film ni révélateur avec ce slug. |
| 405 | method_not_allowed | L’API est en lecture seule : utilisez GET. |
| 422 | invalid_parameter | Un paramètre n’a pas une valeur valide. |
| 429 | rate_limited | Trop de requêtes : attendez le nombre de secondes de Retry-After, ou demandez une clé. |
OpenAPI
L’ensemble de l’API est décrit dans un fichier OpenAPI 3.1 : /api/public/v1/openapi.json. Importez-le dans Postman, Insomnia ou un générateur de code.
Intégrer une carte de temps
Les blogs et forums peuvent afficher un temps de développement sous forme de petite carte : film, révélateur, dilution, sensibilité, température, le temps et sa source, avec un lien vers 35mm.org. C’est une page simple – pas de cookies, pas de scripts, rien de chargé depuis d’autres sites – conçue pour être intégrée dans un cadre.
<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>
| Paramètre | Signification |
|---|---|
| film, developer | Les slugs du film et du révélateur. |
| dilution, ei, temp | Restreindre à un seul temps. S’il est omis, le temps à la sensibilité nominale est affiché. |
| id | Ou un seul temps par son identifiant, depuis l’API. |
| theme | light ou dark. S’il est omis, la carte suit le thème de couleur du lecteur. |
| lang | en, pl ou uk. |
Si aucun temps publié ne correspond, la carte le dit et renvoie vers le film – elle n’affiche jamais une correspondance approchante. Le bouton Intégrer de chaque page film × révélateur génère le code pour vous, avec un aperçu.
Nous comptons combien de fois une carte est affichée, par jour, par site (l’hôte de la page où elle se trouve, rien de plus long) et par association. Pas de cookies, pas d’adresses.