OpenStreetMap Changesets API

Changeset management for grouped edits

Operations 5

PUT /changeset/create Create a changeset #
GET /changeset/{id} Get changeset details #
PUT /changeset/{id} Update changeset tags #
PUT /changeset/{id}/close Close a changeset #
POST /changeset/{id}/upload Upload an OsmChange document #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/openstreetmap-changesets-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

openstreetmap-changesets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: OpenStreetMap API v0.6 Capabilities Changesets API
  description: The OpenStreetMap main API v0.6 provides CRUD operations for map data editing including nodes, ways, relations, changesets, and notes. Requires OAuth 2.0 authentication for write operations. Maximum bounding box query area is 0.25 square degrees. Returns XML or JSON. Intended for editing, not high-volume read access.
  version: 0.6.0
  contact:
    name: OpenStreetMap Foundation
    url: https://osmfoundation.org/
  license:
    name: ODbL 1.0 (map data) / CC BY-SA 2.0 (tiles)
    url: https://www.openstreetmap.org/copyright
servers:
- url: https://api.openstreetmap.org/api/0.6
  description: OpenStreetMap production API
- url: https://master.apis.dev.openstreetmap.org/api/0.6
  description: OSM development/sandbox API
security:
- {}
- OAuth2:
  - read_prefs
  - write_api
  - write_notes
tags:
- name: Changesets
  description: Changeset management for grouped edits
paths:
  /changeset/create:
    put:
      operationId: createChangeset
      summary: Create a changeset
      description: Create a new changeset to group editing operations.
      tags:
      - Changesets
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: string
              description: OSM XML with changeset tags (must include created_by and comment)
      responses:
        '200':
          description: ID of the created changeset
          content:
            text/plain:
              schema:
                type: integer
  /changeset/{id}:
    get:
      operationId: getChangeset
      summary: Get changeset details
      description: Retrieve metadata for a changeset including tags, timestamps, and bounding box.
      tags:
      - Changesets
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      - name: include_discussion
        in: query
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Changeset details
          content:
            application/xml:
              schema:
                type: string
            application/json:
              schema:
                $ref: '#/components/schemas/Changeset'
    put:
      operationId: updateChangeset
      summary: Update changeset tags
      description: Modify the tags of an open changeset (must be the owner).
      tags:
      - Changesets
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: string
      responses:
        '200':
          description: Updated changeset
  /changeset/{id}/close:
    put:
      operationId: closeChangeset
      summary: Close a changeset
      description: Close an open changeset (no more edits may be added after this).
      tags:
      - Changesets
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: Empty response on success
        '409':
          description: Changeset already closed or owned by another user
  /changeset/{id}/upload:
    post:
      operationId: uploadChangeset
      summary: Upload an OsmChange document
      description: 'Upload a batch of creates, modifies, and deletes as an OsmChange XML document. Atomic: either all operations succeed or none are applied.'
      tags:
      - Changesets
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      requestBody:
        required: true
        content:
          application/xml:
            schema:
              type: string
              description: OsmChange XML document with create/modify/delete sections
      responses:
        '200':
          description: diffResult XML showing old and new IDs for all objects
          content:
            application/xml:
              schema:
                type: string
components:
  schemas:
    Changeset:
      type: object
      properties:
        id:
          type: integer
          format: int64
        created_at:
          type: string
          format: date-time
        closed_at:
          type: string
          format: date-time
        open:
          type: boolean
        user:
          type: string
        uid:
          type: integer
        min_lat:
          type: number
        min_lon:
          type: number
        max_lat:
          type: number
        max_lon:
          type: number
        changes_count:
          type: integer
        comments_count:
          type: integer
        tags:
          type: object
          additionalProperties:
            type: string
  securitySchemes:
    OAuth2:
      type: oauth2
      description: OAuth 2.0 — required for write operations
      flows:
        authorizationCode:
          authorizationUrl: https://www.openstreetmap.org/oauth2/authorize
          tokenUrl: https://www.openstreetmap.org/oauth2/token
          scopes:
            read_prefs: Read user preferences
            write_prefs: Modify user preferences
            write_diary: Create diary entries
            write_api: Modify the map (nodes, ways, relations, changesets)
            read_gpx: Read private GPS traces
            write_gpx: Upload GPS traces
            write_notes: Create, comment on, and close notes
externalDocs:
  description: OSM API v0.6 Wiki
  url: https://wiki.openstreetmap.org/wiki/API_v0.6