Aller au contenu

L’API de données de 35mm.org

Films, révélateurs et temps de développement en JSON – chaque temps avec la fiche technique ou le tableau dont il a été relevé. En lecture seule, et aucune clé n’est nécessaire pour commencer.

Démarrage rapide OpenAPI

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ètres
ParamètreSignification
qRecherche dans le nom ou le fabricant, sans tenir compte de la ponctuation : hp5, ilford hp5.
manufacturerLe slug d’un fabricant, par exemple ilford.
formatLe slug d’un format, par exemple 135 ou 120.
processLe procédé : bw, c41, e6, ecn2…
typeLe type de film : bw_negative, color_negative, color_reversal…
still_made1 pour les films encore en production, 0 pour les autres.
has_times1 pour les films avec un temps publié, 0 pour ceux sans.
page, per_pageVoir 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ètres
ParamètreSignification
qRecherche dans le nom ou le fabricant.
manufacturerLe slug d’un fabricant.
typeLe type de produit : bw_developer, c41_kit, fixer…
still_made1 pour ceux encore en production, 0 pour les autres.
page, per_pageVoir 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ètres
ParamètreSignification
filmLe slug d’un film.
developerLe slug d’un révélateur.
dilutionL’intitulé d’une dilution tel que publié : Stock, 1+1…
eiL’indice d’exposition auquel le film a été exposé.
temperatureLa température en °C.
formatLe format auquel le temps s’applique : 135, 120, sheet ou any.
page, per_pageVoir 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

Les champs d’un temps de développement
ChampSignification
time_seconds, timeLe temps en secondes entières, et au format m:ss.
ei, temperature_cL’indice d’exposition et la température en °C auxquels le temps s’applique.
sourceToujours présent : type (manufacturer_datasheet, own_test, third_party, community), title et url tels qu’enregistrés – null là où aucun n’est enregistré.
confidenceverified, community, unverified ou disputed : dans quelle mesure le temps a été vérifié auprès de sa source.
inherited_fromLe 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."] }
    }
}
Erreurs
HTTPcodeSignification
401invalid_api_keyLa clé est erronée ou a été révoquée.
404not_foundAucun film ni révélateur avec ce slug.
405method_not_allowedL’API est en lecture seule : utilisez GET.
422invalid_parameterUn paramètre n’a pas une valeur valide.
429rate_limitedTrop 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ètres
ParamètreSignification
film, developerLes slugs du film et du révélateur.
dilution, ei, tempRestreindre à un seul temps. S’il est omis, le temps à la sensibilité nominale est affiché.
idOu un seul temps par son identifiant, depuis l’API.
themelight ou dark. S’il est omis, la carte suit le thème de couleur du lecteur.
langen, 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.