빠른 시작
현상액별 필름의 발표된 시간을 요청할 수 있습니다. 모든 것은 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). |
| confidence | verified, 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."] }
}
}
| HTTP | code | 의미 |
|---|---|---|
| 401 | invalid_api_key | 키가 잘못되었거나 폐기되었습니다. |
| 404 | not_found | 해당 슬러그의 필름이나 현상액이 없습니다. |
| 405 | method_not_allowed | 이 API는 읽기 전용입니다. GET을 사용하세요. |
| 422 | invalid_parameter | 매개변수가 유효한 값이 아닙니다. |
| 429 | rate_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로 시간 하나를 지정합니다. |
| theme | light 또는 dark. 생략하면 카드는 독자의 색상 구성표를 따릅니다. |
| lang | en, pl 또는 uk. |
일치하는 발표된 시간이 없으면 카드는 그 사실을 알리고 필름으로 연결합니다. 비슷한 것을 보여 주는 일은 없습니다. 필름 × 현상액 페이지의 삽입 버튼이 미리보기와 함께 코드를 만들어 줍니다.
카드가 표시된 횟수를 날짜별, 사이트별(카드가 있는 페이지의 호스트만), 조합별로 집계합니다. 쿠키도 주소 저장도 없습니다.