{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenStreetMap Places API — Businesses & POIs by Area",
    "description": "Businesses and points of interest from OpenStreetMap by category and area: cafés in a city, dentists near a point, hotels in a box. Name, address, coordinates, website, phone, opening hours, brand, cuisine, wheelchair access and raw tags. No API key, from $0.50 per 1,000 places.",
    "version": "0.1",
    "x-build-id": "4QLQch5CQhUOeROUH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/insight.solutions~osm-places-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-insight.solutions-osm-places-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/insight.solutions~osm-places-api/runs": {
      "post": {
        "operationId": "runs-sync-insight.solutions-osm-places-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/insight.solutions~osm-places-api/run-sync": {
      "post": {
        "operationId": "run-sync-insight.solutions-osm-places-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "What to look for, as OpenStreetMap tags: `amenity=cafe`, `shop=bicycle`, `tourism=hotel`, `office=company`, `healthcare=dentist`, `leisure=fitness_centre`, or `craft=*` for every value of a key. Bare names work too — `cafe`, `bicycle`, `hotel`, `fitness centre` — and are looked up in the bundled table of the most-mapped values of amenity, shop, tourism, leisure, office, healthcare and craft (listed in the README). A name that more than one key uses, like `dentist`, searches all of them. Each category is searched in each area separately.",
            "default": [
              "amenity=cafe"
            ],
            "items": {
              "type": "string"
            }
          },
          "areas": {
            "title": "Areas (place names)",
            "type": "array",
            "description": "Cities, districts, regions: `Berlin, Germany`, `Cambridge, UK`, `Kreuzberg, Berlin`. Each name is looked up once on OpenStreetMap's Nominatim geocoder (one request per second, per its usage policy) and turned into a bounding box and, for administrative areas, the exact boundary. Add the country when a name is ambiguous.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "bboxes": {
            "title": "Bounding boxes",
            "type": "array",
            "description": "`south,west,north,east` in decimal degrees, for example `52.50,13.38,52.52,13.42`. Boxes larger than 0.5° × 0.5° are split into 0.25° tiles queried one after another; boxes needing more than 64 tiles (about 2° × 2°) are refused — split them or name the area.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "points": {
            "title": "Points (lat,lon)",
            "type": "array",
            "description": "`lat,lon` in decimal degrees, for example `52.52,13.40`, searched within `radiusMeters`. Places come back nearest first, with `distanceMeters` filled in.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "radiusMeters": {
            "title": "Radius around each point (metres)",
            "minimum": 50,
            "maximum": 20000,
            "type": "integer",
            "description": "How far from each point to search. 50 to 20,000 metres.",
            "default": 2000
          },
          "useAreaBoundary": {
            "title": "Use the exact boundary of named areas",
            "type": "boolean",
            "description": "When an area name resolves to an administrative boundary (a city, a district), search inside that exact boundary instead of its bounding box — so \"Berlin\" does not include the edge of Brandenburg. Areas without a boundary always use their bounding box.",
            "default": true
          },
          "requireName": {
            "title": "Only places with a name",
            "type": "boolean",
            "description": "Skip unnamed elements — parking spaces, benches, anonymous vending machines. On by default; turn it off for infrastructure categories where names are rare.",
            "default": true
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only places whose name, brand, cuisine or any tag contains one of these words (case-insensitive). `vegan` matches `diet:vegan=yes`; `starbucks` matches the brand. Places that do not match are never charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxPlaces": {
            "title": "Maximum places per category and area",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop each category in each area after this many places. 0 means no cap — every place the tiling and `maxRunSecs` allow (up to 5,000 per Overpass tile).",
            "default": 500
          },
          "reverseGeocode": {
            "title": "Fill missing addresses (reverse geocoding)",
            "type": "boolean",
            "description": "For places with no `addr:*` tags at all, ask Nominatim for the nearest address. Paced at one request per second and capped at 200 per run, per Nominatim's usage policy — so it is slow, and off by default.",
            "default": false
          },
          "includeRawTags": {
            "title": "Include raw OSM tags",
            "type": "boolean",
            "description": "Add every OpenStreetMap tag of the place as a `tags` object (minus the personal ones this Actor never emits — see the README).",
            "default": true
          },
          "maxRunSecs": {
            "title": "Time budget (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Stop starting new queries after this long and finish with what has been collected. 30 to 3,600.",
            "default": 240
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Overpass and Nominatim answered through the Apify datacenter proxy in testing, which is the default. Every request carries this Actor's own identifying User-Agent whichever proxy you pick.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}