Zum Inhalt springen

Die Daten-API von 35mm.org

Filme, Entwickler und Entwicklungszeiten als JSON – jede Zeit mit dem Datenblatt oder der Tabelle, aus der sie abgelesen wurde. Nur lesend, und zum Start ist kein Schlüssel nötig.

Schnellstart OpenAPI

Schnellstart

Fragen Sie die veröffentlichten Zeiten eines Films in einem Entwickler ab. Alles liegt unter https://www.35mm.org/api/public/v1; die Antworten sind JSON mit Schlüsseln in snake_case und ISO-8601-Datumsangaben in UTC.

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

Jede Zeit kommt mit ihrer Quelle: welche Art sie ist, ihr Titel und ihre Adresse wie gespeichert. Wo keine verzeichnet ist, sind die Felder null – nichts wird aufgefüllt. Es werden nur veröffentlichte Daten ausgeliefert: nie Entwürfe, Vorschläge oder irgendetwas über Personen.

Schlüssel

Anonyme Anfragen brauchen nichts. Für ein höheres Limit fordern Sie einen API-Schlüssel an und senden ihn als Bearer-Token:

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

Ein falscher oder widerrufener Schlüssel wird mit 401 beantwortet – er wird nie stillschweigend als anonym behandelt. Schlüssel sind für Server und Werkzeuge: Legen Sie keinen auf einer Webseite ab, wo ihn jeder lesen kann.

Schlüssel werden auf Anfrage von Hand vergeben.

Ratenbegrenzung

  • Ohne Schlüssel: 60 Anfragen pro Minute für jede Adresse.
  • Mit Schlüssel: ein eigenes Kontingent, 600 pro Minute, sofern nichts anderes vereinbart ist.
  • Über dem Limit lautet die Antwort 429 mit einem Retry-After-Header (Wartezeit in Sekunden). Jede Antwort enthält X-RateLimit-Limit und X-RateLimit-Remaining.

Adressen werden in einem Cache gezählt und nie gespeichert. Die Nutzung eines Schlüssels wird pro Tag gezählt – eine Zahl, mehr nicht.

Namensnennung

Jede Antwort enthält ein attribution-Objekt. Bitte verlinken Sie überall dort, wo Sie unsere Daten zeigen, zurück auf 35mm.org – die url eines Films, Entwicklers oder einer Zeit verweist auf ihre Seite – und zeigen Sie die Quelle jeder Zeit mit an: Eine Entwicklungszeit ohne ihre Quelle ist nur eine Zahl.

Die Daten haben noch keine angegebene Lizenz. Verlinken Sie zurück, behalten Sie die Quelle jeder Zeit bei und fragen Sie, wenn Sie unsicher sind.

Endpunkte

Alle sind GET. Die Beispiele unten sind echte Antworten für einen kleinen Testkatalog, keine Produktivdaten.

GET/films

Filme von A bis Z, jeweils mit Hersteller, Formaten und Anzahl der veröffentlichten Zeiten.

curl "https://www.35mm.org/api/public/v1/films?manufacturer=ilford"
Parameter
ParameterBedeutung
qDen Namen oder Hersteller suchen, Satzzeichen ignorierend: hp5, ilford hp5.
manufacturerDer Slug eines Herstellers, etwa ilford.
formatDer Slug eines Formats, etwa 135 oder 120.
processDer Prozess: bw, c41, e6, ecn2 …
typeDie Art des Films: bw_negative, color_negative, color_reversal …
still_made1 für Filme, die noch in Produktion sind, 0 für die übrigen.
has_times1 für Filme mit veröffentlichter Zeit, 0 für die ohne.
page, per_pageSiehe Seitenaufteilung unten.
Beispielantwort
{
    "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}

Ein Film mit seiner Spezifikation und jeder veröffentlichten Entwicklungszeit.

curl "https://www.35mm.org/api/public/v1/films/ilford-hp5-plus"
Beispielantwort
{
    "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

Entwickler und andere Chemie.

curl "https://www.35mm.org/api/public/v1/developers?manufacturer=ilford"
Parameter
ParameterBedeutung
qDen Namen oder Hersteller suchen.
manufacturerDer Slug eines Herstellers.
typeDie Art der Chemie: bw_developer, c41_kit, fixer …
still_made1 für die noch in Produktion befindlichen, 0 für die übrigen.
page, per_pageSiehe Seitenaufteilung unten.
Beispielantwort
{
    "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}

Ein Entwickler mit seinen Verdünnungen und den Filmen, für die er veröffentlichte Zeiten hat.

curl "https://www.35mm.org/api/public/v1/developers/ilford-id-11"
Beispielantwort
{
    "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

Veröffentlichte Zeiten suchen. Eine Umspulung ohne eigene Zeiten antwortet mit denen ihres Ausgangsfilms, gekennzeichnet mit inherited_from.

curl "https://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
Parameter
ParameterBedeutung
filmDer Slug eines Films.
developerDer Slug eines Entwicklers.
dilutionDie Bezeichnung einer Verdünnung wie veröffentlicht: Stock, 1+1 …
eiDer Belichtungsindex, mit dem der Film belichtet wurde.
temperatureDie Temperatur in °C.
formatDas Format, für das die Zeit gilt: 135, 120, sheet oder any.
page, per_pageSiehe Seitenaufteilung unten.
Beispielantwort
{
    "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"
    }
}

Eine Entwicklungszeit

Die Felder einer Entwicklungszeit
FeldBedeutung
time_seconds, timeDie Zeit in ganzen Sekunden und als m:ss.
ei, temperature_cDer Belichtungsindex und die Temperatur in °C, für die die Zeit gilt.
sourceImmer vorhanden: type (manufacturer_datasheet, own_test, third_party, community), title und url wie gespeichert – null, wo keine verzeichnet ist.
confidenceverified, community, unverified oder disputed: wie weit die Zeit anhand ihrer Quelle geprüft wurde.
inherited_fromDer Slug des Ausgangsfilms, wenn eine Umspulung seine Zeiten übernimmt, sonst null.

Seitenaufteilung

Listen sind seitenweise mit page und per_page abrufbar (50 standardmäßig, höchstens 100). links enthält die Adressen first, last, prev und next – null, wo es keine gibt – und meta enthält current_page, last_page, per_page, from, to und total. Folgen Sie links.next, bis es null ist.

Caching

Antworten tragen ETag und Last-Modified sowie Cache-Control: public, max-age=300. Senden Sie den ETag in If-None-Match zurück, und eine unveränderte Antwort liefert 304 ohne Inhalt – sie zählt trotzdem als Anfrage. Bitte cachen Sie auch auf Ihrer Seite: Der Katalog ändert sich nicht im Minutentakt.

Browser auf jeder Website dürfen diese Routen lesen (CORS: GET von jedem Ursprung).

Fehler

Fehler haben eine einheitliche Form, mit details bei einem abgelehnten Parameter:

{
    "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."] }
    }
}
Fehler
HTTPcodeBedeutung
401invalid_api_keyDer Schlüssel ist falsch oder wurde widerrufen.
404not_foundKein Film oder Entwickler mit diesem Slug.
405method_not_allowedDie API ist nur lesend: Verwenden Sie GET.
422invalid_parameterEin Parameter hat keinen gültigen Wert.
429rate_limitedZu viele Anfragen: Warten Sie die Sekunden aus Retry-After ab oder fordern Sie einen Schlüssel an.

OpenAPI

Die gesamte API ist in einer OpenAPI-3.1-Datei beschrieben: /api/public/v1/openapi.json. Importieren Sie sie in Postman, Insomnia oder einen Codegenerator.

Eine Zeitkarte einbetten

Blogs und Foren können eine Entwicklungszeit als kleine Karte zeigen: Film, Entwickler, Verdünnung, Empfindlichkeit, Temperatur, die Zeit und ihre Quelle, mit einem Link zurück auf 35mm.org. Es ist eine schlichte Seite – keine Cookies, keine Skripte, nichts von anderen Websites geladen – und dafür gemacht, in einen Frame eingebettet zu werden.

<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>
Parameter
ParameterBedeutung
film, developerDie Slugs des Films und des Entwicklers.
dilution, ei, tempAuf eine Zeit eingrenzen. Wird er weggelassen, wird die Zeit bei Nennempfindlichkeit gezeigt.
idOder eine Zeit über ihre ID, aus der API.
themelight oder dark. Wird er weggelassen, folgt die Karte dem Farbschema des Lesers.
langen, pl oder uk.

Passt keine veröffentlichte Zeit, sagt die Karte das und verlinkt auf den Film – sie zeigt nie eine ungefähre Übereinstimmung. Die Schaltfläche „Einbetten“ auf jeder Seite Film × Entwickler erzeugt den Code für Sie, mit Vorschau.

Wir zählen, wie oft eine Karte angezeigt wird, pro Tag, pro Website (der Host der Seite, auf der sie steht, nichts Längeres) und pro Kombination. Keine Cookies, keine Adressen.