{
  "components": {
    "schemas": {
      "BaseScrapeOptions": {
        "properties": {
          "actions": {
            "description": "Acciones que se deben realizar en la página antes de extraer el contenido",
            "items": {
              "oneOf": [
                {
                  "properties": {
                    "milliseconds": {
                      "description": "Número de milisegundos que esperar",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "selector": {
                      "description": "Query selector para encontrar el elemento por",
                      "example": "#my-element",
                      "type": "string"
                    },
                    "type": {
                      "description": "Espera una cantidad determinada 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 toda la página o solo del área visible actual (viewport).",
                      "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": "Realiza una captura de pantalla. Los enlaces se devolverán en el array `actions.screenshots` de la respuesta.",
                      "enum": [
                        "screenshot"
                      ],
                      "type": "string"
                    }
                  },
                  "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 genera un error si no hay elementos que coincidan con el selector.",
                      "type": "boolean"
                    },
                    "selector": {
                      "description": "Selector de consulta para localizar el elemento mediante",
                      "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 entrada, un área de texto o un elemento con contenteditable. Nota: primero debes enfocar el elemento usando una acción de 'click' antes de escribir. El texto se escribirá carácter por carácter para simular la entrada por 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 obtener 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 del elemento que se 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": "Extrae 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": "Habilita el bloqueo de anuncios y de ventanas emergentes de cookies.",
            "type": "boolean"
          },
          "excludeTags": {
            "description": "Etiquetas que se excluirán del resultado.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "headers": {
            "description": "Cabeceras que se enviarán con la solicitud. Pueden utilizarse para enviar cookies, user-agent, etc.",
            "type": "object"
          },
          "includeTags": {
            "description": "Etiquetas que se deben incluir en la salida.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "jsonOptions": {
            "description": "Objeto de opciones JSON",
            "properties": {
              "prompt": {
                "description": "Prompt que se usará para la extracción sin esquema (opcional)",
                "type": "string"
              },
              "schema": {
                "description": "Esquema que se utilizará para la extracción (opcional). Debe cumplir con [JSON Schema](https://json-schema.org/).",
                "type": "object"
              },
              "systemPrompt": {
                "description": "El prompt del sistema que se usará para la extracción (opcional)",
                "type": "string"
              }
            },
            "type": "object"
          },
          "location": {
            "description": "Configuración de ubicación de la solicitud. Cuando se especifica, se utilizará un proxy adecuado, si está disponible, y se emularán los ajustes de idioma y zona horaria correspondientes. Si no se especifica, el 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 utiliza el idioma de 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": 0,
            "description": "Devuelve una versión en caché de la página si tiene una antigüedad menor que este valor en milisegundos. Si la versión en caché de la página es más antigua que este valor, se volverá a hacer scraping de la página. Si no necesitas datos extremadamente recientes, activar esto puede acelerar tus operaciones de scraping hasta un 500%. El valor predeterminado es 0, lo que desactiva la caché.",
            "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 móviles.",
            "type": "boolean"
          },
          "onlyMainContent": {
            "default": true,
            "description": "Devuelve únicamente el contenido principal de la página, excluyendo encabezados, elementos de navegación, pies de página, etc.",
            "type": "boolean"
          },
          "parsePDF": {
            "default": true,
            "description": "Controla cómo se procesan los archivos PDF durante el scraping. Cuando es true, el contenido del PDF se extrae y se convierte a formato Markdown, y la facturación se basa en el número de páginas (1 crédito por página). Cuando es false, el archivo PDF se devuelve en codificación base64 con una tarifa plana de 1 crédito en total.",
            "type": "boolean"
          },
          "proxy": {
            "description": "Especifica el tipo de proxy que se utilizará.\n\n - **basic**: Proxies para hacer scraping de sitios web con soluciones anti‑bots nulas o básicas. Son rápidos y normalmente funcionan.\n - **enhanced**: Proxies mejorados para hacer scraping de sitios web con soluciones anti‑bots avanzadas. Son más lentos, pero más fiables en ciertos sitios. Se facturan al mismo costo en créditos que basic.\n - **auto**: Firecrawl reintentará automáticamente el scraping con proxies mejorados si el proxy basic falla. Los proxies mejorados no conllevan ningún recargo de créditos, por lo que, de cualquier manera, solo se cobrará el coste normal.\n\nSi no especificas un tipo de proxy, Firecrawl usará basic por defecto.",
            "enum": [
              "basic",
              "enhanced",
              "auto"
            ],
            "type": "string"
          },
          "removeBase64Images": {
            "default": true,
            "description": "Elimina todas las imágenes codificadas en base64 de la salida, que pueden ser extremadamente largas. El texto alternativo (atributo alt) de la imagen se mantiene en la salida, pero la URL se sustituye por un marcador de posición.",
            "type": "boolean"
          },
          "skipTlsVerification": {
            "default": false,
            "description": "Omitir la verificación del certificado TLS al realizar solicitudes",
            "type": "boolean"
          },
          "storeInCache": {
            "default": true,
            "description": "Si es 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 implicar problemas de protección de datos. El uso de algunos parámetros asociados con scraping de datos sensibles (acciones, headers) forzará que este parámetro sea false.",
            "type": "boolean"
          },
          "timeout": {
            "default": 30000,
            "description": "Tiempo de espera de la solicitud en milisegundos",
            "type": "integer"
          },
          "waitFor": {
            "default": 0,
            "description": "Especifica un retraso, en milisegundos, antes de recuperar el contenido, permitiendo que la página tenga tiempo suficiente para cargarse.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "BatchScrapeResponseObj": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs es true, este será un array que contiene 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"
          },
          "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": "Número de créditos utilizados para el scraping por lotes.",
            "type": "integer"
          },
          "data": {
            "description": "Los datos de la extracción 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 verdadero",
                  "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` es `true`",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "La fecha y la hora en que vencerá la extracción por lotes.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "La URL para obtener los siguientes 10 MB de datos. Se devuelve si el scraping por lotes no ha finalizado o si la respuesta supera los 10 MB.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "El estado actual del proceso de scraping por lotes. Puede ser `scraping`, `completed` o `failed`.",
            "type": "string"
          },
          "total": {
            "description": "El número total de páginas que se intentaron extraer mediante scraping.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "CrawlErrorsResponseObj": {
        "properties": {
          "errors": {
            "description": "Trabajos de scraping con errores y detalles de 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 rastreada",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "robotsBlocked": {
            "description": "Lista de URLs que se intentaron rastrear pero que 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": "El número de páginas que se han rastreado correctamente.",
            "type": "integer"
          },
          "creditsUsed": {
            "description": "El número de créditos consumidos por el rastreo.",
            "type": "integer"
          },
          "data": {
            "description": "Los datos del rastreo.",
            "items": {
              "properties": {
                "html": {
                  "description": "Versión HTML del contenido de la página si `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": "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` es true",
                  "nullable": true,
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "expiresAt": {
            "description": "Fecha y hora de vencimiento del rastreo.",
            "format": "date-time",
            "type": "string"
          },
          "next": {
            "description": "La URL para obtener los siguientes 10 MB de datos. Se devuelve si el rastreo no ha finalizado o si la respuesta es mayor de 10 MB.",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "El estado actual del proceso de rastreo. Puede ser `scraping`, `completed` o `failed`.",
            "type": "string"
          },
          "total": {
            "description": "El número total de páginas que se intentaron rastrear.",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ExtractResponse": {
        "properties": {
          "id": {
            "type": "string"
          },
          "invalidURLs": {
            "description": "Si ignoreInvalidURLs es true, este será un array que contenga las URLs no válidas especificadas en la solicitud. Si no hubo URLs 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 de la tarea de extracción",
            "enum": [
              "completed",
              "processing",
              "failed",
              "cancelled"
            ],
            "type": "string"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "MapResponse": {
        "properties": {
          "links": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ScrapeOptions": {
        "allOf": [
          {
            "$ref": "#/components/schemas/BaseScrapeOptions"
          },
          {
            "properties": {
              "changeTrackingOptions": {
                "description": "Opciones de seguimiento de cambios (beta). Solo se aplica cuando 'changeTracking' está incluido en formats. También se debe especificar el formato 'markdown' al usar el seguimiento de cambios.",
                "properties": {
                  "modes": {
                    "description": "Modo a utilizar para el seguimiento de cambios. 'git-diff' ofrece 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 usará el prompt predeterminado.",
                    "type": "string"
                  },
                  "schema": {
                    "description": "Esquema para la extracción JSON al usar el modo `json`. Define la estructura de los datos que se van a 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 utilizará la etiqueta predeterminada (null).",
                    "nullable": true,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "formats": {
                "default": [
                  "markdown"
                ],
                "description": "Formatos que se incluirán en el resultado.",
                "items": {
                  "enum": [
                    "markdown",
                    "html",
                    "rawHtml",
                    "links",
                    "screenshot",
                    "screenshot@fullPage",
                    "json",
                    "changeTracking"
                  ],
                  "type": "string"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        ]
      },
      "ScrapeResponse": {
        "properties": {
          "data": {
            "properties": {
              "actions": {
                "description": "Resultados de las acciones especificadas en el parámetro `actions`. Solo se incluye si se proporcionó 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 que las acciones de PDF proporcionadas.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "scrapes": {
                    "description": "Extrae el contenido en el mismo orden en que se ejecuten las acciones de scraping proporcionadas.",
                    "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 proporcionadas.",
                    "items": {
                      "format": "url",
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "changeTracking": {
                "description": "Información de seguimiento de cambios si `changeTracking` está en `formats`. Solo se muestra cuando se solicita el formato `changeTracking`.",
                "nullable": true,
                "properties": {
                  "changeStatus": {
                    "description": "El resultado de comparar las dos versiones de la página. «new» indica que esta página no existía antes, «same» indica que el contenido no ha cambiado, «changed» indica que el contenido ha cambiado y «removed» indica que la página se ha eliminado.",
                    "enum": [
                      "new",
                      "same",
                      "changed",
                      "removed"
                    ],
                    "type": "string"
                  },
                  "diff": {
                    "description": "Diferencias al estilo Git de los cambios cuando se utiliza el modo `git-diff`. Solo se incluye cuando el modo está establecido en `git-diff`.",
                    "nullable": true,
                    "type": "string"
                  },
                  "json": {
                    "description": "Resultados de la comparación en formato JSON cuando se usa el modo `json`. Solo está disponible cuando el modo se establece en `json`. 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": "Marca de tiempo del rastreo anterior con el 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/URL actual. \"visible\" significa que la URL se descubrió de forma orgánica (a través de enlaces o del sitemap); \"hidden\" significa que la URL se descubrió a partir de 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 en la página si `links` está en `formats`",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "llm_extraction": {
                "description": "Se muestra cuando se usa LLM Extraction. Datos extraídos de la página siguiendo el esquema definido.",
                "nullable": true,
                "type": "object"
              },
              "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 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á incluido en `formats`",
                "nullable": true,
                "type": "string"
              },
              "warning": {
                "description": "Puede mostrarse cuando se use LLM Extraction. El mensaje de advertencia te indicará 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": "v1"
  },
  "openapi": "3.0.0",
  "paths": {
    "/batch/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "ignoreInvalidURLs": {
                        "default": false,
                        "description": "Si se especifican URLs no válidas en el array urls, se ignorarán. En lugar de que falle toda la solicitud, se creará un scraping por lotes usando las URLs válidas restantes y las URLs no válidas se devolverán en el campo invalidURLs de la respuesta.",
                        "type": "boolean"
                      },
                      "maxConcurrency": {
                        "description": "Número máximo de scrapes concurrentes. Este parámetro te permite establecer un límite de concurrencia para este scraping por lotes. Si no se especifica, el scraping por lotes se ajusta al límite de concurrencia de tu equipo.",
                        "type": "integer"
                      },
                      "urls": {
                        "items": {
                          "description": "La URL de la que se extraerán datos",
                          "format": "uri",
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "webhook": {
                        "description": "Un objeto de especificación de webhook.",
                        "properties": {
                          "events": {
                            "description": "Tipo de eventos que deben enviarse 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 todas las cargas útiles de los webhooks de este rastreo",
                            "type": "object"
                          },
                          "url": {
                            "description": "La URL a la que enviar el webhook. Este se activará cuando se inicie un scraping por lotes (batch_scrape.started), en cada página procesada (batch_scrape.page) y cuando el scraping por lotes se complete (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 es true, no se conservará ningún dato de este scraping por lotes. Para habilitar 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 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": "Scrapea múltiples URLs 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 por lotes",
        "tags": [
          "Scraping"
        ]
      },
      "get": {
        "operationId": "getBatchScrapeStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchScrapeStatusResponseObj"
                }
              }
            },
            "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 el estado 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"
          }
        }
      ]
    },
    "/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": "Pago requerido"
          },
          "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 trabajo 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": {
                  "allowBackwardLinks": {
                    "default": false,
                    "deprecated": true,
                    "description": "⚠️ OBSOLETO: usa 'crawlEntireDomain' en su lugar. Permite que el rastreador siga enlaces internos a URLs del mismo nivel o superiores, no solo rutas hijas.",
                    "type": "boolean"
                  },
                  "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 hacia subdominios del dominio principal.",
                    "type": "boolean"
                  },
                  "crawlEntireDomain": {
                    "default": false,
                    "description": "Permite que el crawler siga enlaces internos a URLs hermanas o superiores (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, incluidos hermanos y padres.\n→ p. ej. /features/feature-1 → /pricing, /, etc. ✅\n\nUsa true para una cobertura interna más amplia, más allá de las rutas anidadas.",
                    "type": "boolean"
                  },
                  "delay": {
                    "description": "Intervalo, en segundos, entre scrapes. Esto ayuda a respetar los límites de frecuencia del sitio web.",
                    "type": "number"
                  },
                  "excludePaths": {
                    "description": "Patrones de expresiones regulares (regex) para rutas de URL que excluyen del rastreo las URL que coincidan. Por ejemplo, si configuras `\"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 parámetros de consulta diferentes (o sin parámetros)",
                    "type": "boolean"
                  },
                  "ignoreSitemap": {
                    "default": false,
                    "description": "Ignorar el sitemap del sitio web durante el rastreo",
                    "type": "boolean"
                  },
                  "includePaths": {
                    "description": "Patrones de expresiones regulares para el pathname de la URL que determinan qué URLs se incluyen en el crawl. 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 a rastrear. El límite predeterminado es 10.000.",
                    "type": "integer"
                  },
                  "maxConcurrency": {
                    "description": "Número máximo de procesos de scraping simultáneos. Este parámetro te permite establecer 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"
                  },
                  "maxDepth": {
                    "default": 10,
                    "description": "Profundidad absoluta máxima a rastrear desde la base de la URL indicada. Básicamente, es el número máximo de barras diagonales (/) que puede contener la ruta (pathname) de una URL rastreada.",
                    "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 lo configuras en 1 y estableces ignoreSitemap, solo se rastreará la URL introducida y todas las URL que estén enlazadas en esa página.",
                    "type": "integer"
                  },
                  "scrapeOptions": {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  "url": {
                    "description": "La URL base desde la que se iniciará el rastreo",
                    "format": "uri",
                    "type": "string"
                  },
                  "webhook": {
                    "description": "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": "URL a la que enviar el webhook. Se activará cuando se inicie el rastreo (crawl.started), en cada página rastreada (crawl.page) y cuando el rastreo se complete (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 habilitará la ausencia total de retención de datos para este rastreo. Para activar 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 opciones",
        "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": "Las opciones del rastreador utilizadas en este rastreo",
                            "properties": {
                              "scrapeOptions": {
                                "$ref": "#/components/schemas/ScrapeOptions"
                              }
                            },
                            "type": "object"
                          },
                          "teamId": {
                            "description": "El ID del equipo al que pertenece el rastreo",
                            "type": "string"
                          },
                          "url": {
                            "description": "La URL de origen 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 solicitudes"
          },
          "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 realizada correctamente"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Crawl job not found.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "No se encontró el trabajo de rastreo"
          },
          "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 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": "Obtener el estado de un trabajo de rastreo",
        "tags": [
          "Crawling"
        ]
      },
      "parameters": [
        {
          "description": "El ID del trabajo 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 correcta"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pago requerido"
          },
          "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": "ID del trabajo de rastreo",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/deep-research": {
      "post": {
        "operationId": "startDeepResearch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "analysisPrompt": {
                    "description": "El prompt que se usará para el análisis final. Útil para formatear el markdown del análisis final de una forma específica.",
                    "type": "string"
                  },
                  "formats": {
                    "items": {
                      "default": [
                        "markdown"
                      ],
                      "enum": [
                        "markdown",
                        "json"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "jsonOptions": {
                    "description": "Opciones de salida en JSON",
                    "properties": {
                      "prompt": {
                        "description": "El prompt que se usará para la salida JSON",
                        "type": "string"
                      },
                      "schema": {
                        "description": "El esquema que se utilizará para la salida en formato JSON. Debe cumplir con [JSON Schema](https://json-schema.org/).",
                        "type": "object"
                      },
                      "systemPrompt": {
                        "description": "El prompt del sistema que se usará para la salida JSON",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "maxDepth": {
                    "default": 7,
                    "description": "Profundidad máxima de iteraciones de investigación",
                    "maximum": 12,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "maxUrls": {
                    "default": 20,
                    "description": "Número máximo de URL a analizar",
                    "maximum": 1000,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "description": "La consulta para investigar",
                    "type": "string"
                  },
                  "systemPrompt": {
                    "description": "El prompt de sistema que se usará para el agente de investigación. Útil para dirigir al agente de investigación hacia una dirección específica.",
                    "type": "string"
                  },
                  "timeLimit": {
                    "default": 300,
                    "description": "Límite de tiempo en segundos",
                    "maximum": 600,
                    "minimum": 30,
                    "type": "integer"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "description": "ID de la tarea de investigación",
                      "format": "uuid",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "La tarea de investigación se inició correctamente"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid parameters provided",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Parámetros de la solicitud no válidos"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Iniciar una operación de investigación exhaustiva para una consulta",
        "tags": [
          "Research"
        ]
      }
    },
    "/deep-research/{id}": {
      "get": {
        "operationId": "getDeepResearchStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "activities": {
                          "items": {
                            "properties": {
                              "depth": {
                                "type": "integer"
                              },
                              "message": {
                                "type": "string"
                              },
                              "status": {
                                "type": "string"
                              },
                              "timestamp": {
                                "format": "date-time",
                                "type": "string"
                              },
                              "type": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "currentDepth": {
                          "type": "integer"
                        },
                        "error": {
                          "type": "string"
                        },
                        "expiresAt": {
                          "format": "date-time",
                          "type": "string"
                        },
                        "finalAnalysis": {
                          "type": "string"
                        },
                        "json": {
                          "description": "Se muestra al usar el formato JSON",
                          "nullable": true,
                          "type": "object"
                        },
                        "maxDepth": {
                          "type": "integer"
                        },
                        "sources": {
                          "items": {
                            "properties": {
                              "description": {
                                "type": "string"
                              },
                              "favicon": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "status": {
                          "enum": [
                            "processing",
                            "completed",
                            "failed"
                          ],
                          "type": "string"
                        },
                        "totalUrls": {
                          "type": "integer"
                        }
                      },
                      "type": "object"
                    },
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta correcta"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Research job not found",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "No se encontró el trabajo de investigación"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtén el estado y los resultados de una operación de investigación exhaustiva",
        "tags": [
          "Research"
        ]
      },
      "parameters": [
        {
          "description": "ID de la tarea de investigación",
          "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": "Si está establecido en true, la extracción utilizará la búsqueda web para encontrar datos adicionales",
                    "type": "boolean"
                  },
                  "ignoreInvalidURLs": {
                    "default": false,
                    "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 usando las URLs válidas restantes y se devolverán las URLs no válidas 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 es true, también se escanearán los subdominios de las URL proporcionadas",
                    "type": "boolean"
                  },
                  "prompt": {
                    "description": "Prompt para orientar 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": "Si es `true`, las fuentes utilizadas para extraer los datos se incluirán en la respuesta en la clave `sources`",
                    "type": "boolean"
                  },
                  "urls": {
                    "items": {
                      "description": "Las URL de las que se extraerán datos. 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": "Extraer 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"
          }
        }
      ]
    },
    "/llmstxt": {
      "post": {
        "operationId": "generateLLMsTxt",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "maxUrls": {
                    "default": 2,
                    "description": "Número máximo de URLs a analizar",
                    "type": "integer"
                  },
                  "showFullText": {
                    "default": false,
                    "description": "Incluye todo el contenido de texto en la respuesta",
                    "type": "boolean"
                  },
                  "url": {
                    "description": "La URL a partir de la cual generar LLMs.txt",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "id": {
                      "description": "ID de la tarea de generación de LLMs.txt",
                      "format": "uuid",
                      "type": "string"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "La tarea de generación de LLMs.txt se ha iniciado correctamente"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Invalid parameters provided",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Parámetros de la solicitud no válidos"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Generar el archivo LLMs.txt para un sitio web",
        "tags": [
          "LLMs.txt"
        ]
      }
    },
    "/llmstxt/{id}": {
      "get": {
        "operationId": "getLLMsTxtStatus",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "llmsfulltxt": {
                          "description": "El texto completo cuando showFullText es true",
                          "type": "string"
                        },
                        "llmstxt": {
                          "description": "El contenido generado en LLMs.txt",
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "expiresAt": {
                      "description": "Cuándo vencerá el contenido generado",
                      "format": "date-time",
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "processing",
                        "completed",
                        "failed"
                      ],
                      "type": "string"
                    },
                    "success": {
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta satisfactoria"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "LLMs.txt generation job not found",
                      "type": "string"
                    },
                    "success": {
                      "example": false,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "No se encontró el trabajo de generación de LLMs.txt"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Obtener el estado y los resultados de una tarea de generación de LLMs.txt",
        "tags": [
          "LLMs.txt"
        ]
      },
      "parameters": [
        {
          "description": "ID de la tarea de generación de LLMs.txt",
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "format": "uuid",
            "type": "string"
          }
        }
      ]
    },
    "/map": {
      "post": {
        "operationId": "mapUrls",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "ignoreSitemap": {
                    "default": true,
                    "description": "Ignorar el sitemap del sitio web al rastrear.",
                    "type": "boolean"
                  },
                  "includeSubdomains": {
                    "default": true,
                    "description": "Incluir los subdominios del sitio web",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5000,
                    "description": "Número máximo de enlaces a devolver",
                    "maximum": 30000,
                    "type": "integer"
                  },
                  "search": {
                    "description": "Consulta de búsqueda que se usará 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 impone ningún límite.",
                    "type": "string"
                  },
                  "sitemapOnly": {
                    "default": false,
                    "description": "Devuelve solo los enlaces encontrados en el sitemap del sitio web",
                    "type": "boolean"
                  },
                  "timeout": {
                    "description": "Tiempo de espera en milisegundos. No hay tiempo de espera de forma predeterminada.",
                    "type": "integer"
                  },
                  "url": {
                    "description": "La URL base desde la que se comenzará a rastrear",
                    "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": "Pago requerido"
          },
          "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 varias URL en función de las opciones",
        "tags": [
          "Mapping"
        ]
      }
    },
    "/scrape": {
      "post": {
        "operationId": "scrapeAndExtractFromUrl",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "url": {
                        "description": "La URL a rastrear",
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url"
                    ],
                    "type": "object"
                  },
                  {
                    "$ref": "#/components/schemas/ScrapeOptions"
                  },
                  {
                    "properties": {
                      "zeroDataRetention": {
                        "default": false,
                        "description": "Si se establece en true, se desactivará la retención de datos para esta extracción. Para habilitar 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 satisfactoria"
          },
          "402": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "error": {
                      "example": "Payment required to access this resource.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Pago requerido"
          },
          "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 una única URL y, opcionalmente, extrae información usando 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 hacia otros endpoints de la API de Firecrawl.",
                    "type": "boolean"
                  },
                  "limit": {
                    "default": 5,
                    "description": "Número máximo de resultados que se devolverán",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "location": {
                    "description": "Parámetro de ubicación de los resultados de búsqueda",
                    "type": "string"
                  },
                  "query": {
                    "description": "Consulta de búsqueda",
                    "type": "string"
                  },
                  "scrapeOptions": {
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/BaseScrapeOptions"
                      },
                      {
                        "properties": {
                          "formats": {
                            "default": [],
                            "items": {
                              "enum": [
                                "markdown",
                                "html",
                                "rawHtml",
                                "links",
                                "screenshot",
                                "screenshot@fullPage",
                                "json",
                                "extract"
                              ],
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "type": "object"
                      }
                    ],
                    "default": {},
                    "description": "Opciones para hacer scraping de resultados de búsqueda"
                  },
                  "tbs": {
                    "description": "Parámetro de búsqueda basado en el tiempo. Permite rangos 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"
                  },
                  "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": {
                      "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 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"
                          },
                          "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 ha solicitado 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"
                    },
                    "success": {
                      "type": "boolean"
                    },
                    "warning": {
                      "description": "Mensaje de advertencia si se presentan problemas",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta correcta"
          },
          "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 superado"
          },
          "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": "Buscar y, opcionalmente, hacer scraping de los resultados de búsqueda",
        "tags": [
          "Search"
        ]
      }
    },
    "/team/credit-usage": {
      "get": {
        "operationId": "getCreditUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billing_period_end": {
                          "description": "Fecha de fin 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"
                        },
                        "billing_period_start": {
                          "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"
                        },
                        "plan_credits": {
                          "description": "Número de créditos del plan. Esto no incluye créditos de cupones ni créditos añadidos mediante pago por uso.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remaining_credits": {
                          "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": "Consultar los créditos restantes del equipo autenticado",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/credit-usage/historical": {
      "get": {
        "operationId": "getHistoricalCreditUsage",
        "parameters": [
          {
            "description": "Obtener el uso histórico 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 (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"
                          },
                          "totalCredits": {
                            "description": "Número total de créditos 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 correcta"
          },
          "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 uso histórico de créditos del equipo autenticado",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage": {
      "get": {
        "operationId": "getTokenUsage",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "properties": {
                        "billing_period_end": {
                          "description": "Fecha de fin 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"
                        },
                        "billing_period_start": {
                          "description": "Fecha de inicio del periodo de facturación. null si se usa el plan gratuito",
                          "example": "2025-01-01T00:00:00Z",
                          "format": "date-time",
                          "nullable": true,
                          "type": "string"
                        },
                        "plan_tokens": {
                          "description": "Número de tokens incluidos en el plan. No incluye tokens de cupón.",
                          "example": 500000,
                          "type": "number"
                        },
                        "remaining_tokens": {
                          "description": "Número de tokens 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 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 los tokens restantes para el equipo autenticado (solo para Extract)",
        "tags": [
          "Billing"
        ]
      }
    },
    "/team/token-usage/historical": {
      "get": {
        "operationId": "getHistoricalTokenUsage",
        "parameters": [
          {
            "description": "Obtener el historial de uso 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 usada 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 período de facturación",
                            "example": "2025-01-01T00:00:00Z",
                            "format": "date-time",
                            "type": "string"
                          },
                          "totalTokens": {
                            "description": "Número total de tokens utilizados en el periodo de facturación",
                            "example": 1000,
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "success": {
                      "example": true,
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Respuesta exitosa"
          },
          "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 historial de uso de tokens del equipo autenticado (solo Extract)",
        "tags": [
          "Billing"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "servers": [
    {
      "url": "https://api.firecrawl.dev/v1"
    }
  ]
}