File an upload
confirm_uploadStep two: the bytes are up, now file the media. A description is required — an entry with no words is not worth keeping. Pass the EXIF you parsed locally as structured fields. See learn('recipes/exif') for what each source value means.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| geo | No | Reverse-geocoded place. Normally you leave this out — send lat/lng and the server fills it. Kept separately from location_name. See learn('recipes/geocode'). | |
| lat | No | ||
| lng | No | ||
| exif | No | Any remaining EXIF fields, as JSON. | |
| credit | No | Required when provenance is 'reference'. | |
| source | No | Where this came in from, e.g. 'agent' or 'shortcut'. | |
| keywords | No | Space-separated search terms, in the traveller's language. | |
| media_id | Yes | From request_upload. (must not be empty) | |
| tz_offset | No | Minutes east of UTC at the place of capture (Tokyo 540, Paris 120). | |
| tz_source | No | Where tz_offset came from. 'assumed' means guessed from your own clock. See learn('recipes/exif'). | |
| provenance | No | 'reference' means someone else's picture and requires credit. | |
| description | Yes | What this shows. People read it — the traveller years from now, and friends who open the share link — so write it in the language the traveller speaks, not English. Be concrete: name the dish, the street, the light. (must not be empty) | |
| exif_source | No | ||
| orientation | No | EXIF Orientation, 1-8. | |
| location_name | No | What the traveller calls this place — a venue or landmark, not an administrative area. | |
| occurred_at_utc | No | Capture time, epoch milliseconds UTC. | |
| contributor_person_id | No | (must not be empty) |