{
  "components": {
    "schemas": {
      "BatchScrapeResponseObj": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs es true, este será un array que contendrá las URL no válidas que se especificaron en la solicitud. Si no hubo URL no válidas, será un array vacío. Si ignoreInvalidURLs es false, este campo será undefined.",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "success": {
            "type": "boolean"
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "BatchScrapeStatusResponseObj": {
        "properties": {
          "completed": {
            "description": "El número de páginas que se han extraído correctamente.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "El número de créditos usados en la extracción en lote.",
            "type": "integer"
          },
          "data": {
            "description": "Los datos del scraping por lotes.",
            "items": {
              "properties": {
                "html": {
                  "description": "Versión HTML del contenido de la página cuando `includeHtml` es true",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Lista de enlaces en la página si `includeLinks` es `true`",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "<any other metadata> ": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "error": {
                      "description": "El mensaje de error de la página",
                      "nullable": true,
                      "type": "string"
                    },
                    "language": {
                      "nullable": true,
                      "type": "string"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "statusCode": {
                      "description": "El código de estado de la página",
                      "type": "integer"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Contenido HTML bruto de la página si `includeRawHtml` es true",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Captura de pantalla de la página si `includeScreenshot` está establecido en true",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "La fecha y la hora de vencimiento del rastreo por lotes.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "La URL para recuperar los siguientes 10 MB de datos. Se devuelve si el scraping por lotes aún no se ha completado o si la respuesta supera los 10 MB.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "Estado actual del scraping por lotes. Puede ser `scraping`, `completed` o `failed`.",
            "type": "string"
          },
          "total": {
            "description": "El número total de páginas que se intentó scrapear.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "CrawlErrorsResponseObj": {
        "properties": {
          "errors": {
            "description": "Trabajos de scraping con errores y detalles de los errores",
            "items": {
              "properties": {
                "error": {
                  "description": "Mensaje de error",
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "timestamp": {
                  "description": "Marca de tiempo ISO del error",
                  "nullable": true,
                  "type": "string"
                },
                "url": {
                  "description": "URL extraída",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "robotsBlocked": {
            "description": "Lista de URLs que se intentaron extraer pero fueron bloqueadas por robots.txt",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "CrawlResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "CrawlStatusResponseObj": {
        "properties": {
          "completed": {
            "description": "Número de páginas que se han rastreado correctamente.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "La cantidad de créditos utilizados para el rastreo.",
            "type": "integer"
          },
          "data": {
            "description": "Los datos del rastreo.",
            "items": {
              "properties": {
                "html": {
                  "description": "Versión HTML del contenido en la página si `includeHtml` es true",
                  "nullable": true,
                  "type": "string"
                },
                "links": {
                  "description": "Lista de enlaces de la página si `includeLinks` es `true`",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "markdown": {
                  "type": "string"
                },
                "metadata": {
                  "properties": {
                    "<any other metadata> ": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "error": {
                      "description": "El mensaje de error de la página",
                      "nullable": true,
                      "type": "string"
                    },
                    "language": {
                      "nullable": true,
                      "type": "string"
                    },
                    "sourceURL": {
                      "format": "uri",
                      "type": "string"
                    },
                    "statusCode": {
                      "description": "El código de estado de la página",
                      "type": "integer"
                    },
                    "title": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "rawHtml": {
                  "description": "Contenido HTML en bruto de la página si `includeRawHtml` es true",
                  "nullable": true,
                  "type": "string"
                },
                "screenshot": {
                  "description": "Captura de pantalla de la página si `includeScreenshot` es true",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "La fecha y hora en que caducará el rastreo.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "URL para obtener los siguientes 10 MB de datos. Se devuelve si el rastreo no ha finalizado o si la respuesta supera los 10 MB.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "El estado actual del rastreo. Puede tener los valores `scraping`, `completed` o `failed`.",
            "type": "string"
          },
          "total": {
            "description": "El número total de páginas que se intentó rastrear.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ExtractResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs es true, este será un array que contendrá las URL no válidas especificadas en la solicitud. Si no hubo URL no válidas, será un array vacío. Si ignoreInvalidURLs es false, este campo será undefined.",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ExtractStatusResponse": {
        "properties": {
          "data": {
            "type": "object"
          },
          "expiresAt": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "description": "El estado actual del trabajo de extracción",
            "enum": [
              "completed",
              "processing",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "success": {
            "type": "boolean"
          },
          "tokensUsed": {
            "description": "El número de tokens utilizados por el trabajo de extracción. Solo disponible si el trabajo se ha completado.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "Formats": {
        "default": [
          "markdown"
        ],
        "description": "Formatos de salida que incluir en la respuesta. Puedes especificar uno o varios formatos, ya sea como cadenas de texto (por ejemplo, `'markdown'`) o como objetos con opciones adicionales (por ejemplo, `{ type: 'json', schema: {...} }`). Algunos formatos requieren que se configuren opciones específicas. Ejemplo: `['markdown', { type: 'json', schema: {...} }]`.",
        "items": {
          "oneOf": [
            {
              "properties": {
                "type": {
                  "enum": [
                    "markdown"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Markdown",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "summary"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Summary",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "html"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "HTML",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "rawHtml"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Raw HTML",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "links"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Links",
              "type": "object"
            },
            {
              "properties": {
                "type": {
                  "enum": [
                    "summary"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Summary",
              "type": "object"
            },
            {
              "properties": {
                "fullPage": {
                  "default": false,
                  "description": "Indica si se debe tomar una captura de pantalla de toda la página o solo del viewport actual.",
                  "type": "boolean"
                },
                "quality": {
                  "description": "La calidad de la captura de pantalla, de 1 a 100; 100 es la máxima calidad.",
                  "type": "integer"
                },
                "type": {
                  "enum": [
                    "screenshot"
                  ],
                  "type": "string"
                },
                "viewport": {
                  "properties": {
                    "height": {
                      "description": "La altura del viewport en píxeles",
                      "type": "integer"
                    },
                    "width": {
                      "description": "El ancho del viewport en píxeles",
                      "type": "integer"
                    }
                  },
                  "required": [
                    "width",
                    "height"
                  ],
                  "type": "object"
                }
              },
              "required": [
                "type"
              ],
              "title": "Screenshot",
              "type": "object"
            },
            {
              "properties": {
                "prompt": {
                  "description": "El prompt que se usará para la salida en formato JSON",
                  "type": "string"
                },
                "schema": {
                  "description": "El esquema que se utilizará para la salida en JSON. Debe ajustarse al estándar [JSON Schema](https://json-schema.org/).",
                  "type": "object"
                },
                "type": {
                  "enum": [
                    "json"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "JSON",
              "type": "object"
            },
            {
              "properties": {
                "modes": {
                  "description": "El modo que se utilizará para el seguimiento de cambios. 'git-diff' proporciona un diff detallado y 'json' compara los datos JSON extraídos.",
                  "items": {
                    "enum": [
                      "git-diff",
                      "json"
                    ],
                    "type": "string"
                  },
                  "type": "array"
                },
                "prompt": {
                  "description": "Prompt que se usará para el seguimiento de cambios cuando se utilice el modo `json`. Si no se proporciona, se utilizará el prompt predeterminado.",
                  "type": "string"
                },
                "schema": {
                  "description": "Esquema para extraer JSON al usar el modo `json`. Define la estructura de los datos que se deben extraer y comparar. Debe ajustarse a [JSON Schema](https://json-schema.org/).",
                  "type": "object"
                },
                "tag": {
                  "default": null,
                  "description": "Etiqueta que se usará para el seguimiento de cambios. Las etiquetas pueden separar el historial de seguimiento de cambios en “ramas” independientes, donde el seguimiento de cambios con una etiqueta específica solo se comparará con scrapes realizados con la misma etiqueta. Si no se proporciona, se usará la etiqueta por defecto (null).",
                  "nullable": true,
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "changeTracking"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "title": "Change Tracking",
              "type": "object"
            }
          ]
        },
        "type": "array"
      },
      "MapResponse": {
        "properties": {
          "links": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ScrapeOptions": {
        "properties": {
          "actions": {
            "description": "Acciones que se ejecutarán en la página antes de extraer el contenido",
            "items": {
              "oneOf": [
                {
                  "properties": {
                    "milliseconds": {
                      "description": "Número de milisegundos de espera",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "selector": {
                      "description": "Selector para encontrar el elemento por",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Espera un número determinado de milisegundos",
                      "enum": [
                        "wait"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Wait",
                  "type": "object"
                },
                {
                  "properties": {
                    "fullPage": {
                      "default": false,
                      "description": "Indica si se debe capturar una captura de pantalla de la página completa o solo del viewport actual.",
                      "type": "boolean"
                    },
                    "quality": {
                      "description": "La calidad de la captura de pantalla, de 1 a 100. 100 es la máxima calidad.",
                      "type": "integer"
                    },
                    "type": {
                      "description": "Toma una captura de pantalla. Los enlaces estarán disponibles en el array `actions.screenshots` de la respuesta.",
                      "enum": [
                        "screenshot"
                      ],
                      "type": "string"
                    },
                    "viewport": {
                      "properties": {
                        "height": {
                          "description": "La altura del viewport en píxeles",
                          "type": "integer"
                        },
                        "width": {
                          "description": "El ancho del viewport en píxeles",
                          "type": "integer"
                        }
                      },
                      "required": [
                        "width",
                        "height"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Screenshot",
                  "type": "object"
                },
                {
                  "properties": {
                    "all": {
                      "default": false,
                      "description": "Hace clic en todos los elementos que coinciden con el selector, no solo en el primero. No produce un error si ningún elemento coincide con el selector.",
                      "type": "boolean"
                    },
                    "selector": {
                      "description": "Selector de consulta para buscar el elemento por",
                      "example": "#load-more-button",
                      "type": "string"
                    },
                    "type": {
                      "description": "Haz clic en un elemento",
                      "enum": [
                        "click"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "selector"
                  ],
                  "title": "Click",
                  "type": "object"
                },
                {
                  "properties": {
                    "text": {
                      "description": "Texto para escribir",
                      "example": "Hello, world!",
                      "type": "string"
                    },
                    "type": {
                      "description": "Escribe texto en un campo de texto, área de texto o elemento con contenido editable (contenteditable). Nota: primero debes enfocar el elemento haciendo clic en él antes de escribir. El texto se escribirá carácter por carácter para simular la entrada desde el teclado.",
                      "enum": [
                        "write"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "text"
                  ],
                  "title": "Write text",
                  "type": "object"
                },
                {
                  "description": "Pulsa una tecla en la página. Consulta https://asawicki.info/nosense/doc/devices/keyboard/key_codes.html para ver los códigos de teclas.",
                  "properties": {
                    "key": {
                      "description": "Tecla que se debe pulsar",
                      "example": "Enter",
                      "type": "string"
                    },
                    "type": {
                      "description": "Pulsa una tecla en la página",
                      "enum": [
                        "press"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "key"
                  ],
                  "title": "Press a key",
                  "type": "object"
                },
                {
                  "properties": {
                    "direction": {
                      "default": "down",
                      "description": "Dirección de desplazamiento",
                      "enum": [
                        "up",
                        "down"
                      ],
                      "type": "string"
                    },
                    "selector": {
                      "description": "Selector de consulta para el elemento que se va a desplazar",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Desplazar la página o un elemento específico",
                      "enum": [
                        "scroll"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Scroll",
                  "type": "object"
                },
                {
                  "properties": {
                    "type": {
                      "description": "Obtiene el contenido de la página actual y devuelve la URL y el HTML.",
                      "enum": [
                        "scrape"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Scrape",
                  "type": "object"
                },
                {
                  "properties": {
                    "script": {
                      "description": "Código JavaScript a ejecutar",
                      "example": "document.querySelector('.button').click();",
                      "type": "string"
                    },
                    "type": {
                      "description": "Ejecutar código JavaScript en la página",
                      "enum": [
                        "executeJavascript"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "script"
                  ],
                  "title": "Execute JavaScript",
                  "type": "object"
                },
                {
                  "properties": {
                    "format": {
                      "default": "Letter",
                      "description": "El tamaño de página del PDF generado",
                      "enum": [
                        "A0",
                        "A1",
                        "A2",
                        "A3",
                        "A4",
                        "A5",
                        "A6",
                        "Letter",
                        "Legal",
                        "Tabloid",
                        "Ledger"
                      ],
                      "type": "string"
                    },
                    "landscape": {
                      "default": false,
                      "description": "Define si se debe generar el PDF en orientación horizontal",
                      "type": "boolean"
                    },
                    "scale": {
                      "default": 1,
                      "description": "El factor de escala del PDF resultante",
                      "type": "number"
                    },
                    "type": {
                      "description": "Genera un PDF de la página actual. El PDF se devolverá en el array `actions.pdfs` de la respuesta.",
                      "enum": [
                        "pdf"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "type"
                  ],
                  "title": "Generate PDF",
                  "type": "object"
                }
              ]
            },
            "type": "array"
          },
          "blockAds": {
            "default": true,
            "description": "Permite el bloqueo de anuncios y de avisos emergentes de cookies.",
            "type": "boolean"
          },
          "excludeTags": {
            "description": "Etiquetas que se excluirán de la salida.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "formats": {
            "$ref": "#/components/schemas/Formats"
          },
          "headers": {
            "description": "Encabezados que se enviarán con la solicitud. Pueden usarse para enviar cookies, user-agent, etc.",
            "type": "object"
          },
          "includeTags": {
            "description": "Etiquetas que incluir en la salida.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "location": {
            "description": "Configuración de ubicación para la solicitud. Cuando se especifica, usará un proxy adecuado si está disponible y emulará la configuración de idioma y zona horaria correspondientes. Si no se especifica, su valor predeterminado es \"US\".",
            "properties": {
              "country": {
                "default": "US",
                "description": "Código de país ISO 3166-1 alfa-2 (p. ej., «US», «AU», «DE», «JP»)",
                "pattern": "^[A-Z]{2}$",
                "type": "string"
              },
              "languages": {
                "description": "Idiomas y configuraciones regionales preferidos para la solicitud en orden de prioridad. De forma predeterminada, se usa el idioma correspondiente a la ubicación especificada. Consulta https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language",
                "items": {
                  "example": "en-US",
                  "type": "string"
                },
                "type": "array"
              }
            },
            "type": "object"
          },
          "maxAge": {
            "default": 172800000,
            "description": "Devuelve una versión en caché de la página si su antigüedad es menor que este valor en milisegundos. Si la versión en caché de la página es más antigua que este valor, la página se volverá a extraer. Si no necesitas datos extremadamente recientes, activar esta opción puede acelerar tus extracciones hasta un 500 %. El valor predeterminado es 2 días.",
            "type": "integer"
          },
          "mobile": {
            "default": false,
            "description": "Configúralo en `true` si quieres emular el scraping desde un dispositivo móvil. Útil para probar páginas responsive y tomar capturas de pantalla de la versión móvil.",
            "type": "boolean"
          },
          "onlyMainContent": {
            "default": true,
            "description": "Devuelve únicamente el contenido principal de la página, excluyendo encabezados, navegación, pies de página, etc.",
            "type": "boolean"
          },
          "parsers": {
            "default": [
              "pdf"
            ],
            "description": "Controla cómo se procesan los archivos durante el scraping. Cuando se incluye \"pdf\" (valor predeterminado), el contenido del PDF se extrae y se convierte al formato Markdown, con la facturación basada en el número de páginas (1 crédito por página). Cuando se pasa un array vacío, el archivo PDF se devuelve en codificación base64 con una tarifa plana de 1 crédito en total.",
            "items": {
              "enum": [
                "pdf"
              ],
              "type": "string"
            },
            "type": "array"
          },
          "proxy": {
            "default": "auto",
            "description": "Especifica el tipo de proxy que se va a usar.\n\n - **basic**: Proxies para hacer scraping de sitios con soluciones anti‑bot nulas o básicas. Son rápidos y normalmente funcionan.\n - **enhanced**: Proxies mejorados para hacer scraping de sitios con soluciones anti‑bot avanzadas. Son más lentos, pero más fiables en ciertos sitios. Se facturan al mismo coste en créditos que **basic**.\n - **auto**: Firecrawl reintentará automáticamente el scraping con proxies mejorados si el proxy básico falla. Los proxies mejorados no conllevan ningún recargo de créditos, por lo que, en cualquier caso, solo se facturará el coste normal.\n\nSi no especificas un proxy, Firecrawl usará **auto** por defecto.",
            "enum": [
              "basic",
              "enhanced",
              "auto"
            ],
            "type": "string"
          },
          "removeBase64Images": {
            "default": true,
            "description": "Elimina todas las imágenes en base 64 de la salida, ya que pueden resultar excesivamente largas. El texto alternativo de la imagen se mantiene en la salida, pero la URL se reemplaza por un marcador de posición.",
            "type": "boolean"
          },
          "skipTlsVerification": {
            "default": true,
            "description": "Omitir la verificación de certificados TLS al realizar solicitudes",
            "type": "boolean"
          },
          "storeInCache": {
            "default": true,
            "description": "Si se establece en true, la página se almacenará en el índice y la caché de Firecrawl. Establecerlo en false es útil si tu actividad de scraping puede plantear problemas de protección de datos. Usar algunos parámetros asociados con scraping de datos sensibles (acciones, headers) hará que este parámetro sea false.",
            "type": "boolean"
          },
          "timeout": {
            "description": "Tiempo de espera de la solicitud en milisegundos.",
            "type": "integer"
          },
          "waitFor": {
            "default": 0,
            "description": "Especifica un retardo en milisegundos antes de obtener el contenido, permitiendo que la página tenga tiempo suficiente para cargarse.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ScrapeResponse": {
        "properties": {
          "data": {
            "properties": {
              "actions": {
                "description": "Resultados de las acciones especificadas en el parámetro `actions`. Solo está presente si se proporciona el parámetro `actions` en la solicitud",
                "nullable": true,
                "properties": {
                  "javascriptReturns": {
                    "description": "Valores devueltos por JavaScript, en el mismo orden que las acciones executeJavascript proporcionadas.",
                    "items": {
                      "properties": {
                        "type": {
                          "type": "string"
                        },
                        "value": {}
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "pdfs": {
                    "description": "PDF generados, en el mismo orden en que se proporcionaron las acciones de pdf.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "scrapes": {
                    "description": "Extrae el contenido en el mismo orden que las acciones de scraping indicadas.",
                    "items": {
                      "properties": {
                        "html": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "screenshots": {
                    "description": "URLs de las capturas de pantalla, en el mismo orden que las acciones de captura de pantalla indicadas.",
                    "items": {
                      "format": "url",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "changeTracking": {
                "description": "Información de seguimiento de cambios si `changeTracking` está en `formats`. Solo se incluye cuando se solicita el formato `changeTracking`.",
                "nullable": true,
                "properties": {
                  "changeStatus": {
                    "description": "El resultado de la comparación entre las dos versiones de la página. \"new\" significa que esta página no existía anteriormente, \"same\" significa que el contenido no ha cambiado, \"changed\" significa que el contenido ha cambiado y \"removed\" significa que la página se eliminó.",
                    "enum": [
                      "new",
                      "same",
                      "changed",
                      "removed"
                    ],
                    "type": "string"
                  },
                  "diff": {
                    "description": "Diff al estilo Git de los cambios cuando se usa el modo `git-diff`. Solo está presente cuando el modo se establece en `git-diff`.",
                    "nullable": true,
                    "type": "string"
                  },
                  "json": {
                    "description": "Resultados de comparación JSON cuando se usa el modo `json`. Solo está presente cuando el modo se establece en `json`. Esto generará una lista de todas las claves y sus valores de los scrapes `previous` y `current`, según el tipo definido en el `schema`. Ejemplo [aquí](/features/change-tracking)",
                    "nullable": true,
                    "type": "object"
                  },
                  "previousScrapeAt": {
                    "description": "La marca de tiempo del rastreo anterior con la que se compara la página actual. Null si no existe un rastreo anterior.",
                    "format": "date-time",
                    "nullable": true,
                    "type": "string"
                  },
                  "visibility": {
                    "description": "La visibilidad de la página o URL actual. 'visible' significa que la URL se descubrió mediante una ruta orgánica (enlaces o sitemap), 'hidden' significa que la URL se descubrió desde la memoria de rastreos anteriores.",
                    "enum": [
                      "visible",
                      "hidden"
                    ],
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "html": {
                "description": "Versión HTML del contenido de la página si `html` se incluye en `formats`",
                "nullable": true,
                "type": "string"
              },
              "links": {
                "description": "Lista de enlaces de la página si `links` está incluido en `formats`",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "markdown": {
                "type": "string"
              },
              "metadata": {
                "properties": {
                  "<any other metadata> ": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "error": {
                    "description": "Mensaje de error de la página",
                    "nullable": true,
                    "type": "string"
                  },
                  "language": {
                    "nullable": true,
                    "type": "string"
                  },
                  "sourceURL": {
                    "format": "uri",
                    "type": "string"
                  },
                  "statusCode": {
                    "description": "El código de estado de la página",
                    "type": "integer"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "rawHtml": {
                "description": "Contenido HTML sin procesar de la página si `rawHtml` se incluye en `formats`",
                "nullable": true,
                "type": "string"
              },
              "screenshot": {
                "description": "Captura de pantalla de la página si `screenshot` está en `formats`",
                "nullable": true,
                "type": "string"
              },
              "summary": {
                "description": "Resumen de la página si `summary` está incluido en `formats`",
                "nullable": true,
                "type": "string"
              },
              "warning": {
                "description": "Puede mostrarse al usar la extracción mediante LLM. El mensaje de advertencia te avisará de cualquier problema con la extracción.",
                "nullable": true,
                "type": "string"
              }
            },
            "type": "object"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "contact": {
      "email": "support@firecrawl.dev",
      "name": "Firecrawl Support",
      "url": "https://firecrawl.dev/support"
    },
    "description": "API para interactuar con los servicios de Firecrawl y realizar tareas de scraping y rastreo web.",
    "title": "Firecrawl API",
    "version": "v2"
  },
  "openapi": "3.0.0",
  "paths": {
    "/batch/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "ignoreInvalidURLs": {
                        "default": true,
                        "description": "Si se especifican URL no válidas en el arreglo urls, se ignorarán. En lugar de que provoquen el fallo de toda la solicitud, se creará un scraping por lotes usando las URL válidas restantes, y las URL no válidas se devolverán en el campo invalidURLs de la respuesta.",
                        "type": "boolean"
                      },
                      "maxConcurrency": {
                        "description": "Número máximo de extracciones concurrentes. Este parámetro te permite establecer un límite de concurrencia para este lote de extracción. Si no se especifica, el lote de extracción se ajusta al límite de concurrencia de tu equipo.",
                        "type": "integer"
                      },
                      "urls": {
                        "items": {
                          "description": "La URL que se va a extraer",
                          "format": "uri",
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "webhook": {
                        "description": "Objeto de especificación de webhook.",
                        "properties": {
                          "events": {
                            "description": "Tipo de eventos que se enviarán a la URL del webhook. (por defecto: todos)",
                            "items": {
                              "enum": [
                                "completed",
                                "page",
                                "failed",
                                "started"
                              ],
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "headers": {
                            "additionalProperties": {
                              "type": "string"
                            },
                            "description": "Encabezados que se deben enviar a la URL del webhook.",
                            "type": "object"
                          },
                          "metadata": {
                            "additionalProperties": true,
                            "description": "Metadatos personalizados que se incluirán en todos los payloads de webhook de este rastreo",
                            "type": "object"
                          },
                          "url": {
                            "description": "La URL a la que se enviará el webhook. Se activará cuando se inicie el scraping por lotes (batch_scrape.started), en cada página procesada (batch_scrape.page) y cuando el scraping por lotes finalice (batch_scrape.completed o batch_scrape.failed). La respuesta será la misma que la del endpoint `/scrape`.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "urls"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Si se establece en true, no se conservarán datos de este scraping por lotes. Para activar esta función, ponte en contacto con help@firecrawl.dev",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeResponseObj"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Realiza scraping de varias URL y, opcionalmente, extrae información con un LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/batch/scrape/{id}": {
      "delete": {
        "operationId": "cancelBatchScrape",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "example": "Batch scrape job successfully cancelled.",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Cancelación completada"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Batch scrape job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "No se encontró el trabajo de scraping por lotes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancelar un trabajo de scraping en lote",
        "tags": [
          "Scraping"
        ]
      },
      "get": {
        "operationId": "getBatchScrapeStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeStatusResponseObj"
                }
              }
            },
            "description": "Respuesta correcta"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtén el estado de un trabajo de scraping por lotes",
        "tags": [
          "Scraping"
        ]
      },
      "parameters": [
        {
          "description": "El ID del proceso de scraping por lotes",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/batch/scrape/{id}/errors": {
      "get": {
        "operationId": "getBatchScrapeErrors",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlErrorsResponseObj"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener los errores de una tarea de scraping por lotes",
        "tags": [
          "Scraping"
        ]
      },
      "parameters": [
        {
          "description": "El ID del proceso de scraping por lotes",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/crawl": {
      "post": {
        "operationId": "crawlUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "allowExternalLinks": {
                    "default": false,
                    "description": "Permite que el rastreador siga enlaces a sitios externos.",
                    "type": "boolean"
                  },
                  "allowSubdomains": {
                    "default": false,
                    "description": "Permite que el rastreador siga enlaces a subdominios del dominio principal.",
                    "type": "boolean"
                  },
                  "crawlEntireDomain": {
                    "default": false,
                    "description": "Permite que el crawler siga enlaces internos a URLs hermanas o padre, no solo a rutas hijas.\n\nfalse: Solo rastrea URLs más profundas (hijas).\n→ p. ej. /features/feature-1 → /features/feature-1/tips ✅\n→ No seguirá /pricing ni / ❌\n\ntrue: Rastrea cualquier enlace interno, incluidas URLs hermanas y padre.\n→ p. ej. /features/feature-1 → /pricing, /, etc. ✅\n\nUsa true para obtener una cobertura interna más amplia, más allá de rutas anidadas.",
                    "type": "boolean"
                  },
                  "delay": {
                    "description": "Intervalo en segundos entre scrapes. Ayuda a respetar los límites de frecuencia del sitio web.",
                    "type": "number"
                  },
                  "excludePaths": {
                    "description": "Patrones de expresiones regulares para rutas (pathname) de URL que excluyen del rastreo las URL coincidentes. Por ejemplo, si defines `\"excludePaths\": [\"blog/.*\"]` para la URL base firecrawl.dev, se excluirán todos los resultados que coincidan con ese patrón, como https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "ignoreQueryParameters": {
                    "default": false,
                    "description": "No vuelvas a hacer scraping de la misma ruta con distintos parámetros de consulta (o sin parámetros).",
                    "type": "boolean"
                  },
                  "includePaths": {
                    "description": "Patrones de expresiones regulares para el pathname de la URL que determinan qué URLs se incluyen en el rastreo. Solo las rutas que coincidan con los patrones especificados se incluirán en la respuesta. Por ejemplo, si configuras `\"includePaths\": [\"blog/.*\"]` para la URL base firecrawl.dev, solo se incluirán los resultados que coincidan con ese patrón, como https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "limit": {
                    "default": 10000,
                    "description": "Número máximo de páginas para rastrear. El límite predeterminado es 10.000.",
                    "type": "integer"
                  },
                  "maxConcurrency": {
                    "description": "Número máximo de scrapes simultáneos. Este parámetro te permite definir un límite de concurrencia para este rastreo. Si no se especifica, el rastreo se ajusta al límite de concurrencia de tu equipo.",
                    "type": "integer"
                  },
                  "maxDiscoveryDepth": {
                    "description": "Profundidad máxima de rastreo basada en el orden de descubrimiento. El sitio raíz y las páginas del sitemap tienen una profundidad de descubrimiento de 0. Por ejemplo, si la configuras en 1 y activas ignoreSitemap, solo se rastreará la URL introducida y todas las URL que estén enlazadas en esa página.",
                    "type": "integer"
                  },
                  "prompt": {
                    "description": "Un prompt que se usará para generar las opciones del crawler (todos los parámetros de abajo) a partir de lenguaje natural. Los parámetros establecidos explícitamente tendrán prioridad sobre los equivalentes generados.",
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "sitemap": {
                    "default": "include",
                    "description": "Modo de sitemap durante el rastreo. Si lo configuras en «skip», el rastreador ignorará el sitemap del sitio web y solo rastreará la URL introducida y descubrirá páginas a partir de ahí.",
                    "enum": [
                      "skip",
                      "include"
                    ],
                    "type": "string"
                  },
                  "url": {
                    "description": "La URL base desde la que comenzar el rastreo",
                    "format": "uri",
                    "type": "string"
                  },
                  "webhook": {
                    "description": "Un objeto de especificación de un webhook.",
                    "properties": {
                      "events": {
                        "description": "Tipo de eventos que se enviarán a la URL del webhook. (valor predeterminado: todos)",
                        "items": {
                          "enum": [
                            "completed",
                            "page",
                            "failed",
                            "started"
                          ],
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "headers": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "Encabezados que se enviarán a la URL del webhook.",
                        "type": "object"
                      },
                      "metadata": {
                        "additionalProperties": true,
                        "description": "Metadatos personalizados que se incluirán en todos los payloads de webhook de este rastreo",
                        "type": "object"
                      },
                      "url": {
                        "description": "La URL a la que se enviará el webhook. Este se activará cuando se inicie el rastreo (crawl.started), por cada página rastreada (crawl.page) y cuando se complete el rastreo (crawl.completed o crawl.failed). La respuesta será la misma que la del endpoint `/scrape`.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  "zeroDataRetention": {
                    "default": false,
                    "description": "Si se establece en true, se desactivará la retención de datos para este rastreo. Para habilitar esta función, ponte en contacto con help@firecrawl.dev",
                    "type": "boolean"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlResponse"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rastrear varias URL según las opciones proporcionadas",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/active": {
      "get": {
        "operationId": "getActiveCrawls",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "crawls": {
                      "items": {
                        "properties": {
                          "id": {
                            "description": "El identificador único del rastreo",
                            "format": "uuid",
                            "type": "string"
                          },
                          "options": {
                            "description": "Opciones del rastreador usadas en este rastreo",
                            "properties": {
                              "scrapeOptions": {
                                "$ref": "#/components/schemas/ScrapeOptions"
                              }
                            },
                            "type": "object"
                          },
                          "teamId": {
                            "description": "ID del equipo propietario del rastreo",
                            "type": "string"
                          },
                          "url": {
                            "description": "La URL de inicio del rastreo",
                            "format": "uri",
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "teamId",
                          "url",
                          "status",
                          "options"
                        ],
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "success",
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas peticiones"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener todos los rastreos activos del equipo autenticado",
        "tags": [
          "Crawling"
        ]
      }
    },
    "/crawl/{id}": {
      "delete": {
        "operationId": "cancelCrawl",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "status": {
                      "enum": [
                        "cancelled"
                      ],
                      "example": "cancelled",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Cancelación correcta"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Crawl job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Trabajo de rastreo no encontrado"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Cancelar una tarea de rastreo",
        "tags": [
          "Crawling"
        ]
      },
      "get": {
        "operationId": "getCrawlStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlStatusResponseObj"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtén el estado de una tarea de rastreo",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "El ID de la tarea de rastreo",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/crawl/{id}/errors": {
      "get": {
        "operationId": "getCrawlErrors",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CrawlErrorsResponseObj"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener los errores de una tarea de rastreo",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "El ID de la tarea de rastreo",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/extract": {
      "post": {
        "operationId": "extractData",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "enableWebSearch": {
                    "default": false,
                    "description": "Cuando sea true, la extracción utilizará la búsqueda web para encontrar datos adicionales",
                    "type": "boolean"
                  },
                  "ignoreInvalidURLs": {
                    "default": true,
                    "description": "Si se especifican URLs no válidas en el array urls, se ignorarán. En lugar de hacer que falle toda la solicitud, se realizará una extracción con las URLs válidas restantes y las URLs no válidas se devolverán en el campo invalidURLs de la respuesta.",
                    "type": "boolean"
                  },
                  "ignoreSitemap": {
                    "default": false,
                    "description": "Si es true, se ignorarán los archivos sitemap.xml durante el escaneo del sitio web",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Si se establece en true, también se rastrearán los subdominios de las URL proporcionadas",
                    "type": "boolean"
                  },
                  "prompt": {
                    "description": "Prompt que guía el proceso de extracción",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Esquema que define la estructura de los datos extraídos. Debe ajustarse a [JSON Schema](https://json-schema.org/).",
                    "type": "object"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "showSources": {
                    "default": false,
                    "description": "Cuando es `true`, las fuentes utilizadas para extraer los datos se incluirán en la respuesta como la clave `sources`.",
                    "type": "boolean"
                  },
                  "urls": {
                    "items": {
                      "description": "Las URL de las que se extraerán datos. Las URL deben estar en formato glob.",
                      "format": "uri",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "urls"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractResponse"
                }
              }
            },
            "description": "Extracción exitosa"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid input data.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Solicitud no válida"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Extrae datos estructurados de páginas con LLMs",
        "tags": [
          "Extraction"
        ]
      }
    },
    "/extract/{id}": {
      "get": {
        "operationId": "getExtractStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExtractStatusResponse"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener el estado de una tarea de extracción",
        "tags": [
          "Extraction"
        ]
      },
      "parameters": [
        {
          "description": "El ID del trabajo de extracción",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/map": {
      "post": {
        "operationId": "mapUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreQueryParameters": {
                    "default": true,
                    "description": "No devolver URLs con parámetros de consulta",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Incluir subdominios del sitio",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5000,
                    "description": "Número máximo de enlaces que se devolverán",
                    "maximum": 30000,
                    "type": "integer"
                  },
                  "search": {
                    "description": "Consulta de búsqueda que se utilizará para el mapeo. Durante la fase alfa, la parte “inteligente” de la funcionalidad de búsqueda está limitada a 500 resultados. Sin embargo, si map encuentra más resultados, no se aplica ningún límite.",
                    "type": "string"
                  },
                  "sitemap": {
                    "default": "include",
                    "description": "Modo de sitemap al mapear. Si lo configuras en `skip`, no se utilizará el sitemap para encontrar URL. Si lo configuras en `only`, solo se devolverán las URL que estén en el sitemap. De forma predeterminada (`include`), el sitemap y otros métodos se utilizarán conjuntamente para encontrar URL.",
                    "enum": [
                      "skip",
                      "include",
                      "only"
                    ],
                    "type": "string"
                  },
                  "timeout": {
                    "description": "Tiempo de espera en milisegundos. De forma predeterminada, no hay tiempo de espera.",
                    "type": "integer"
                  },
                  "url": {
                    "description": "La URL base desde la que se iniciará el rastreo",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MapResponse"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Mapear múltiples URL según las opciones",
        "tags": [
          "Mapping"
        ]
      }
    },
    "/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrl",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "url": {
                        "description": "La URL que se va a rastrear",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Si es true, se desactivará la retención de datos para este scrape. Para activar esta función, ponte en contacto con help@firecrawl.dev",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScrapeResponse"
                }
              }
            },
            "description": "Respuesta correcta"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Se requiere pago"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request rate limit exceeded. Please wait and try again later.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Demasiadas solicitudes"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "code": {
                      "example": "UNKNOWN_ERROR",
                      "type": "string"
                    },
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Rastrea una sola URL y, opcionalmente, extrae información con un LLM",
        "tags": [
          "Scraping"
        ]
      }
    },
    "/search": {
      "post": {
        "operationId": "searchAndScrape",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreInvalidURLs": {
                    "default": false,
                    "description": "Excluye de los resultados de búsqueda las URL que no son válidas para otros endpoints de Firecrawl. Esto ayuda a reducir errores si canalizas datos desde la búsqueda a otros endpoints de la API de Firecrawl.",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5,
                    "description": "Número máximo de resultados a devolver",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "location": {
                    "description": "Parámetro de ubicación para resultados de búsqueda",
                    "type": "string"
                  },
                  "query": {
                    "description": "La consulta de búsqueda",
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/ScrapeOptions"
                      }
                    ],
                    "default": {},
                    "description": "Opciones para scrapear resultados de búsqueda"
                  },
                  "sources": {
                    "default": [
                      "web"
                    ],
                    "description": "Fuentes en las que buscar. Determinan los arrays disponibles en la respuesta.",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "location": {
                              "description": "Parámetro de ubicación para resultados de búsqueda",
                              "type": "string"
                            },
                            "tbs": {
                              "description": "Parámetro de búsqueda basado en el tiempo. Permite intervalos de tiempo predefinidos (`qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`) y rangos de fechas personalizados (`cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY`)",
                              "type": "string"
                            },
                            "type": {
                              "enum": [
                                "web"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "title": "Web",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "type": {
                              "enum": [
                                "images"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "title": "Images",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "type": {
                              "enum": [
                                "news"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "type"
                          ],
                          "title": "News",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "tbs": {
                    "description": "Parámetro de búsqueda basado en el tiempo. Admite intervalos de tiempo predefinidos (`qdr:h`, `qdr:d`, `qdr:w`, `qdr:m`, `qdr:y`) e intervalos de fechas personalizados (`cdr:1,cd_min:MM/DD/YYYY,cd_max:MM/DD/YYYY`).",
                    "type": "string"
                  },
                  "timeout": {
                    "default": 60000,
                    "description": "Tiempo de espera en milisegundos",
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "description": "Los resultados de la búsqueda. Los arrays disponibles dependerán de las fuentes especificadas en la solicitud. De forma predeterminada, se devolverá el array `web`.",
                      "properties": {
                        "images": {
                          "items": {
                            "properties": {
                              "imageHeight": {
                                "description": "Altura de la imagen",
                                "type": "integer"
                              },
                              "imageUrl": {
                                "description": "URL de la imagen",
                                "type": "string"
                              },
                              "imageWidth": {
                                "description": "Ancho de la imagen",
                                "type": "integer"
                              },
                              "position": {
                                "description": "Posición del resultado de la búsqueda",
                                "type": "integer"
                              },
                              "title": {
                                "description": "Título del resultado de la búsqueda",
                                "type": "string"
                              },
                              "url": {
                                "description": "URL del resultado de la búsqueda",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "news": {
                          "items": {
                            "properties": {
                              "date": {
                                "description": "Fecha del artículo",
                                "type": "string"
                              },
                              "html": {
                                "description": "Contenido HTML si se solicita en formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "imageUrl": {
                                "description": "URL de la imagen del artículo",
                                "type": "string"
                              },
                              "links": {
                                "description": "Enlaces encontrados si se solicitan en formats",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "markdown": {
                                "description": "Contenido en formato Markdown si se solicitó scraping",
                                "nullable": true,
                                "type": "string"
                              },
                              "metadata": {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "error": {
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "sourceURL": {
                                    "type": "string"
                                  },
                                  "statusCode": {
                                    "type": "integer"
                                  },
                                  "title": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "position": {
                                "description": "Posición del artículo",
                                "type": "integer"
                              },
                              "rawHtml": {
                                "description": "Contenido HTML sin procesar, si se solicita en formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "screenshot": {
                                "description": "URL de la captura de pantalla si se solicita en formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "snippet": {
                                "description": "Fragmento del artículo",
                                "type": "string"
                              },
                              "title": {
                                "description": "Título del artículo",
                                "type": "string"
                              },
                              "url": {
                                "description": "URL del artículo",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "web": {
                          "items": {
                            "properties": {
                              "description": {
                                "description": "Descripción del resultado de la búsqueda",
                                "type": "string"
                              },
                              "html": {
                                "description": "Contenido HTML si se solicita en formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "links": {
                                "description": "Enlaces encontrados si se solicitan en formats",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              },
                              "markdown": {
                                "description": "Contenido en Markdown si se ha solicitado scraping",
                                "nullable": true,
                                "type": "string"
                              },
                              "metadata": {
                                "properties": {
                                  "description": {
                                    "type": "string"
                                  },
                                  "error": {
                                    "nullable": true,
                                    "type": "string"
                                  },
                                  "sourceURL": {
                                    "type": "string"
                                  },
                                  "statusCode": {
                                    "type": "integer"
                                  },
                                  "title": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "rawHtml": {
                                "description": "Contenido HTML sin procesar si se solicita en formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "screenshot": {
                                "description": "URL de la captura de pantalla si se solicita en formats",
                                "nullable": true,
                                "type": "string"
                              },
                              "title": {
                                "description": "Título del resultado de la búsqueda",
                                "type": "string"
                              },
                              "url": {
                                "description": "URL del resultado de la búsqueda",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "type": "boolean"
                    },
                    "warning": {
                      "description": "Mensaje de advertencia si se produce algún problema",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "408": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Request timed out",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tiempo de espera de la solicitud excedido"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "code": {
                      "example": "UNKNOWN_ERROR",
                      "type": "string"
                    },
                    "error": {
                      "example": "An unexpected error occurred on the server.",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Buscar y, opcionalmente, extraer datos de los resultados de búsqueda",
        "tags": [
          "Search"
        ]
      }
    },
    "/team/credit-usage": {
      "get": {
        "operationId": "getCreditUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billingPeriodEnd": {
                          "description": "Fecha de finalización del período de facturación. null si se utiliza el plan gratuito",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billingPeriodStart": {
                          "description": "Fecha de inicio del período de facturación. null si utilizas el plan gratuito",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "planCredits": {
                          "description": "Número de créditos del plan. Esto no incluye créditos provenientes de cupones ni créditos añadidos mediante pago por uso.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remainingCredits": {
                          "description": "Créditos restantes del equipo",
                          "example": 1000,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Could not find credit usage information",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Información sobre el uso de créditos no encontrada"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching credit usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener los créditos restantes del equipo autenticado",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/credit-usage/historical": {
      "get": {
        "operationId": "getHistoricalCreditUsage",
        "parameters": [
          {
            "description": "Obtener el historial de uso de créditos por clave de API",
            "in": "query",
            "name": "byApiKey",
            "required": false,
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "periods": {
                      "items": {
                        "properties": {
                          "apiKey": {
                            "description": "Nombre de la clave de API utilizada en el período de facturación. null si byApiKey es false (predeterminado)",
                            "nullable": true,
                            "type": "string"
                          },
                          "endDate": {
                            "description": "Fecha de fin del período de facturación",
                            "example": "2025-01-31T23:59:59Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "startDate": {
                            "description": "Fecha de inicio del período de facturación",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalCredits": {
                            "description": "Total de créditos consumidos durante el período de facturación",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching historical credit usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener el historial de uso de créditos del equipo autenticado",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage": {
      "get": {
        "operationId": "getTokenUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billingPeriodEnd": {
                          "description": "Fecha de fin del período de facturación. null si se usa el plan gratuito",
                          "example": "2025-01-31T23:59:59Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "billingPeriodStart": {
                          "description": "Fecha de inicio del período de facturación. null si utilizas el plan gratuito",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "planTokens": {
                          "description": "Número de tokens del plan. Esto no incluye los tokens de cupones.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remainingTokens": {
                          "description": "Número de tokens restantes del equipo",
                          "example": 1000,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta correcta"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Could not find token usage information",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "No se encontró información sobre el uso de tokens"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching token usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener tokens restantes para el equipo autenticado (solo Extract)",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage/historical": {
      "get": {
        "operationId": "getHistoricalTokenUsage",
        "parameters": [
          {
            "description": "Obtener el uso histórico de tokens por clave de API",
            "in": "query",
            "name": "byApiKey",
            "required": false,
            "schema": {
              "default": false,
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "periods": {
                      "items": {
                        "properties": {
                          "apiKey": {
                            "description": "Nombre de la clave de API utilizada durante el período de facturación. null si byApiKey es false (valor predeterminado)",
                            "nullable": true,
                            "type": "string"
                          },
                          "endDate": {
                            "description": "Fecha de fin del período de facturación",
                            "example": "2025-01-31T23:59:59Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "startDate": {
                            "description": "Fecha de inicio del periodo de facturación",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalTokens": {
                            "description": "Número total de tokens utilizados en el período de facturación",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Internal server error while fetching historical token usage",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Error del servidor"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener el uso histórico de tokens del equipo autenticado (solo Extract)",
        "tags": [
          "Billing"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.firecrawl.dev/v2"
    }
  ]
}