{
  "openapi": "3.0.1",
  "info": {
    "title": "Drone No-Fly Alerts - New FAA TFRs Near Your Locations",
    "description": "Flying a drone job next week? Give it your job sites (lat/lng + radius) and get an alert the moment a NEW FAA Temporary Flight Restriction (VIP, stadium, hazard, security) touches one. Reads the official FAA TFR list and geometry; each TFR is reported once.",
    "version": "1.0",
    "x-build-id": "IfjIJsHci9zpdWjiQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/that_red_bird~faa-tfr-geofence-alerts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-that_red_bird-faa-tfr-geofence-alerts",
        "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/that_red_bird~faa-tfr-geofence-alerts/runs": {
      "post": {
        "operationId": "runs-sync-that_red_bird-faa-tfr-geofence-alerts",
        "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/that_red_bird~faa-tfr-geofence-alerts/run-sync": {
      "post": {
        "operationId": "run-sync-that_red_bird-faa-tfr-geofence-alerts",
        "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": {
          "locations": {
            "title": "Your locations",
            "type": "array",
            "description": "Points to protect. Each item is an object {\"name\":\"Job site A\",\"lat\":38.8977,\"lng\":-77.0365,\"radiusMiles\":5} (radiusMiles optional, falls back to the default radius) or a plain \"lat,lng\" text. Use decimal degrees.",
            "default": [
              {
                "name": "Walt Disney World, Orlando FL",
                "lat": 28.4177,
                "lng": -81.5812
              },
              {
                "name": "Disneyland, Anaheim CA",
                "lat": 33.8121,
                "lng": -117.919
              }
            ]
          },
          "radiusMiles": {
            "title": "Default radius (miles)",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "A TFR counts as touching a location when its boundary is within this many statute miles of the point (0 = the point must be inside the TFR). Individual locations can override it.",
            "default": 5
          },
          "tfrTypes": {
            "title": "TFR types to keep",
            "type": "array",
            "description": "Only keep these FAA TFR types, for example VIP, SECURITY, HAZARDS, SPACE OPERATIONS, AIR SHOWS/SPORTS, UAS PUBLIC GATHERING. Matching is case-insensitive. Leave empty to keep every type.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "US states to keep",
            "type": "array",
            "description": "Optional two-letter state codes (for example CA, TX). Only TFRs listed under these states are processed. Leave empty for all states.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "outputMode": {
            "title": "What to output",
            "enum": [
              "all-new",
              "hits-only"
            ],
            "type": "string",
            "description": "all-new: a row for every new TFR plus a row for every geofence hit. hits-only: only the rows for TFRs that touch your locations (cheapest for scheduled alerts).",
            "default": "all-new"
          },
          "maxBaselineRows": {
            "title": "Max TFR rows on the first run",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "The first run has no memory, so every active TFR looks new. It lists at most this many TFR rows (newest first, marked isBaseline) and still checks all of them against your locations.",
            "default": 10
          },
          "stateStoreName": {
            "title": "Memory store name",
            "type": "string",
            "description": "Named key-value store that remembers which TFRs were already reported. Use the same name on every scheduled run and a different name per project. Empty = no memory (every run reports everything).",
            "default": "faa-tfr-geofence-state"
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "New geofence hits are POSTed here as JSON with text and content fields (works with Slack, Discord, Zapier, Make). Leave empty for none.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}