Saltar al contenido principal
POST
Investigación web
Cada acción devuelve output normalizado; consulta result_status para conocer la entrega. News, places, scholar, shopping, images, videos y similares exponen output.items[] con campos fijos por fila; answer expone output.answer y citations[]. Scrape expone text, markdown, html y raw_html; los formatos ausentes son null. La salida nativa del proveedor no se repite en output; permanece en el Run y puede leerse con Get Run. Glasser no convierte HTML en texto ni juzga la calidad semántica según la redacción o la longitud. Search devuelve output.results[] y admite time_range: day | week | month | year. Una respuesta vacía pero válida es no_result y conserva la estructura de la acción: results o items es [], y una respuesta vacía es answer: null con citations: []. Scrape no tiene respuesta vacía: una página que no se puede entregar es error, con output: null y el motivo en error.code. Fetch (scrape) usa Serper y luego Firecrawl dentro de un presupuesto de solicitud predeterminado de 30 segundos. HTML o las solicitudes explícitas de antigüedad de caché van directamente a Firecrawl. El enriquecimiento de X/Twitter y LinkedIn excluye Firecrawl. Un proveedor especificado por nombre nunca recurre a una alternativa. Una salida vacía o no válida, errores del proveedor, un tiempo de espera agotado o la ausencia de formatos compatibles pueden activar el fallback. El contenido entregado proviene del Run final; no se combina contenido de capturas diferentes. charge_usd totaliza runs de esta respuesta, incluidos los fallos facturables y los resultados vacíos, y es null hasta que todos los Runs se resuelvan. El ciclo de vida del Run final permanece en status; COMPLETED por sí solo no demuestra la entrega de contenido. Para trabajos pendientes, sigue el result_url autenticado para conservar la salida normalizada y los cargos totales. Get Run sigue siendo nativo e informa de un cargo individual. El sondeo no crea Runs ni reanuda el fallback. Un reintento POST intencional usa la misma Idempotency-Key y los mismos parámetros de ejecución, reutiliza los Runs existentes e inicia una nueva ventana de solicitud. Consulta Provider selection and charges.

Salida por acción

Cada campo está presente en todas las filas; un valor que el proveedor no informa es null. Los campos siguen las convenciones de campos.
  • published_at es una marca de tiempo UTC ISO 8601, que se completa únicamente cuando el proveedor informa de una marca de tiempo de máquina (Exa publishedDate, noticias de SerpApi iso_date). fetched_at tiene el mismo formato.
  • date_text es exactamente el texto mostrado por Google tal como se devuelve. Puede ser relativo al completed_at del Run (“hace 3 horas”) y nunca se analiza.
  • search date está obsoleto: contiene el texto mostrado por Google para Serper y SerpApi, y el publishedDate sin procesar de Exa para Exa. Usa published_at o date_text.
  • snippet es el extracto breve de Google o el resaltado extraído de Exa para Exa; nunca es el texto completo de la página.
  • price_text y duration_text son cadenas mostradas, no analizadas; la moneda del precio sigue a country.
  • rating es el promedio de estrellas de Google, de 1 a 5, y reviews es un recuento. source es el nombre del editor o del sitio.
  • address es el texto propio del proveedor; Serper puede devolver únicamente la línea de la calle.
  • exa_similarity_score es la puntuación propia de Exa, comparable únicamente dentro de una misma respuesta. Similar excluye las páginas del host de la URL solicitada.
  • text_character_limit es el límite de caracteres que Glasser solicitó aplicar al proveedor (10000 para Exa); el texto de exactamente esa longitud puede estar truncado. cached indica si el proveedor sirvió la página desde su caché.
  • quality siempre es unverified y se eliminará en la próxima revisión incompatible.

Encabezados

idempotency-key
string
requerido

Genera un valor único para cada ejecución prevista (se recomienda un UUID). Reintenta con la misma clave y los mismos parámetros de ejecución para recuperar el Run original sin un segundo cargo. Cambiar los parámetros de ejecución con la misma clave devuelve 409; cambiar task_id o metadata no actualiza el Run original.

Minimum string length: 1

Cuerpo

application/json
action
enum<string> | null

Predeterminado: search.

  • Proporciona query para search, news, places, scholar, shopping, images, videos o answer.
  • Proporciona url para scrape o similar.
Opciones disponibles:
search,
news,
places,
scholar,
shopping,
images,
videos,
answer,
scrape,
similar
provider
enum<string> | null

Predeterminado auto: selecciona el primer proveedor de datos elegible según el orden de preferencia de Glasser. Un proveedor de datos nombrado debe admitir la solicitud y estar permitido por tu Key; no hace fallback a otro proveedor de datos. Los valores disponibles se indican a continuación.

Opciones disponibles:
auto,
serper,
serpapi,
exa,
dataforseo,
firecrawl
query
string | null
Required string length: 1 - 500
url
string | null
Required string length: 1 - 2048
formats
enum<string>[]

Solo para scrape. Cuando se omite, usa el valor predeterminado nativo del proveedor de datos seleccionado: text para Serper/Exa, markdown para Firecrawl/DataForSEO. Los formatos solicitados orientan el enrutamiento y el fallback; output expone los campos fijos text/markdown/html/raw_html. html significa HTML limpiado; raw_html significa HTML original. Auto usa Serper y luego Firecrawl. Las solicitudes HTML se envían directamente a Firecrawl. Lee result_status y missing_formats para comprobar la entrega; un campo null no solicitado no es un resultado parcial. Firecrawl no proporciona text; Glasser no convierte HTML a texto. X/Twitter y las rutas de enriquecimiento están excluidas de Firecrawl.

Required array length: 1 - 4 elements
Opciones disponibles:
text,
markdown,
html,
raw_html
timeout_ms
integer

Solo para scrape. Predeterminado: 90000. Presupuesto de ejecución para esta solicitud de API, incluido el fallback secuencial. Cada llamada al proveedor de datos comienza con la ventana de su Endpoint, en lugar de una parte del tiempo restante; conserva la ventana completa cuando esta, junto con el tiempo de liquidación, cabe en el presupuesto restante. Cuando la ventana completa excedería el presupuesto de la solicitud, Serper, Firecrawl y Exa usan el tiempo restante real hasta el límite de la ventana de su Endpoint y reservan tiempo para la liquidación y la respuesta; solo se omite un paso cuando queda menos de 1 segundo de tiempo de llamada. Un reintento inicia una nueva ventana de solicitud y reutiliza los Runs existentes mediante la idempotencia del Run.

Rango requerido: 1000 <= x <= 120000
max_charge_usd
string

Cadena decimal exacta en USD (mínimo 2 y máximo 6 decimales, una única escritura canónica). Suma con aritmética decimal o escala por 10^6; nunca uses números de coma flotante.

Pattern: ^(0|[1-9]\d*)\.(\d{2}|\d{2}\d{0,3}[1-9])$
cache_max_age_seconds
integer

Solo para scrape. Antigüedad máxima de la caché del proveedor de datos; 0 requiere una consulta en tiempo real. Se excluyen las rutas sin este control. Auto selecciona Firecrawl (milisegundos); Exa explícito recibe horas enteras redondeadas hacia abajo. Los metadatos de caché/consulta desconocidos siguen siendo null.

Rango requerido: 0 <= x <= 2592000
time_range
enum<string>

Solo para search: restringe los resultados al último día, semana, mes o año mediante el filtro de tiempo de Google. Omítelo para cualquier momento. Auto usa solo proveedores de datos que admiten este filtro (Serper y SerpApi). Exa se rechaza cuando se proporciona este campo. Es un filtro del motor de búsqueda, no una fecha de publicación verificada.

Opciones disponibles:
day,
week,
month,
year
country
string | null

País para acciones de tipo search, como código ISO de dos letras o nombre del país. Predeterminado: us. No se aplica a scrape ni similar. Se rechaza con 400 cuando el proveedor de datos nombrado no puede aplicarlo.

Required string length: 2 - 60
language
string | null

Idioma para acciones de tipo search, con dos letras como en, de. No se aplica a scrape ni similar.

Pattern: ^[A-Za-z]{2}$
limit
integer | null

Filas que se devolverán. Mantén un número reducido: la regla de cargo del endpoint enrutado puede leerlo. Cada capacidad aplica además su propio límite.

Rango requerido: 1 <= x <= 100
task_id
string | null

Agrupa los Runs relacionados, incluido el fallback automático, bajo un único Task. Reutiliza una cadena estable y filtra la lista de Runs por task para recuperarlos.

metadata

Campos opcionales de seguimiento, devueltos en el Run y disponibles como filtros. Nunca se envían al proveedor de datos ni afectan al enrutamiento, al Price o a la idempotencia.

  • Hasta 20 claves: letras minúsculas, dígitos y guiones bajos; deben comenzar por una letra y tener como máximo 40 caracteres.
  • Valores: cadenas de 1–500 caracteres.
  • user_id: el ID opaco de tu usuario final, nunca su dirección de correo electrónico ni su nombre.

Las entradas no válidas se descartan por completo, no se truncan. La solicitud continúa y el Run devuelve los campos que se almacenaron.

Respuesta

Éxito

id
string
requerido
run_url
string
requerido

Abre este Run en la consola. Requiere pertenecer al Workspace.

provider
string
requerido
Pattern: ^[a-z0-9][a-z0-9-]*$
endpoint
string
requerido
Pattern: ^\/.+$
endpoint_version
integer
requerido
status
enum<string>
requerido

QUEUED o RUNNING: todavía está en curso. COMPLETED: hay una respuesta del proveedor de datos disponible, incluidas las respuestas que no son 2xx. FAILED: consulta failure. STOPPED: se detuvo antes del dispatch. Lee charge_usd por separado del estado.

Opciones disponibles:
QUEUED,
RUNNING,
COMPLETED,
FAILED,
STOPPED
failure
object | null
requerido

Motivo por el que falló el Run. No es null solo cuando el estado es FAILED.

input
object
requerido
output
object
requerido

Campos normalizados por acción. El resultado nativo del proveedor de datos no se repite aquí; permanece en el Run (GET /v1/runs/:id). Los valores que el proveedor de datos no informa son null.

  • search: results[]: url, title, snippet (extracto de Google; fragmento extraído de Exa para Exa), position, published_at, date_text, date (obsoleto)
  • news: items[]: title, url, source, published_at, date_text, snippet
  • places: items[]: name, address (texto del proveedor de datos; puede ser solo la línea de la calle), category, rating (1–5), reviews, phone, website, latitude, longitude, google_cid
  • scholar: items[]: title, url, snippet, publication, year, cited_by, pdf_url
  • shopping: items[]: title, url (página de Google Shopping), merchant_url, google_product_id, price_text, seller, rating (1–5), reviews, image_url
  • images: items[]: title, image_url, thumbnail_url, source_url, source, width, height
  • videos: items[]: title, url, channel, source, date_text, duration_text, snippet, thumbnail_url
  • answer: answer, citations[]: url, title, published_at
  • scrape: url, final_url, title, text, markdown, html, raw_html, text_character_limit, cached, fetched_at, quality (obsoleto)
  • similar: items[]: url, title, exa_similarity_score, published_at, author

published_at está en formato ISO 8601 UTC y solo se establece a partir de la marca de tiempo generada por máquina del proveedor de datos. date_text es el texto mostrado por Google tal como se devuelve; puede ser relativo a completed_at del Run y nunca se analiza. rating es el promedio de estrellas de Google de 1–5; reviews es un recuento. source es el nombre del editor o sitio. exa_similarity_score es la puntuación propia de Exa y solo se puede comparar dentro de una misma respuesta.

provider_response
object | null
requerido

No es null únicamente cuando el estado es COMPLETED.

  • Para respuestas 2xx, output contiene el JSON nativo del proveedor de datos (de cualquier estructura), o null si el cuerpo está vacío.
  • Para respuestas que no sean 2xx, error contiene el cuerpo de error del proveedor de datos y output es null.

Los campos confidenciales se eliminan de ambos cuerpos.

charge_usd
string | null
requerido

Cargo total de los Runs de esta respuesta de Solution. Es null hasta que se establezcan todos los Runs enumerados. Cada Run conserva su propio cargo; los fallos también pueden generar cargos.

Pattern: ^(0|[1-9]\d*)\.(\d{2}|\d{2}\d{0,3}[1-9])$
charge_basis
object | null
requerido

Base del cargo de un solo Run, o null para un total de varios Runs. Lee runs[].charge_basis para cada cargo.

stoppable
boolean
requerido

Indica si actualmente se puede aceptar una solicitud de detención. No garantiza que el Run pueda detenerse antes del dispatch.

stop_requested_at
string<date-time> | null
requerido

Momento en que se solicitó la detención. El Run puede continuar si el dispatch ya había comenzado.

created_at
string<date-time>
requerido

Marca de tiempo UTC en formato ISO-8601

started_at
string<date-time> | null
requerido

Marca de tiempo UTC en formato ISO-8601

completed_at
string<date-time> | null
requerido

Marca de tiempo UTC en formato ISO-8601

task_id
string | null
requerido
metadata
object
requerido

Tus campos de seguimiento almacenados. Úsalos para filtrar Runs. Nunca se envían al proveedor de datos ni afectan al enrutamiento, Price o la idempotencia.

  • Hasta 20 claves: letras minúsculas, dígitos y guiones bajos; deben comenzar por una letra y tener como máximo 40 caracteres.
  • Valores: cadenas de 1–500 caracteres.
  • user_id: el ID opaco de tu usuario final; nunca su dirección de correo electrónico ni su nombre.
action
enum<string>
requerido
Opciones disponibles:
search,
news,
places,
scholar,
shopping,
images,
videos,
answer,
scrape,
similar
result_status
enum<string>
requerido

Estado de entrega empresarial, independiente del ciclo de vida final del Run en status. success no es un veredicto semántico sobre la calidad del contenido.

Opciones disponibles:
success,
partial,
no_result,
error,
pending
missing_formats
enum<string>[]
requerido
Opciones disponibles:
text,
markdown,
html,
raw_html
error
object | null
requerido
runs
object[]
requerido
result_url
string
requerido

Ruta URL autenticada y de solo lectura para consultar este resultado normalizado y el cargo total. Úsala con el origen de la API. No crea Runs ni reanuda el fallback. GET /v1/runs/:id sigue devolviendo el Run individual nativo.