API Screenshot v1

Paramètres, contraintes et exemples pour POST /api/v1/screenshots.

Authentification

Envoyez votre clé API dans l’en-tête Authorization :

Authorization: Bearer <api_key>

Créer une capture

Point de terminaison: POST /api/v1/screenshots
Corps: JSON

Requête minimale

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"}'

Requête sync (si autorisée)

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 fenêtre sync expire avant la fin, l’API renvoie status=processing. Continuez à interroger avec GET /api/v1/screenshots/{jobId}.

Paramètres clés

url
Obligatoire. URL cible à capturer.
mode
Optionnel. async (par défaut) ou sync.
timeoutMs
Requis pour sync. Doit être > 0 et < 10000.
fullPage
Optionnel. Pour le mode sync , la valeur doit être false.
Contraintes du mode synchrone
Même si vous demandez mode=sync, , le serveur basculera en async sauf si :
mode == "sync"
timeoutMs != null
0 < timeoutMs < 10000
fullPage == false

Référence des paramètres (complète)

Champ Type Obligatoire Valeur par défaut Notes
urlstringOui-URL cible.
modestringNonasyncAccepte async ou sync (insensible à la casse).;
timeoutMsint?Non-Utilisé uniquement en sync. Doit être 0 < timeoutMs < 10000.
fullPageboolNonfalseLe mode sync exige false.
viewportobject?Non-Remplacement du viewport.
formatstring?Non-Actuellement, seul png est pris en charge. Les autres formats sont réservés aux versions futures.
qualityint?Non-Actuellement ignoré (utilisé seulement pour jpeg/webp à l’avenir).
waitUntilstring?Non-Valeurs suggérées : load, domcontentloaded, networkidle.
delayMsint?Non-Délai supplémentaire après waitUntil.
selectorstring?Non-Capture uniquement un élément spécifique.
headersobject?Non-Dictionnaire d’en-têtes de requête supplémentaires.
cookiesarray?Non-Liste de cookies à injecter.
javascriptstring?Non-JS personnalisé à injecter (selon l’implémentation).;
cssstring?Non-CSS personnalisé à injecter (selon l’implémentation).;
devicestring?Non-Valeurs suggérées : desktop/iphone/ipad/pixel.
strictDevicebool?Non-Si true, un appareil non pris en charge doit échouer (selon l’implémentation).;
colorSchemestring?Non-Valeurs suggérées : light/dark/no-preference.
proxystring?Non-Réservé aux versions futures. Actuellement ignoré.
tracebool?Non-Réservé aux versions futures. Actuellement ignoré.
harbool?Non-Réservé aux versions futures. Actuellement ignoré.
returnDombool?Non-Réservé aux versions futures. Actuellement ignoré.
returnNetworkbool?Non-Réservé aux versions futures. Actuellement ignoré.
priorityint?Non-Réservé aux versions futures. Actuellement ignoré.

viewport

ChampTypeObligatoireNotes
viewport.widthintNonLargeur du viewport.
viewport.heightintNonHauteur du viewport.

cookies[]

ChampTypeObligatoireNotes
cookies[].namestringOuiNom du cookie.
cookies[].valuestringOuiValeur du cookie.
cookies[].domainstring?NonDomaine du cookie.
cookies[].pathstring?NonChemin du cookie.

Réponses

Async (par défaut)
{ "jobId": "<guid>", "status": "pending" }
Sync (terminée)
{ "jobId": "<guid>", "status": "completed", "result": { "url": "https://..." } }
Sync (échouée)
{ "jobId": "<guid>", "status": "failed", "errorMessage": "..." }
Sync (timeout)
{ "jobId": "<guid>", "status": "processing" }
Pour les appels async (ou les timeouts sync), utilisez GET /api/v1/screenshots/{jobId} pour vérifier l’état. Valeurs possibles : pending, processing, completed, failed, expired.

Erreurs

HTTPQuandCorps
400Body manquant ou url manquante/videBadRequest
401Clé API invalide/manquanteRéponse du middleware
402Quota dépassé{ "error": "quota_exceeded", "operationKey": "screenshot.capture", ... }
429Limite de débit atteinte{ "error": "rate_limited", "operationKey": "screenshot.capture", ... }
404Job introuvableNotFound

Exemples pratiques

Exemples pratiques pour les besoins d’intégration courants.

Transmettre le jeton d’auth du site cible (via headers)

Si la page à capturer est protégée (Bearer/JWT/session token), transmettez-le via headers:
{
  "url": "https://example.com/dashboard",
  "headers": {
    "Authorization": "Bearer <target_site_token>"
  }
}

Définir des cookies (connexion basée sur une session)

Si le site utilise des cookies pour l’authentification, transmettez-les via cookies:
{
  "url": "https://example.com/account",
  "cookies": [
    { "name": "session", "value": "<cookie_value>", "domain": "example.com", "path": "/" }
  ]
}

En-têtes personnalisés (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 + format + qualité

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

Attendre le chargement de la page + ajouter un délai

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

Capturer un élément précis (selector)

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

Obtenir le statut

Interroger le job :

GET /api/v1/screenshots/{jobId}