{
  "openapi": "3.1.0",
  "info": {
    "title": "Firecrawl Webhooks",
    "version": "v2"
  },
  "webhooks": {
    "crawlStarted": {
      "post": {
        "summary": "Crawl Started",
        "operationId": "crawlStarted",
        "tags": [
          "Crawl"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "Always `true` for this event.",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "description": "The event type.",
                    "const": "crawl.started"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The crawl job ID, matching the `id` returned by `POST /crawl`."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery. Use for deduplication — the same value is sent on retries."
                  },
                  "data": {
                    "type": "array",
                    "items": {},
                    "description": "Empty array for this event.",
                    "default": []
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "crawl.started",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "a1b2c3d4-0001-0000-0000-000000000000",
                "data": [],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "crawlPage": {
      "post": {
        "summary": "Crawl Page",
        "operationId": "crawlPage",
        "tags": [
          "Crawl"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "`true` if the page was scraped successfully, `false` otherwise."
                  },
                  "type": {
                    "type": "string",
                    "description": "The event type.",
                    "const": "crawl.page"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The crawl job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "description": "Array containing the scraped page document. Same shape as the `data` field in the `GET /scrape` response.",
                    "items": {
                      "$ref": "#/components/schemas/ScrapeDocument"
                    }
                  },
                  "error": {
                    "type": "string",
                    "description": "Error message if the page failed to scrape."
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "crawl.page",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "a1b2c3d4-0002-0000-0000-000000000000",
                "data": [
                  {
                    "markdown": "# Example Page\n\nThis is the page content.",
                    "metadata": {
                      "title": "Example Page",
                      "description": "An example page.",
                      "sourceURL": "https://example.com/page",
                      "statusCode": 200
                    }
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "crawlCompleted": {
      "post": {
        "summary": "Crawl Completed",
        "operationId": "crawlCompleted",
        "tags": [
          "Crawl"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "Always `true` for this event.",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "description": "The event type.",
                    "const": "crawl.completed"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The crawl job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {},
                    "description": "Empty array. Retrieve results via `GET /crawl/{id}`.",
                    "default": []
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "crawl.completed",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "a1b2c3d4-0003-0000-0000-000000000000",
                "data": [],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "batchScrapeStarted": {
      "post": {
        "summary": "Batch Scrape Started",
        "operationId": "batchScrapeStarted",
        "tags": [
          "Batch Scrape"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "const": "batch_scrape.started"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The batch scrape job ID, matching the `id` returned by `POST /batch/scrape`."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {},
                    "default": []
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "batch_scrape.started",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "b2c3d4e5-0001-0000-0000-000000000000",
                "data": [],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "batchScrapePage": {
      "post": {
        "summary": "Batch Scrape Page",
        "operationId": "batchScrapePage",
        "tags": [
          "Batch Scrape"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "`true` if the page was scraped successfully, `false` otherwise."
                  },
                  "type": {
                    "type": "string",
                    "const": "batch_scrape.page"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The batch scrape job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "description": "Array containing the scraped page document.",
                    "items": {
                      "$ref": "#/components/schemas/ScrapeDocument"
                    }
                  },
                  "error": {
                    "type": "string",
                    "description": "Error message if the page failed to scrape."
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "batch_scrape.page",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "b2c3d4e5-0002-0000-0000-000000000000",
                "data": [
                  {
                    "markdown": "# Example Page\n\nThis is the page content.",
                    "metadata": {
                      "title": "Example Page",
                      "description": "An example page.",
                      "sourceURL": "https://example.com",
                      "statusCode": 200
                    }
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "batchScrapeCompleted": {
      "post": {
        "summary": "Batch Scrape Completed",
        "operationId": "batchScrapeCompleted",
        "tags": [
          "Batch Scrape"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "const": "batch_scrape.completed"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The batch scrape job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {},
                    "description": "Empty array. Retrieve results via `GET /batch/scrape/{id}`.",
                    "default": []
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "batch_scrape.completed",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "b2c3d4e5-0003-0000-0000-000000000000",
                "data": [],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "agentStarted": {
      "post": {
        "summary": "Agent Started",
        "operationId": "agentStarted",
        "tags": [
          "Agent"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "const": "agent.started"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The agent job ID, matching the `id` returned by `POST /agent`."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {},
                    "default": []
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "agent.started",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "d4e5f6a7-0001-0000-0000-000000000000",
                "data": [],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "agentAction": {
      "post": {
        "summary": "Agent Action",
        "operationId": "agentAction",
        "tags": [
          "Agent"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "const": "agent.action"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The agent job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "description": "Array with a single object describing the action taken.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "creditsUsed": {
                          "type": "number",
                          "description": "Estimated credits consumed so far. The final count is only available in the terminal event (`completed`, `failed`, or `cancelled`)."
                        },
                        "action": {
                          "type": "string",
                          "description": "The tool that was executed, e.g. `scrape`, `search`, `extract`."
                        },
                        "input": {
                          "type": "object",
                          "description": "The input parameters passed to the tool.",
                          "additionalProperties": true
                        }
                      }
                    }
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "agent.action",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "d4e5f6a7-0002-0000-0000-000000000000",
                "data": [
                  {
                    "creditsUsed": 5,
                    "action": "scrape",
                    "input": {
                      "url": "https://example.com"
                    }
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "agentCompleted": {
      "post": {
        "summary": "Agent Completed",
        "operationId": "agentCompleted",
        "tags": [
          "Agent"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "const": true
                  },
                  "type": {
                    "type": "string",
                    "const": "agent.completed"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The agent job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "creditsUsed": {
                          "type": "number",
                          "description": "Total credits consumed by the agent run."
                        },
                        "data": {
                          "type": "object",
                          "description": "The structured data extracted by the agent, matching your schema if one was provided.",
                          "additionalProperties": true
                        }
                      }
                    }
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "agent.completed",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "d4e5f6a7-0003-0000-0000-000000000000",
                "data": [
                  {
                    "creditsUsed": 15,
                    "data": {
                      "company": "Example Corp",
                      "industry": "Technology",
                      "founded": 2020
                    }
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "agentFailed": {
      "post": {
        "summary": "Agent Failed",
        "operationId": "agentFailed",
        "tags": [
          "Agent"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data",
                  "error"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "Always `false` for this event.",
                    "const": false
                  },
                  "type": {
                    "type": "string",
                    "const": "agent.failed"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The agent job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "creditsUsed": {
                          "type": "number",
                          "description": "Total credits consumed before the failure."
                        }
                      }
                    }
                  },
                  "error": {
                    "type": "string",
                    "description": "Human-readable error message describing the failure."
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": false,
                "type": "agent.failed",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "d4e5f6a7-0004-0000-0000-000000000000",
                "data": [
                  {
                    "creditsUsed": 8
                  }
                ],
                "error": "Max credits exceeded",
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "agentCancelled": {
      "post": {
        "summary": "Agent Cancelled",
        "operationId": "agentCancelled",
        "tags": [
          "Agent"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "Always `false` for this event.",
                    "const": false
                  },
                  "type": {
                    "type": "string",
                    "const": "agent.cancelled"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The agent job ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "creditsUsed": {
                          "type": "number",
                          "description": "Total credits consumed before cancellation."
                        }
                      }
                    }
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": false,
                "type": "agent.cancelled",
                "id": "550e8400-e29b-41d4-a716-446655440000",
                "webhookId": "d4e5f6a7-0005-0000-0000-000000000000",
                "data": [
                  {
                    "creditsUsed": 3
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "monitorPage": {
      "post": {
        "summary": "Monitor Page",
        "operationId": "monitorPage",
        "tags": [
          "Monitor"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "`true` when the page scrape completed without an error."
                  },
                  "type": {
                    "type": "string",
                    "description": "The event type.",
                    "const": "monitor.page"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The monitor check ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/MonitorPageData"
                    }
                  },
                  "error": {
                    "type": "string",
                    "description": "Error message when the monitored page failed."
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "monitor.page",
                "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
                "webhookId": "f1e2d3c4-0000-0000-0000-000000000000",
                "data": [
                  {
                    "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
                    "checkId": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
                    "url": "https://example.com/blog",
                    "status": "changed",
                    "previousScrapeId": "019df94f-82c3-7e41-81f0-00c72b2d9c52",
                    "currentScrapeId": "019df960-73ee-7ac2-97a9-fb0e442c21f1",
                    "error": null,
                    "isMeaningful": true,
                    "judgment": {
                      "meaningful": true,
                      "confidence": "high",
                      "reason": "The page headline changed to announce a new release cadence.",
                      "meaningfulChanges": [
                        {
                          "type": "changed",
                          "before": "Welcome to our weekly update.",
                          "after": "Welcome to our weekly update — now with daily releases!",
                          "reason": "The headline changed in a way that matches the monitor goal."
                        }
                      ]
                    },
                    "diff": {
                      "text": "--- previous\n+++ current\n@@ -1,3 +1,3 @@\n # Latest posts\n-Welcome to our weekly update.\n+Welcome to our weekly update — now with daily releases!\n"
                    }
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    },
    "monitorCheckCompleted": {
      "post": {
        "summary": "Monitor Check Completed",
        "operationId": "monitorCheckCompleted",
        "tags": [
          "Monitor"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/FirecrawlSignature"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "success",
                  "type",
                  "id",
                  "webhookId",
                  "data"
                ],
                "properties": {
                  "success": {
                    "type": "boolean",
                    "description": "`true` when the check completed without page errors, otherwise `false`."
                  },
                  "type": {
                    "type": "string",
                    "description": "The event type.",
                    "const": "monitor.check.completed"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "The monitor check ID."
                  },
                  "webhookId": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Unique identifier for this webhook delivery."
                  },
                  "data": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/MonitorCheckCompletedData"
                    }
                  },
                  "error": {
                    "type": "string",
                    "description": "Error message when the check failed."
                  },
                  "metadata": {
                    "$ref": "#/components/schemas/WebhookMetadata"
                  }
                }
              },
              "example": {
                "success": true,
                "type": "monitor.check.completed",
                "id": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
                "webhookId": "f1e2d3c4-0001-0000-0000-000000000000",
                "data": [
                  {
                    "monitorId": "019df960-06e7-7383-9d89-82c0113dc31a",
                    "checkId": "019df960-5f2a-75fb-a98b-bd2d32ca67d4",
                    "status": "completed",
                    "summary": {
                      "totalPages": 2,
                      "same": 1,
                      "changed": 1,
                      "new": 0,
                      "removed": 0,
                      "error": 0
                    }
                  }
                ],
                "metadata": {}
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return any `2xx` status code to acknowledge receipt."
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "FirecrawlSignature": {
        "name": "X-Firecrawl-Signature",
        "in": "header",
        "required": false,
        "description": "HMAC-SHA256 signature of the raw request body, formatted as `sha256=<hex>`. Present when an HMAC secret is configured in your [account settings](https://www.firecrawl.dev/app/settings?tab=advanced). See [Webhook Security](/webhooks/security) for verification details.",
        "schema": {
          "type": "string",
          "example": "sha256=abc123def456789..."
        }
      }
    },
    "schemas": {
      "WebhookMetadata": {
        "type": "object",
        "description": "The custom metadata object you provided in the webhook configuration. Echoed back in every delivery.",
        "additionalProperties": {
          "type": "string"
        }
      },
      "ScrapeDocument": {
        "type": "object",
        "description": "A scraped page document. Same shape as the `data` object in scrape responses.",
        "properties": {
          "markdown": {
            "type": "string",
            "description": "The page content converted to Markdown."
          },
          "html": {
            "type": "string",
            "description": "Cleaned HTML content of the page."
          },
          "rawHtml": {
            "type": "string",
            "description": "Original HTML before any processing."
          },
          "links": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Outbound links discovered on the page."
          },
          "screenshot": {
            "type": "string",
            "description": "Base64-encoded screenshot, if the `screenshot` format was requested."
          },
          "metadata": {
            "type": "object",
            "description": "Page metadata.",
            "properties": {
              "title": {
                "type": "string",
                "description": "The page `<title>`."
              },
              "description": {
                "type": "string",
                "description": "The meta description."
              },
              "sourceURL": {
                "type": "string",
                "description": "The URL that was scraped."
              },
              "statusCode": {
                "type": "integer",
                "description": "HTTP status code of the response."
              }
            }
          }
        }
      },
      "MonitorPageData": {
        "type": "object",
        "required": [
          "monitorId",
          "checkId",
          "url",
          "status"
        ],
        "properties": {
          "monitorId": {
            "type": "string",
            "format": "uuid",
            "description": "The monitor ID."
          },
          "checkId": {
            "type": "string",
            "format": "uuid",
            "description": "The monitor check ID."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The page URL."
          },
          "status": {
            "type": "string",
            "enum": [
              "same",
              "new",
              "changed",
              "error"
            ],
            "description": "Page-level status for this scrape completion."
          },
          "previousScrapeId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "currentScrapeId": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "error": {
            "type": "string",
            "nullable": true
          },
          "isMeaningful": {
            "type": "boolean",
            "nullable": true,
            "description": "`true` or `false` when meaningful-change judging ran on a changed page; otherwise `null`."
          },
          "judgment": {
            "$ref": "#/components/schemas/MonitorPageJudgment"
          },
          "diff": {
            "type": "object",
            "nullable": true,
            "description": "Inline diff for changed pages. May include `text`, `json`, or both depending on monitor change-tracking mode.",
            "properties": {
              "text": {
                "type": "string"
              },
              "json": {
                "type": "object"
              }
            }
          }
        }
      },
      "MonitorPageJudgment": {
        "type": "object",
        "nullable": true,
        "properties": {
          "meaningful": {
            "type": "boolean"
          },
          "confidence": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low"
            ]
          },
          "reason": {
            "type": "string"
          },
          "meaningfulChanges": {
            "type": "array",
            "description": "Goal-relevant changes selected by the judge from the page diff.",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "added",
                    "removed",
                    "changed"
                  ]
                },
                "before": {
                  "type": "string",
                  "nullable": true
                },
                "after": {
                  "type": "string",
                  "nullable": true
                },
                "reason": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "MonitorCheckCompletedData": {
        "type": "object",
        "required": [
          "monitorId",
          "checkId",
          "status",
          "summary"
        ],
        "properties": {
          "monitorId": {
            "type": "string",
            "format": "uuid",
            "description": "The monitor ID."
          },
          "checkId": {
            "type": "string",
            "format": "uuid",
            "description": "The monitor check ID."
          },
          "status": {
            "type": "string",
            "enum": [
              "completed",
              "partial",
              "failed",
              "skipped_overlap"
            ],
            "description": "Final status of the monitor check."
          },
          "summary": {
            "type": "object",
            "required": [
              "totalPages",
              "same",
              "changed",
              "new",
              "removed",
              "error"
            ],
            "properties": {
              "totalPages": {
                "type": "integer"
              },
              "same": {
                "type": "integer"
              },
              "changed": {
                "type": "integer"
              },
              "new": {
                "type": "integer"
              },
              "removed": {
                "type": "integer"
              },
              "error": {
                "type": "integer"
              }
            }
          }
        }
      }
    }
  }
}