快速入门
查询某款胶片在某种显影液中的公开时间。一切都在 https://www.35mm.org/api/public/v1 下;响应为 JSON,键使用 snake_case,日期为 UTC 的 ISO 8601 格式。
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。 |
| manufacturer | 厂商的 slug,例如 ilford。 |
| format | 画幅的 slug,例如 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 | 厂商的 slug。 |
| 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 | 胶片的 slug。 |
| developer | 显影液的 slug。 |
| 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 | 重新分装沿用其时间时,为母款胶片的 slug,否则为 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 | 没有该 slug 的胶片或显影液。 |
| 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。它是一个纯页面——没有 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, developer | 胶片和显影液的 slug。 |
| dilution, ei, temp | 缩小到一条时间。省略时显示标称感光度下的时间。 |
| id | 或通过 API 中的 id 指定一条时间。 |
| theme | light 或 dark。省略时,卡片跟随读者的配色方案。 |
| lang | en、pl 或 uk。 |
如果没有匹配的公开时间,卡片会如实说明并链接到胶片页面——绝不会显示相近的匹配。任何胶片×显影液页面上的“嵌入”按钮都会为你生成代码,并附预览。
我们按天、按网站(所在页面的主机名,不更长)和按组合统计卡片的显示次数。没有 Cookie,没有地址。