{
  "openapi": "3.0.1",
  "info": {
    "title": "Open Charge Map EV Station Search",
    "description": "Search and extract electric vehicle charging station data from [Open Charge Map](https://openchargemap.org) -- the world's largest open registry of EV charging locations with over 300,000 stations across 100+ countries.",
    "version": "1.6",
    "x-build-id": "0kENhV97z5KncwlP1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ryanclinton~open-charge-map/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ryanclinton-open-charge-map",
        "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/ryanclinton~open-charge-map/runs": {
      "post": {
        "operationId": "runs-sync-ryanclinton-open-charge-map",
        "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/ryanclinton~open-charge-map/run-sync": {
      "post": {
        "operationId": "run-sync-ryanclinton-open-charge-map",
        "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": {
          "latitude": {
            "title": "Latitude",
            "type": "number",
            "description": "Search center latitude (e.g., 40.7128 for New York City).",
            "default": 40.7128
          },
          "longitude": {
            "title": "Longitude",
            "type": "number",
            "description": "Search center longitude (e.g., -74.006 for New York City).",
            "default": -74.006
          },
          "distance": {
            "title": "Search Radius",
            "type": "number",
            "description": "Search radius from the center point.",
            "default": 10
          },
          "distanceUnit": {
            "title": "Distance Unit",
            "enum": [
              "Miles",
              "KM"
            ],
            "type": "string",
            "description": "Unit for the search radius.",
            "default": "Miles"
          },
          "countryCode": {
            "title": "Country Code",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "2-letter ISO country code to filter results (e.g., 'US', 'GB', 'DE'). Leave empty for all countries."
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of stations to return (1-500).",
            "default": 50
          },
          "operatorId": {
            "title": "Operator ID",
            "type": "number",
            "description": "Filter by charging network operator ID (e.g., 23 for Tesla). Tip: use Operator Name instead if you do not know the ID."
          },
          "operatorName": {
            "title": "Operator Name",
            "type": "string",
            "description": "Filter by operator name instead of ID (e.g., 'Tesla', 'ChargePoint'). The actor looks the name up in Open Charge Map's reference data and resolves it to the operator ID. Exact match preferred, falls back to a partial match."
          },
          "connectionTypeId": {
            "title": "Connection Type ID",
            "type": "number",
            "description": "Filter by connector type ID (e.g., 1=Type 1, 25=Type 2, 32=CCS, 27=Tesla Supercharger)."
          },
          "levelId": {
            "title": "Charging Level ID",
            "type": "number",
            "description": "Filter by charging level (1=Level 1, 2=Level 2, 3=DC Fast Charging)."
          },
          "statusTypeId": {
            "title": "Status Type ID",
            "type": "number",
            "description": "Filter by station status (50=Operational, 100=Not Operational, 150=Planned)."
          },
          "apiKey": {
            "title": "API Key",
            "type": "string",
            "description": "Required. Register a free API key at openchargemap.org (sign in, then My Profile > My Apps > Register Application)."
          },
          "minPowerKW": {
            "title": "Minimum Power (kW)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return stations whose fastest connector is at least this many kW. Leave empty to return all. Stations with no published power are excluded when this is set. Example: 50 for fast/rapid only, 150 for ultra-rapid only."
          },
          "minConfidence": {
            "title": "Minimum Confidence",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only return stations whose data-trust confidence score (0-100) is at least this value. Confidence reflects verification recency and metadata completeness (distinct from the quality score). Use 70-80 to exclude stale or sparse listings."
          },
          "sortBy": {
            "title": "Sort Results By",
            "enum": [
              "distance",
              "power",
              "score",
              "confidence"
            ],
            "type": "string",
            "description": "Order of the returned stations. 'distance' (default) sorts nearest first, 'power' sorts fastest first, 'score' sorts by overall station quality, 'confidence' sorts by data-trust confidence.",
            "default": "distance"
          },
          "outputProfile": {
            "title": "Output Detail Level",
            "enum": [
              "full",
              "standard",
              "minimal"
            ],
            "type": "string",
            "description": "How much detail per station record. 'full' (default) includes the raw connections array and all fields; 'standard' drops the verbose connections/access detail but keeps every decision field; 'minimal' returns only the core location + decision fields for lightweight automation.",
            "default": "full"
          },
          "resolveReferenceData": {
            "title": "Include Reference-Data Lookups",
            "type": "boolean",
            "description": "When true, the actor emits one 'reference-data' record listing every operator, connector type, charging level, and status type with its ID and title — so you can look up the numeric IDs the other filters expect instead of memorising them.",
            "default": false
          },
          "startLatitude": {
            "title": "Route Start Latitude",
            "type": "number",
            "description": "Optional. Provide all four route coordinates to enable route-corridor analysis: the actor samples waypoints along the start-to-end line, queries chargers around each, and reports route readiness and charging gaps. Each waypoint is an extra OCM query."
          },
          "startLongitude": {
            "title": "Route Start Longitude",
            "type": "number",
            "description": "Longitude of the route start point. Required (with the other three) to enable route-corridor analysis."
          },
          "endLatitude": {
            "title": "Route End Latitude",
            "type": "number",
            "description": "Latitude of the route end point. Required (with the other three) to enable route-corridor analysis."
          },
          "endLongitude": {
            "title": "Route End Longitude",
            "type": "number",
            "description": "Longitude of the route end point. Required (with the other three) to enable route-corridor analysis."
          },
          "routeMaxGapKm": {
            "title": "Max Acceptable Charging Gap (km)",
            "minimum": 20,
            "maximum": 500,
            "type": "integer",
            "description": "Route mode only. The longest stretch (km) without a route-ready charger you consider acceptable. A gap longer than this is flagged 'critical' and marks the route not charge-ready; longer than half this is 'weak'. Default 120.",
            "default": 120
          },
          "routeSampleKm": {
            "title": "Route Sample Spacing (km)",
            "minimum": 10,
            "maximum": 200,
            "type": "integer",
            "description": "Route mode only. Distance between sampled waypoints along the route (km). Smaller spacing is more accurate but makes more OCM queries. Capped at 30 waypoints total. Default 50.",
            "default": 50
          },
          "corridorName": {
            "title": "Corridor Name",
            "type": "string",
            "description": "Route mode only. Optional label for the corridor (e.g. 'London-Birmingham') used in the route-analysis record. Defaults to the start/end coordinates."
          },
          "compareAreas": {
            "title": "Compare Areas",
            "type": "array",
            "description": "Optional. Provide 2-8 areas to rank them by EV-readiness and build-out opportunity for site selection. Each area is an object: { \"label\": \"City A\", \"latitude\": 51.5, \"longitude\": -0.12, \"distance\": 10 }. One extra OCM query per area. The actor emits an 'area-comparison' record with the ranking."
          },
          "watchlistName": {
            "title": "Watchlist Name",
            "type": "string",
            "description": "Optional. Name a watchlist to track infrastructure growth across scheduled runs. The actor stores a snapshot per watchlist and reports new stations, new rapid chargers, EV-readiness change, and a growth trend since the last run. First run on a watchlist establishes the baseline."
          },
          "analysisMode": {
            "title": "Analysis Mode",
            "enum": [
              "coverage",
              "planning",
              "route",
              "investment",
              "competition",
              "benchmark"
            ],
            "type": "string",
            "description": "Frame the run around a job. 'coverage' (can EVs charge here?), 'planning' (where should chargers be built?), 'route' (can I drive through here?), 'investment' (where is the build-out opportunity?), 'competition' (which operators dominate?), 'benchmark' (how do areas compare?). Tunes the default sort. Auto-resolved from your input when left blank."
          },
          "simulate": {
            "title": "Scenario Simulation",
            "type": "object",
            "description": "Optional what-if modelling, recomputed deterministically over the result set. Provide any of: { \"removeOperator\": \"Tesla\" } (what if a network failed), { \"removeTopPercent\": 10 } (network fragility), { \"addRapidChargers\": 5 } (directional gain from new rapid chargers). Emits a 'simulation' record per scenario with before/after EV-readiness and resilience. Estimates only, not forecasts."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}