{
  "openapi": "3.0.1",
  "info": {
    "title": "OGC API Features Extractor",
    "description": "Point at ANY OGC API Features service (the modern WFS successor) — pygeoapi, ldproxy, GeoServer, national mapping & city GIS. List collections or page /items by bbox/datetime/CQL to flat rows (geometry, lon/lat, computed bbox, properties) + raw GeoJSON. Pay per feature.",
    "version": "0.1",
    "x-build-id": "u5NB8LK9GtpJYWbU6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datamule~ogc-api-features-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datamule-ogc-api-features-extractor",
        "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/datamule~ogc-api-features-extractor/runs": {
      "post": {
        "operationId": "runs-sync-datamule-ogc-api-features-extractor",
        "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/datamule~ogc-api-features-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-datamule-ogc-api-features-extractor",
        "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",
        "required": [
          "serviceRoot"
        ],
        "properties": {
          "serviceRoot": {
            "title": "OGC API service root URL",
            "type": "string",
            "description": "The root URL of ANY OGC API Features service (the modern, GeoJSON, OGC-blessed successor to WFS). Examples: https://demo.pygeoapi.io/master (pygeoapi reference server), https://demo.ldproxy.net/zoomstack (ldproxy), https://api.os.uk/features/ngd/ofa/v1 (UK Ordnance Survey, key-gated). Do NOT include /collections or /items — just the landing/API root."
          },
          "collectionId": {
            "title": "Collection id(s)",
            "type": "array",
            "description": "Collection id(s) to pull features from, e.g. lakes, obs, airports. Accepts one or more. Leave EMPTY to run in discovery mode (list every collection the service exposes). Turn on \"List collections only\" below to just browse what's available first.",
            "items": {
              "type": "string"
            }
          },
          "listCollectionsOnly": {
            "title": "List collections only (discovery)",
            "type": "boolean",
            "description": "When on, the actor only reads {serviceRoot}/collections and returns one row per available collection (id, title, description, itemType, spatial/temporal extent, CRS, items URL) — it does NOT fetch any features. Use this to discover what a service exposes, then set Collection id(s) + a bbox/datetime to extract features.",
            "default": false
          },
          "bbox": {
            "title": "Bounding box (bbox)",
            "type": "array",
            "description": "Spatial filter as [west, south, east, north] in WGS84 decimal degrees (a 6-number [w,s,minZ,e,n,maxZ] 3D box is also accepted). Example for the UK: [-8, 49, 2, 61]. Leave empty for no spatial filter."
          },
          "datetime": {
            "title": "Date/time window",
            "type": "string",
            "description": "Temporal filter in RFC 3339 (only honored by collections that carry a temporal dimension). A single instant (2024-06-15T00:00:00Z), a closed range (2024-06-01T00:00:00Z/2024-06-30T23:59:59Z), or an open range using \"..\" (2024-06-01T00:00:00Z/.. or ../2024-06-30T00:00:00Z). Leave empty for no time filter."
          },
          "queryParams": {
            "title": "Extra query parameters",
            "type": "object",
            "description": "Arbitrary extra query-string parameters appended to each /items request, as a JSON object — the generic passthrough for property filters, CQL, and provider-specific keys. Examples: a simple property equality {\"name\": \"Sumburgh Airport\"}; a CQL filter {\"filter\": \"scalerank<3\", \"filter-lang\": \"cql2-text\"}; response shaping {\"properties\": \"name,admin\", \"skipGeometry\": \"false\"}. The reserved keys bbox/datetime/limit/offset/f are managed by the actor and ignored here. Leave empty for none."
          },
          "limit": {
            "title": "Page size",
            "minimum": 1,
            "type": "integer",
            "description": "Server-side page size requested per /items call (the actor auto-follows the rel=\"next\" link regardless). Most servers cap this around 100–10000. Leave at the default unless you have a reason to change it.",
            "default": 100
          },
          "maxItems": {
            "title": "Max features (total)",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum total number of features to pull across all pages and collections (the actor auto-paginates until this cap or the result set is exhausted). Each returned feature is one billable event. Default 25.",
            "default": 25
          },
          "bearerToken": {
            "title": "Bearer token (optional)",
            "type": "string",
            "description": "Optional OAuth2 bearer token for key-gated services (e.g. UK Ordnance Survey). Sent as Authorization: Bearer ***. NOT required for public services (pygeoapi, ldproxy demos) — leave empty. Never logged."
          },
          "extraHeaders": {
            "title": "Extra request headers",
            "type": "object",
            "description": "Optional extra HTTP headers to send with every request, as a JSON object, e.g. {\"key\": \"...\"} for a service that takes an API key in a header. Leave empty for public services."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}