Send coordinates. Get back what the street looked like, in words.
michiyomi is open data: 1,914,490 public street photos of Tokyo, each described by AI. Query it by coordinate, street or town block through a REST API and an MCP server. The descriptions themselves are in Japanese.
- No sign-up, no API key
- Read-only
- Words under CC BY 4.0 (no credit needed in answers)
- Observation text in Japanese
Quickstart
Get the three nearest photos within 150 m of the Ginza 4-chome crossing (latitude 35.6717, longitude 139.7647). No key needed.
{
"snapshot": "2026-09-13-r2",
"data_language": "ja",
"license": { "id": "LicenseRef-michiyomi-layered", "attribution_en": "Source: michiyomi (michiyomi.dev), from Mapillary…", … },
"count": 3,
"results": [
{
"id": "964535250779795",
"distance_m": 3,
"capture_year": 2019,
"ward": "中央区",
"generation": { "id": "gen1-codex", … },
"summary": "施設: 一般道路 / 歩道: 左=あり(分離歩道,5m), 右=あり(分離歩道,4m), 有効幅約4m, 点字ブロックあり, 車道幅約12m / …",
"image_page": "https://www.mapillary.com/app/?pKey=964535250779795"
},
… 2 more
]
}
2019 3m 施設: 一般道路 / 歩道: 左=あり(分離歩道,5m), 右=あり(分離歩道,…
2018 4m 施設: 一般道路 / 歩道: 左=あり(分離歩道,3m), 右=あり(分離歩道,…
2018 6m 施設: 一般道路 / 歩道: 左=あり(分離歩道,3.5m), 右=あり(分離歩…
2019 3m 施設: 一般道路 / 歩道: 左=あり(分離歩道,5m), 右=あり(分離歩道,…
2018 4m 施設: 一般道路 / 歩道: 左=あり(分離歩道,3m), 右=あり(分離歩道,…
2018 6m 施設: 一般道路 / 歩道: 左=あり(分離歩道,3.5m), 右=あり(分離歩…
{
"count": 2,
"years": [2018, 2019],
"scenes": [
{
"id": "964535250779795",
"distance_m": 3,
"capture_year": 2019,
"coordinate_role": "image_capture_position",
"summary": "施設: 一般道路 / 歩道: 左=あり(分離歩道,5m), 右=あり(分離歩道,4m), 有効幅約4m, 点字ブロックあり, 車道幅約12m / …"
},
… 1 more
]
}
Each description reflects the year the photo was taken (capture_year). Widths and similar numbers are estimates from the photo, not measurements. See Before you rely on it.
Next: check coverage, then read the content
- Check what was recordedHow many photos exist near the point, and from which years. Zero means nobody photographed there, not that nothing is there.
curl "https://michiyomi.dev/v1/coverage?lat=35.6717&lon=139.7647"
- Find nearby photosAs in the quickstart above. Nearest first, with a summary, the capture year and a link to the source photo.
- Read one record in fullUse
includeto choose the capture record (metadata), computed values (machine) and the AI reading (analysis).curl "https://michiyomi.dev/v1/scenes/964535250779795?include=metadata,machine,analysis" - Look at streets, town blocks and changesFrom the same point, read the street and town-block kartes and the verified changes over time.
curl "https://michiyomi.dev/v1/streets/nearby?lat=35.6717&lon=139.7647" curl "https://michiyomi.dev/v1/areas/at?lat=35.6717&lon=139.7647" curl "https://michiyomi.dev/v1/changes/nearby?lat=35.6717&lon=139.7647&radius_m=500"
Every endpoint and parameter is in the API reference.
Three ways in
All three run on the same public data.
For bulk analysis, use the Hugging Face dataset (Parquet) of the same release.
Japanese text, English interface
Field names, the OpenAPI definition (openapi.en.yaml), MCP tool definitions and these pages are in English. The observations themselves (summary, the values inside analysis, street and area kartes, change evidence) are in Japanese, and data_language is "ja" on every response.
- When you quote a record, keep the Japanese source text. If you translate it, label it as a translation and record the method and date.
- Keep image IDs as strings. Converting them to numbers can lose digits.
Before you rely on it
- State the capture year. Every record has
capture_year. Do not present a 2019 description as the current state. - Treat numbers as estimates. Widths and lane counts are estimated from one image, with a confidence label. They are not survey measurements, and confidence is the model's own judgement, not measured accuracy.
- Zero means not recorded. It does not mean nothing is there. Call
coveragefirst. - Do not fill in unknowns. The AI keeps three answers apart: none (absent from what the photo shows), unknown (in view but not decidable) and outside the frame. Keep them apart too.
- Coordinates are where the photo was taken, not where an object stands or where an entrance is.
- Generations are provenance labels, not quality rankings. Each record says which model family wrote it (
generation,model). - Changes are the ones that survived refutation. 3,618 changes were kept after a separate AI session tried to refute them (rebuilt in October 2026 with photos matched by position and heading). That is not independent third-party verification, and the share that survived is not an accuracy rate.
The detailed guide: Reading the data (layers, generations, confidence, coverage, kartes, changes, and how often the AI agrees with itself when it reads the same photo twice).
License and attribution
Observation data (text, structured data, changes over time) is under CC BY 4.0. No credit or logo is needed when you use it in AI answers, analyses or app displays, or quote individual records, and share-alike is not required. Show the attribution only when you redistribute records as data (files, databases, APIs for others). The earlier CC BY-SA 4.0 grant remains valid.
Attribution for redistribution
This is license.attribution_en in scene responses.
What keeps its original conditions
- Coordinates, capture times and image IDs are Mapillary reference data: free per record, but michiyomi does not license them for bulk redistribution.
- API responses do not contain photos. If you show one, credit its contributor (a link to
image_pageis enough) and CC BY-SA 4.0. - Streets and town blocks are an OpenStreetMap derivative database (ODbL 1.0). Public apps that build in street lookup, and bulk use, need “© OpenStreetMap contributors”.
- School locations come from National Land Numerical Information P29; town-block boundaries and population from the 2020 census (e-Stat).
- The language model OddEye is a separate release under Apache-2.0. The public data was not made with it.
Questions and removal requests (people, house nameplates or license plates in photos): contact@michiyomi.dev. You can also ask Mapillary to remove a source photo. Details: License and attribution.
Terms in short
- Price and sign-up
- Free. No sign-up and no API key.
- What you can do
- Read only. There are no write endpoints (GET only, except MCP and one POST search).
- Rate limits
- Per IP address: 300 REST requests and 120 MCP requests (
/mcp) per 60 seconds. Over the limit you get429withretry-after: 60. Scenery search by impression (/explore/mcp) allows 20 searches per minute. - Format
- JSON (UTF-8). Observation text is Japanese.
- From the browser
- CORS is open to all origins (
access-control-allow-origin: *). - License
- Observation data under CC BY 4.0; credit only when redistributing as data (details).
- Uptime
- No guarantee (no SLA).
- Bulk analysis
- The API is for nearby lookups. For everything at once, use the Parquet files on Hugging Face.
What you will not find
Knowing these up front prevents most misreadings.
- Anywhere outside TokyoCoverage is the Tokyo Metropolis only (23 wards, Tama area, islands).
- Current conditionsDescriptions reflect when each photo was taken. Nothing is real time.
- MeasurementsWidths and lane counts are estimates from one photo, with confidence labels.
- Places nobody photographedZero results mean no photos, not an empty street.
- The photos themselvesResponses link to Mapillary through
image_pageinstead. - PaginationNearby searches return at most 50 records. Move the center or radius to cover more.
- English observation textObservations are Japanese only. Field names and definitions are English.
- An uptime guaranteeThere is no SLA. The service may go down.
More
| Page | What it covers |
|---|---|
| Reading the data | The three layers, generations, confidence, none versus unknown, coverage, kartes, changes, stability |
| License and attribution | Current conditions and attribution texts ready to copy |
| The OddEye model | The street-reading model released on 2026-10-03 |
| Whitepaper | Design principles behind the data |
| Development history | When and from what michiyomi was built |