Toute la documentation

Démarrer

  1. 01Pour commencer
  2. 02Installation
  3. 03Suivi

Fonctionnalités

  1. 04Le tableau de bord
  2. 05Objectifs
  3. 06Liens courts
  4. 07Sources et agents IA
  5. 08Rapports par e-mail
  6. 09Vérification planifiée
  7. 10Interrogez votre IA

Référence

  1. 11Configuration
  2. 12API HTTP

Plateformes

  1. 13Serveur autonome
  2. 14PHP
  3. 15WordPress
  4. 16Drupal
  5. 17Craft CMS
  6. 18Python
  7. 19Rails
  8. 20Ruby
  9. 21Go
  10. 22Java
  11. 23.NET
  12. 24Elixir
  13. 25Rust

Confiance

  1. 26Confidentialité

Référence

API HTTP

Tout ce que montre le tableau de bord est disponible en JSON sous /runlight/api, pour vos propres scripts et outils.

Le tableau de bord est construit sur cette API, donc tout ce qu’il vous montre, vous pouvez le récupérer vous-même. Envoyez un jeton comme bearer token.

bash

curl https://example.com/runlight/api/stats?period=30d -H "Authorization: Bearer $RUNLIGHT_TOKEN"

Pour les scripts, créez un jeton en lecture seule dans Réglages, API et IA, et gardez RUNLIGHT_TOKEN pour vous. Un jeton en lecture seule peut lire tous les rapports ci-dessous, y compris les liens courts et les clics de chacun, et il ne modifie jamais rien. Vous pouvez le limiter à un site, et il cesse de fonctionner dès que vous le supprimez. Les endpoints qui modifient quelque chose acceptent RUNLIGHT_TOKEN, un propriétaire, un administrateur ou un membre connecté, votre vérification authorize, ou un jeton manage pour son unique site. Un membre peut tout modifier sauf le service d’e-mail, les réglages de l’assistant et la suppression d’un site. Les mêmes jetons connectent les assistants IA, comme l’explique Interrogez votre IA.

Un jeton manage appartient à un serveur autonome qui affiche ce site. Il lit tout ce que lit un jeton en lecture seule et peut aussi modifier les objectifs, les entonnoirs, les liens courts, les domaines de liens, les rapports par e-mail et les liens de partage d’un site, ainsi que son nom, son fuseau horaire et sa durée de conservation, et obtenir des tickets pour le sélecteur d’éléments. Il ne peut jamais toucher aux autres sites, aux personnes, aux jetons, aux imports ni au service d’e-mail, et il ne peut pas changer l’endroit où vit le site. Il voit quel service d’e-mail envoie les rapports et depuis quelle adresse, mais les clés et les détails du compte de ce service lui restent cachés. Il n’ajoute des domaines de liens et des rapports par e-mail que si l’installation connaît sa propre adresse, via origin dans routes() ou RUNLIGHT_URL sur le serveur autonome. Le serveur autonome en obtient un via OAuth quand vous connectez le site, vous en créerez donc rarement un à la main.

Un jeton embed appartient à une extension WordPress, Drupal ou Craft qui affiche le tableau de bord d’un site dans l’administration du CMS. Partout ailleurs, il répond 403 avec token_embed_only. Son seul usage est POST /api/embed, qui crée un ticket pour un seul chargement du tableau de bord dans un cadre. Quiconque le détient peut donc lire le tableau de bord de ce site. Créez-en un dans Réglages, Installation, sous Clé du tableau de bord, ou avec POST /api/tokens.

Le bouton Connect d’une extension de CMS obtient sa clé du tableau de bord via OAuth avec le scope cms. La page de consentement propose les sites qui comptent le domaine de l’extension, ou le seul site quand celui-ci ne liste aucun domaine et compte donc n’importe lequel, ou un nouveau site quand les sites sont gérés dans le tableau de bord. La réponse à la demande de jeton contient la clé du tableau de bord dans access_token, l’identifiant du site dans site et sa clé des agents dans agents_key.

Les requêtes qui modifient quelque chose doivent envoyer content-type: application/json.

Lire les rapports

Chaque rapport accepte les mêmes paramètres de requête.

Paramètre Valeurs
site L’identifiant du site, par défaut le premier site.
period today, yesterday, 7d, 30d, 90d, month, last_month, year, 12mo ou all.
from, to Des dates au format YYYY-MM-DD, toutes deux incluses, à la place d’une période.
compare previous (par défaut), year, custom ou off.
compare_from, compare_to Les dates de comparaison, pour compare=custom.
filter dimension:op:value, où op vaut is, not ou contains. Répétez-le pour en appliquer jusqu’à six.
interval hour, day, week ou month pour les séries, choisi d’après la période par défaut.
Endpoint Renvoie
GET /api Le nom, la version et la version d’API de l’installation, sans jeton.
GET /api/sites Tous les sites, avec la date de leur dernière visite.
GET /api/stats Les visiteurs, les visites, les pages vues, les pages par visite, le taux de rebond et la durée de visite, avec ceux de la période de comparaison.
GET /api/series Les mêmes chiffres pour chaque heure, jour, semaine ou mois de la période.
GET /api/breakdown?dimension= Les lignes d’une dimension, avec limit (jusqu’à 1000) et page.
GET /api/rhythm Les visites par jour de la semaine et par heure.
GET /api/realtime Les personnes, les pages, les sources et les pays des 5 dernières minutes, avec les pages vues par minute et l’activité récente sur les 30 dernières.
GET /api/goals Chaque objectif avec ses conversions, ses visiteurs convertis, son taux et ses revenus.
GET /api/goals/:id Un objectif avec une série et ses conversions par canal, source et page.
GET /api/funnels Chaque entonnoir avec le nombre de visites qui ont atteint chaque étape, dans l’ordre, au cours d’une même visite.
GET /api/event-props?event= Les noms de propriétés envoyés avec un événement, et les valeurs de l’une d’elles, choisie avec key (la première par défaut) et limit (jusqu’à 1000).
GET /api/export Un ZIP de fichiers CSV pour la vue, avec les chiffres, les séries et chaque répartition, qui accepte les mêmes paramètres que les rapports.
GET /api/journeys Les chemins que suivent les visites, avec les pages principales à chaque étape, les flux entre les étapes et les chemins les plus fréquents. Il accepte steps (de 2 à 8), des pages start et end, et through sous la forme step:page pour suivre une page.
GET /api/links Les liens courts avec leurs clics.
GET /api/links/:id Les clics d’un lien au fil du temps, ses sources, ses pays, ses appareils et ses navigateurs.
GET /api/icon L’icône du site sous forme d’image, récupérée sur le propre domaine du site, ou une 404 quand il n’en a pas. Les liens de partage peuvent aussi la lire.

Un lien de partage et le tableau de bord intégré dans un CMS lisent sans jeton les rapports du tableau ci-dessus, sauf GET /api/links et GET /api/links/:id, pour le seul site qu’ils affichent. La page d’un lien de partage envoie x-runlight-share avec son identifiant. La page du tableau de bord intégré envoie x-runlight-embed avec la session ouverte par son ticket, qui dure une heure et se termine aussitôt quand son jeton est supprimé. Une fois la session expirée, les lectures répondent 401 avec embed_expired. Une requête qui porte x-runlight-embed n’obtient rien de plus, quoi qu’elle envoie d’autre, et toute autre requête qui le porte répond 403 avec share_not_available.

breakdown et filter acceptent les dimensions page, entry, exit, hostname, event, referrer, source, channel, utm_source, utm_medium, utm_campaign, utm_term, utm_content, country, region, city, browser, browser_version, os, os_version, device, screen et language. breakdown accepte aussi ai_agent et ai_page.

Modifier des choses

Endpoint Action
PATCH /api/sites/:id Modifie le name, la timezone ou la retentionMonths d’un site (6, 12, 24, 36 ou 60, ou null pour tout garder). Sur le serveur autonome, aussi les hostnames.
POST /api/sites Ajoute un site, quand les sites sont gérés dans le tableau de bord comme sur le serveur autonome, à partir de { "name", "hostnames", "timezone" }. Pour connecter plutôt une autre installation, envoyez { "remote": { "url", "token" } }.
DELETE /api/sites/:id Supprime un site géré et tout ce qui a été enregistré pour lui, ou déconnecte un site connecté.
POST /api/sites/connect Commence à connecter une autre installation via sa page de consentement, à partir de { "url" }. Il répond avec authorize, l’adresse vers laquelle envoyer le propriétaire. Ajoutez site avec l’identifiant d’un site de l’installation pour proposer celui-là en premier.
GET /api/sites/connect/done L’adresse où la page de consentement renvoie le propriétaire. Il termine la connexion et ouvre le tableau de bord sur le site.
POST /api/goals, PATCH /api/goals/:id, DELETE /api/goals/:id Ajoute, modifie ou retire un objectif.
POST /api/pick Crée un ticket pour le sélecteur d’éléments à partir de { "origin" }, l’origine du tableau de bord lui-même, à laquelle le sélecteur envoie son choix et nulle part ailleurs. Le ticket désigne aussi le site, et le sélecteur ne fait rien sur les pages d’un autre site. Un ticket est valable une demi-heure. Quiconque peut modifier des choses peut en demander un, tout comme un jeton de gestion pour son site, dont les tickets ne désignent jamais que le hub depuis lequel il s’est connecté.
POST /api/funnels, PATCH /api/funnels/:id, DELETE /api/funnels/:id Ajoute, modifie ou retire un entonnoir, envoyé sous la forme { "name", "steps" } avec deux à huit étapes { "kind", "match" }, où kind vaut page ou event.
POST /api/links, PATCH /api/links/:id, DELETE /api/links/:id Ajoute, modifie ou retire un lien court.
POST /api/links/import Ajoute de nombreux liens courts d’un coup à partir de { "rows" }, jusqu’à 5 000 objets avec url et, si vous voulez, slug, name et domain. Il répond avec le nombre de liens créés et les lignes qui ont échoué.
POST /api/links/import/:source Une étape d’un import depuis umami, dub, bitly, shortio ou rebrandly, envoyée sous la forme { "credentials", "cursor", "done" }. Renvoyez le cursor de la réponse jusqu’à ce qu’il revienne à null. Les identifiants sont utilisés et jamais conservés.
POST /api/import/umami/websites Liste les sites d’un compte Umami, à partir de { "credentials" }.
POST /api/import/umami/visits Une étape de la reprise de l’historique de visites d’un site Umami, à partir de { "credentials", "website", "cursor" }, répétée jusqu’à ce que cursor vaille null.
POST /api/import/csv/visits Écrit jusqu’à 2 000 lignes d’un CSV de visites, envoyées sous la forme { "rows": [...] } où chaque ligne est un objet de ses colonnes, et répond { "pageviews", "events", "visits", "skipped" }. Envoyez les lignes de la plus ancienne à la plus récente, sans répartir un même moment sur deux requêtes, car chaque requête remplace ce qu’un import précédent a écrit sur sa plage de temps.
GET, POST /api/link-domains, DELETE /api/link-domains/:domain Liste, ajoute ou retire des domaines de liens personnalisés. Un domaine de liens doit être un nom public, et jamais celui du tableau de bord ni celui d’un site.
GET /api/link-domains/:domain/check Indique si les requêtes vers un domaine de liens atteignent Runlight, sous la forme { "domain", "working", "reason", "code", "target" }, où reason dit ce qui a répondu à la place, code le nomme, et target donne le host vers lequel un enregistrement CNAME doit pointer et les addresses publiques qu’un enregistrement A ou AAAA doit utiliser.
GET, POST /api/shares, PATCH, DELETE /api/shares/:id Liste, ajoute, renomme ou retire des liens de partage.
GET, PUT, DELETE /api/mail, POST /api/mail/test Lit, définit, retire ou teste le service d’e-mail. Les clés ne sont jamais renvoyées. GET répond aussi source (code, dashboard, app ou null) et services, les services que proposent les Réglages. Quand l’application passe son propre système d’envoi, il contient aussi app, avec via, from, fromName et replaced, qui vaut true tant qu’un service enregistré envoie à sa place.
GET, POST /api/reports, DELETE /api/reports/:id, POST /api/reports/:id/send Liste, ajoute ou retire des destinataires de rapports, ou envoie un exemple.
GET ou POST /api/check Lance la vérification planifiée.
POST /api/observe Enregistre une page servie à un agent IA, envoyée sous la forme { "url", "userAgent", "at" }, où at est le moment où elle a été servie (au cours de la dernière semaine, en millisecondes epoch ou en date ISO) et peut être omis. Envoyez-en jusqu’à 500 d’un coup sous la forme { "fetches": [...] }. Il accepte le jeton, la clé des agents du site ou l’observeKey de toute l’installation, et ce sont les extensions de CMS et le lecteur de journaux qui l’appellent. Une seule requête répond 204 sans corps, et un lot répond { "recorded", "skipped" } avec le nombre de requêtes enregistrées et le nombre laissé de côté.
GET /api/tokens Liste les jetons d’API avec le nom, le site, le scope et les quatre derniers caractères de chacun, et la date de sa dernière utilisation. Les jetons eux-mêmes ne sont jamais renvoyés.
POST /api/tokens Crée un jeton à partir de { "name", "site", "scope" } et le renvoie une seule fois dans secret. Laissez site vide pour tous les sites. scope vaut read (par défaut), manage ou embed, et les deux derniers demandent un site.
POST /api/embed Crée un ticket qui ouvre une fois le tableau de bord du site dans un cadre, à partir de { "origin" }, l’origine de la page d’administration qui l’encadre, comme https://example.com. Seul un jeton embed peut le demander, et l’hôte de l’origine, sans www., doit être l’un des domaines de son site. Il répond 201 avec { "ticket", "site", "expiresAt", "path" }, où path vaut /runlight/embed?ticket=…. Un ticket ne sert qu’une fois, dans les cinq minutes.
GET /embed?ticket= Le tableau de bord pour un cadre, en dehors de /api. Avec un ticket ni utilisé ni expiré, il répond 200 avec une page que seule l’origine du ticket peut encadrer (frame-ancestors dans sa CSP, et pas de X-Frame-Options) et qui garde en mémoire une session d’une heure, sans cookie. Un ticket déjà utilisé ou expiré répond 410 avec une page qui l’indique et demande à la page d’administration de se recharger, encadrée par la même origine. Tout le reste répond 404 avec une page simple que rien ne peut encadrer. Ajoutez theme=light ou theme=dark pour suivre l’administration qui l’entoure, jusqu’à ce que quelqu’un choisisse un thème dans le cadre.
GET /api/observe-key, POST /api/observe-key/new Lit la clé des agents d’un site pour les extensions de CMS, créée la première fois qu’on la demande, ou la remplace par une nouvelle, ce qui arrête aussitôt l’ancienne.
GET /api/token Indique ce que peut faire le jeton envoyé avec la requête, sous la forme { "scope", "site" }. Un hub le demande avant de proposer de modifier quoi que ce soit.
DELETE /api/token Supprime le jeton envoyé avec la requête. Un hub le fait quand il déconnecte un site ou reçoit un nouveau jeton.
DELETE /api/tokens/:id Supprime un jeton, qui cesse aussitôt de fonctionner.
GET, PUT, DELETE /api/assistant Lit, définit ou retire les { "provider", "model", "baseUrl", "key" } de l’assistant du tableau de bord. La clé n’est jamais renvoyée. Réservé au propriétaire et aux administrateurs, mais toute personne au tableau de bord peut demander s’il est configuré.
POST /api/assistant/models Les modèles que propose un fournisseur, à partir de { "provider", "baseUrl", "key" }, pour le formulaire des réglages. Omettez key pour utiliser celle qui est enregistrée, ce qui ne fonctionne que pour le même fournisseur et la même adresse. Réservé au propriétaire et aux administrateurs.
POST /api/assistant/chat Interroge l’assistant en envoyant { "site", "messages", "view", "language" }, où les messages sont des paires { "role", "content" } qui se terminent par une question. Il répond { "reply", "tools" }. Réservé aux personnes connectées au tableau de bord, jamais aux jetons d’API ni aux liens de partage. Chaque personne peut poser trente questions par heure et deux à la fois, et chaque lecteur le nombre quotidien fixé par le propriétaire, avec une 429 au-delà de l’une ou l’autre limite.
PUT /api/assistant/limits Fixe le nombre de questions que chaque lecteur peut poser par jour, à partir de { "viewerDaily" }, un nombre entier de 0 à 1 000. Il vaut 50 au départ, et GET /api/assistant l’affiche au propriétaire et aux administrateurs. Réservé au propriétaire et aux administrateurs.
GET /api/account Le compte de la personne connectée, sous la forme { "account" }. Toute personne connectée, lecteurs compris.
POST /api/account/password Change votre propre mot de passe, à partir de { "current", "next" }. Toutes les autres connexions prennent fin, et ce navigateur reçoit une nouvelle session.
POST /api/account/2fa/start, /confirm, /recovery, /disable Active la connexion à deux facteurs, la confirme avec le premier { "code" } de l’application, crée de nouveaux codes de récupération ou la désactive. start répond { "secret", "uri" } pour l’application d’authentification, et confirm et recovery répondent { "recovery" } avec les codes. Tous sauf confirm demandent votre { "password" }.
GET, POST /api/people Liste toutes les personnes qui ont un compte et les invitations en cours, sous la forme { "people", "invites" }, ou invite quelqu’un à partir de { "email", "role" }, où role vaut admin, member ou viewer. Une invitation répond 201 avec { "invite", "link", "emailed" }, et son lien est valable sept jours. Réservé au propriétaire et aux administrateurs.
PATCH, DELETE /api/people/:id Change le { "role" } de quelqu’un, ou le retire avec les jetons qu’il a créés. Une personne devenue lecteur perd aussi ses jetons. Seul le propriétaire peut modifier ou retirer le propriétaire, et personne ne peut se retirer soi-même. Réservé au propriétaire et aux administrateurs.
DELETE /api/people/:id/2fa Désactive la connexion à deux facteurs de quelqu’un d’autre, pour une personne qui a perdu à la fois son téléphone et ses codes de récupération, à partir de votre propre { "password" }. Jamais celle du propriétaire. Réservé au propriétaire et aux administrateurs.
POST /api/people/:id/owner Transmet la propriété à un administrateur, à partir de votre { "password" }, et fait de vous un administrateur. Réservé au propriétaire.
DELETE /api/invites/:id, POST /api/invites/:id/resend Annule une invitation, ou l’envoie de nouveau avec un nouveau lien qui arrête l’ancien. Réservé au propriétaire et aux administrateurs.
POST /mcp Le serveur MCP pour les assistants IA, décrit dans Interrogez votre IA.

Les endpoints du compte et des personnes existent quand les comptes sont activés, comme sur le serveur autonome. Ils ne répondent qu’à une personne connectée au tableau de bord, jamais à un jeton, et répondent 401 avec sign_in à tous les autres.

Erreurs

Les erreurs sont en JSON, { "error", "code", "params" }. error dit ce qui s’est mal passé en anglais courant, code le nomme, et params, quand il y en a, remplissent les variables du message. Le tableau de bord affiche chaque code dans sa propre langue, et un script peut s’appuyer sur le code, là où le texte anglais peut changer.

Statut Quand
400 Quelque chose dans la requête est incorrect ou manquant.
401 Le jeton est absent ou inconnu de cette installation.
403 Un lecteur ou un jeton d’API tente une modification qui ne lui est pas permise.
404 Ce que la requête désigne n’existe pas.
409 Un nom est déjà pris, comme un domaine de liens qu’a un autre site.
413 Plus de 500 requêtes d’un coup vers POST /api/observe.
415 Une écriture qui n’est pas en application/json.
429 Trop de demandes en peu de temps, comme des tentatives de connexion, des exemples, des questions à l’assistant ou des enregistrements OAuth depuis une même adresse.
500 Une erreur s’est produite sur le serveur.
502 Une installation connectée était injoignable, a répondu par une redirection ou a refusé le jeton, ou le service d’IA a échoué.
503 Aucun jeton n’est défini en dehors du développement.
504 Une installation connectée a mis trop de temps à répondre.

Voici les codes et les params que chacun remplit. Une erreur qu’une installation connectée transmet via un hub garde son code et ses params, et son error commence par l’hôte de l’installation. La vérification d’un domaine de liens donne sa reason avec un code check_ de la même façon. La dernière colonne donne le texte que le tableau de bord affiche en français pour chaque code. L’API elle-même envoie ce texte en anglais, dans son champ error.

Code Params Ce qu’il dit
account_exists email {email} a déjà un compte.
address_refused host {host} est une adresse link-local ou de métadonnées cloud, à laquelle Runlight ne se connecte jamais.
admin_only Seul le propriétaire ou un administrateur peut modifier ceci.
assistant_address Saisissez l’adresse du service dans Réglages, Assistant IA.
assistant_address_bad Saisissez l’adresse du service, en commençant par https://
assistant_cancelled La question a été annulée.
assistant_daily limit Les lecteurs peuvent poser {limit} questions par jour. Réessayez demain.
assistant_dashboard Seul le tableau de bord peut utiliser l’assistant.
assistant_failed detail Le service d’IA n’a pas répondu comme prévu ({detail}).
assistant_invalid detail L’assistant n’a pas été enregistré ({detail}).
assistant_key provider Saisissez votre clé {provider}.
assistant_limit Utilisez un nombre entier de 0 à 1 000.
assistant_model Saisissez un modèle dans Réglages, Assistant IA.
assistant_no_models host {host} n’a listé aucun modèle. Saisissez plutôt le nom du modèle.
assistant_provider Choisissez un service d’IA dans Réglages, Assistant IA.
assistant_refused detail, host {host} a refusé la demande ({detail}).
assistant_slow Cette question a pris trop de temps. Essayez une question plus précise.
assistant_soon Vous avez posé beaucoup de questions en peu de temps. Patientez un peu, puis réessayez.
assistant_status host, status {host} a répondu {status}.
assistant_steps L’assistant a eu besoin de trop d’étapes pour cette question. Essayez une question plus précise.
assistant_timeout host {host} a mis trop de temps à répondre.
assistant_unset L’assistant n’est pas encore configuré. Un propriétaire peut le faire dans Réglages, Assistant IA.
busy Runlight vérifie d’autres connexions. Réessayez dans un instant.
check_https il est injoignable en HTTPS
check_not_public ce n’est pas un nom de domaine public
check_not_runlight quelque chose a répondu, mais pas Runlight
check_status status il a répondu {status}
check_timeout il a mis trop de temps à répondre
code_wrong Ce code n’est pas correct. Vérifiez l’heure de votre téléphone et essayez le suivant.
compare_bad compare Runlight ne connaît pas la comparaison « {compare} ».
compare_range_bad Choisissez les deux dates de comparaison.
connect_again Connectez à nouveau ce site pour le modifier d’ici.
connect_denied La connexion n’a pas été autorisée.
connect_endpoints url {url} a indiqué des points d’accès sur une autre adresse.
connect_expired Cette connexion a pris trop de temps ou a déjà servi. Recommencez.
connect_failed detail La connexion n’a pas commencé ({detail}).
connect_not_runlight url {url} n’a pas répondu comme une installation Runlight.
connect_old url {url} utilise une ancienne version de Runlight. Mettez-la à jour, ou connectez-la avec un jeton d’API de ses réglages.
connect_refused L’installation n’a pas laissé ce serveur se connecter. Recommencez, ou connectez-la avec un jeton d’API.
connect_register reason, url {url} n’a pas laissé ce serveur se connecter. {reason}
connect_token L’installation n’a pas donné de jeton à ce serveur. Recommencez.
connect_url Saisissez l’adresse de l’installation, par exemple https://example.com/runlight
domain_in_use domain {domain} héberge ce tableau de bord ou l’un de vos sites. Utilisez un domaine ou un sous-domaine à part pour les liens courts, comme go.{domain}.
domain_invalid Ce n’est pas un nom de domaine.
domain_not_public domain {domain} n’est pas un nom de domaine public. Utilisez un domaine accessible depuis n’importe quel navigateur.
domain_taken domain {domain} appartient déjà à un autre site.
email_invalid Saisissez une adresse e-mail.
embed_expired Ce tableau de bord a expiré. Rechargez la page pour l’ouvrir à nouveau.
embed_host host {host} ne fait pas partie des domaines de ce site. Ajoutez-le aux domaines du site, dans Réglages, Général, ou dans le code quand les sites y sont définis.
embed_origin Envoyez l’origine de la page d’administration, par exemple https://example.com
embed_site Une clé du tableau de bord vaut pour un seul site. Choisissez le site.
embed_token Utilisez la clé du tableau de bord du site, créée dans Réglages, Installation, sous WordPress, Drupal et Craft.
event_needed Nommez l’événement.
filter_bad filter Runlight ne sait pas lire le filtre « {filter} ».
filters_max max Utilisez au plus {max} filtres à la fois.
funnel_exists name Il existe déjà un entonnoir nommé « {name} ».
funnel_invalid detail L’entonnoir n’a pas été enregistré ({detail}).
funnel_long Un entonnoir a au plus huit étapes.
funnel_name Donnez un nom à l’entonnoir.
funnel_page_bad match « {match} » n’est ni un chemin ni une URL.
funnel_short Un entonnoir a besoin d’au moins deux étapes.
goal_amount Saisissez un montant, par exemple 49 ou 9,99.
goal_click_taken match L’objectif de clic « {match} » envoie déjà des événements portant ce nom.
goal_currency Utilisez un code de devise à trois lettres, comme USD ou EUR.
goal_event Saisissez le nom de l’événement.
goal_event_taken name Un objectif d’événement compte déjà les événements « {name} », alors donnez un autre nom à cet objectif de clic.
goal_exists name Il existe déjà un objectif nommé « {name} ».
goal_invalid detail L’objectif n’a pas été enregistré ({detail}).
goal_kind Choisissez ce que compte l’objectif, un événement, une visite de page ou un clic.
goal_link Saisissez l’adresse du lien, par exemple https://buy.stripe.com/*
goal_name Donnez un nom à l’objectif.
goal_page Saisissez un chemin de page, par exemple /merci ou /blog/*
goal_page_bad Cette page n’est ni un chemin ni une URL.
goal_prop_kind Seul un objectif d’événement peut prendre son montant dans l’événement. Utilisez plutôt un montant fixe.
goal_prop_name Un nom de propriété utilise des lettres, des chiffres, des points, des tirets et des tirets bas.
goal_selector Saisissez un sélecteur CSS, par exemple #signup ou .buy-button
hub_domains Un hub connecté ne peut pas changer les domaines d’un site.
icon_none Ce site n’a pas d’icône.
import_csv_batch max Envoyez au plus {max} lignes à la fois.
import_csv_format Ce fichier n’est ni un export Umami ni au format de visites de Runlight. Vérifiez sa ligne d’en-tête.
import_day_full limit Un jour compte plus de {limit} événements, plus qu’une étape d’import ne peut en lire.
import_failed detail L’import s’est arrêté ({detail}).
import_key service Saisissez votre clé {service}.
import_refused La clé ou la connexion a été refusée.
import_slug_bad slug /{slug} contient des caractères qu’un slug Runlight ne peut pas utiliser.
import_slug_taken name, slug /{slug} est déjà utilisé par « {name} ».
import_source source Runlight ne peut pas importer depuis {source}.
import_status host, status {host} a répondu {status}.
import_umami_address Saisissez l’adresse de votre Umami, par exemple https://stats.example.com
import_umami_login Saisissez une clé d’API, ou un nom d’utilisateur et un mot de passe.
import_website Choisissez le site Umami à importer.
install_refused Cette installation a refusé le jeton.
install_token Saisissez un jeton d’API de cette installation.
internal Une erreur s’est produite sur le serveur. Réessayez.
invite_gone Cette invitation a expiré ou a déjà servi. Demandez-en une nouvelle.
link_domain domain Ajoutez d’abord {domain} comme domaine de liens dans les réglages.
link_long La destination dépasse 2 000 caractères.
link_no_slug Aucun slug libre n’a été trouvé. Réessayez.
link_protocol La destination doit commencer par http:// ou https://
link_slug Un slug se compose de lettres, de chiffres, de tirets et de tirets bas, 100 au plus.
link_taken slug /{slug} est déjà pris.
link_url La destination doit être une URL complète, commençant par https://
mail_app_failed detail, via {via} n’a pas pu envoyer l’e-mail ({detail}).
mail_failed detail L’e-mail n’a pas pu être envoyé ({detail}).
mail_field field Le champ {field} est requis.
mail_from Saisissez l’adresse d’expédition des rapports, comme reports@example.com.
mail_https L’URL du webhook doit utiliser https.
mail_in_code Le service d’e-mail est défini dans le code, il ne peut donc pas être modifié ici.
mail_option field, options {field} doit être l’une de ces valeurs ({options}).
mail_port Le port doit être un nombre entier de 1 à 65535.
mail_refused detail, host {host} a refusé l’e-mail ({detail}).
mail_region Ce n’est pas une région AWS, comme us-east-1.
mail_service service Choisissez un service d’e-mail proposé ici. service est envoyé quand le service demandé n’est pas proposé.
mail_slow host {host} a mis trop de temps à répondre, l’e-mail n’a donc pas été envoyé.
mail_unreachable host Impossible de joindre {host}.
mail_unset Configurez d’abord un service d’e-mail.
mail_url Saisissez l’URL complète du webhook, par exemple https://example.com/hooks/mail.
method_not_allowed Ce n’est pas possible ici.
not_found Ce n’est pas ici.
observe_many Envoyez au plus 500 requêtes à la fois.
observe_url Envoyez l’adresse de la page.
origin_needed Indiquez d’abord l’adresse de ce Runlight (RUNLIGHT_URL sur le serveur, ou origin dans routes()) pour qu’un hub connecté puisse ajouter des domaines de liens et des rapports par e-mail.
owner_hand_over Seul le propriétaire peut transmettre la propriété.
owner_needs_admin Rendez-le d’abord administrateur.
owner_only Seul un propriétaire peut modifier ceci.
owner_protected Personne d’autre que le propriétaire ne peut modifier ou retirer le propriétaire.
password_current_wrong Votre mot de passe actuel n’est pas correct.
password_short min Utilisez un mot de passe d’au moins {min} caractères.
password_wrong Votre mot de passe n’est pas correct.
people_owner Seul le propriétaire ou un administrateur peut gérer les personnes.
pick_hub L’adresse de ce hub n’est pas celle depuis laquelle il s’est connecté. Connectez à nouveau le site depuis ici.
pick_origin Envoyez l’origine du tableau de bord, par exemple https://stats.example.com
pick_return Envoyez l’adresse du tableau de bord suivie de /pick-return, sur son origine, et un nonce de 32 chiffres hexadécimaux
property_bad Runlight ne sait pas lire ce nom de propriété.
question_needed Posez une question.
range_bad Ces dates ne forment pas une période que Runlight sait lire.
redirected host {host} a répondu par une redirection.
remote_slow host {host} a mis trop de temps à répondre. Essayez une période plus courte.
remove_self Vous ne pouvez pas vous retirer vous-même.
report_exists email {email} reçoit déjà ce rapport.
report_limit Un site peut envoyer à 50 adresses au plus.
retention_bad months Conservez les visites {months} mois, ou pour toujours.
role_needed Choisissez administrateur, membre ou lecteur.
rows_needed Envoyez les liens sous forme de liste de lignes.
sample_soon Un exemple vient de partir. Patientez une minute et réessayez.
sample_soon_hub Un hub connecté peut envoyer un exemple toutes les dix minutes. Patientez quelques minutes et réessayez.
send_json Envoyez ceci en JSON.
send_object Envoyez un objet JSON.
share_gone Ce lien de partage ne fonctionne plus.
share_not_available Ce n’est pas disponible sur un tableau de bord partagé.
sign_in Connectez-vous d’abord.
site_domain_invalid host « {host} » n’est pas un nom de domaine.
site_domain_needed Ajoutez le domaine du site, par exemple example.com
site_domain_taken host, site {host} appartient déjà à {site}.
site_invalid detail Le site n’a pas été enregistré ({detail}).
site_name Un nom de site fait de 1 à 80 caractères.
site_remote Ce site est compté par son propre Runlight. Connectez-le à nouveau depuis ses réglages pour le modifier d’ici.
sites_in_code Les sites sont définis dans le code ici, alors ils se modifient là.
smtp_starttls Le serveur SMTP ne propose pas STARTTLS. Choisissez TLS ou aucune pour la sécurité.
tables_busy Runlight crée ou met à jour ses tables. Réessayez dans une minute.
test_email Saisissez l’adresse e-mail à laquelle envoyer le test.
token_embed_only Une clé du tableau de bord ouvre seulement le tableau de bord dans un CMS.
token_manage_only Un jeton de gestion ne modifie que les réglages de son propre site.
token_name Nommez le jeton.
token_read_only Les jetons d’API ne peuvent que lire.
token_refused host {host} a refusé le jeton. Connectez-le de nouveau depuis les réglages du site.
token_site Un jeton qui modifie les réglages est pour un seul site. Choisissez le site.
token_unset Définissez RUNLIGHT_TOKEN, ou passez token ou authorize à routes(). Sans cela, Runlight n’est ouvert que lorsque NODE_ENV vaut development.
too_many_tries Trop de tentatives. Patientez quinze minutes et réessayez.
twofactor_off Activez d’abord la connexion à deux facteurs.
twofactor_restart Trop de codes erronés. Recommencez l’activation de la connexion à deux facteurs.
twofactor_self Désactivez votre propre connexion à deux facteurs dans Compte.
unauthorized Connectez-vous ou envoyez un jeton pour voir ceci.
unknown_account Ce compte n’existe plus.
unknown_dimension dimension Runlight ne connaît pas la répartition « {dimension} ».
unknown_domain Ce domaine n’appartient pas à ce site.
unknown_funnel Cet entonnoir n’existe plus.
unknown_goal Cet objectif n’existe plus.
unknown_invite Cette invitation n’existe plus.
unknown_link Ce lien n’existe plus.
unknown_report Ce rapport n’existe plus.
unknown_share Ce lien de partage n’existe plus.
unknown_site Ce site n’est pas ici.
unknown_timezone timezone Runlight ne connaît pas le fuseau horaire « {timezone} ».
unknown_token Ce jeton n’existe plus.
unreachable host Impossible de joindre {host}.