{
  "openapi": "3.0.1",
  "info": {
    "title": "U.S. Ghost Kitchen Market Intelligence",
    "description": "Review directional public-source intelligence for one U.S. market or a bounded batch. Compare reachability-based coverage grades, shared-address candidate dossiers, qualitative scorecards, and an HTML report, or use a fictional no-charge demo. Results are not official or legal determinations.",
    "version": "0.3",
    "x-build-id": "yb2ThsosumFY9z5Fp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/critd~ghost-kitchen-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-critd-ghost-kitchen-detector",
        "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/critd~ghost-kitchen-detector/runs": {
      "post": {
        "operationId": "runs-sync-critd-ghost-kitchen-detector",
        "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/critd~ghost-kitchen-detector/run-sync": {
      "post": {
        "operationId": "run-sync-critd-ghost-kitchen-detector",
        "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": {
          "demoMode": {
            "title": "Run Fictional Demo",
            "type": "boolean",
            "description": "Turn this on for a deterministic fictional sample. Demo mode ignores Location, Locations, Batch Concurrency, and every live scan or source control below. It performs no delivery-source, geocoder, proxy, Yelp, billing-reservation, idempotency-key, or charge activity; platform storage is still used for dataset rows, OUTPUT, and OUTPUT.html.",
            "default": false
          },
          "demoScenario": {
            "title": "Fictional Demo Scenario",
            "enum": [
              "shared_kitchen_cluster",
              "quiet_market",
              "partial_coverage"
            ],
            "type": "string",
            "description": "Select the versioned fictional market scenario used only when Run Fictional Demo is enabled. The default is a visibly synthetic shared-address cluster; no real customer, brand, or market data is used.",
            "default": "shared_kitchen_cluster"
          },
          "location": {
            "title": "Live Location (recommended)",
            "type": "string",
            "description": "Recommended live path: enter one U.S. city and state, ZIP code, or street address. For a live batch, leave this empty and use Live Locations instead. Demo mode ignores this field."
          },
          "locations": {
            "title": "Live Locations (batch)",
            "minItems": 1,
            "maxItems": 50,
            "type": "array",
            "description": "Advanced live batch input. Provide location objects only when Live Location is empty. Up to 50 requested rows are accepted, with at most 25 unique location and scan-parameter fingerprints; exact duplicates remain visible as aliases instead of separate charge candidates. Start with a small batch and inspect OUTPUT locations before scaling. Demo mode ignores this field.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "location"
              ],
              "properties": {
                "location": {
                  "title": "Location",
                  "type": "string",
                  "description": "The U.S. city and state, ZIP code, or street address for this market request.",
                  "editor": "textfield",
                  "minLength": 1
                },
                "radiusMiles": {
                  "title": "Search Radius (miles)",
                  "type": "integer",
                  "description": "Optional per-location override for search radius. Range: 1 to 25.",
                  "minimum": 1,
                  "maximum": 25,
                  "editor": "number"
                },
                "cuisineFilter": {
                  "title": "Cuisine Filter",
                  "type": "string",
                  "description": "Optional per-location cuisine segment override, such as 'pizza' or 'wings'.",
                  "editor": "textfield",
                  "nullable": true
                },
                "maxRestaurants": {
                  "title": "Maximum Restaurants to Analyze",
                  "type": "integer",
                  "description": "Optional per-location override for the maximum number of deduplicated candidates to review. Range: 10 to 1000.",
                  "minimum": 10,
                  "maximum": 1000,
                  "editor": "number"
                },
                "confidenceThreshold": {
                  "title": "Minimum Evidence Score",
                  "type": "number",
                  "description": "Optional per-location evidence-score threshold. Range: 0.0 to 1.0.",
                  "minimum": 0,
                  "maximum": 1,
                  "editor": "number"
                },
                "includeTraditionalRestaurants": {
                  "title": "Include Traditional and Unknown Results",
                  "type": "boolean",
                  "description": "Optional per-location override for including traditional or unknown classifications.",
                  "editor": "checkbox"
                }
              }
            }
          },
          "batchConcurrency": {
            "title": "Batch Concurrency",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Maximum number of unique live market scans to run at the same time for batch inputs. Charges remain serialized, and dataset rows, OUTPUT locations, and checkpoints remain deterministic. Keep this at 1 for first agent/API runs until OUTPUT sourceHealth and charge states are understood. Range: 1 to 3. Demo mode ignores this field.",
            "default": 1
          },
          "radiusMiles": {
            "title": "Search Radius (miles)",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "How far around each live market point to search. Range: 1 to 25. If a source supplies distance data, listings outside the radius are removed. If it does not, the Actor keeps the candidate and records that limit in the run diagnostics. Demo mode ignores this field.",
            "default": 5
          },
          "cuisineFilter": {
            "title": "Cuisine Filter (optional)",
            "type": "string",
            "description": "Restrict a live scan to one category, such as 'pizza' or 'wings', when you want a more focused segment view. Demo mode ignores this field."
          },
          "maxRestaurants": {
            "title": "Maximum Restaurants to Analyze",
            "minimum": 10,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of deduplicated candidates to review in depth during a live scan. Range: 10 to 1000. Use a higher number to inspect more candidates when sources return enough data. Demo mode ignores this field.",
            "default": 200
          },
          "confidenceThreshold": {
            "title": "Minimum Evidence Score",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Minimum evidence-strength score required for a live result to be included. Range: 0.0 to 1.0. Higher values are more conservative. Lower values surface more borderline or inconclusive cases. This is not a verified accuracy score. Demo mode ignores this field.",
            "default": 0.5
          },
          "includeTraditionalRestaurants": {
            "title": "Include Traditional and Unknown Results",
            "type": "boolean",
            "description": "Include live results classified as 'traditional' or 'unknown', not just likely ghost kitchens and virtual brands. Use this when you want a broader candidate map, including inconclusive rows. Demo mode ignores this field.",
            "default": false
          },
          "yelpApiKey": {
            "title": "Yelp API Key",
            "type": "string",
            "description": "Optional Yelp Fusion API key for extra storefront context signals such as ratings, review counts, photos, and website presence during live runs. Yelp enrichment is unaffiliated and does not prove storefront status. Demo mode ignores this secret."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}