/ REST API · https://api.osmpid.infs.ai
API Reference
A lightweight HTTP API for generating and validating persistent OpenStreetMap identifiers. All endpoints are read-only and require no authentication.
Demo service. Data comes from the public overpass-api.de instance and is subject to its fair use terms. Requests are throttled, so don't rely on this endpoint as an application backend.
Recursive child resolution — the child timestamp covers the
element's full descendant tree, not just its direct members. Resolving a
relation also inspects the nodes of its member ways, and nested relations underneath
them; visited elements are tracked, so a cyclic relation terminates. A large relation is
correspondingly expensive to validate.
GET /generate generation
Generate a fresh OSMPID for a given OSM element. The service resolves the current version and latest child timestamp from live OSM data.
Query parameters
| type* | node | way | relation | OSM element type. |
| id* | integer ≥ 1 | OSM numeric element id. |
| tags | string | Optional comma-separated tag list, URL-encoded. Pins semantic meaning (e.g. amenity%3Dcafe). |
Responses
200OSMPID generated successfully. Returns
GenerateResponse.404Referenced OSM object does not exist.
422Invalid query parameters.
GET https://api.osmpid.infs.ai/generate?type=node&id=2641352539&tags=amenity%3Dcafe
200 OK · application/json
{
"persistent_id": "node/2641352539@7;2026-03-12T10:15:00Z?amenity=cafe",
"element_type": "node",
"element_id": 2641352539,
"version": 7,
"latest_child_timestamp": null,
"tags": [
{
"key": "amenity",
"value": "cafe"
}
]
}GET /validate validation
Validate a stored OSMPID against current OSM state. Returns one of five outcomes — and a refreshed ID when the element has changed.
Query parameters
| id* | string | The OSMPID string, URL-encoded. |
Responses
200Validation complete. Returns
ValidationResult with a status field.422Malformed OSMPID — string failed to parse.
ValidationStatus values
unchanged
Version, children, and tags all match. changed
Element changed; a refreshed OSMPID is returned in persistent_id. deleted
Object is no longer visible in OSM. unknown
The type + id combination never existed. malformed
The ID string could not be parsed (HTTP 422).GET https://api.osmpid.infs.ai/validate?id=way%2F2641352539%407%3B2026-03-12T10%3A15%3A00Z
200 OK · application/json
{
"status": "unchanged",
"persistent_id": "way/2641352539@7;2026-03-12T10:15:00Z",
"element_type": "way",
"element_id": 2641352539,
"version": 7,
"latest_child_timestamp": "2026-03-12T10:15:00Z",
"changed_reason": null
}