Перейти к содержимому

API данных 35mm.org

Плёнки, проявители и времена проявки в формате JSON — у каждого времени есть технический паспорт или таблица, из которых оно взято. Только чтение, и для начала ключ не нужен.

Быстрый старт OpenAPI

Быстрый старт

Запросите опубликованные времена плёнки в проявителе. Всё находится по адресу https://www.35mm.org/api/public/v1; ответы — JSON с ключами в snake_case и датами ISO 8601 в UTC.

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

Каждое время приходит с источником: его вид, название и адрес в том виде, в каком они хранятся. Если ничего не записано, поля равны null — ничего не подставляется. Отдаются только опубликованные данные: черновики, предложения и всё, что касается людей, — никогда.

Ключи

Анонимным запросам ничего не нужно. Для более высокого лимита запросите ключ API и отправляйте его как bearer-токен:

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

На неверный или отозванный ключ отвечают 401 — его никогда не принимают молча за анонимный. Ключи предназначены для серверов и инструментов: не помещайте его на веб-страницу, где его может прочитать любой.

Ключи выдаются вручную, по запросу.

Лимиты запросов

  • Без ключа: 60 запросов в минуту на адрес.
  • С ключом: собственный лимит, 600 в минуту, если не договорено иное.
  • При превышении лимита ответ — 429 с заголовком Retry-After (секунды ожидания). Каждый ответ содержит X-RateLimit-Limit и X-RateLimit-Remaining.

Адреса считаются в кэше и никогда не сохраняются. Использование ключа считается по дням — число, и ничего больше.

Указание авторства

В каждом ответе есть объект attribution. Пожалуйста, ставьте ссылку на 35mm.org везде, где показываете наши данные (url плёнки, проявителя или времени указывает на её страницу), и показывайте вместе с ними источник каждого времени: время проявки без источника — просто число.

Лицензия на данные пока не указана. Ставьте ссылку, сохраняйте источник каждого времени и спрашивайте, если не уверены.

Эндпоинты

Все они — GET. Примеры ниже — настоящие ответы для небольшого тестового каталога, а не рабочие данные.

GET/films

Плёнки от A до Z, у каждой — производитель, форматы и число опубликованных времён.

curl "https://www.35mm.org/api/public/v1/films?manufacturer=ilford"
Параметры
ПараметрЗначение
qПоиск по названию или производителю без учёта знаков препинания: hp5, ilford hp5.
manufacturerSlug производителя, например ilford.
formatSlug формата, например 135 или 120.
processПроцесс: bw, c41, e6, ecn2 …
typeВид плёнки: bw_negative, color_negative, color_reversal …
still_made1 для выпускаемых плёнок, 0 для остальных.
has_times1 для плёнок с опубликованным временем, 0 для остальных.
page, per_pageСм. «Постраничный вывод» ниже.
Пример ответа
{
    "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}

Одна плёнка с характеристиками и всеми опубликованными временами проявки.

curl "https://www.35mm.org/api/public/v1/films/ilford-hp5-plus"
Пример ответа
{
    "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

Проявители и прочая химия.

curl "https://www.35mm.org/api/public/v1/developers?manufacturer=ilford"
Параметры
ПараметрЗначение
qПоиск по названию или производителю.
manufacturerSlug производителя.
typeВид химии: bw_developer, c41_kit, fixer …
still_made1 для выпускаемых, 0 для остальных.
page, per_pageСм. «Постраничный вывод» ниже.
Пример ответа
{
    "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}

Один проявитель с разведениями и плёнками, для которых опубликованы времена.

curl "https://www.35mm.org/api/public/v1/developers/ilford-id-11"
Пример ответа
{
    "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

Поиск опубликованных времён. Перемотка без собственных времён отвечает временами исходной плёнки с пометкой inherited_from.

curl "https://www.35mm.org/api/public/v1/development-times?film=ilford-hp5-plus&developer=ilford-id-11&ei=400"
Параметры
ПараметрЗначение
filmSlug плёнки.
developerSlug проявителя.
dilutionНазвание разведения как опубликовано: Stock, 1+1 …
eiИндекс экспозиции, при котором оценивалась плёнка.
temperatureТемпература в °C.
formatФормат, для которого указано время: 135, 120, sheet или any.
page, per_pageСм. «Постраничный вывод» ниже.
Пример ответа
{
    "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"
    }
}

Время проявки

Поля времени проявки
ПолеЗначение
time_seconds, timeВремя в целых секундах и в виде м:сс.
ei, temperature_cИндекс экспозиции и температура в °C, для которых указано время.
sourceВсегда присутствует: type (manufacturer_datasheet, own_test, third_party, community), title и url в том виде, в каком они хранятся, — null, если ничего не записано.
confidenceverified, community, unverified или disputed: насколько время сверено с источником.
inherited_fromSlug исходной плёнки, если перемотка берёт её времена, иначе null.

Постраничный вывод

Списки разбиваются на страницы параметрами page и per_page (по умолчанию 50, не более 100). В links есть адреса first, last, prev и next — null, если их нет, — а в meta есть current_page, last_page, per_page, from, to и total. Переходите по links.next, пока он не станет null.

Кэширование

Ответы содержат ETag, Last-Modified и Cache-Control: public, max-age=300. Отправьте ETag обратно в If-None-Match, и неизменившийся ответ вернёт 304 без тела — он всё равно считается запросом. Пожалуйста, кэшируйте и у себя: каталог не меняется поминутно.

Браузеры на любом сайте могут читать эти маршруты (CORS: GET с любого источника).

Ошибки

Ошибки имеют единый вид, с details для отклонённого параметра:

{
    "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."] }
    }
}
Ошибки
HTTPcodeЗначение
401invalid_api_keyКлюч неверен или отозван.
404not_foundНет плёнки или проявителя с таким slug.
405method_not_allowedAPI только для чтения: используйте GET.
422invalid_parameterПараметр имеет недопустимое значение.
429rate_limitedСлишком много запросов: подождите Retry-After секунд или запросите ключ.

OpenAPI

Весь API описан в файле OpenAPI 3.1: /api/public/v1/openapi.json. Импортируйте его в Postman, Insomnia или генератор кода.

Встроить карточку времени

Блоги и форумы могут показывать одно время проявки в виде небольшой карточки: плёнка, проявитель, разведение, светочувствительность, температура, время и его источник со ссылкой на 35mm.org. Это простая страница — без cookie, скриптов и загрузок с других сайтов — созданная для встраивания во фрейм.

<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>
Параметры
ПараметрЗначение
film, developerSlug плёнки и slug проявителя.
dilution, ei, tempСузьте до одного времени. Если не указано, показывается время при номинальной светочувствительности.
idИли одно время по его id из API.
themelight или dark. Если не указано, карточка следует цветовой схеме читателя.
langen, pl или uk.

Если подходящего опубликованного времени нет, карточка сообщает об этом и ссылается на плёнку — приблизительное совпадение она не показывает никогда. Кнопка «Встроить» на любой странице «плёнка × проявитель» создаёт код за вас, с предпросмотром.

Мы считаем, как часто карточка показывается, по дням, по сайтам (по домену страницы, на которой она находится, и ничему длиннее) и по сочетаниям. Без cookie и адресов.