Questions fréquentes
Les questions qu'on nous pose le plus souvent, regroupées par thème : API et intégration, formats d'image, quotas et comptes, facturation, confidentialité. Si la vôtre n'apparaît pas, écrivez-nous, on répond rapidement.
Captures
Combien de temps prend la génération d'une capture ?
En général, entre 15 et 30 secondes depuis le site web. Les requêtes API prennent jusqu'à 45 secondes car elles passent par une file de traitement. Les délais varient selon la charge du moment. Les comptes disposant d'une réserve de captures sont traités en priorité via une file dédiée : les délais sont généralement plus courts.
Pourquoi ma capture est blanche ou "en attente" ?
Juste après la soumission, la capture est en cours de traitement (15 à 30 s).
En APIv2, la réponse contient {"status":"queued"} ou "processing" ; rappelez GET /capture/{token} toutes les 2 à 3 s jusqu'à "done".
En API legacy, l'URL renvoie une image "en attente" tant que la capture n'est pas terminée ; rechargez après 30 s.
Si la capture reste vide après plusieurs minutes, le site cible a peut-être refusé la connexion ou affiché un écran de blocage. Essayez l'option Sans JavaScript.
J'obtiens une erreur "serveur inaccessible". C'est grave ?
Pas forcément. Le serveur cible n'a pas répondu dans le délai imparti.
En APIv2, le statut renvoyé sera "failed" avec un champ error explicatif. En API legacy, l'image affiche un placeholder "serveur inaccessible".
Vérifiez que le site est en ligne, que le DNS est correct, et resoumettez. Certains sites bloquent activement les robots : essayez avec l'option Sans JavaScript ou augmentez le paramètre wait (jusqu'à 30 s avec Shotbot Pro) pour les SPAs lentes.
Shotbot supporte-t-il JavaScript et les applications monopages (SPA) ?
Oui. Le moteur de rendu est un navigateur headless moderne (Chromium) qui exécute JavaScript, charge les ressources et attend que le chargement initial soit terminé avant de capturer. Pour les sites avec des pop-ups ou disclaimers bloquants, cochez "Sans JavaScript" dans le formulaire.
Mon site est protégé par un mot de passe (htaccess, login). Possible ?
Oui, via l'APIv2 avec le paramètre http_auth. Passez {"user": "login", "pass": "motdepasse"} dans votre requête : Shotbot effectue l'authentification HTTP Basic avant la capture. Les identifiants sont supprimés de la base dès la capture terminée, ou automatiquement après 2 heures si la capture reste en attente. Voir la documentation API.
Shotbot supporte-t-il le HTTPS ?
Oui, Shotbot prend en charge les sites en HTTPS/SSL sans configuration particulière. Il suffit de soumettre l'URL complète incluant https://.
Que se passe-t-il si je soumets plusieurs fois la même URL ?
Si une capture est déjà en attente ou en cours de traitement pour cette URL, Shotbot ne crée pas de doublon. Si la capture existe déjà et qu'elle a été générée récemment, la réponse est immédiate. Une nouvelle capture est déclenchée si vous soumettez explicitement une mise à jour.
Les captures sont-elles conservées indéfiniment ?
Oui, tant que votre compte est actif. Les captures des comptes inactifs depuis plus d'un an (sans connexion ni paiement, et dont les captures ne sont plus consultées) peuvent être supprimées lors de nos opérations de maintenance. Les captures d'utilisateurs anonymes sont susceptibles d'être purgées après une brève période d'inactivité.
Puis-je utiliser une capture comme preuve ou archivage légal ?
Les captures Shotbot sont des snapshots immuables et horodatés : chaque capture est archivée sous un identifiant unique, jamais modifiée ni écrasée. Une nouvelle capture de la même URL génère un identifiant distinct, ce qui permet de documenter l'évolution d'un site dans le temps. Ces caractéristiques les rendent utiles comme preuve visuelle (litige, mise en demeure, conformité). Pour une valeur probante pleinement opposable en justice (constat d'huissier numérique, horodatage certifié), nous recommandons de compléter par un service de tiers de confiance agréé. Voir la page dédiée à l'archivage légal.
Les captures sont-elles horodatées ?
Oui. Chaque capture est enregistrée avec sa date et heure exactes de création. La date de génération est visible dans votre journal de captures (Mon compte → Journal). L'identifiant unique de la capture (token 32 hex pour l'APIv2) permet de la retrouver et de la référencer dans votre historique.
Pourquoi ma capture échoue avec <code>response_too_large</code> ?
Shotbot impose une limite sur la taille du document HTML téléchargé par le navigateur avant de tenter la capture. Cette protection évite qu'une page de plusieurs dizaines de mégaoctets consomme toute la mémoire du serveur et dégrade les autres captures.
Limites selon le type de compte :
- Batch / Free : 10 Mo
- Pro (single capture) : 20 Mo
- Essai anonyme : 5 Mo
Si votre page dépasse ces seuils, le job se termine immédiatement avec
status: "failed" et error_code: "response_too_large". Le crédit est consommé à la soumission (comme pour tout autre échec). En revanche, le job échoue en quelques secondes plutôt qu'après 30 s de timeout, préservant les ressources des workers.Pour capturer des pages volumineuses légitimes, contactez-nous. La limite peut être augmentée sur les comptes Dédié.
Une capture peut-elle être modifiée ou écrasée après sa création ?
Non. Chaque capture est immuable : une fois générée, elle ne peut être ni modifiée ni remplacée. Soumettre à nouveau la même URL crée une nouvelle capture avec un nouvel identifiant. Les captures précédentes restent accessibles et inchangées. Cette immutabilité est une garantie pour les usages d'archivage légal et de traçabilité.
La fonction "Cookies : acceptés" ne fonctionne pas sur un site.
Contactez-nous avec l'adresse du site concerné : on analyse le comportement et on affine la détection.
Formats & Options
Quelles résolutions sont disponibles ?
Selon le mode utilisé.
APIv2 (recommandé) : 10 viewports de 360 à 1920 px (360, 375, 390, 414, 430, 768, 1024, 1280, 1440, 1920). Les abonnés Shotbot Pro peuvent aussi demander n'importe quelle largeur personnalisée de 280 à 3840 px via l'API, pratique pour les tests CSS / responsive. La taille de sortie est configurable indépendamment du viewport (de 120 à 1920 px) et le ratio est paramétrable (16:9, 9:16, 1:1, etc.). Page complète disponible. HiDPI ×2 disponible.
API legacy : viewport 768, 1024, 1280 ou 1600 px, réduit en 6 tailles fixes (320×240, 240×180, 160×120, 120×90, 92×69, 80×60).
Détails dans la documentation API.
Quels formats d'image sont disponibles ?
JPEG (défaut), PNG, WebP et AVIF.
En APIv2, le format se passe en JSON via le champ format (jpg, png, webp, avif). En API legacy, via le paramètre /format/webp/ dans l'URL.
AVIF offre la meilleure compression à qualité égale, idéal pour CDN.
Comment tester un site à une largeur d'écran précise ?
Les abonnés Shotbot Pro peuvent fixer n'importe quelle largeur de viewport entre 280 et 3840 px via l'API (paramètre viewport_width), idéal pour vérifier le rendu d'un site à un point de rupture CSS précis.
Cette largeur personnalisée est réservée à l'API : les formulaires du site conservent la liste de viewports prédéfinis. Les comptes non-Pro restent limités à 390, 768 et 1280 px.
Une valeur hors plage renvoie une erreur 400 invalid_viewport_width.
À quoi sert l'option HiDPI / Retina ?
Avec HiDPI activé, le navigateur simule un écran Retina avec un facteur d'échelle ×2 : les images sortent au double de la résolution demandée. Utile pour les affichages haute densité (mobiles modernes, écrans 4K) ou pour conserver de la marge pour le redimensionnement côté client.
À quoi sert l'option "Page complète" ?
Sans cette option, Shotbot capture uniquement la partie visible du site (le viewport). Avec "Page complète", le navigateur scrolle jusqu'en bas et capture l'intégralité de la page, même si elle est très longue.
À quoi sert l'option "Dark mode" ?
Shotbot injecte prefers-color-scheme: dark dans le navigateur. Si le site cible supporte le dark mode via CSS, la capture sera réalisée en version sombre. Sans support côté site, l'option n'a aucun effet.
À quoi sert l'option "Sans JavaScript" ?
Désactive l'exécution de JavaScript lors du rendu. Utile pour les sites qui affichent des pop-ups, bandeau de cookies ou CGU bloquantes au chargement : la capture sera prise avant que ces éléments n'apparaissent.
Quels ratios d'image sont disponibles ?
L'APIv2 propose 11 ratios prédéfinis :
Paysage : 16:9 (défaut), 4:3, 16:10, 3:2, 2:1.
Portrait : 9:16 (mobile), 3:4, 10:16, 2:3, 1:2.
Carré : 1:1.
Pour une hauteur sur mesure, passez crop_height en pixels (ratio devient custom). Les ratios sont ignorés en mode fullpage qui capture toute la hauteur de la page.
L'API legacy n'expose pas le paramètre ratio (formats 4:3 fixes uniquement).
Comment gérer les sites lents ou les SPA (paramètre wait) ?
Le paramètre wait (en secondes, défaut 5) indique à Shotbot combien de temps attendre après que le chargement initial de la page soit considéré comme terminé, avant de prendre la capture. Plage autorisée : 0-5 s (compte gratuit), 0-30 s (Pro).
Utile pour les SPA modernes et les pages qui chargent leur contenu progressivement. Une valeur de 5 à 15 s couvre la majorité des cas.
Pour les sites avec pop-ups bloquantes (cookies, CGU), préférez plutôt l'option nojs qui désactive entièrement JavaScript.
Compte & Quota
Comment fonctionne le quota mensuel ?
Chaque création ou mise à jour d'une capture consomme 1 unité. L'affichage d'une capture existante est gratuit et non limité. Le quota se remet à zéro le 1er de chaque mois à 3h (heure de Paris). Les captures en réserve ne sont consommées qu'une fois le quota mensuel épuisé.
Que se passe-t-il quand mon quota est atteint ?
Les nouvelles demandes sont placées en file d'attente. Elles seront traitées à la remise à zéro du quota le 1er du mois suivant, ou immédiatement si vous rechargez des captures supplémentaires. À noter : les comptes avec une réserve de captures active bénéficient d'une file prioritaire, indépendamment du quota mensuel.
Les captures en réserve expirent-elles ?
Non. Les crédits achetés n'ont pas de date d'expiration. Ils restent disponibles aussi longtemps que votre compte est actif.
Combien de captures sont incluses dans le compte gratuit ?
200 captures par mois, remises à zéro le 1er de chaque mois. Aucune carte bancaire requise pour s'inscrire.
Puis-je utiliser Shotbot sans créer de compte ?
Oui, pour un usage occasionnel : 10 captures par jour sans compte. Le format, la résolution, le HiDPI, le dark mode et l'accès API nécessitent un compte gratuit.
Comment créer un compte ?
Rendez-vous sur la page Inscription. Il suffit d'une adresse email et d'un mot de passe. L'accès est immédiat après validation de l'email.
Comment supprimer mon compte ?
Depuis votre espace préférences, vous trouvez une option de suppression définitive du compte (en self-service, sans avoir à nous contacter).
La suppression efface immédiatement votre compte, vos sessions, vos préférences et les captures en attente. Les captures déjà complétées peuvent rester accessibles jusqu'à 1 an après votre dernière activité, puis sont supprimées automatiquement. Les données de paiement sont conservées 10 ans (obligation légale comptable, art. L123-22 du Code de commerce).
Si vous avez des crédits non consommés, ils sont perdus à la suppression (non remboursables). Pour exercer vos droits RGPD avec accusé de réception écrit, passez par le formulaire de contact.
Captures planifiées
Puis-je planifier des captures récurrentes ?
Oui, depuis la page Captures planifiées. Vous pouvez programmer des URLs à recapturer automatiquement toutes les 6h, 12h, 24h, 48h ou 7 jours. La limite dépend de votre solde de crédits : 5 URLs en compte gratuit, 30 après une première recharge, 100 si vous avez 1 000 crédits ou plus, 500 au-delà de 10 000 crédits. Chaque exécution consomme 1 capture de votre quota mensuel. Les captures planifiées sont automatiquement mises en pause si votre compte reste inactif pendant 6 mois consécutifs (un email vous est envoyé). Les planifications restées en pause plus d'un an sont supprimées définitivement - vous pouvez les réactiver avant ce délai depuis la page Captures planifiées.
Livraison par email (Shotbot Pro) : les abonnés Shotbot Pro peuvent activer l'envoi automatique par email à chaque exécution. La capture est intégrée directement dans le message (image visible sans clic) avec les détails de la planification : URL, fréquence, options, numéro d'exécution. Utile pour la veille concurrentielle ou l'archivage visuel automatisé. Chaque email compare aussi la capture à la précédente et affiche un badge « Mise à jour depuis le dernier rendu » ou « Identique au dernier rendu », pour repérer les changements sans comparaison manuelle.
Comment déclencher un callback à chaque capture planifiée ?
La planification intégrée de Shotbot ne déclenche pas directement un webhook. Pour recevoir l'image automatiquement à chaque exécution, utilisez l'API depuis votre propre cron : appelez POST api.shotbot.net/capture avec un callback_url : Shotbot POSTera l'image multipart à votre endpoint dès que la capture est prête.
Vous contrôlez l'horaire exact, la fréquence et la logique de traitement côté serveur. La page Captures planifiées reste idéale pour le monitoring visuel sans code ; l'API avec callback convient aux intégrations où votre application doit ingérer l'image automatiquement. Voir les exemples de code pour le mode callback.
Que se passe-t-il si mon quota est épuisé au moment d'une exécution ?
La capture est ignorée (pas ajoutée à la file) et la prochaine tentative est repoussée de 1 heure. Si vous avez activé les notifications dans vos préférences ("Alertes quota"), un email vous est envoyé.
Dès que votre quota se recharge (le 1er du mois) ou que vous rechargez des crédits, les planifications reprennent normalement à leur prochain intervalle.
Les captures s'exécutent-elles à heure fixe ?
Non. L'intervalle est calculé depuis le moment de la dernière exécution, pas depuis une heure fixe dans la journée. Si vous planifiez une URL à 14h32 avec un intervalle de 24h, la prochaine capture sera lancée autour de 14h32 le lendemain.
En cas de skip (quota épuisé), l'exécution est repoussée de 1h et le rythme décale d'autant. Si vous avez besoin d'une heure d'exécution précise et reproductible, utilisez votre propre cron et appelez l'API directement.
Que se passe-t-il si mon abonnement Shotbot Pro expire avec des options Pro configurées ?
La planification reste active et continue de s'exécuter normalement. Les options réservées aux abonnés Shotbot Pro (bloquer pubs & traqueurs, forcer le lazy-load, gestion des bannières de cookies) sont silencieusement ignorées jusqu'au renouvellement. Les autres options (format, viewport, dark mode, etc.) s'appliquent normalement. La planification n'est ni mise en pause ni supprimée automatiquement.
API
Comment obtenir une clé API ?
Créez un compte gratuit ou connectez-vous, puis rendez-vous sur la page Clé API. Votre clé (12 caractères alphanumériques) est disponible immédiatement dans votre espace webmaster.
Quelle est la structure des endpoints API ?
Shotbot expose deux APIs :
APIv2 (recommandée, JSON REST) :
POST https://api.shotbot.net/capture - soumettre une capture (mode hébergé).
GET https://api.shotbot.net/capture/{token} - interroger le statut.
POST https://api.shotbot.net/capture/callback - soumettre avec callback (marque blanche).
POST https://api.shotbot.net/capture/batch - jusqu'à 500 URLs en une requête.
API legacy (URL-based) :
https://add.shotbot.net/k={clé}/url={url}, options en chemin (/nojs/1/, /format/webp/, /w/1280/, /fullpage/1/, /hidpi/1/, /darkmode/1/).
Détails dans la documentation API.
Quelles sont les réponses possibles de l'API ?
APIv2 renvoie du JSON.
À la soumission (POST /capture) : {token, status, eta_seconds} avec status = queued, processing, done ou waitlisted. Erreurs : {error: "invalid_key|invalid_url|missing_url|invalid_json", ...} avec un code HTTP 4xx adapté.
Lors du polling (GET /capture/{token}) : {status, image, preview, format, url} quand status=done.
API legacy renvoie du texte brut : OK (créée), OK waitlist (en file d'attente), ERR key (clé invalide), ERR url (URL invalide), ERR args (paramètres incorrects).
Comment récupérer l'image générée ?
Trois cas selon le mode utilisé.
APIv2 hébergé (POST /capture) : interrogez GET https://api.shotbot.net/capture/{token} ; quand status vaut done, la réponse contient image (URL directe) et preview (aperçu 640 px WebP). Format des URLs : https://static.shotbot.net/{t1}/{t2}/{token}.{format} (t1 = 1er caractère du token, t2 = 2 premiers). Aperçu : https://cache.shotbot.net/t/{token}/preview.
APIv2 callback (POST /capture/callback) : Shotbot pousse l'image binaire directement sur votre callback_url via un POST multipart. Aucune récupération à faire de votre côté.
API legacy (add.shotbot.net) : l'URL peut être calculée localement à partir du MD5 de l'URL soumise : https://static.shotbot.net/{md5[0]}/{md5[0:2]}/{md5}/{taille}.jpg. Exemple pour 120 px : https://static.shotbot.net/a/ab/abcdef.../120.jpg.
Détails complets dans la documentation API et les exemples d'intégration.
Qu'est-ce que le mode Callback (marque blanche) ?
En mode Callback, Shotbot génère la capture puis la pousse directement sur votre serveur via HTTP POST. Aucun hébergement de notre côté : les images atterrissent chez vous. Utile pour les volumes élevés, les revendeurs ou les intégrations marque blanche. Voir la documentation.
La marque blanche est-elle incluse dans le compte gratuit ?
Oui. Le mode Callback (marque blanche) est disponible pour tous les comptes, y compris le compte gratuit. Shotbot génère la capture et la pousse directement sur votre serveur via HTTP POST : aucune image hébergée chez nous, aucune mention Shotbot. Aucune option payante requise. Voir la documentation callback.
Puis-je utiliser Shotbot dans une application commerciale ?
Oui. L'API est disponible pour usage personnel et commercial. Pour des volumes très élevés (> 500 000 captures/mois) ou un SLA dédié, contactez-nous pour un arrangement sur mesure.
Où sont hébergées les captures ?
Sur nos serveurs en France, infogérés par Permalink.
Les URLs de capture sont du type https://static.shotbot.net/{t1}/{t2}/{token}.{format} en APIv2 (token aléatoire 32 hex), ou https://static.shotbot.net/{md5[0]}/{md5[0:2]}/{md5}/{taille}.jpg en API legacy (basée sur le MD5 de l'URL soumise).
Y a-t-il des exemples de code pour intégrer l'API ?
Oui. La page Intégration propose des exemples copy-paste en PHP, Python, Node.js, Go, cURL et Ruby, couvrant la capture simple, le mode callback (marque blanche avec vérification par callback_secret) et le mode batch (jusqu'à 500 URLs en une requête).
Puis-je soumettre plus de 500 URLs en batch ?
Un batch accepte par défaut jusqu'à 500 URLs par requête (POST /capture/batch). Si vos volumes le nécessitent, contactez-nous : la limite peut être augmentée sur votre compte sur simple demande.
À quoi sert le paramètre callback_secret ?
C'est un secret partagé optionnel qui sécurise le mode callback. Vous le passez à la soumission (champ callback_secret, ≤ 255 caractères) ; Shotbot le renvoie tel quel dans le POST de réception, en champ callback_secret. Côté serveur, vous comparez avec votre valeur attendue (via hash_equals() en PHP, subtle.ConstantTimeCompare en Go, etc.) pour vous assurer que le POST entrant provient bien de Shotbot.
Sans ce paramètre, n'importe quel attaquant connaissant l'URL de votre callback pourrait y poster une fausse image. Recommandé pour tout endpoint exposé sur Internet. Voir les exemples d'intégration (PHP, Go, etc.).
En complément, vous pouvez whitelister l'IP 163.172.105.112 dans votre firewall : tous les callbacks Shotbot proviennent de cette adresse. Liste JSON à jour.
Comment fonctionne la déduplication en mode batch ?
Pour économiser votre quota, l'endpoint POST /capture/batch détecte les doublons à deux niveaux. L'appariement se fait sur la chaîne d'URL exacte (sensible à la casse, paramètres de requête inclus).
Au sein du batch : si la même URL apparaît plusieurs fois dans jobs[], une seule capture est créée et toutes les occurrences renvoient le même token.
Avec les captures récentes : si une même URL a déjà été soumise dans les 60 secondes précédentes par le même compte (et n'est pas encore terminée), aucune nouvelle capture n'est créée ; le token existant est renvoyé. Au-delà de 60 s, une nouvelle capture est créée avec un token distinct.
La réponse contient deduplicated (nombre de doublons trouvés) et submitted (vraies nouvelles captures).
Que se passe-t-il si mon callback_url est injoignable ?
Shotbot tente une seule fois de POSTer la capture sur votre callback_url, avec un timeout de 30 secondes. Il n'y a pas de retry automatique : si votre serveur est en panne ou répond trop lentement, la capture n'est pas renvoyée (Shotbot ne stocke rien en mode callback). Considérez les callbacks comme une livraison « au plus une fois ».
Recommandations :
Assurez-vous que votre endpoint répond rapidement (idéalement < 5 s) et qu'il est hautement disponible. Vérifiez également que l'IP 163.172.105.112 n'est pas bloquée par votre firewall (liste JSON).
Pour de gros volumes ou des SLA stricts, utilisez plutôt l'APIv2 hébergée (POST /capture) : Shotbot conserve l'image, vous la récupérez à votre rythme via polling ou téléchargement direct.
Vous pouvez surveiller votre journal callback dans votre espace webmaster.
Existe-t-il une spécification OpenAPI / Swagger pour l'API Shotbot ?
Oui. La spécification complète de l'APIv2 au format OpenAPI 3.1 est disponible à https://api.shotbot.net/openapi.yaml.
Une référence interactive (Redoc, auto-hébergée - aucune dépendance externe) est accessible à https://api.shotbot.net/docs.
La spec couvre tous les endpoints (POST /capture, GET /capture/{token}, POST /capture/callback, POST /capture/batch), tous les paramètres avec leur type, valeur par défaut et contraintes, tous les codes d'erreur, et les différences compte gratuit / Pro.
Comment importer Shotbot dans Postman ou Insomnia ?
Les deux outils acceptent l'import direct depuis une URL OpenAPI.
Postman : Import → Lien → collez https://api.shotbot.net/openapi.yaml. Une collection avec tous les endpoints est générée automatiquement.
Insomnia : Créer → Importer → Depuis une URL → collez https://api.shotbot.net/openapi.yaml.
Après import, renseignez la variable key avec votre clé API (disponible sur la page Clé API).
Peut-on utiliser Shotbot avec des outils IA comme Cursor ou Claude ?
Oui. L'approche la plus simple est de fournir l'URL de la spec OpenAPI comme contexte.
Cursor / Copilot : référencez https://api.shotbot.net/openapi.yaml dans votre contexte ou attachez-le comme fichier.
Claude / ChatGPT : collez l'URL et demandez de générer le code d'intégration dans votre langage. La spec contient tous les paramètres, types et codes d'erreur : le code généré est immédiatement utilisable sans approximation.
Un résumé en texte brut est également disponible à https://www.shotbot.fr/llms.txt, optimisé pour les fenêtres de contexte LLM.
Comment générer une image OG (1200×630 px) ?
Passez viewport_width=1200, crop_height=630 et output_size=1200 dans votre requête APIv2. Vous obtenez une capture exactement 1200×630 px quelle que soit la hauteur naturelle de la page, soit le format standard des images Open Graph.
crop_height est une option Pro. Pour les images OG, format="webp" donne le fichier le plus léger ; format="jpg" reste le plus compatible avec les clients mail et les anciennes plateformes.
Si votre page est conçue spécifiquement comme une carte OG (une route /og/{slug} rendue à 1200×630), vous pouvez vous passer de crop_height : utilisez simplement viewport_width=1200 + fullpage=false et la hauteur du viewport fait le travail.
Qu'est-ce que <code>file_hash</code> et comment le vérifier ?
Chaque réponse APIv2 avec "status":"done" contient désormais un champ file_hash : le condensat SHA-256 du fichier capturé, préfixé de sha256:.
Pour vérifier l'intégrité, téléchargez l'image et exécutez :
sha256sum capture.jpgLe résultat doit correspondre à la valeur du champ (sans le préfixe
sha256:). Une différence signifie que le fichier a été altéré ou corrompu en transit.Utile pour l'archivage, les investigations OSINT et tout contexte où prouver qu'un fichier n'a pas été modifié depuis la capture est important.
Qu'est-ce que <code>captured_at</code> ?
captured_at est le timestamp Unix (secondes depuis le 1er janvier 1970 UTC) du moment exact où la capture a été effectuée. Il est inclus dans chaque réponse APIv2 avec "status":"done".
Contrairement à l'heure de soumission, captured_at reflète l'instant où le navigateur a rendu et enregistré la page, file d'attente comprise. Conversion : new Date(captured_at * 1000) en JavaScript ou datetime.fromtimestamp(captured_at) en Python.
Ce timestamp permet de documenter l'état exact d'une page à un instant donné, par exemple dans un contexte juridique ou de conformité.
Si je soumets un batch de 10 000 URLs, est-ce que je vais bloquer les autres clients ?
Non. La file batch utilise une allocation équitable (fair-share) entre clients : le prochain worker disponible est toujours attribué au client qui a le moins de captures batch en cours à cet instant.
Concrètement : si vous avez 9 997 captures en attente et qu'un autre client soumet 3 URLs, ses 3 captures seront traitées en priorité tant qu'elles n'ont pas rattrapé votre niveau d'activité en cours. Dès que vous êtes le seul client avec des captures en attente, vous récupérez la totalité des workers.
Cette mécanique protège tous les clients batch contre les grandes campagnes d'un seul compte. Si votre volume justifie une file exclusive sans partage, consultez Shotbot Dédié.
Je dois capturer des centaines de milliers de pages. Que faire ?
Le mode batch (POST /capture/batch) est conçu pour cela : jusqu'à 500 URLs par requête (5 000 avec Shotbot Pro). Pour une campagne de très grande envergure (plusieurs centaines de milliers de captures en une passe), prévenez-nous avant le lancement - on prépare la capacité de votre côté pour éviter tout ralentissement.
Puis-je envoyer automatiquement mes captures vers un bucket S3 ?
Oui. Utilisez le paramètre callback_url lors de la soumission : dès que la capture est prête, Shotbot envoie le fichier image en multipart à votre endpoint. Il vous suffit d'y placer un handler PHP (ou tout autre langage) qui uploade le fichier dans votre bucket via le SDK AWS.
Cette approche fonctionne aussi bien pour une capture unitaire que pour un batch de 500 URLs : chaque capture terminée déclenche un POST séparé vers votre handler.
Voir le guide complet avec code prêt à l'emploi : Exporter des captures vers S3.
Quels providers S3 sont compatibles avec le callback Shotbot ?
Tout provider exposant une API compatible S3 fonctionne. Le SDK AWS PHP (aws/aws-sdk-php) accepte un paramètre endpoint qui permet de pointer vers n'importe quel service :
- AWS S3 : endpoint null (comportement par défaut)
- Scaleway Object Storage :
https://s3.fr-par.scw.cloud - OVH Object Storage :
https://s3.gra.io.cloud.ovh.net - Cloudflare R2 :
https://<account_id>.r2.cloudflarestorage.com(sans frais de bande passante sortante) - Backblaze B2 :
https://s3.us-west-004.backblazeb2.com
Les exemples de configuration par provider sont disponibles sur la page Export vers S3.
Pourquoi mes captures API sont-elles refusées avec <code>concurrency_limit</code> ?
Shotbot limite le nombre de captures pouvant tourner simultanément : 3 pour les comptes gratuits, 15 pour Shotbot Pro. Si vous dépassez cette limite, les appels supplémentaires à POST /capture reçoivent une réponse 429 concurrency_limit.
La solution la plus simple : passer à POST /capture/batch. Les soumissions batch ne sont pas soumises à cette limite de concurrence. Vous pouvez soumettre jusqu'à 500 URLs en un seul appel, et Shotbot les met en file sans déclencher cette erreur.
Si vous préférez conserver l'endpoint de capture unitaire, ajoutez une boucle de retry avec un court délai (1-2 secondes) sur les réponses 429.
Facturation
Comment acheter des captures supplémentaires ?
Depuis votre espace webmaster, cliquez sur "Recharger". Le paiement est sécurisé par Stripe. Les crédits sont ajoutés automatiquement après confirmation (quelques secondes). Ils n'expirent pas.
Quels sont les packs disponibles ?
Quatre packs sans abonnement : 5 000 captures (9,90 €), 20 000 captures (14,90 €), 100 000 captures (49,90 €), 500 000 captures (199,00 €). Les crédits s'ajoutent à votre quota mensuel et n'expirent pas. Voir la page Tarifs.
Y a-t-il un abonnement mensuel ?
Pour la majorité des usages, non : Shotbot fonctionne avec un quota mensuel gratuit (200 captures) et des recharges ponctuelles, sans engagement ni prélèvement automatique. Shotbot Pro (29 €/mois ou 290 €/an, 2 mois offerts) est disponible pour les développeurs qui ont besoin des fonctionnalités avancées et d'une file prioritaire.
Les achats sont-ils remboursables ?
Non. Les crédits de captures sont non remboursables après achat, conformément aux conditions générales. En cas de problème technique avéré de notre côté, contactez-nous.
Les données bancaires transitent-elles par vos serveurs ?
Non. Le paiement est entièrement géré par Stripe, directement sur leurs serveurs certifiés PCI-DSS niveau 1. Shotbot ne voit jamais vos coordonnées bancaires : uniquement une notification de confirmation via webhook.
La TVA est-elle applicable ?
Non. TVA non applicable : art. 293 B du Code général des impôts (auto-entrepreneur). Le prix affiché est le prix final.
Confidentialité
Vos serveurs sont-ils en France ?
Oui, et c'est une décision délibérée. L'ensemble de nos serveurs (API, workers, CDN, base de données) est hébergé en France et infogéré par Permalink, infogéreur français basé à Strasbourg. Vos données et vos captures ne quittent pas le territoire français. Shotbot est soumis au droit français et au RGPD : pas au Cloud Act américain, pas à un hébergeur hors UE.
Quelles données personnelles collectez-vous ?
Adresse email, mot de passe haché (bcrypt), adresse IP, horodatage des sessions et URLs capturées. Aucune donnée bancaire n'est stockée sur nos serveurs. Consultez notre politique de confidentialité pour le détail.
Comment exercer mon droit à l'effacement (RGPD) ?
Depuis votre espace préférences, vous pouvez supprimer votre compte en self-service. La suppression est immédiate : données de compte, sessions, préférences et captures en attente sont effacées.
Ce qui est conservé après suppression : les données de paiement sont conservées 10 ans (obligation légale comptable). L'historique des captures complétées peut subsister jusqu'à 1 an après votre dernière activité, puis est supprimé automatiquement. Les fichiers image sur le CDN sont supprimés dans un délai de 30 jours sur demande explicite.
Pour exercer vos droits RGPD avec accusé de réception écrit (accès, portabilité, rectification, opposition), utilisez notre formulaire de contact. Délai de réponse : 30 jours maximum.
Les captures générées sont-elles publiques ?
Les captures sont accessibles via leur URL CDN. Elles ne sont pas listées publiquement ni indexées par Shotbot.
En APIv2, l'URL contient un token aléatoire 32 caractères non devinable, ce qui agit comme un secret partagé. En API legacy, l'URL est dérivée du MD5 de l'URL soumise, donc déterministe et potentiellement prévisible.
Dans tous les cas, n'importe qui connaissant l'URL exacte peut accéder à l'image : ne soumettez pas de pages confidentielles via l'API legacy. Pour les captures sensibles, utilisez l'APIv2 callback : l'image est livrée directement sur votre serveur, jamais hébergée chez nous.
Combien de temps Shotbot conserve-t-il les journaux techniques de mes captures ?
Les journaux d'exécution détaillés (étapes de traitement, messages d'erreur éventuels) sont conservés 30 jours glissants, puis supprimés automatiquement. L'historique de vos captures (date, URL, options, statut) reste visible dans votre journal de compte tant que celui-ci est actif.
Puis-je exporter mes données personnelles (droit à la portabilité) ?
Oui. Depuis votre espace d'export, vous pouvez télécharger l'ensemble de vos données personnelles en un fichier JSON structuré.
Le fichier contient : vos informations de compte, préférences, l'historique complet de vos captures (toutes les captures, sans limite de date), vos captures planifiées et vos paiements.
Ce droit est garanti par l'article 20 du RGPD. Si vous avez besoin d'un export dans un autre format ou d'une confirmation écrite, contactez-nous via le formulaire de contact.
Contact
Comment nous contacter ?
Via le formulaire de contact. Nous répondons en général sous 24 heures en jours ouvrés.
Puis-je proposer un partenariat ?
Oui. Sélectionnez le sujet "Partenariat" dans le formulaire de contact et décrivez votre projet. Nous étudions toutes les propositions sérieuses : échanges de liens, intégrations, partenariats éditoriaux.
Comment signaler un contenu illicite ?
Via le formulaire de contact en précisant l'URL concernée. Conformément à la LCEN, nous traitons chaque signalement sous 48 heures ouvrées.
CLI
Existe-t-il un client en ligne de commande pour Shotbot ?
Oui, trois en fait. Trois clients officiels open source sous licence MIT sont disponibles : PHP, Python et Node.js, chacun tenant en un seul fichier sans dépendances. Mêmes options, mêmes codes de sortie, même UX : shotbot capture --url=https://example.com --output.
Choisissez le runtime que vous avez déjà :
curl -fsSL https://api.shotbot.net/cli/php/shotbot -o shotbot && chmod +x shotbot (PHP 8.0+ et php-curl).
curl -fsSL https://api.shotbot.net/cli/python/shotbot -o shotbot && chmod +x shotbot (Python 3.8+, sans pip install).
curl -fsSL https://api.shotbot.net/cli/node/shotbot -o shotbot && chmod +x shotbot (Node.js 18+, sans npm install).
Le binaire s'appelle shotbot dans tous les cas ; placez-le dans votre PATH ou symlinkez-le dans /usr/local/bin/. Détails sur la page Outils CLI.
Comment fonctionne la clé API au premier lancement ?
Au premier appel, le CLI vous invite à coller votre clé API (récupérable sur la page Clé API). Elle est enregistrée avec le mode 0600 (lecture seule pour votre utilisateur), dans un fichier propre à chaque client : ~/.shotbot-php-cli/config.json pour le client PHP, ~/.shotbot-python-cli/config.json pour le client Python, ~/.shotbot-node-cli/config.json pour le client Node.js. Les trois peuvent cohabiter sans conflit ; les défauts ne sont pas synchronisés entre les clients.
En CI ou pour basculer entre plusieurs comptes, exportez la variable SHOTBOT_API_KEY : elle prime sur la valeur stockée. La commande shotbot reset efface la clé enregistrée et redemande la saisie au prochain appel. shotbot config affiche le chemin du fichier de configuration.
Mes captures CLI sont-elles privées ?
Oui, par défaut. Chaque capture du CLI active private: true dans la requête API : le worker écrit le fichier dans un dossier non exposé par le CDN, le CLI le télécharge et l'enregistre dans votre dossier courant (nom auto host-token.jpg), puis la copie serveur est purgée automatiquement. Aucune URL publique n'est créée.
C'est utile pour les pages sensibles (intranets, dashboards, données client) que vous ne voulez pas voir mises en cache sur un CDN public. Utilisez --output pour choisir où enregistrer, ou --cdn quand vous voulez au contraire une URL publique permanente sur static.shotbot.net (sans fichier local).
Puis-je enregistrer mes options par défaut ?
Oui. shotbot set <clé> <valeur> persiste une option qui s'appliquera à toutes les captures suivantes. Les drapeaux passés en ligne de commande gardent toujours la priorité.
Quelques exemples :
shotbot set viewport 1440
shotbot set full-page
shotbot set output ./shots/
shotbot set format webp
shotbot defaults liste les valeurs enregistrées ; shotbot defaults --keys liste toutes les clés modifiables avec leurs types ; shotbot unset <clé> efface une valeur. Les défauts sont stockés dans le même config.json que la clé API.
Le CLI accepte-t-il les options Pro ?
Oui, toutes les options de l'APIv2 sont disponibles : --dismiss-cookies, --scroll, --block-ads, --crop-height, --selector, --http-auth-user / --http-auth-pass, ainsi que les options PDF (--pdf-page-size, --pdf-margin, --pdf-scale, --pdf-landscape).
Le CLI ne fait aucun filtrage côté client : c'est l'API qui contrôle l'éligibilité. Si votre compte n'est pas Pro, l'API renvoie 403 pro_required et le CLI sort en code 4. shotbot help affiche la liste complète des options et leurs valeurs autorisées.
Comment l'utiliser dans un script CI ?
Trois éléments suffisent.
1. Exporter la clé : export SHOTBOT_API_KEY=..., ce qui évite l'invite interactive.
2. Désactiver la couleur : NO_COLOR=1 pour des logs propres.
3. Lire les codes de sortie : 0 succès, 2 mauvais arguments, 3 erreur réseau, 4 erreur API, 5 waitlist (quota épuisé), 6 échec côté serveur, 7 dépassement du délai de polling.
L'option --json renvoie la réponse APIv2 brute (sans aucun habillage), pratique pour récupérer le token, le hash file_hash ou le statut HTTP cible dans un pipeline. --timeout=N borne le polling pour les besoins CI.
Comment utiliser Shotbot avec Claude Code ?
Shotbot fournit un serveur MCP qui donne à Claude Code la capacité de capturer n'importe quelle page. Une seule commande suffit, sans Node.js ni npm :
claude mcp add --scope user shotbot --transport http "https://api.shotbot.net/mcp?key=votre-cle"
Vérifiez avec claude mcp list, puis demandez simplement une capture à Claude en langage naturel. Comme Claude Code lit les images, il peut décrire, comparer ou analyser ce qu'il capture. Guide complet : captures-ecran-claude-code.
Le serveur MCP est-il limité en débit ?
L'endpoint MCP (https://api.shotbot.net/mcp) est limité à 5 requêtes par seconde par IP, avec une tolérance de 20 en rafale. En pratique, un appel d'outil à la fois n'approchera jamais cette limite. Pour les volumes importants (polling en boucle, enchaînement de captures), préférez l'outil batch : il soumet jusqu'à 500 URLs en une seule requête atomique et ne compte que pour un appel.
Aucune question ne correspond. Essayez un autre terme ou contactez-nous.
Vous n'avez pas trouvé votre réponse ?
Pas de bot ici. On répond à chaque message. Contactez-nous.