Vai al contenuto

L’API dei dati di 35mm.org

Pellicole, rivelatori e tempi di sviluppo in JSON: ogni tempo con la scheda tecnica o la tabella da cui è stato letto. Sola lettura, e non serve una chiave per iniziare.

Avvio rapido OpenAPI

Avvio rapido

Chiedi i tempi pubblicati di un film in un rivelatore. Tutto sta sotto https://35mm.org/api/public/v1; le risposte sono JSON con chiavi in snake_case e date ISO 8601 in UTC.

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

Ogni tempo arriva con la sua fonte: di che tipo è, il suo titolo e il suo indirizzo come memorizzato. Dove non ne è registrata nessuna i campi sono null: nulla viene riempito. Si servono solo dati pubblicati: bozze, suggerimenti e qualsiasi cosa riguardi persone non vengono mai serviti.

Chiavi

Le richieste anonime non richiedono nulla. Per un limite più alto, chiedi una chiave API e inviala come bearer token:

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

A una chiave sbagliata o revocata si risponde con 401: non viene mai trattata silenziosamente come anonima. Le chiavi sono per server e strumenti: non metterne una in una pagina web, dove chiunque può leggerla.

Le chiavi vengono rilasciate a mano, su richiesta.

Limiti di frequenza

  • Senza chiave: 60 richieste al minuto per ogni indirizzo.
  • Con una chiave: la sua quota, 600 al minuto salvo diverso accordo.
  • Oltre il limite la risposta è 429 con un’intestazione Retry-After (secondi da attendere). Ogni risposta porta X-RateLimit-Limit e X-RateLimit-Remaining.

Gli indirizzi sono contati in una cache e mai memorizzati. L’uso di una chiave è contato per giorno: un numero, nient’altro.

Attribuzione

Ogni risposta ha un oggetto attribution. Per favore rimanda a 35mm.org ovunque mostri i nostri dati (l’url di un film, rivelatore o tempo punta alla sua pagina) e mostra con ciascun tempo la sua fonte: un tempo di sviluppo senza fonte è solo un numero.

I dati non hanno ancora una licenza dichiarata. Rimanda a noi, conserva la fonte di ogni tempo e chiedi se hai dubbi.

Endpoint

Sono tutte GET. Gli esempi qui sotto sono risposte reali per un piccolo catalogo di prova, non dati di produzione.

GET/films

Pellicole, dalla A alla Z, ciascuna con il produttore, i formati e il numero di tempi pubblicati.

curl "https://35mm.org/api/public/v1/films?manufacturer=ilford"
Parametri
ParametroSignificato
qCerca nel nome o nel produttore, ignorando la punteggiatura: hp5, ilford hp5.
manufacturerLo slug di un produttore, come ilford.
formatLo slug di un formato, come 135 o 120.
processIl processo: bw, c41, e6, ecn2 …
typeIl tipo di pellicola: bw_negative, color_negative, color_reversal …
still_made1 per le pellicole ancora in produzione, 0 per le altre.
has_times1 per le pellicole con un tempo pubblicato, 0 per quelle senza.
page, per_pageVedi la paginazione qui sotto.
Risposta di esempio
{
    "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 pellicola con le sue specifiche e ogni tempo di sviluppo pubblicato.

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

Rivelatori e altra chimica.

curl "https://35mm.org/api/public/v1/developers?manufacturer=ilford"
Parametri
ParametroSignificato
qCerca nel nome o nel produttore.
manufacturerLo slug di un produttore.
typeIl tipo di chimica: bw_developer, c41_kit, fixer …
still_made1 per quelli ancora in produzione, 0 per gli altri.
page, per_pageVedi la paginazione qui sotto.
Risposta di esempio
{
    "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 rivelatore con le sue diluizioni e i film per cui ha tempi pubblicati.

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

Cerca tra i tempi pubblicati. Un riavvolgimento senza tempi propri risponde con quelli della pellicola di origine, contrassegnati con inherited_from.

curl "https://35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
Parametri
ParametroSignificato
filmLo slug di un film.
developerLo slug di un rivelatore.
dilutionL’etichetta di una diluizione come pubblicata: Stock, 1+1 …
eiL’indice di esposizione a cui il film è stato esposto.
temperatureLa temperatura in °C.
formatIl formato per cui è il tempo: 135, 120, sheet o any.
page, per_pageVedi la paginazione qui sotto.
Risposta di esempio
{
    "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 tempo di sviluppo

I campi di un tempo di sviluppo
CampoSignificato
time_seconds, timeIl tempo in secondi interi, e come m:ss.
ei, temperature_cL’indice di esposizione e la temperatura in °C per cui è il tempo.
sourceSempre presente: type (manufacturer_datasheet, own_test, third_party, community), title e url come memorizzati: null dove non ne è registrato nessuno.
confidenceverified, community, unverified o disputed: quanto il tempo è stato verificato con la sua fonte.
inherited_fromLo slug della pellicola di origine quando un riavvolgimento ne prende i tempi, altrimenti null.

Paginazione

Gli elenchi sono paginati con page e per_page (50 di default, al massimo 100). links ha gli indirizzi first, last, prev e next, null dove non ce n’è, e meta ha current_page, last_page, per_page, from, to e total. Segui links.next finché non è null.

Cache

Le risposte portano ETag e Last-Modified e Cache-Control: public, max-age=300. Rimanda l’ETag in If-None-Match e una risposta invariata restituisce 304 senza corpo, ma conta comunque come richiesta. Per favore usa una cache anche dal tuo lato: il catalogo non cambia di minuto in minuto.

I browser di qualsiasi sito possono leggere queste rotte (CORS: GET da qualsiasi origine).

Errori

Gli errori hanno tutti la stessa forma, con details per un parametro rifiutato:

{
    "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."] }
    }
}
Errori
HTTPcodeSignificato
401invalid_api_keyLa chiave è sbagliata o è stata revocata.
404not_foundNessun film o rivelatore con quello slug.
405method_not_allowedL’API è in sola lettura: usa GET.
422invalid_parameterUn parametro non è un valore valido.
429rate_limitedTroppe richieste: attendi Retry-After secondi, oppure chiedi una chiave.

OpenAPI

L’intera API è descritta in un file OpenAPI 3.1: /api/public/v1/openapi.json. Importalo in Postman, Insomnia o in un generatore di codice.

Incorpora una scheda del tempo

Blog e forum possono mostrare un tempo di sviluppo come una piccola scheda: film, rivelatore, diluizione, sensibilità, temperatura, il tempo e la sua fonte, con un link a 35mm.org. È una pagina semplice, senza cookie, senza script, senza nulla caricato da altri siti, fatta per essere incorporata in un frame.

<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>
Parametri
ParametroSignificato
film, developerGli slug del film e del rivelatore.
dilution, ei, tempRestringi a un solo tempo. Se omesso, si mostra il tempo alla sensibilità nominale.
idOppure un tempo per il suo id, dall’API.
themelight o dark. Se omesso, la scheda segue lo schema di colori del lettore.
langen, pl o uk.

Se nessun tempo pubblicato corrisponde, la scheda lo dice e rimanda al film: non mostra mai una corrispondenza approssimativa. Il pulsante Incorpora su ogni pagina film × rivelatore genera il codice per te, con un’anteprima.

Contiamo quante volte una scheda viene mostrata, per giorno, per sito (l’host della pagina su cui si trova, nulla di più lungo) e per combinazione. Niente cookie, niente indirizzi.