/ Documentation Search data →
Developer reference

HTTP API

Search and inspect datasets with JSON endpoints, then stream a filtered selection as CSV.

https://iamodi.com

Endpoints

POST endpoints accept JSON with content-type: application/json.

EndpointBody / queryReturns
POST/v1/searchquery, sources?, limit?, offset?Ranked datasets and suggested filters.
POST/list-sourcesNoneSources, dataset counts and freshness.
POST/source-catalogsrc, offset?, limit?One source's datasets.
POST/inspect-datasetsrc, dataflowID, max_examples?Dimensions and sample values.
POST/dimension-valuessrc, dataflowID, dimension, query?, paginationCodes and labels for one dimension.
POST/search-for-tagsrc, dataflowID, tag or tagsMatching codes across dimensions.
POST/dataflow-urlsrc, dataflowIDThe provider's dataset page.
POST/request-urlsrc, dataflowID, filters?The provider URL for a selection.
GET/dataset.csvQuery parametersFiltered CSV.

Search example

curl -X POST https://iamodi.com/v1/search \
  -H 'content-type: application/json' \
  -d '{"query":"unemployment Spain","limit":3}'

Filters

filters maps a dimension ID to one code, several codes, or a regular-expression pattern. Use the exact IDs and codes returned by /inspect-dataset.

ExampleSelects
{"geo":"ES"}One value
{"geo":["ES","FR"]}Several values
{"geo":"re:^ES\\d{3}$"}Codes or labels matching the expression after re:

Omitted dimensions are unfiltered. Unknown dimensions and codes return an error rather than silently widening the result.

CSV downloads

GET /dataset.csv requires src and dataflowID. Pass filters as URL-encoded JSON. Optional limit caps rows; check=1 validates the request without starting a download.

curl -G https://iamodi.com/dataset.csv \
  --data-urlencode src=ESTAT \
  --data-urlencode dataflowID=UNE_RT_A \
  --data-urlencode 'filters={"geo":["ES","FR"],"sex":"T"}' \
  -o data.csv
Large selections may be rejected by the provider. Add filters or use the returned provider_url.

Errors and limits

StatusMeaning
400Invalid request, dimension or code.
404Source or dataset not found.
413Selection is too large; narrow the filters.
429Rate limit or download capacity reached; retry shortly.
502 / 504The upstream provider failed or timed out.
503ODI is at capacity; retry shortly.

Keep automated use modest. JSON endpoints allow roughly 120 requests per minute per IP; CSV downloads have tighter concurrency limits.