Referencia
API HTTP
Todo lo que muestra el panel está en JSON en /runlight/api, para tus propios scripts y herramientas.
El panel está construido sobre esta API, así que todo lo que te muestra lo puedes obtener tú mismo. Envía un token como bearer.
bash
curl https://example.com/runlight/api/stats?period=30d -H "Authorization: Bearer $RUNLIGHT_TOKEN"Para los scripts, crea un token de solo lectura en Ajustes, API e IA, y guarda RUNLIGHT_TOKEN solo para ti. Un token de solo lectura puede leer todos los informes de abajo, incluidos los enlaces cortos y los clics de cada uno, y nunca cambia nada. Puedes limitarlo a un sitio, y deja de funcionar en el momento en que lo borras. Los endpoints que cambian algo aceptan RUNLIGHT_TOKEN, un propietario, administrador o miembro con sesión iniciada, tu comprobación authorize o un token manage para su único sitio. Un miembro puede cambiarlo todo salvo el servicio de correo, los ajustes del asistente y eliminar un sitio. Los mismos tokens conectan asistentes de IA, como explica Pregunta a tu IA.
Un token manage pertenece a un servidor independiente que muestra este sitio. Lee como un token de solo lectura y además puede cambiar los objetivos, embudos, enlaces cortos, dominios de enlaces, informes por email y enlaces para compartir de un sitio, junto con su nombre, zona horaria y retención, y obtener tickets para el selector de elementos. Nunca puede tocar otros sitios, personas, tokens, importaciones ni el servicio de correo, y no puede cambiar dónde vive el sitio. Ve qué servicio de correo envía los informes y desde qué dirección, y las claves y los datos de la cuenta del servicio quedan ocultos para él. Solo añade dominios de enlaces e informes por email cuando la instalación conoce su propia dirección, mediante origin en routes() o RUNLIGHT_URL en el servidor independiente. El servidor independiente obtiene uno por OAuth al conectar el sitio, así que rara vez tendrás que crear uno a mano.
Un token embed pertenece a un plugin de WordPress, Drupal o Craft que muestra el panel de un sitio dentro de las páginas de administración del CMS. En cualquier otro lugar responde 403 con token_embed_only. Su único uso es POST /api/embed, que crea un ticket para una sola carga del panel en un marco, así que quien lo tenga puede leer el panel de ese sitio. Crea uno en Ajustes, Instalación, en Clave del panel, o con POST /api/tokens.
El botón Conectar de un plugin de CMS obtiene su clave del panel por OAuth con el scope cms. La página de consentimiento ofrece los sitios que cuentan el dominio del plugin, o el único sitio cuando no indica dominios y por tanto cuenta cualquiera, o un sitio nuevo cuando los sitios se gestionan en el panel. La respuesta del token lleva la clave del panel como access_token, el id del sitio como site y su clave de agentes como agents_key.
Las peticiones que cambian algo deben enviar content-type: application/json.
Leer informes
Todos los informes aceptan los mismos parámetros de consulta.
| Parámetro | Valores |
|---|---|
site |
El id del sitio; por defecto, el primer sitio. |
period |
today, yesterday, 7d, 30d, 90d, month, last_month, year, 12mo o all. |
from, to |
Fechas como YYYY-MM-DD, ambas incluidas, en lugar de un periodo. |
compare |
previous (el predeterminado), year, custom u off. |
compare_from, compare_to |
Las fechas con las que comparar, para compare=custom. |
filter |
dimension:op:value, donde op es is, not o contains. Repítelo para aplicar hasta seis. |
interval |
hour, day, week o month para las series; por defecto se elige según el rango. |
| Endpoint | Devuelve |
|---|---|
GET /api |
El nombre, la versión y la versión de la API de la instalación, sin necesidad de token. |
GET /api/sites |
Todos los sitios, con la fecha de su última visita. |
GET /api/stats |
Visitantes, visitas, páginas vistas, páginas por visita, tasa de rebote y duración de la visita, con las del periodo de comparación. |
GET /api/series |
Las mismas cifras para cada hora, día, semana o mes del rango. |
GET /api/breakdown?dimension= |
Filas de una dimensión, con limit (hasta 1000) y page. |
GET /api/rhythm |
Visitas por día de la semana y hora. |
GET /api/realtime |
Personas, páginas, fuentes y países de los últimos 5 minutos, con las páginas vistas por minuto y la actividad reciente de los últimos 30. |
GET /api/goals |
Todos los objetivos con sus conversiones, visitantes que convirtieron, tasa e ingresos. |
GET /api/goals/:id |
Un objetivo con una serie y sus conversiones por canal, fuente y página. |
GET /api/funnels |
Todos los embudos con cuántas visitas llegaron a cada paso, en orden, dentro de una visita. |
GET /api/event-props?event= |
Los nombres de las propiedades enviadas con un evento, y los valores de una de ellas, elegida con key (por defecto la primera) y limit (hasta 1000). |
GET /api/export |
Un ZIP de archivos CSV para la vista, con las cifras, la serie y cada desglose, con los mismos parámetros que los informes. |
GET /api/journeys |
Los caminos que siguen las visitas: las páginas principales de cada paso, los flujos entre pasos y los caminos más comunes. Acepta steps (de 2 a 8), páginas start y end, y through como step:page para seguir una página. |
GET /api/links |
Los enlaces cortos con sus clics. |
GET /api/links/:id |
Los clics de un enlace a lo largo del tiempo, sus fuentes, países, dispositivos y navegadores. |
GET /api/icon |
El icono del sitio como imagen, descargado del propio dominio del sitio, o un 404 cuando no tiene. Los enlaces para compartir también pueden leerlo. |
Un enlace para compartir y el panel dentro de un CMS leen los informes de la tabla de arriba sin token, salvo GET /api/links y GET /api/links/:id, para el único sitio que muestran. La página de un enlace para compartir envía x-runlight-share con su id. La página del panel integrado envía x-runlight-embed con la sesión que abrió su ticket, que dura una hora y termina al instante cuando se borra su token. Cuando ha caducado, las lecturas responden 401 con embed_expired. Una petición que lleva x-runlight-embed no obtiene nada más, envíe lo que envíe, y cualquier otra petición con esa cabecera responde 403 con share_not_available.
breakdown y filter aceptan las dimensiones 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 y language. breakdown acepta además ai_agent y ai_page.
Cambiar cosas
| Endpoint | Hace |
|---|---|
PATCH /api/sites/:id |
Cambia el name, la timezone o los retentionMonths de un sitio (6, 12, 24, 36 o 60, o null para conservarlo todo). En el servidor independiente, también los hostnames. |
POST /api/sites |
Añade un sitio, cuando los sitios se gestionan en el panel como en el servidor independiente, a partir de { "name", "hostnames", "timezone" }. Para conectar otra instalación, envía en su lugar { "remote": { "url", "token" } }. |
DELETE /api/sites/:id |
Elimina un sitio gestionado y todo lo registrado para él, o desconecta uno conectado. |
POST /api/sites/connect |
Empieza a conectar otra instalación a través de su página de consentimiento, a partir de { "url" }. Responde con authorize, la dirección a la que enviar al propietario. Añade site con el id de un sitio de la instalación para ofrecer ese primero. |
GET /api/sites/connect/done |
Donde la página de consentimiento devuelve al propietario. Termina la conexión y abre el panel en el sitio. |
POST /api/goals, PATCH /api/goals/:id, DELETE /api/goals/:id |
Añade, cambia o quita un objetivo. |
POST /api/pick |
Crea un ticket para el selector de elementos a partir de { "origin" }, el origen del propio panel, al que el selector envía su elección y a ningún otro sitio. El ticket también nombra el sitio, y el selector no hace nada en las páginas de otro sitio. Un ticket vale durante media hora. Puede pedirlo quien pueda cambiar cosas, y también un token de gestión para su sitio, cuyos tickets solo nombran el hub desde el que se conectó. |
POST /api/funnels, PATCH /api/funnels/:id, DELETE /api/funnels/:id |
Añade, cambia o quita un embudo, enviado como { "name", "steps" } con entre dos y ocho pasos de { "kind", "match" }, donde kind es page o event. |
POST /api/links, PATCH /api/links/:id, DELETE /api/links/:id |
Añade, cambia o quita un enlace corto. |
POST /api/links/import |
Añade muchos enlaces cortos a la vez a partir de { "rows" }, hasta 5.000 objetos con url y, si quieres, slug, name y domain. Responde con cuántos creó y qué filas fallaron. |
POST /api/links/import/:source |
Un paso de una importación desde umami, dub, bitly, shortio o rebrandly, enviado como { "credentials", "cursor", "done" }. Envía el cursor con el que responde hasta que vuelva como null. Las credenciales se usan y nunca se guardan. |
POST /api/import/umami/websites |
Lista los sitios de una cuenta de Umami, a partir de { "credentials" }. |
POST /api/import/umami/visits |
Un paso para traer el historial de visitas de un sitio de Umami, a partir de { "credentials", "website", "cursor" }, repetido hasta que cursor sea null. |
POST /api/import/csv/visits |
Escribe hasta 2.000 filas de un CSV de visitas, enviadas como { "rows": [...] } con cada fila como un objeto de sus columnas, y responde { "pageviews", "events", "visits", "skipped" }. Envía las filas de la más antigua a la más reciente, sin repartir un mismo momento entre dos peticiones, ya que cada petición reemplaza lo que una importación anterior escribió en su intervalo de tiempo. |
GET, POST /api/link-domains, DELETE /api/link-domains/:domain |
Lista, añade o quita dominios de enlaces personalizados. Un dominio de enlaces debe ser un nombre público, y nunca el del propio panel ni el de un sitio. |
GET /api/link-domains/:domain/check |
Si las peticiones a un dominio de enlaces llegan a Runlight, como { "domain", "working", "reason", "code", "target" }, donde reason dice qué respondió en su lugar, code le da nombre y target indica el host al que debe apuntar un registro CNAME y las addresses públicas que debe usar un registro A o AAAA. |
GET, POST /api/shares, PATCH, DELETE /api/shares/:id |
Lista, añade, renombra o quita enlaces para compartir. |
GET, PUT, DELETE /api/mail, POST /api/mail/test |
Lee, define, quita o prueba el servicio de correo. Las claves nunca se devuelven. GET también responde source (code, dashboard, app o null) y services, los servicios que ofrece Ajustes. Cuando la aplicación pasa su propio sistema de envío, tiene también app, con via, from, fromName y replaced, que es true mientras un servicio guardado envía en su lugar. |
GET, POST /api/reports, DELETE /api/reports/:id, POST /api/reports/:id/send |
Lista, añade o quita destinatarios de informes, o envía un ejemplo. |
GET o POST /api/check |
Ejecuta la comprobación programada. |
POST /api/observe |
Registra una página servida a un agente de IA, enviada como { "url", "userAgent", "at" }, donde at es cuándo se sirvió (dentro de la última semana, como milisegundos epoch o una fecha ISO) y se puede omitir. Envía hasta 500 a la vez como { "fetches": [...] }. Acepta el token, la clave de agentes del sitio o la observeKey de toda la instalación, y la llaman los plugins de CMS y el lector de logs. Una sola petición responde 204 sin cuerpo, y un lote responde { "recorded", "skipped" } con cuántas registró y cuántas dejó fuera. |
GET /api/tokens |
Lista los tokens de API con el nombre, el sitio, el scope, los cuatro últimos caracteres y la fecha del último uso de cada uno. Los tokens en sí nunca se devuelven. |
POST /api/tokens |
Crea un token a partir de { "name", "site", "scope" } y lo devuelve una vez como secret. Deja site vacío para todos los sitios. scope es read (el predeterminado), manage o embed, y los dos últimos necesitan un site. |
POST /api/embed |
Crea un ticket que abre una vez el panel del sitio en un marco, a partir de { "origin" }, el origen de la página de administración que lo enmarca, como https://example.com. Solo puede pedirlo un token embed, y el host del origen, sin www., debe ser uno de los dominios de su sitio. Responde 201 con { "ticket", "site", "expiresAt", "path" }, donde path es /runlight/embed?ticket=…. Un ticket funciona una vez, en un plazo de cinco minutos. |
GET /embed?ticket= |
El panel para un marco, fuera de /api. Con un ticket que no se ha usado ni ha caducado, responde 200 con una página que solo el origen del ticket puede enmarcar (frame-ancestors en su CSP, y sin X-Frame-Options) y que mantiene en memoria una sesión de una hora, sin cookie. Un ticket ya usado o caducado responde 410 con una página que lo indica y pide a la página de administración que se recargue, enmarcada por el mismo origen. Cualquier otra cosa responde 404 con una página sencilla que nada puede enmarcar. Añade theme=light o theme=dark para que combine con la administración que lo rodea hasta que alguien elija un tema en el marco. |
GET /api/observe-key, POST /api/observe-key/new |
Lee la clave de agentes de un sitio para los plugins de CMS, que se crea la primera vez que se pide, o la reemplaza por una nueva, lo que detiene la anterior al instante. |
GET /api/token |
Dice qué puede hacer el token enviado con ella, como { "scope", "site" }. Un hub lo pregunta antes de ofrecer cambiar nada. |
DELETE /api/token |
Borra el token enviado con ella. Un hub lo hace cuando desconecta un sitio o recibe un token nuevo. |
DELETE /api/tokens/:id |
Borra un token, que deja de funcionar al instante. |
GET, PUT, DELETE /api/assistant |
Lee, define o quita { "provider", "model", "baseUrl", "key" } del asistente del panel. La clave nunca se devuelve. Solo el propietario y los administradores, aunque cualquiera en el panel puede preguntar si está configurado. |
POST /api/assistant/models |
Los modelos que ofrece un proveedor, a partir de { "provider", "baseUrl", "key" }, para el formulario de ajustes. Omite key para usar la guardada, lo que solo funciona con el mismo proveedor y la misma dirección. Solo el propietario y los administradores. |
POST /api/assistant/chat |
Pregunta al asistente, enviando { "site", "messages", "view", "language" }, donde los mensajes son pares { "role", "content" } que terminan con una pregunta. Responde { "reply", "tools" }. Solo personas en el panel, nunca tokens de API ni enlaces para compartir. Cada persona puede hacer treinta preguntas por hora y dos a la vez, y cada lector el número diario que fije el propietario, con 429 al pasar cualquiera de los dos límites. |
PUT /api/assistant/limits |
Define cuántas preguntas puede hacer cada lector al día, a partir de { "viewerDaily" }, un número entero de 0 a 1.000. Empieza en 50, y GET /api/assistant lo muestra al propietario y a los administradores. Solo el propietario y los administradores. |
GET /api/account |
La cuenta de la persona con sesión iniciada, como { "account" }. Cualquiera con sesión iniciada, lectores incluidos. |
POST /api/account/password |
Cambia tu propia contraseña, a partir de { "current", "next" }. Todas las demás sesiones terminan, y este navegador recibe una sesión nueva. |
POST /api/account/2fa/start, /confirm, /recovery, /disable |
Activa el inicio de sesión en dos pasos, lo confirma con el primer { "code" } de la aplicación, crea códigos de recuperación nuevos o lo desactiva. start responde { "secret", "uri" } para la aplicación de autenticación, y confirm y recovery responden { "recovery" } con los códigos. Todos salvo confirm piden tu { "password" }. |
GET, POST /api/people |
Lista a todas las personas con cuenta y las invitaciones abiertas, como { "people", "invites" }, o invita a alguien a partir de { "email", "role" }, donde role es admin, member o viewer. Una invitación responde 201 con { "invite", "link", "emailed" }, y su enlace vale durante siete días. Solo el propietario y los administradores. |
PATCH, DELETE /api/people/:id |
Cambia el { "role" } de alguien, o lo quita junto con los tokens que creó. Quien pasa a ser lector también pierde sus tokens. Solo el propietario puede cambiar o quitar al propietario, y nadie puede quitarse a sí mismo. Solo el propietario y los administradores. |
DELETE /api/people/:id/2fa |
Desactiva el inicio de sesión en dos pasos de otra persona, para quien perdió el teléfono y los códigos de recuperación, a partir de tu propia { "password" }. Nunca el del propietario. Solo el propietario y los administradores. |
POST /api/people/:id/owner |
Pasa la propiedad a un administrador, a partir de tu { "password" }, y te convierte en administrador. Solo el propietario. |
DELETE /api/invites/:id, POST /api/invites/:id/resend |
Cancela una invitación, o la vuelve a enviar con un enlace nuevo que anula el anterior. Solo el propietario y los administradores. |
POST /mcp |
El servidor MCP para asistentes de IA, descrito en Pregunta a tu IA. |
Los endpoints de la cuenta y de las personas existen cuando las cuentas están activadas, como en el servidor independiente. Solo responden a una persona con sesión iniciada en el panel, nunca a un token, y responden 401 con sign_in a cualquier otro.
Errores
Los errores son JSON, { "error", "code", "params" }. error dice qué salió mal en inglés sencillo, code le da nombre y params, cuando los hay, rellenan los marcadores de su texto. El panel muestra cada código en su propio idioma, y un script puede fiarse del código allí donde el texto en inglés puede cambiar.
| Estado | Cuándo |
|---|---|
| 400 | Algo de la petición está mal o falta. |
| 401 | Falta el token o no es uno que esta instalación conozca. |
| 403 | Un lector o un token de API intenta un cambio que no puede hacer. |
| 404 | Lo que nombra la petición no está. |
| 409 | Un nombre ya está ocupado, como un dominio de enlaces que tiene otro sitio. |
| 413 | Más de 500 accesos a la vez en POST /api/observe. |
| 415 | Una escritura que no es application/json. |
| 429 | Demasiadas en poco tiempo, como intentos de inicio de sesión, ejemplos, preguntas al asistente o registros OAuth desde una dirección. |
| 500 | Algo falló en el servidor. |
| 502 | No se pudo contactar con una instalación conectada, respondió con una redirección o rechazó el token, o falló el servicio de IA. |
| 503 | No hay token definido fuera de desarrollo. |
| 504 | Una instalación conectada tardó demasiado en responder. |
Estos son los códigos, los params que rellena cada uno y el texto que muestra el panel en español. La API envía este texto en inglés en su campo error. Un error que una instalación conectada reenvía a través de un hub conserva su código y sus params, y su error empieza con el host de la instalación. La comprobación de un dominio de enlaces responde su reason con un código check_ de la misma forma.
| Código | Params | Qué dice |
|---|---|---|
account_exists |
email |
{email} ya tiene una cuenta. |
address_refused |
host |
{host} es una dirección link-local o de metadatos de la nube, a la que Runlight nunca se conecta. |
admin_only |
Solo el propietario o un administrador puede cambiar esto. | |
assistant_address |
Escribe la dirección del servicio en Ajustes, Asistente de IA. | |
assistant_address_bad |
Escribe la dirección del servicio, empezando por https:// | |
assistant_cancelled |
La pregunta se canceló. | |
assistant_daily |
limit |
Los lectores pueden hacer {limit} preguntas al día. Vuelve a preguntar mañana. |
assistant_dashboard |
Solo el panel puede usar el asistente. | |
assistant_failed |
detail |
El servicio de IA no respondió como se esperaba ({detail}). |
assistant_invalid |
detail |
El asistente no se guardó ({detail}). |
assistant_key |
provider |
Escribe tu clave de {provider}. |
assistant_limit |
Usa un número entero de 0 a 1.000. | |
assistant_model |
Escribe un modelo en Ajustes, Asistente de IA. | |
assistant_no_models |
host |
{host} no mostró ningún modelo. Escribe el nombre del modelo. |
assistant_provider |
Elige un servicio de IA en Ajustes, Asistente de IA. | |
assistant_refused |
detail, host |
{host} rechazó la solicitud ({detail}). |
assistant_slow |
Esa pregunta tardó demasiado en responderse. Prueba con algo más concreto. | |
assistant_soon |
Has preguntado mucho en poco tiempo. Espera un poco y vuelve a preguntar. | |
assistant_status |
host, status |
{host} respondió {status}. |
assistant_steps |
El asistente necesitó demasiados pasos para esa pregunta. Prueba con algo más concreto. | |
assistant_timeout |
host |
{host} tardó demasiado en responder. |
assistant_unset |
El asistente aún no está configurado. Un propietario puede hacerlo en Ajustes, Asistente de IA. | |
busy |
Runlight está ocupado comprobando otros inicios de sesión. Inténtalo de nuevo en un momento. | |
check_https |
no se pudo conectar por HTTPS | |
check_not_public |
no es un nombre de dominio público | |
check_not_runlight |
algo respondió, pero no Runlight | |
check_status |
status |
respondió {status} |
check_timeout |
tardó demasiado en responder | |
code_wrong |
Ese código no es correcto. Revisa la hora de tu teléfono y prueba con el siguiente. | |
compare_bad |
compare |
Runlight no conoce la comparación "{compare}". |
compare_range_bad |
Elige las dos fechas con las que comparar. | |
connect_again |
Vuelve a conectar este sitio para cambiarlo desde aquí. | |
connect_denied |
No se permitió la conexión. | |
connect_endpoints |
url |
{url} indicó endpoints en otra dirección. |
connect_expired |
La conexión tardó demasiado o ya se usó. Empieza de nuevo. | |
connect_failed |
detail |
La conexión no empezó ({detail}). |
connect_not_runlight |
url |
{url} no respondió como una instalación de Runlight. |
connect_old |
url |
{url} usa una versión antigua de Runlight. Actualízala o conéctala con un token de API de sus ajustes. |
connect_refused |
La instalación no dejó conectarse a este servidor. Empieza de nuevo o conéctala con un token de API. | |
connect_register |
reason, url |
{url} no dejó que este servidor se conectara. {reason} |
connect_token |
La instalación no le dio un token a este servidor. Empieza de nuevo. | |
connect_url |
Escribe la dirección de la instalación, como https://example.com/runlight | |
domain_in_use |
domain |
{domain} aloja este panel o uno de tus sitios. Usa un dominio o subdominio aparte para los enlaces cortos, como go.{domain}. |
domain_invalid |
Eso no es un nombre de dominio. | |
domain_not_public |
domain |
{domain} no es un dominio público. Usa uno al que cualquier navegador pueda llegar. |
domain_taken |
domain |
{domain} ya pertenece a otro sitio. |
email_invalid |
Escribe un correo electrónico. | |
embed_expired |
Este panel ha caducado. Recarga la página para abrirlo de nuevo. | |
embed_host |
host |
{host} no es uno de los dominios de este sitio. Añádelo a los dominios del sitio, en Ajustes, General, o en el código cuando los sitios se definen allí. |
embed_origin |
Envía el origen de la página de administración, como https://example.com | |
embed_site |
Una clave del panel es para un solo sitio. Elige el sitio. | |
embed_token |
Usa la clave del panel del sitio, creada en Ajustes, Instalación, en WordPress, Drupal y Craft. | |
event_needed |
Indica el evento. | |
filter_bad |
filter |
Runlight no entiende el filtro "{filter}". |
filters_max |
max |
Usa como mucho {max} filtros a la vez. |
funnel_exists |
name |
Ya hay un embudo llamado "{name}". |
funnel_invalid |
detail |
El embudo no se guardó ({detail}). |
funnel_long |
Un embudo tiene como mucho ocho pasos. | |
funnel_name |
Ponle un nombre al embudo. | |
funnel_page_bad |
match |
"{match}" no es una ruta ni una URL. |
funnel_short |
Un embudo necesita al menos dos pasos. | |
goal_amount |
Escribe un importe, como 49 o 9,99. | |
goal_click_taken |
match |
El objetivo de clic "{match}" ya envía eventos con ese nombre. |
goal_currency |
Usa un código de moneda de tres letras, como USD o EUR. | |
goal_event |
Escribe el nombre del evento. | |
goal_event_taken |
name |
Un objetivo de evento ya cuenta los eventos "{name}", así que ponle otro nombre a este objetivo de clic. |
goal_exists |
name |
Ya hay un objetivo llamado "{name}". |
goal_invalid |
detail |
El objetivo no se guardó ({detail}). |
goal_kind |
Elige qué cuenta el objetivo, un evento, una visita a una página o un clic. | |
goal_link |
Escribe la dirección del enlace, como https://buy.stripe.com/* | |
goal_name |
Ponle un nombre al objetivo. | |
goal_page |
Escribe la ruta de una página, como /gracias o /blog/* | |
goal_page_bad |
Esa página no es una ruta ni una URL. | |
goal_prop_kind |
Solo un objetivo de evento puede tomar el importe del evento. Usa un importe fijo. | |
goal_prop_name |
Un nombre de propiedad usa letras, números, puntos, guiones y guiones bajos. | |
goal_selector |
Escribe un selector CSS, como #signup o .buy-button | |
hub_domains |
Un hub conectado no puede cambiar los dominios de un sitio. | |
icon_none |
Este sitio no tiene icono. | |
import_csv_batch |
max |
Envía como mucho {max} filas a la vez. |
import_csv_format |
Este archivo no es una exportación de Umami ni está en el formato de visitas de Runlight. Revisa su fila de encabezado. | |
import_day_full |
limit |
Un día tiene más de {limit} eventos, más de los que puede leer un paso de importación. |
import_failed |
detail |
La importación se detuvo ({detail}). |
import_key |
service |
Escribe tu clave de {service}. |
import_refused |
Se rechazó la clave o el inicio de sesión. | |
import_slug_bad |
slug |
/{slug} tiene caracteres que un slug de Runlight no puede usar. |
import_slug_taken |
name, slug |
/{slug} ya lo usa "{name}". |
import_source |
source |
Runlight no puede importar desde {source}. |
import_status |
host, status |
{host} respondió {status}. |
import_umami_address |
Escribe la dirección de tu Umami, como https://stats.example.com | |
import_umami_login |
Escribe una clave de API, o un usuario y una contraseña. | |
import_website |
Elige el sitio de Umami que quieres importar. | |
install_refused |
Esa instalación rechazó el token. | |
install_token |
Escribe un token de API de esa instalación. | |
internal |
Algo falló en el servidor. Inténtalo de nuevo. | |
invite_gone |
Esta invitación caducó o ya se usó. Pide una nueva. | |
link_domain |
domain |
Primero añade {domain} como dominio de enlaces en Ajustes. |
link_long |
El destino tiene más de 2.000 caracteres. | |
link_no_slug |
No se encontró un slug libre. Inténtalo de nuevo. | |
link_protocol |
El destino debe empezar por http:// o https:// | |
link_slug |
Un slug lleva letras, dígitos, guiones y guiones bajos, hasta 100. | |
link_taken |
slug |
/{slug} ya está en uso. |
link_url |
El destino debe ser una URL completa, que empiece por https:// | |
mail_app_failed |
detail, via |
{via} no pudo enviar el correo ({detail}). |
mail_failed |
detail |
No se pudo enviar el correo ({detail}). |
mail_field |
field |
Falta el campo {field}. |
mail_from |
Escribe la dirección desde la que salen los informes, como reports@example.com. | |
mail_https |
La URL del webhook debe usar https. | |
mail_in_code |
El servicio de correo está definido en el código, así que no se puede cambiar aquí. | |
mail_option |
field, options |
{field} debe ser uno de estos valores ({options}). |
mail_port |
El puerto debe ser un número entero del 1 al 65535. | |
mail_refused |
detail, host |
{host} rechazó el correo ({detail}). |
mail_region |
Eso no es una región de AWS, como us-east-1. | |
mail_service |
service |
Elige un servicio de correo que se ofrezca aquí. Se envía service cuando el que se pidió no se ofrece. |
mail_slow |
host |
{host} tardó demasiado en responder, así que el correo no se envió. |
mail_unreachable |
host |
No se pudo contactar con {host}. |
mail_unset |
Primero configura un servicio de correo. | |
mail_url |
Introduce la URL completa del webhook, como https://example.com/hooks/mail. | |
method_not_allowed |
Eso no se puede hacer aquí. | |
not_found |
Eso no está aquí. | |
observe_many |
Envía como mucho 500 solicitudes a la vez. | |
observe_url |
Envía la dirección de la página. | |
origin_needed |
Indica primero la dirección de este Runlight (RUNLIGHT_URL en el servidor, u origin en routes()) para que un hub conectado pueda añadir dominios de enlaces e informes por correo. | |
owner_hand_over |
Solo el propietario puede pasar la propiedad. | |
owner_needs_admin |
Hazlo administrador primero. | |
owner_only |
Solo un propietario puede cambiar esto. | |
owner_protected |
Nadie más que el propietario puede cambiar o quitar al propietario. | |
password_current_wrong |
Tu contraseña actual no es correcta. | |
password_short |
min |
Usa una contraseña de al menos {min} caracteres. |
password_wrong |
Tu contraseña no es correcta. | |
people_owner |
Solo el propietario o un administrador puede gestionar personas. | |
pick_hub |
La dirección de este hub no es desde la que se conectó. Vuelve a conectar el sitio desde aquí. | |
pick_origin |
Envía el origen del panel, como https://stats.example.com | |
pick_return |
Envía la dirección del panel seguida de /pick-return, en su origen, y un nonce de 32 dígitos hexadecimales | |
property_bad |
Runlight no puede leer ese nombre de propiedad. | |
question_needed |
Haz una pregunta. | |
range_bad |
Esas fechas no son un intervalo que Runlight entienda. | |
redirected |
host |
{host} respondió con una redirección. |
remote_slow |
host |
{host} tardó demasiado en responder. Prueba con un periodo más corto. |
remove_self |
No puedes quitarte a ti mismo. | |
report_exists |
email |
{email} ya recibe este informe. |
report_limit |
Un sitio puede enviar a 50 direcciones como máximo. | |
retention_bad |
months |
Guarda las visitas {months} meses, o para siempre. |
role_needed |
Elige administrador, miembro o lector. | |
rows_needed |
Envía los enlaces como una lista de filas. | |
sample_soon |
Se acaba de enviar una muestra. Espera un minuto y vuelve a intentarlo. | |
sample_soon_hub |
Un hub conectado puede enviar una muestra cada diez minutos. Espera unos minutos y vuelve a intentarlo. | |
send_json |
Envía esto como JSON. | |
send_object |
Envía un objeto JSON. | |
share_gone |
Este enlace para compartir ya no funciona. | |
share_not_available |
Eso no está disponible en un panel compartido. | |
sign_in |
Inicia sesión primero. | |
site_domain_invalid |
host |
"{host}" no es un nombre de dominio. |
site_domain_needed |
Añade el dominio del sitio, como example.com | |
site_domain_taken |
host, site |
{host} ya pertenece a {site}. |
site_invalid |
detail |
El sitio no se guardó ({detail}). |
site_name |
Un nombre de sitio tiene de 1 a 80 caracteres. | |
site_remote |
Este sitio lo cuenta su propio Runlight. Vuelve a conectarlo desde sus ajustes para cambiarlo desde aquí. | |
sites_in_code |
Aquí los sitios se definen en el código, así que se cambian allí. | |
smtp_starttls |
El servidor SMTP no ofrece STARTTLS. Elige TLS o ninguna en Seguridad. | |
tables_busy |
Runlight está creando o actualizando sus tablas. Inténtalo de nuevo en un minuto. | |
test_email |
Escribe un correo electrónico al que enviar la prueba. | |
token_embed_only |
Una clave del panel solo abre el panel dentro de un CMS. | |
token_manage_only |
Un token de gestión solo cambia los ajustes de su propio sitio. | |
token_name |
Ponle un nombre al token. | |
token_read_only |
Los tokens de API solo pueden leer. | |
token_refused |
host |
{host} rechazó el token. Vuelve a conectarlo desde los ajustes del sitio. |
token_site |
Un token que cambia ajustes es para un solo sitio. Elige el sitio. | |
token_unset |
Define RUNLIGHT_TOKEN, o pasa token o authorize a routes(). Sin eso, Runlight solo queda abierto cuando NODE_ENV es development. | |
too_many_tries |
Demasiados intentos. Espera quince minutos y vuelve a intentarlo. | |
twofactor_off |
Activa primero el inicio de sesión en dos pasos. | |
twofactor_restart |
Demasiados códigos incorrectos. Vuelve a empezar a activar el inicio de sesión en dos pasos. | |
twofactor_self |
Desactiva tu propio inicio de sesión en dos pasos en Cuenta. | |
unauthorized |
Inicia sesión o envía un token para ver esto. | |
unknown_account |
Esa cuenta ya no existe. | |
unknown_dimension |
dimension |
Runlight no conoce el desglose "{dimension}". |
unknown_domain |
Ese dominio no es de este sitio. | |
unknown_funnel |
Ese embudo ya no existe. | |
unknown_goal |
Ese objetivo ya no existe. | |
unknown_invite |
Esa invitación ya no existe. | |
unknown_link |
Ese enlace ya no existe. | |
unknown_report |
Ese informe ya no existe. | |
unknown_share |
Ese enlace para compartir ya no existe. | |
unknown_site |
Ese sitio no está aquí. | |
unknown_timezone |
timezone |
Runlight no conoce la zona horaria "{timezone}". |
unknown_token |
Ese token ya no existe. | |
unreachable |
host |
No se pudo contactar con {host}. |