본문으로 건너뛰기

35mm.org 데이터 API

필름, 현상액, 현상 시간을 JSON으로 제공하며 모든 시간에 출처 데이터시트나 차트가 붙어 있습니다. 읽기 전용이고 시작하는 데 키가 필요 없습니다.

빠른 시작 OpenAPI

빠른 시작

현상액별 필름의 발표된 시간을 요청할 수 있습니다. 모든 것은 https://www.35mm.org/api/public/v1 아래에 있으며, 응답은 snake_case 키와 UTC 기준 ISO 8601 날짜를 쓰는 JSON입니다.

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

각 시간에는 출처가 따라옵니다. 그 종류, 제목, 저장된 주소입니다. 기록이 없는 곳은 필드가 null이며 아무것도 채우지 않습니다. 발표된 데이터만 제공하며 초안, 제안, 사람에 관한 정보는 절대 제공하지 않습니다.

키

익명 요청에는 아무것도 필요하지 않습니다. 더 높은 한도가 필요하면 API 키를 요청하고 베어러 토큰으로 보내세요.

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

잘못되었거나 폐기된 키에는 401로 응답하며, 조용히 익명으로 취급하지 않습니다. 키는 서버와 도구용입니다. 누구나 읽을 수 있는 웹 페이지에 넣지 마세요.

키는 요청에 따라 직접 발급합니다.

요청 제한

  • 키가 없으면 주소당 분당 60건의 요청.
  • 키가 있으면 키별 한도로, 달리 합의하지 않는 한 분당 600건입니다.
  • 한도를 넘으면 Retry-After 헤더(기다릴 초)와 함께 429로 응답합니다. 모든 응답에 X-RateLimit-Limit와 X-RateLimit-Remaining가 포함됩니다.

주소는 캐시에서 집계되며 저장되지 않습니다. 키 사용량은 하루 단위로 집계하는 숫자일 뿐입니다.

출처 표시

모든 응답에는 attribution 객체가 있습니다. 우리 데이터를 보여 주는 곳마다 35mm.org로 링크하고(필름, 현상액, 시간의 url은 해당 페이지를 가리킵니다) 각 시간의 출처도 함께 표시해 주세요. 출처 없는 현상 시간은 그저 숫자입니다.

이 데이터에는 아직 명시된 라이선스가 없습니다. 링크를 걸고 각 시간의 출처를 함께 표시하며, 확실하지 않으면 문의하세요.

엔드포인트

모두 GET입니다. 아래 예시는 소규모 테스트 카탈로그의 실제 응답이며 운영 데이터가 아닙니다.

GET/films

필름을 알파벳순으로, 각각 제조사, 포맷, 발표된 시간 수와 함께.

curl "https://www.35mm.org/api/public/v1/films?manufacturer=ilford"
매개변수
매개변수의미
q이름이나 제조사를 구두점을 무시하고 검색합니다: hp5, ilford hp5.
manufacturer제조사의 슬러그, 예: ilford.
format포맷의 슬러그, 예: 135 또는 120.
process처리 방식: bw, c41, e6, ecn2 …
type필름의 종류: bw_negative, color_negative, color_reversal …
still_made현재 생산 중인 필름은 1, 나머지는 0.
has_times발표된 시간이 있는 필름은 1, 없는 것은 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이름이나 제조사로 검색합니다.
manufacturer제조사의 슬러그.
type약품의 종류: bw_developer, c41_kit, fixer …
still_made현재 생산 중인 것은 1, 나머지는 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"
매개변수
매개변수의미
film필름의 슬러그.
developer현상액의 슬러그.
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시간(정수 초와 m:ss 형식).
ei, temperature_c그 시간이 해당하는 노출 지수와 온도(°C).
source항상 존재: type(manufacturer_datasheet, own_test, third_party, community), title, url(저장된 값, 기록이 없으면 null).
confidenceverified, community, unverified, disputed: 그 시간이 출처와 얼마나 대조되었는지.
inherited_from재감기 제품이 시간을 상속하는 경우 원래 제품의 슬러그, 아니면 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해당 슬러그의 필름이나 현상액이 없습니다.
405method_not_allowed이 API는 읽기 전용입니다. GET을 사용하세요.
422invalid_parameter매개변수가 유효한 값이 아닙니다.
429rate_limited요청이 너무 많습니다. Retry-After 초만큼 기다리거나 키를 요청하세요.

OpenAPI

API 전체는 OpenAPI 3.1 파일에 설명되어 있습니다: /api/public/v1/openapi.json. Postman, Insomnia, 코드 생성기로 가져올 수 있습니다.

시간 카드 삽입

블로그와 포럼에서는 현상 시간 하나를 작은 카드로 표시할 수 있습니다. 필름, 현상액, 희석, 감도, 온도, 시간, 출처가 있고 35mm.org로 가는 링크가 붙습니다. 쿠키도 스크립트도 다른 사이트에서 불러오는 것도 없는 단순한 페이지로, 프레임에 삽입하도록 만들어졌습니다.

<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, developer필름과 현상액의 슬러그.
dilution, ei, temp하나의 시간으로 좁힙니다. 생략하면 공칭 감도의 시간이 표시됩니다.
id또는 API의 id로 시간 하나를 지정합니다.
themelight 또는 dark. 생략하면 카드는 독자의 색상 구성표를 따릅니다.
langen, pl 또는 uk.

일치하는 발표된 시간이 없으면 카드는 그 사실을 알리고 필름으로 연결합니다. 비슷한 것을 보여 주는 일은 없습니다. 필름 × 현상액 페이지의 삽입 버튼이 미리보기와 함께 코드를 만들어 줍니다.

카드가 표시된 횟수를 날짜별, 사이트별(카드가 있는 페이지의 호스트만), 조합별로 집계합니다. 쿠키도 주소 저장도 없습니다.