---
title: "Import Place From Image"
method: POST
path: "/api/v1/places/import-from-image"
tags: ["places"]
---

# Import Place From Image

`POST /api/v1/places/import-from-image`

## Request

- Base URL: `https://yondry.app` (the document declares no server; this is the origin it was published from)
- URL: `https://yondry.app/api/v1/places/import-from-image`
- Auth: HTTP bearer

Extract place data from an uploaded image using Claude Sonnet vision.

Accepts multipart/form-data with a single "image" field. The file is
read entirely into memory (max 10 MB). Claude vision extracts place
names, addresses, and coordinates; high/medium confidence places are
then verified against Google Places.

If at least one place is resolved, a Place + PlaceSource record are
saved immediately and saved_place_id is set in the response.
Unresolved results are returned as-is for the client to confirm.

Raises:
    413 if the Content-Length header or actual body exceeds 10 MB.
    422 if the media type is not image/jpeg, image/png, image/gif,
        or image/webp.

## Response `200`

Successful Response

- UnfurlResult: Structured result from the link unfurl pipeline. Includes enough data for the mobile app to show a confirmation card before the user commits to saving the place. `resolved` is True when a Google Places ID was found and the full Places API record has been loaded; False means we only have whatever was in the page metadata or AI extraction. `paywalled` is True when the pipeline detected a paywall / subscriber gate and could not extract meaningful place data. `extracted_places` is populated when the AI step found more than one distinct place in the page content, enabling the multi-place checklist UI. Empty list otherwise.
  - `source_url` string, required
  - `resolved` boolean, required
  - `paywalled` boolean
  - `name` string, nullable
  - `address` string, nullable
  - `lat` number, nullable
  - `lon` number, nullable
  - `category` string, nullable
  - `notes` string, nullable
  - `thumbnail_url` string, nullable
  - `caption_excerpt` string, nullable
  - `google_place_id` string, nullable
  - `saved_place_id` string, nullable
  - `extracted_places` PlaceData[]
    - `name` string, required
    - `address` string, nullable
    - `lat` number, nullable
    - `lon` number, nullable
    - `category` string, nullable
    - `notes` string, nullable
    - `google_place_id` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/yondry/apis/yondry-api.md) · [All operations](https://skmtc.dev/yondry/apis/yondry-api/llms.txt) · [OpenAPI document](https://skmtc.dev/yondry/apis/yondry-api/revisions/d2c213cea95b?raw)
