API de Capturas v1

Parámetros, restricciones y ejemplos para POST /api/v1/screenshots.

Autenticación

Envíe su clave API en el encabezado Authorization :

Authorization: Bearer <api_key>

Crear captura

Endpoint: POST /api/v1/screenshots
Cuerpo: JSON

Solicitud mínima

curl -X POST "https://api.page-ops.com/api/v1/screenshots" \
  -H "Authorization: Bearer $SCREENSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com"}'

Solicitud sync (cuando esté permitida)

curl -X POST "https://api.page-ops.com/api/v1/screenshots" \
  -H "Authorization: Bearer $SCREENSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "mode": "sync",
    "timeoutMs": 8000,
    "fullPage": false
  }'
Si la ventana sync expira antes de completarse, la API devuelve status=processing. Continúe consultando con GET /api/v1/screenshots/{jobId}.

Parámetros clave

url
Obligatorio. URL objetivo que se va a capturar.
mode
Opcional. async (por defecto) o sync.
timeoutMs
Obligatorio para sync. Debe ser > 0 y < 10000.
fullPage
Opcional. Para el modo sync , debe ser false.
Restricciones del modo síncrono
Aunque solicite mode=sync, , el servidor volverá a async salvo que:
mode == "sync"
timeoutMs != null
0 < timeoutMs < 10000
fullPage == false

Referencia de parámetros (completa)

Campo Tipo Obligatorio Valor por defecto Notas
urlstring-URL objetivo.
modestringNoasyncAcepta async o sync (sin distinción entre mayúsculas y minúsculas).;
timeoutMsint?No-Solo se usa para sync. Debe ser 0 < timeoutMs < 10000.
fullPageboolNofalseSync requiere false.
viewportobject?No-Sobrescribe el viewport.
formatstring?No-Actualmente solo se admite png . Los demás formatos quedan reservados para futuras versiones.
qualityint?No-Actualmente se ignora (solo se usará para jpeg/webp en el futuro).
waitUntilstring?No-Sugerido: load, domcontentloaded, networkidle.
delayMsint?No-Retraso adicional después de waitUntil.
selectorstring?No-Captura solo un elemento específico.
headersobject?No-Diccionario de encabezados de solicitud adicionales.
cookiesarray?No-Lista de cookies que se inyectarán.
javascriptstring?No-JS personalizado a inyectar (según la implementación).;
cssstring?No-CSS personalizado a inyectar (según la implementación).;
devicestring?No-Sugerido: desktop/iphone/ipad/pixel.
strictDevicebool?No-Si es true, un dispositivo no compatible debería fallar (según la implementación).;
colorSchemestring?No-Sugerido: light/dark/no-preference.
proxystring?No-Reservado para futuras versiones. Actualmente se ignora.
tracebool?No-Reservado para futuras versiones. Actualmente se ignora.
harbool?No-Reservado para futuras versiones. Actualmente se ignora.
returnDombool?No-Reservado para futuras versiones. Actualmente se ignora.
returnNetworkbool?No-Reservado para futuras versiones. Actualmente se ignora.
priorityint?No-Reservado para futuras versiones. Actualmente se ignora.

viewport

CampoTipoObligatorioNotas
viewport.widthintNoAncho del viewport.
viewport.heightintNoAlto del viewport.

cookies[]

CampoTipoObligatorioNotas
cookies[].namestringNombre de la cookie.
cookies[].valuestringValor de la cookie.
cookies[].domainstring?NoDominio de la cookie.
cookies[].pathstring?NoRuta de la cookie.

Respuestas

Async (por defecto)
{ "jobId": "<guid>", "status": "pending" }
Sync (completada)
{ "jobId": "<guid>", "status": "completed", "result": { "url": "https://..." } }
Sync (fallida)
{ "jobId": "<guid>", "status": "failed", "errorMessage": "..." }
Sync (timeout)
{ "jobId": "<guid>", "status": "processing" }
Para llamadas async (o timeouts sync), use GET /api/v1/screenshots/{jobId} para comprobar el estado. Valores posibles: pending, processing, completed, failed, expired.

Errores

HTTPCuándoCuerpo
400Body ausente o url ausente/vacíaBadRequest
401Clave API inválida/ausenteRespuesta del middleware
402Cuota excedida{ "error": "quota_exceeded", "operationKey": "screenshot.capture", ... }
429Límite de velocidad alcanzado{ "error": "rate_limited", "operationKey": "screenshot.capture", ... }
404Trabajo no encontradoNotFound

Ejemplos prácticos

Ejemplos prácticos para necesidades comunes de integración.

Pasar el token de autenticación del sitio objetivo (vía headers)

Si la página que quiere capturar está protegida (Bearer/JWT/session token), reenvíelo usando headers:
{
  "url": "https://example.com/dashboard",
  "headers": {
    "Authorization": "Bearer <target_site_token>"
  }
}

Configurar cookies (inicio de sesión basado en sesión)

Si el sitio web usa cookies para autenticación, páselas usando cookies:
{
  "url": "https://example.com/account",
  "cookies": [
    { "name": "session", "value": "<cookie_value>", "domain": "example.com", "path": "/" }
  ]
}

Encabezados personalizados (User-Agent / locale)

{
  "url": "https://example.com",
  "headers": {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
    "Accept-Language": "en-US,en;q=0.9"
  }
}

Viewport + formato + calidad

{
  "url": "https://example.com",
  "viewport": { "width": 1280, "height": 720 },
  "format": "jpeg",
  "quality": 85
}

Esperar a que cargue la página + añadir retraso

{
  "url": "https://example.com",
  "waitUntil": "networkidle",
  "delayMs": 500
}

Capturar un elemento específico (selector)

{
  "url": "https://example.com/pricing",
  "selector": "#pricing"
}

Obtener estado

Consultar el trabajo:

GET /api/v1/screenshots/{jobId}