Avvio rapido
Chiedi i tempi pubblicati di un film in un rivelatore. Tutto sta sotto https://www.35mm.org/api/public/v1; le risposte sono JSON con chiavi in snake_case e date ISO 8601 in UTC.
curl "https://www.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://www.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://www.35mm.org/api/public/v1/films?manufacturer=ilford"
| Parametro | Significato |
|---|---|
| q | Cerca nel nome o nel produttore, ignorando la punteggiatura: hp5, ilford hp5. |
| manufacturer | Lo slug di un produttore, come ilford. |
| format | Lo slug di un formato, come 135 o 120. |
| process | Il processo: bw, c41, e6, ecn2 … |
| type | Il tipo di pellicola: bw_negative, color_negative, color_reversal … |
| still_made | 1 per le pellicole ancora in produzione, 0 per le altre. |
| has_times | 1 per le pellicole con un tempo pubblicato, 0 per quelle senza. |
| page, per_page | Vedi 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://www.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://www.35mm.org/api/public/v1/developers?manufacturer=ilford"
| Parametro | Significato |
|---|---|
| q | Cerca nel nome o nel produttore. |
| manufacturer | Lo slug di un produttore. |
| type | Il tipo di chimica: bw_developer, c41_kit, fixer … |
| still_made | 1 per quelli ancora in produzione, 0 per gli altri. |
| page, per_page | Vedi 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://www.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://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
| Parametro | Significato |
|---|---|
| film | Lo slug di un film. |
| developer | Lo slug di un rivelatore. |
| dilution | L’etichetta di una diluizione come pubblicata: Stock, 1+1 … |
| ei | L’indice di esposizione a cui il film è stato esposto. |
| temperature | La temperatura in °C. |
| format | Il formato per cui è il tempo: 135, 120, sheet o any. |
| page, per_page | Vedi 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
| Campo | Significato |
|---|---|
| time_seconds, time | Il tempo in secondi interi, e come m:ss. |
| ei, temperature_c | L’indice di esposizione e la temperatura in °C per cui è il tempo. |
| source | Sempre presente: type (manufacturer_datasheet, own_test, third_party, community), title e url come memorizzati: null dove non ne è registrato nessuno. |
| confidence | verified, community, unverified o disputed: quanto il tempo è stato verificato con la sua fonte. |
| inherited_from | Lo 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."] }
}
}
| HTTP | code | Significato |
|---|---|---|
| 401 | invalid_api_key | La chiave è sbagliata o è stata revocata. |
| 404 | not_found | Nessun film o rivelatore con quello slug. |
| 405 | method_not_allowed | L’API è in sola lettura: usa GET. |
| 422 | invalid_parameter | Un parametro non è un valore valido. |
| 429 | rate_limited | Troppe 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://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>
| Parametro | Significato |
|---|---|
| film, developer | Gli slug del film e del rivelatore. |
| dilution, ei, temp | Restringi a un solo tempo. Se omesso, si mostra il tempo alla sensibilità nominale. |
| id | Oppure un tempo per il suo id, dall’API. |
| theme | light o dark. Se omesso, la scheda segue lo schema di colori del lettore. |
| lang | en, 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.