/ 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 | relationOSM element type.
id*integer ≥ 1OSM numeric element id.
tagsstringOptional 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*stringThe 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
}