Referenz
HTTP-API
Alles, was das Dashboard zeigt, gibt es als JSON unter /runlight/api, für deine eigenen Skripte und Tools.
Das Dashboard baut auf dieser API auf, alles, was es dir zeigt, kannst du also selbst abrufen. Sende ein Token als Bearer.
bash
curl https://example.com/runlight/api/stats?period=30d -H "Authorization: Bearer $RUNLIGHT_TOKEN"Erstelle für Skripte ein Lese-Token unter Einstellungen, API und KI und behalte RUNLIGHT_TOKEN für dich. Ein Lese-Token kann jeden Bericht unten lesen, einschließlich der Kurzlinks und ihrer Klicks, und ändert nie etwas. Du kannst es auf eine Website beschränken, und es funktioniert nicht mehr, sobald du es löschst. Endpunkte, die etwas ändern, nehmen RUNLIGHT_TOKEN, einen angemeldeten Eigentümer, Admin oder ein angemeldetes Mitglied, deine authorize-Prüfung oder ein manage-Token für seine eine Website an. Ein Mitglied kann alles ändern außer dem E-Mail-Dienst, den Einstellungen des Assistenten und dem Löschen einer Website. Dieselben Tokens verbinden KI-Assistenten, wie Frag deine KI erklärt.
Ein manage-Token gehört zu einem eigenständigen Server, der diese Website anzeigt. Es liest wie ein Lese-Token und kann außerdem die Ziele, Trichter, Kurzlinks, Link-Domains, E-Mail-Berichte und Freigabelinks einer Website ändern, dazu ihren Namen, ihre Zeitzone und ihre Aufbewahrungsdauer, und Tickets für die Elementauswahl holen. Es kann nie andere Websites, Personen, Tokens, Importe oder den E-Mail-Dienst anfassen, und es kann nicht ändern, wo die Website liegt. Es sieht, welcher E-Mail-Dienst Berichte sendet und von welcher Adresse, aber die Schlüssel und Kontodaten des Dienstes bleiben ihm verborgen. Link-Domains und E-Mail-Berichte fügt es nur hinzu, wenn die Installation ihre eigene Adresse kennt, über origin in routes() oder RUNLIGHT_URL auf dem eigenständigen Server. Der eigenständige Server bekommt eines per OAuth, wenn du die Website verbindest, du musst also selten eines von Hand erstellen.
Ein embed-Token gehört zu einem Plugin für WordPress, Drupal oder Craft, das das Dashboard einer Website in den Adminseiten des CMS zeigt. Überall sonst antwortet es mit 403 und token_embed_only. Sein einziger Zweck ist POST /api/embed, das ein Ticket für ein einzelnes Laden des Dashboards in einem Frame erstellt. Wer es hat, kann also das Dashboard dieser Website lesen. Erstelle eines unter Einstellungen, Einbinden, bei Dashboard-Schlüssel, oder mit POST /api/tokens.
Der Button Verbinden eines CMS-Plugins holt seinen Dashboard-Schlüssel per OAuth mit dem Scope cms. Die Zustimmungsseite bietet die Websites an, die die Domain des Plugins zählen, oder die eine Website, wenn sie keine Domains aufführt und daher alles zählt, oder eine neue Website, wenn Websites im Dashboard verwaltet werden. Die Token-Antwort enthält den Dashboard-Schlüssel als access_token, die ID der Website als site und ihren Agenten-Schlüssel als agents_key.
Anfragen, die etwas ändern, müssen content-type: application/json senden.
Berichte lesen
Jeder Bericht nimmt dieselben Query-Parameter.
| Parameter | Werte |
|---|---|
site |
Die ID der Website, standardmäßig die erste Website. |
period |
today, yesterday, 7d, 30d, 90d, month, last_month, year, 12mo oder all. |
from, to |
Daten als YYYY-MM-DD, beide einschließlich, anstelle eines Zeitraums. |
compare |
previous (der Standard), year, custom oder off. |
compare_from, compare_to |
Die Daten, mit denen verglichen wird, für compare=custom. |
filter |
dimension:op:value, wobei op is, not oder contains ist. Wiederhole ihn, um bis zu sechs anzuwenden. |
interval |
hour, day, week oder month für Zeitreihen, standardmäßig passend zum Zeitraum gewählt. |
| Endpunkt | Liefert |
|---|---|
GET /api |
Den Namen, die Version und die API-Version der Installation, ohne Token. |
GET /api/sites |
Jede Website, mit dem Zeitpunkt ihres letzten Besuchs. |
GET /api/stats |
Besucher, Besuche, Seitenaufrufe, Seiten pro Besuch, Absprungrate und Besuchsdauer, mit denen des Vergleichszeitraums. |
GET /api/series |
Dieselben Zahlen für jede Stunde, jeden Tag, jede Woche oder jeden Monat des Zeitraums. |
GET /api/breakdown?dimension= |
Zeilen für eine Dimension, mit limit (bis 1000) und page. |
GET /api/rhythm |
Besuche nach Wochentag und Stunde. |
GET /api/realtime |
Personen, Seiten, Quellen und Länder der letzten 5 Minuten, mit Seitenaufrufen pro Minute und der letzten Aktivität über die letzten 30. |
GET /api/goals |
Jedes Ziel mit seinen Conversions, konvertierten Besuchern, seiner Rate und seinem Umsatz. |
GET /api/goals/:id |
Ein Ziel mit einer Zeitreihe und seinen Conversions nach Kanal, Quelle und Seite. |
GET /api/funnels |
Jeden Trichter damit, wie viele Besuche jeden Schritt der Reihe nach innerhalb eines Besuchs erreicht haben. |
GET /api/event-props?event= |
Die Namen der mit einem Ereignis gesendeten Eigenschaften und die Werte einer davon, gewählt mit key (standardmäßig die erste) und limit (bis 1000). |
GET /api/export |
Ein ZIP mit CSV-Dateien für die Ansicht, mit den Zahlen, der Zeitreihe und jeder Aufschlüsselung, mit denselben Parametern wie die Berichte. |
GET /api/journeys |
Die Wege, die Besuche nehmen: die Top-Seiten bei jedem Schritt, die Flüsse zwischen den Schritten und die häufigsten Pfade. Nimmt steps (2 bis 8), Seiten für start und end sowie through als step:page, um einer Seite zu folgen. |
GET /api/links |
Kurzlinks mit ihren Klicks. |
GET /api/links/:id |
Die Klicks eines Links im Zeitverlauf, Quellen, Länder, Geräte und Browser. |
GET /api/icon |
Das Symbol der Website als Bild, abgerufen von der eigenen Domain der Website, oder ein 404, wenn sie keines hat. Freigabelinks können es auch lesen. |
Ein Freigabelink und das Dashboard in einem CMS lesen die Berichte aus der Tabelle oben ohne Token, außer GET /api/links und GET /api/links/:id, und zwar für die eine Website, die sie zeigen. Die Seite eines Freigabelinks sendet x-runlight-share mit seiner ID. Die Seite des eingebetteten Dashboards sendet x-runlight-embed mit der Sitzung, die ihr Ticket geöffnet hat. Diese hält eine Stunde und endet sofort, wenn ihr Token gelöscht wird. Ist sie abgelaufen, antworten Lesezugriffe mit 401 und embed_expired. Eine Anfrage mit x-runlight-embed bekommt nichts weiter, egal was sie sonst sendet, und jede andere Anfrage damit antwortet mit 403 und share_not_available.
breakdown und filter nehmen die Dimensionen 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 und language an. breakdown nimmt außerdem ai_agent und ai_page.
Dinge ändern
| Endpunkt | Tut |
|---|---|
PATCH /api/sites/:id |
Ändert name, timezone oder retentionMonths einer Website (6, 12, 24, 36 oder 60, oder null, um alles zu behalten). Auf dem eigenständigen Server auch hostnames. |
POST /api/sites |
Fügt eine Website hinzu, wenn Websites im Dashboard verwaltet werden wie auf dem eigenständigen Server, aus { "name", "hostnames", "timezone" }. Um stattdessen eine andere Installation zu verbinden, sende { "remote": { "url", "token" } }. |
DELETE /api/sites/:id |
Löscht eine verwaltete Website und alles, was für sie aufgezeichnet wurde, oder trennt eine verbundene. |
POST /api/sites/connect |
Beginnt, eine andere Installation über ihre Zustimmungsseite zu verbinden, aus { "url" }. Antwortet mit authorize, der Adresse, an die der Eigentümer geschickt wird. Füge site mit der ID einer Website auf der Installation hinzu, damit diese zuerst angeboten wird. |
GET /api/sites/connect/done |
Wohin die Zustimmungsseite den Eigentümer zurückschickt. Schließt das Verbinden ab und öffnet das Dashboard mit der Website. |
POST /api/goals, PATCH /api/goals/:id, DELETE /api/goals/:id |
Fügt ein Ziel hinzu, ändert oder entfernt es. |
POST /api/pick |
Erstellt ein Ticket für die Elementauswahl aus { "origin" }, dem eigenen Origin des Dashboards, an den die Auswahl ihre Wahl schickt und nirgendwo sonst hin. Das Ticket nennt auch die Website, und auf den Seiten einer anderen Website tut die Auswahl nichts. Ein Ticket gilt eine halbe Stunde. Wer etwas ändern darf, kann eines anfordern, ebenso ein Verwaltungs-Token für seine Website, dessen Tickets immer nur den Hub nennen, von dem aus es verbunden wurde. |
POST /api/funnels, PATCH /api/funnels/:id, DELETE /api/funnels/:id |
Fügt einen Trichter hinzu, ändert oder entfernt ihn, gesendet als { "name", "steps" } mit zwei bis acht Schritten aus { "kind", "match" }, wobei kind page oder event ist. |
POST /api/links, PATCH /api/links/:id, DELETE /api/links/:id |
Fügt einen Kurzlink hinzu, ändert oder entfernt ihn. |
POST /api/links/import |
Fügt viele Kurzlinks auf einmal aus { "rows" } hinzu, bis zu 5.000 Objekte mit url und, wenn du willst, slug, name und domain. Antwortet damit, wie viele erstellt wurden und welche Zeilen gescheitert sind. |
POST /api/links/import/:source |
Ein Schritt eines Imports aus umami, dub, bitly, shortio oder rebrandly, gesendet als { "credentials", "cursor", "done" }. Sende den cursor, mit dem es antwortet, bis er als null zurückkommt. Zugangsdaten werden genutzt und nie aufbewahrt. |
POST /api/import/umami/websites |
Listet die Websites in einem Umami-Konto auf, aus { "credentials" }. |
POST /api/import/umami/visits |
Ein Schritt beim Übernehmen des Besuchsverlaufs einer Umami-Website, aus { "credentials", "website", "cursor" }, wiederholt, bis cursor gleich null ist. |
POST /api/import/csv/visits |
Schreibt bis zu 2.000 Zeilen einer Besuchs-CSV, gesendet als { "rows": [...] } mit jeder Zeile als Objekt ihrer Spalten, und antwortet mit { "pageviews", "events", "visits", "skipped" }. Sende die Zeilen, die ältesten zuerst, ohne einen Zeitpunkt auf zwei Anfragen zu verteilen, denn jede Anfrage ersetzt, was ein früherer Import in ihrer Zeitspanne geschrieben hat. |
GET, POST /api/link-domains, DELETE /api/link-domains/:domain |
Listet eigene Link-Domains auf, fügt sie hinzu oder entfernt sie. Eine Link-Domain muss ein öffentlicher Name sein und nie die des Dashboards oder einer Website. |
GET /api/link-domains/:domain/check |
Ob Anfragen an eine Link-Domain Runlight erreichen, als { "domain", "working", "reason", "code", "target" }. Dabei sagt reason, was stattdessen geantwortet hat, code benennt es, und target gibt den host an, auf den ein CNAME-Eintrag zeigen soll, und die öffentlichen addresses für einen A- oder AAAA-Eintrag. |
GET, POST /api/shares, PATCH, DELETE /api/shares/:id |
Listet Freigabelinks auf, fügt sie hinzu, benennt sie um oder entfernt sie. |
GET, PUT, DELETE /api/mail, POST /api/mail/test |
Liest, setzt, entfernt oder testet den E-Mail-Dienst. Schlüssel werden nie zurückgegeben. GET antwortet außerdem mit source (code, dashboard, app oder null) und services, den Diensten, die die Einstellungen anbieten. Wenn die App ihren eigenen Mailer übergibt, gibt es auch app, mit via, from, fromName und replaced, das true ist, solange ein gespeicherter Dienst an seiner Stelle sendet. |
GET, POST /api/reports, DELETE /api/reports/:id, POST /api/reports/:id/send |
Listet Empfänger von Berichten auf, fügt sie hinzu oder entfernt sie, oder sendet ein Beispiel. |
GET oder POST /api/check |
Führt den stündlichen Check aus. |
POST /api/observe |
Zeichnet eine an einen KI-Agenten ausgelieferte Seite auf, gesendet als { "url", "userAgent", "at" }. Dabei ist at der Zeitpunkt der Auslieferung (innerhalb der letzten Woche, als Epoch-Millisekunden oder ISO-Datum) und kann weggelassen werden. Sende bis zu 500 auf einmal als { "fetches": [...] }. Nimmt das Token, den Agenten-Schlüssel der Website oder den installationsweiten observeKey an, und die CMS-Plugins und der Log-Leser rufen es auf. Ein einzelner Abruf antwortet 204 ohne Inhalt, und ein Stapel antwortet { "recorded", "skipped" } mit der Zahl der aufgezeichneten und der ausgelassenen Abrufe. |
GET /api/tokens |
Listet API-Tokens auf, jeweils mit Name, Website, Scope, den letzten vier Zeichen und dem Zeitpunkt der letzten Nutzung. Die Tokens selbst werden nie zurückgegeben. |
POST /api/tokens |
Erstellt ein Token aus { "name", "site", "scope" } und gibt es einmal als secret zurück. Lass site für alle Websites leer. scope ist read (der Standard), manage oder embed, und die letzten beiden brauchen eine site. |
POST /api/embed |
Erstellt ein Ticket, das das Dashboard der Website einmal in einem Frame öffnet, aus { "origin" }, dem Origin der Adminseite, die es einrahmt, etwa https://example.com. Nur ein embed-Token kann danach fragen, und der Host des Origins muss, ohne www., eine der Domains seiner Website sein. Antwortet mit 201 und { "ticket", "site", "expiresAt", "path" }, wobei path gleich /runlight/embed?ticket=… ist. Ein Ticket funktioniert einmal, innerhalb von fünf Minuten. |
GET /embed?ticket= |
Das Dashboard für einen Frame, außerhalb von /api. Mit einem Ticket, das weder benutzt noch abgelaufen ist, antwortet es mit 200 und einer Seite, die nur der Origin des Tickets einrahmen darf (frame-ancestors in ihrer CSP und kein X-Frame-Options) und die eine Sitzung von einer Stunde im Speicher hält, ohne Cookie. Ein schon benutztes oder abgelaufenes Ticket antwortet mit 410 und einer Seite, die das sagt und die Adminseite bittet, neu zu laden, eingerahmt vom selben Origin. Alles andere antwortet mit 404 und einer schlichten Seite, die niemand einrahmen darf. Füge theme=light oder theme=dark hinzu, damit es zum umgebenden Adminbereich passt, bis jemand im Frame ein Design wählt. |
GET /api/observe-key, POST /api/observe-key/new |
Liest den Agenten-Schlüssel einer Website für CMS-Plugins, der beim ersten Abruf erstellt wird, oder ersetzt ihn durch einen neuen, was den alten sofort stoppt. |
GET /api/token |
Sagt, was das mitgesendete Token darf, als { "scope", "site" }. Ein Hub fragt das, bevor er anbietet, etwas zu ändern. |
DELETE /api/token |
Löscht das mitgesendete Token. Ein Hub tut das, wenn er eine Website trennt oder ein neues Token bekommt. |
DELETE /api/tokens/:id |
Löscht ein Token, das dann sofort nicht mehr funktioniert. |
GET, PUT, DELETE /api/assistant |
Liest, setzt oder entfernt { "provider", "model", "baseUrl", "key" } des Assistenten im Dashboard. Der Schlüssel wird nie zurückgegeben. Nur für den Eigentümer und die Admins, aber alle im Dashboard können fragen, ob er eingerichtet ist. |
POST /api/assistant/models |
Die Modelle, die ein Anbieter anbietet, aus { "provider", "baseUrl", "key" }, für das Formular in den Einstellungen. Lass key weg, um den gespeicherten zu verwenden, was nur für denselben Anbieter und dieselbe Adresse funktioniert. Nur für den Eigentümer und die Admins. |
POST /api/assistant/chat |
Fragt den Assistenten, mit { "site", "messages", "view", "language" }, wobei messages Paare aus { "role", "content" } sind, die mit einer Frage enden. Antwortet mit { "reply", "tools" }. Nur für Personen im Dashboard, nie für API-Tokens oder Freigabelinks. Jede Person kann dreißig Fragen pro Stunde und zwei gleichzeitig stellen, und jeder Betrachter die tägliche Zahl des Eigentümers, mit 429 jenseits davon. |
PUT /api/assistant/limits |
Legt fest, wie viele Fragen jeder Betrachter pro Tag stellen kann, aus { "viewerDaily" }, einer ganzen Zahl von 0 bis 1.000. Der Startwert ist 50, und GET /api/assistant zeigt ihn dem Eigentümer und den Admins. Nur für den Eigentümer und die Admins. |
GET /api/account |
Das eigene Konto der angemeldeten Person, als { "account" }. Jeder, der angemeldet ist, auch Betrachter. |
POST /api/account/password |
Ändert dein eigenes Passwort, aus { "current", "next" }. Alle anderen Anmeldungen enden, und dieser Browser bekommt eine neue Sitzung. |
POST /api/account/2fa/start, /confirm, /recovery, /disable |
Schaltet die Zwei-Faktor-Anmeldung ein, bestätigt sie mit dem ersten { "code" } aus der App, erstellt neue Wiederherstellungscodes oder schaltet sie aus. start antwortet { "secret", "uri" } für die Authenticator-App, und confirm und recovery antworten { "recovery" } mit den Codes. Alle außer confirm brauchen dein { "password" }. |
GET, POST /api/people |
Listet alle mit einem Konto und die offenen Einladungen auf, als { "people", "invites" }, oder lädt jemanden aus { "email", "role" } ein, wobei role admin, member oder viewer ist. Eine Einladung antwortet 201 mit { "invite", "link", "emailed" }, und ihr Link gilt sieben Tage. Nur für den Eigentümer und die Admins. |
PATCH, DELETE /api/people/:id |
Ändert die { "role" } einer Person oder entfernt sie zusammen mit den Tokens, die sie erstellt hat. Wer zum Betrachter wird, verliert seine Tokens ebenfalls. Nur der Eigentümer kann den Eigentümer ändern oder entfernen, und niemand kann sich selbst entfernen. Nur für den Eigentümer und die Admins. |
DELETE /api/people/:id/2fa |
Schaltet die Zwei-Faktor-Anmeldung einer anderen Person aus, für jemanden, der Telefon und Wiederherstellungscodes verloren hat, mit deinem eigenen { "password" }. Nie die des Eigentümers. Nur für den Eigentümer und die Admins. |
POST /api/people/:id/owner |
Übergibt das Eigentum an einen Admin, mit deinem { "password" }, und macht dich zum Admin. Nur für den Eigentümer. |
DELETE /api/invites/:id, POST /api/invites/:id/resend |
Zieht eine Einladung zurück oder schickt sie mit einem neuen Link erneut, der den alten stoppt. Nur für den Eigentümer und die Admins. |
POST /mcp |
Der MCP-Server für KI-Assistenten, beschrieben in Frag deine KI. |
Die Endpunkte für das Konto und die Personen gibt es, wenn Konten eingeschaltet sind, wie auf dem eigenständigen Server. Sie antworten nur einer im Dashboard angemeldeten Person, nie einem Token, und allen anderen mit 401 und sign_in.
Fehler
Fehler sind JSON, { "error", "code", "params" }. error sagt auf einfachem Englisch, was schiefgegangen ist, code benennt es, und params füllen, falls vorhanden, die Platzhalter im Text. Das Dashboard zeigt jeden Code in seiner eigenen Sprache, und ein Skript kann sich auf den Code verlassen, wo sich der englische Text ändern kann.
| Status | Wann |
|---|---|
| 400 | Etwas in der Anfrage ist falsch oder fehlt. |
| 401 | Das Token fehlt oder ist dieser Installation nicht bekannt. |
| 403 | Ein Betrachter oder ein API-Token versucht eine Änderung, die nicht erlaubt ist. |
| 404 | Was die Anfrage nennt, gibt es nicht. |
| 409 | Ein Name ist vergeben, etwa eine Link-Domain, die eine andere Website hat. |
| 413 | Mehr als 500 Abrufe auf einmal an POST /api/observe. |
| 415 | Ein Schreibzugriff, der nicht application/json ist. |
| 429 | Zu viele in kurzer Zeit, etwa Anmeldeversuche, Beispiele, Fragen an den Assistenten oder OAuth-Registrierungen von einer Adresse. |
| 500 | Auf dem Server ist etwas schiefgegangen. |
| 502 | Eine verbundene Installation war nicht erreichbar, hat mit einer Weiterleitung geantwortet oder das Token abgelehnt, oder der KI-Dienst ist gescheitert. |
| 503 | Außerhalb der Entwicklung ist kein Token gesetzt. |
| 504 | Eine verbundene Installation hat zu lange für die Antwort gebraucht. |
Das sind die Codes, die Params, die jeder füllt, und der Text, den das Dashboard dazu auf Deutsch zeigt. Die API selbst sendet diesen Text auf Englisch im Feld error. Ein Fehler, den eine verbundene Installation über einen Hub weitergibt, behält seinen Code und seine Params, und sein error beginnt mit dem Host der Installation. Die Prüfung einer Link-Domain gibt ihren reason auf dieselbe Weise mit einem check_-Code an.
| Code | Params | Was das Dashboard zeigt |
|---|---|---|
account_exists |
email |
{email} hat bereits ein Konto. |
address_refused |
host |
{host} ist eine Link-Local- oder Cloud-Metadaten-Adresse, mit der sich Runlight nie verbindet. |
admin_only |
Nur der Eigentümer oder ein Admin kann das ändern. | |
assistant_address |
Gib die Adresse des Dienstes unter Einstellungen, KI-Assistent ein. | |
assistant_address_bad |
Gib die Adresse des Dienstes ein, beginnend mit https:// | |
assistant_cancelled |
Die Frage wurde abgebrochen. | |
assistant_daily |
limit |
Betrachter können {limit} Fragen pro Tag stellen. Frag morgen wieder. |
assistant_dashboard |
Nur das Dashboard kann den Assistenten nutzen. | |
assistant_failed |
detail |
Der KI-Dienst hat nicht wie erwartet geantwortet ({detail}). |
assistant_invalid |
detail |
Der Assistent wurde nicht gespeichert ({detail}). |
assistant_key |
provider |
Gib deinen {provider}-Schlüssel ein. |
assistant_limit |
Verwende eine ganze Zahl von 0 bis 1.000. | |
assistant_model |
Gib ein Modell unter Einstellungen, KI-Assistent ein. | |
assistant_no_models |
host |
{host} hat keine Modelle aufgeführt. Gib stattdessen den Namen des Modells ein. |
assistant_provider |
Wähle einen KI-Dienst unter Einstellungen, KI-Assistent. | |
assistant_refused |
detail, host |
{host} hat die Anfrage abgelehnt ({detail}). |
assistant_slow |
Die Antwort auf diese Frage hat zu lange gedauert. Frag etwas Engeres. | |
assistant_soon |
Du hast in kurzer Zeit viel gefragt. Warte kurz und frag dann noch einmal. | |
assistant_status |
host, status |
{host} hat mit {status} geantwortet. |
assistant_steps |
Der Assistent brauchte für diese Frage zu viele Schritte. Frag etwas Engeres. | |
assistant_timeout |
host |
{host} hat zu lange für die Antwort gebraucht. |
assistant_unset |
Der Assistent ist noch nicht eingerichtet. Ein Eigentümer kann das unter Einstellungen, KI-Assistent tun. | |
busy |
Runlight prüft gerade andere Anmeldungen. Versuch es gleich noch einmal. | |
check_https |
er ist über HTTPS nicht erreichbar | |
check_not_public |
es ist kein öffentlicher Domainname | |
check_not_runlight |
etwas hat geantwortet, aber nicht Runlight | |
check_status |
status |
er hat mit {status} geantwortet |
check_timeout |
die Antwort hat zu lange gedauert | |
code_wrong |
Dieser Code stimmt nicht. Prüf die Uhrzeit auf deinem Handy und versuch den nächsten. | |
compare_bad |
compare |
Runlight kennt den Vergleich „{compare}“ nicht. |
compare_range_bad |
Wähle beide Daten für den Vergleich. | |
connect_again |
Verbinde diese Website erneut, um sie von hier aus zu ändern. | |
connect_denied |
Die Verbindung wurde nicht erlaubt. | |
connect_endpoints |
url |
{url} hat Endpunkte unter einer anderen Adresse genannt. |
connect_expired |
Die Verbindung hat zu lange gedauert oder wurde schon verwendet. Fang noch einmal an. | |
connect_failed |
detail |
Das Verbinden hat nicht begonnen ({detail}). |
connect_not_runlight |
url |
{url} hat nicht wie eine Runlight-Installation geantwortet. |
connect_old |
url |
{url} nutzt ein älteres Runlight. Aktualisiere es oder verbinde es mit einem API-Token aus seinen Einstellungen. |
connect_refused |
Die Installation hat diesen Server nicht verbinden lassen. Fang noch einmal an oder verbinde sie mit einem API-Token. | |
connect_register |
reason, url |
{url} hat diesen Server nicht verbinden lassen. {reason} |
connect_token |
Die Installation hat diesem Server kein Token gegeben. Fang noch einmal an. | |
connect_url |
Gib die Adresse der Installation ein, etwa https://example.com/runlight | |
domain_in_use |
domain |
Unter {domain} laufen dieses Dashboard oder eine deiner Websites. Nimm für Kurzlinks eine eigene Domain oder Subdomain, etwa go.{domain}. |
domain_invalid |
Das ist kein Domainname. | |
domain_not_public |
domain |
{domain} ist kein öffentlicher Domainname. Nimm einen, den jeder Browser erreichen kann. |
domain_taken |
domain |
{domain} gehört bereits zu einer anderen Website. |
email_invalid |
Gib eine E-Mail-Adresse ein. | |
embed_expired |
Dieses Dashboard ist abgelaufen. Lade die Seite neu, um es wieder zu öffnen. | |
embed_host |
host |
{host} gehört nicht zu den Domains dieser Website. Füge es unter Einstellungen, Allgemein zu den Domains der Website hinzu, oder im Code, wenn die Websites dort festgelegt sind. |
embed_origin |
Sende den Ursprung der Adminseite, etwa https://example.com | |
embed_site |
Ein Dashboard-Schlüssel gilt für eine Website. Wähle die Website aus. | |
embed_token |
Verwende den Dashboard-Schlüssel der Website, erstellt unter Einstellungen, Einbinden, bei WordPress, Drupal und Craft. | |
event_needed |
Nenne das Ereignis. | |
filter_bad |
filter |
Runlight kann den Filter „{filter}“ nicht lesen. |
filters_max |
max |
Verwende höchstens {max} Filter gleichzeitig. |
funnel_exists |
name |
Es gibt schon einen Trichter namens „{name}“. |
funnel_invalid |
detail |
Der Trichter wurde nicht gespeichert ({detail}). |
funnel_long |
Ein Trichter hat höchstens acht Schritte. | |
funnel_name |
Gib dem Trichter einen Namen. | |
funnel_page_bad |
match |
„{match}“ ist weder ein Pfad noch eine URL. |
funnel_short |
Ein Trichter braucht mindestens zwei Schritte. | |
goal_amount |
Gib einen Betrag ein, etwa 49 oder 9,99. | |
goal_click_taken |
match |
Das Klickziel „{match}“ sendet schon Ereignisse mit diesem Namen. |
goal_currency |
Verwende einen dreibuchstabigen Währungscode wie USD oder EUR. | |
goal_event |
Gib den Namen des Ereignisses ein. | |
goal_event_taken |
name |
Ein Ereignisziel zählt schon Ereignisse namens „{name}“, gib diesem Klickziel also einen anderen Namen. |
goal_exists |
name |
Es gibt schon ein Ziel namens „{name}“. |
goal_invalid |
detail |
Das Ziel wurde nicht gespeichert ({detail}). |
goal_kind |
Wähle, was das Ziel zählt, ein Ereignis, einen Seitenbesuch oder einen Klick. | |
goal_link |
Gib die Adresse des Links ein, etwa https://buy.stripe.com/* | |
goal_name |
Gib dem Ziel einen Namen. | |
goal_page |
Gib einen Seitenpfad ein, etwa /danke oder /blog/* | |
goal_page_bad |
Diese Seite ist weder ein Pfad noch eine URL. | |
goal_prop_kind |
Nur ein Ereignisziel kann seinen Betrag aus dem Ereignis nehmen. Verwende stattdessen einen festen Betrag. | |
goal_prop_name |
Ein Eigenschaftsname besteht aus Buchstaben, Ziffern, Punkten, Bindestrichen und Unterstrichen. | |
goal_selector |
Gib einen CSS-Selektor ein, etwa #signup oder .buy-button | |
hub_domains |
Ein verbundener Hub kann die Domains einer Website nicht ändern. | |
icon_none |
Diese Website hat kein Symbol. | |
import_csv_batch |
max |
Sende höchstens {max} Zeilen auf einmal. |
import_csv_format |
Diese Datei ist weder ein Umami-Export noch im Besuchsformat von Runlight. Prüfe ihre Kopfzeile. | |
import_day_full |
limit |
Ein Tag hat mehr als {limit} Ereignisse, mehr als ein Importschritt lesen kann. |
import_failed |
detail |
Der Import wurde angehalten ({detail}). |
import_key |
service |
Gib deinen {service}-Schlüssel ein. |
import_refused |
Der Schlüssel oder die Anmeldung wurde abgelehnt. | |
import_slug_bad |
slug |
/{slug} enthält Zeichen, die ein Runlight-Slug nicht verwenden kann. |
import_slug_taken |
name, slug |
/{slug} wird schon von „{name}“ verwendet. |
import_source |
source |
Runlight kann nicht aus {source} importieren. |
import_status |
host, status |
{host} hat mit {status} geantwortet. |
import_umami_address |
Gib die Adresse deines Umami ein, etwa https://stats.example.com | |
import_umami_login |
Gib einen API-Schlüssel oder einen Benutzernamen und ein Passwort ein. | |
import_website |
Wähle die Umami-Website, die importiert werden soll. | |
install_refused |
Diese Installation hat das Token abgelehnt. | |
install_token |
Gib ein API-Token dieser Installation ein. | |
internal |
Auf dem Server ist etwas schiefgegangen. Versuch es noch einmal. | |
invite_gone |
Diese Einladung ist abgelaufen oder wurde schon benutzt. Bitte um eine neue. | |
link_domain |
domain |
Füge {domain} zuerst in den Einstellungen als Link-Domain hinzu. |
link_long |
Das Ziel ist länger als 2.000 Zeichen. | |
link_no_slug |
Es wurde kein freier Slug gefunden. Versuch es noch einmal. | |
link_protocol |
Das Ziel muss mit http:// oder https:// beginnen | |
link_slug |
Ein Slug besteht aus Buchstaben, Ziffern, Bindestrichen und Unterstrichen, höchstens 100. | |
link_taken |
slug |
/{slug} ist schon vergeben. |
link_url |
Das Ziel muss eine vollständige URL sein, die mit https:// beginnt | |
mail_app_failed |
detail, via |
{via} konnte die E-Mail nicht senden ({detail}). |
mail_failed |
detail |
Die E-Mail konnte nicht gesendet werden ({detail}). |
mail_field |
field |
{field} fehlt noch. |
mail_from |
Gib die Absenderadresse der Berichte ein, zum Beispiel reports@example.com. | |
mail_https |
Die Webhook-URL muss https verwenden. | |
mail_in_code |
Der Mail-Dienst ist im Code festgelegt und lässt sich hier nicht ändern. | |
mail_option |
field, options |
{field} muss einer dieser Werte sein ({options}). |
mail_port |
Der Port muss eine ganze Zahl von 1 bis 65535 sein. | |
mail_refused |
detail, host |
{host} hat die E-Mail abgelehnt ({detail}). |
mail_region |
Das ist keine AWS-Region wie us-east-1. | |
mail_service |
service |
Wähle einen Mail-Dienst, der hier angeboten wird. service wird gesendet, wenn der angefragte Dienst nicht angeboten wird. |
mail_slow |
host |
{host} hat zu lange gebraucht, deshalb wurde die E-Mail nicht gesendet. |
mail_unreachable |
host |
{host} ist nicht erreichbar. |
mail_unset |
Richte zuerst einen Mail-Dienst ein. | |
mail_url |
Gib die vollständige URL des Webhooks ein, etwa https://example.com/hooks/mail. | |
method_not_allowed |
Das geht hier nicht. | |
not_found |
Das gibt es hier nicht. | |
observe_many |
Sende höchstens 500 Abrufe auf einmal. | |
observe_url |
Sende die Adresse der Seite. | |
origin_needed |
Lege zuerst die eigene Adresse dieses Runlight fest (RUNLIGHT_URL auf dem Server oder origin in routes()), damit ein verbundener Hub Link-Domains und E-Mail-Berichte hinzufügen kann. | |
owner_hand_over |
Nur der Eigentümer kann das Eigentum übergeben. | |
owner_needs_admin |
Mach die Person zuerst zum Admin. | |
owner_only |
Nur ein Eigentümer kann das ändern. | |
owner_protected |
Niemand außer dem Eigentümer kann den Eigentümer ändern oder entfernen. | |
password_current_wrong |
Dein aktuelles Passwort stimmt nicht. | |
password_short |
min |
Nimm ein Passwort mit mindestens {min} Zeichen. |
password_wrong |
Dein Passwort stimmt nicht. | |
people_owner |
Nur der Eigentümer oder ein Admin kann Personen verwalten. | |
pick_hub |
Die Adresse dieses Hubs ist nicht die, von der aus er sich verbunden hat. Verbinde die Website von hier aus erneut. | |
pick_origin |
Sende den Ursprung des Dashboards, etwa https://stats.example.com | |
pick_return |
Sende die Adresse des Dashboards mit /pick-return am Ende, auf seinem Origin, und eine Nonce aus 32 Hexziffern | |
property_bad |
Runlight kann diesen Eigenschaftsnamen nicht lesen. | |
question_needed |
Stell eine Frage. | |
range_bad |
Diese Daten sind kein Zeitraum, den Runlight lesen kann. | |
redirected |
host |
{host} hat mit einer Weiterleitung geantwortet. |
remote_slow |
host |
{host} hat zu lange gebraucht. Versuch einen kürzeren Zeitraum. |
remove_self |
Du kannst dich nicht selbst entfernen. | |
report_exists |
email |
{email} bekommt diesen Bericht bereits. |
report_limit |
Eine Website kann an höchstens 50 Adressen senden. | |
retention_bad |
months |
Behalte Besuche {months} Monate lang oder für immer. |
role_needed |
Wähle Admin, Mitglied oder Betrachter. | |
rows_needed |
Sende die Links als Liste von Zeilen. | |
sample_soon |
Gerade ging schon ein Beispiel raus. Warte eine Minute und versuch es noch einmal. | |
sample_soon_hub |
Ein verbundener Hub kann alle zehn Minuten ein Beispiel senden. Warte ein paar Minuten und versuch es noch einmal. | |
send_json |
Sende das als JSON. | |
send_object |
Sende ein JSON-Objekt. | |
share_gone |
Dieser Freigabelink funktioniert nicht mehr. | |
share_not_available |
Das ist auf einem geteilten Dashboard nicht verfügbar. | |
sign_in |
Melde dich zuerst an. | |
site_domain_invalid |
host |
„{host}“ ist kein Domainname. |
site_domain_needed |
Füge die Domain der Website hinzu, etwa example.com | |
site_domain_taken |
host, site |
{host} gehört schon zu {site}. |
site_invalid |
detail |
Die Website wurde nicht gespeichert ({detail}). |
site_name |
Ein Website-Name hat 1 bis 80 Zeichen. | |
site_remote |
Diese Website wird von ihrem eigenen Runlight gezählt. Verbinde sie in ihren Einstellungen erneut, um sie von hier aus zu ändern. | |
sites_in_code |
Die Websites sind hier im Code festgelegt und werden dort geändert. | |
smtp_starttls |
Der SMTP-Server bietet kein STARTTLS an. Wähle bei Sicherheit TLS oder keine. | |
tables_busy |
Runlight legt gerade seine Tabellen an oder aktualisiert sie. Versuch es in einer Minute noch einmal. | |
test_email |
Gib eine E-Mail-Adresse ein, an die der Test gehen soll. | |
token_embed_only |
Ein Dashboard-Schlüssel öffnet das Dashboard nur in einem CMS. | |
token_manage_only |
Ein Verwaltungs-Token ändert nur die Einstellungen seiner eigenen Website. | |
token_name |
Gib dem Token einen Namen. | |
token_read_only |
API-Tokens können nur lesen. | |
token_refused |
host |
{host} hat das Token abgelehnt. Verbinde es in den Einstellungen der Website neu. |
token_site |
Ein Token, das Einstellungen ändert, gilt für eine Website. Wähle die Website. | |
token_unset |
Setze RUNLIGHT_TOKEN oder übergib token oder authorize an routes(). Ohne das ist Runlight nur offen, wenn NODE_ENV development ist. | |
too_many_tries |
Zu viele Versuche. Warte fünfzehn Minuten und versuch es noch einmal. | |
twofactor_off |
Schalte zuerst die Zwei-Faktor-Anmeldung ein. | |
twofactor_restart |
Zu viele falsche Codes. Beginne erneut mit dem Einschalten der Zwei-Faktor-Anmeldung. | |
twofactor_self |
Deine eigene Zwei-Faktor-Anmeldung schaltest du unter Konto aus. | |
unauthorized |
Melde dich an oder sende ein Token, um das zu sehen. | |
unknown_account |
Dieses Konto gibt es nicht mehr. | |
unknown_dimension |
dimension |
Runlight kennt die Aufschlüsselung „{dimension}“ nicht. |
unknown_domain |
Diese Domain gehört nicht zu dieser Website. | |
unknown_funnel |
Diesen Trichter gibt es nicht mehr. | |
unknown_goal |
Dieses Ziel gibt es nicht mehr. | |
unknown_invite |
Diese Einladung gibt es nicht mehr. | |
unknown_link |
Diesen Link gibt es nicht mehr. | |
unknown_report |
Diesen Bericht gibt es nicht mehr. | |
unknown_share |
Diesen Freigabelink gibt es nicht mehr. | |
unknown_site |
Diese Website gibt es hier nicht. | |
unknown_timezone |
timezone |
Runlight kennt die Zeitzone „{timezone}“ nicht. |
unknown_token |
Dieses Token gibt es nicht mehr. | |
unreachable |
host |
{host} ist nicht erreichbar. |