Ir para o conteúdo

A API de dados do 35mm.org

Filmes, reveladores e tempos de revelação em JSON — cada tempo com a ficha técnica ou a tabela de onde foi lido. Somente leitura, e nenhuma chave é necessária para começar.

Início rápido OpenAPI

Início rápido

Peça os tempos publicados de um filme em um revelador. Tudo fica em https://www.35mm.org/api/public/v1; as respostas são JSON com chaves em snake_case e datas ISO 8601 em UTC.

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

Cada tempo vem com a sua fonte: de que tipo é, seu título e seu endereço como armazenado. Onde nenhuma está registrada, os campos são null — nada é preenchido. Só dados publicados são servidos: rascunhos, sugestões e qualquer coisa sobre pessoas nunca são.

Chaves

Requisições anônimas não precisam de nada. Para um limite maior, peça uma chave de API e envie-a como bearer token:

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

Uma chave errada ou revogada recebe 401 como resposta — nunca é tratada em silêncio como anônima. As chaves são para servidores e ferramentas: não ponha uma em uma página web, onde qualquer pessoa pode lê-la.

As chaves são emitidas à mão, sob pedido.

Limites de uso

  • Sem chave: 60 requisições por minuto para cada endereço.
  • Com chave: a cota dela, 600 por minuto, salvo acordo em contrário.
  • Passado o limite, a resposta é 429 com um cabeçalho Retry-After (segundos de espera). Toda resposta traz X-RateLimit-Limit e X-RateLimit-Remaining.

Os endereços são contados em um cache e nunca armazenados. O uso de uma chave é contado por dia — um número, nada mais.

Atribuição

Toda resposta tem um objeto attribution. Por favor, faça um link de volta para o 35mm.org onde quer que mostre nossos dados — a url de um filme, revelador ou tempo aponta para a página dele — e mostre a fonte de cada tempo junto: um tempo de revelação sem fonte é só um número.

Os dados ainda não têm uma licença declarada. Faça o link de volta, mantenha a fonte de cada tempo junto e pergunte se tiver dúvida.

Endpoints

Todas são GET. Os exemplos abaixo são respostas reais para um pequeno catálogo de teste, não dados de produção.

GET/films

Filmes, de A a Z, cada um com o fabricante, os formatos e o número de tempos publicados.

curl "https://www.35mm.org/api/public/v1/films?manufacturer=ilford"
Parâmetros
ParâmetroSignificado
qBusque no nome ou no fabricante, ignorando a pontuação: hp5, ilford hp5.
manufacturerO slug de um fabricante, como ilford.
formatO slug de um formato, como 135 ou 120.
processO processo: bw, c41, e6, ecn2 …
typeO tipo de filme: bw_negative, color_negative, color_reversal …
still_made1 para filmes ainda em produção, 0 para os demais.
has_times1 para filmes com tempo publicado, 0 para os sem.
page, per_pageVeja a paginação abaixo.
Exemplo de resposta
{
    "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}

Um filme com sua especificação e todos os tempos de revelação publicados.

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

Reveladores e outros químicos.

curl "https://www.35mm.org/api/public/v1/developers?manufacturer=ilford"
Parâmetros
ParâmetroSignificado
qBusque no nome ou no fabricante.
manufacturerO slug de um fabricante.
typeO tipo de químico: bw_developer, c41_kit, fixer …
still_made1 para os ainda em produção, 0 para os demais.
page, per_pageVeja a paginação abaixo.
Exemplo de resposta
{
    "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}

Um revelador com suas diluições e os filmes para os quais tem tempos publicados.

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

Busque tempos publicados. Um rebobinado sem tempos próprios responde com os do filme de origem, marcados com inherited_from.

curl "https://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
Parâmetros
ParâmetroSignificado
filmO slug de um filme.
developerO slug de um revelador.
dilutionO rótulo de uma diluição como publicado: Stock, 1+1 …
eiO índice de exposição em que o filme foi usado.
temperatureA temperatura em °C.
formatO formato para o qual o tempo vale: 135, 120, sheet ou any.
page, per_pageVeja a paginação abaixo.
Exemplo de resposta
{
    "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"
    }
}

Um tempo de revelação

Os campos de um tempo de revelação
CampoSignificado
time_seconds, timeO tempo em segundos inteiros, e como m:ss.
ei, temperature_cO índice de exposição e a temperatura em °C para os quais o tempo vale.
sourceSempre presente: type (manufacturer_datasheet, own_test, third_party, community), title e url como armazenados — null onde nenhum está registrado.
confidenceverified, community, unverified ou disputed: o quanto o tempo foi conferido com a sua fonte.
inherited_fromO slug do filme de origem quando um rebobinado usa os tempos dele, caso contrário null.

Paginação

As listas são paginadas com page e per_page (50 por padrão, no máximo 100). links traz os endereços first, last, prev e next — null onde não há — e meta traz current_page, last_page, per_page, from, to e total. Siga links.next até ser null.

Cache

As respostas trazem ETag, Last-Modified e Cache-Control: public, max-age=300. Devolva o ETag em If-None-Match e uma resposta inalterada retorna 304 sem corpo — ainda conta como requisição. Faça cache do seu lado também: o catálogo não muda de minuto em minuto.

Navegadores de qualquer site podem ler estas rotas (CORS: GET de qualquer origem).

Erros

Os erros têm todos a mesma forma, com details para um parâmetro recusado:

{
    "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."] }
    }
}
Erros
HTTPcodeSignificado
401invalid_api_keyA chave está errada ou foi revogada.
404not_foundNenhum filme ou revelador com esse slug.
405method_not_allowedA API é somente leitura: use GET.
422invalid_parameterUm parâmetro não é um valor válido.
429rate_limitedRequisições demais: espere Retry-After segundos, ou peça uma chave.

OpenAPI

A API inteira está descrita em um arquivo OpenAPI 3.1: /api/public/v1/openapi.json. Importe-o no Postman, no Insomnia ou em um gerador de código.

Incorpore um cartão de tempo

Blogs e fóruns podem mostrar um tempo de revelação como um pequeno cartão: filme, revelador, diluição, sensibilidade, temperatura, o tempo e a fonte, com um link de volta para o 35mm.org. É uma página simples — sem cookies, sem scripts, nada carregado de outros sites — feita para ser incorporada em um 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>
Parâmetros
ParâmetroSignificado
film, developerOs slugs do filme e do revelador.
dilution, ei, tempRestrinja a um só tempo. Se omitido, mostra-se o tempo na sensibilidade nominal.
idOu um tempo pelo seu id, da API.
themelight ou dark. Se omitido, o cartão segue o esquema de cores do leitor.
langen, pl ou uk.

Se nenhum tempo publicado corresponder, o cartão diz isso e leva ao filme — nunca mostra uma correspondência aproximada. O botão Incorporar em qualquer página filme × revelador gera o código para você, com uma prévia.

Contamos quantas vezes um cartão é exibido, por dia, por site (o host da página em que está, nada mais longo) e por combinação. Sem cookies, sem endereços.