Skip to content
All examplesGeocoding

Geocode many addresses

POST /geocode/batch is the same search as GET /geocode/search, many times, in one request. The response is an array of arrays: index i is what search would return for query i. Blank strings stay in place as [] and are not billed.

curl -X POST "https://api.unmap.dev/geocode/batch" \
  -H "Authorization: Bearer $UNMAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"queries":["17 Ave SW Calgary","Springfield",""],"limit":1}'
[
  [{ "id": "", "name": "101 17 Avenue SW, Calgary", "layer": "address" }],
  [{ "id": "", "name": "Springfield", "layer": "locality" }],
  []
]

A request holds 1 to 100 queries. More than 100 is a 413. Shared controls only: the same lang, limit, layers, focus, region, and bbox as search. The client library chunks a longer list into requests of 100 and concatenates in input order.

Each non-blank query is one geocode increment, including a valid no-match. A 400, a 413, or a container failure increments nothing. If remaining monthly allowance is less than the number of non-blank queries, the whole request is refused.

This is not a background job. The file, if you have one, stays on your machine. For a CSV, unmap geocode csv is the client that already does this. The Batch geocoding page covers the CLI, the columns it adds, and why there is no job API today.