AVANZADO
DocsLa API
Kilo es API-first: el panel en el que inicias sesión es un cliente de la misma API HTTP que puedes llamar tú. Cualquier cosa que puedas hacer con un clic - crear un enlace, leer sus estadísticas, añadir una regla de enrutamiento - es una petición con una clave. Esta página cubre la URL base, cómo autenticarte, los dos ámbitos, la forma del error y los límites de tasa.
URL base
La API la sirve el mismo Cloudflare Worker que resuelve tus enlaces, en el origen de Kilo QR. Hoy eso significa que las peticiones van a qr2r.com bajo el prefijo /api:
https://qr2r.com/apiCada ruta de estas guías es relativa a esa base - /links significa https://qr2r.com/api/links. Una forma rápida de confirmar que una clave funciona es la raíz de la API, que devuelve tu identidad:
{ "api": "qr2r", "version": 0, "user": { "uid": 42, "email": "", "admin": false } }Llega un nombre de host estable
La API comparte el origen en el que resuelven tus enlaces porque ese Worker es la plataforma. Se está preparando un nombre de host dedicado api.qr2r.com para la ventana de lanzamiento; hasta que esté activo, apunta los clientes al mismo origen de arriba. Las rutas y las cargas no cambian cuando cambie el nombre de host.
Autentícate con una clave de API
Envía tu clave como token bearer en la cabecera Authorization. La clave se comprueba antes que la cookie de sesión, así que un cliente de API se queda en un solo modo de autenticación sin que se cuele una cookie de navegador caduca.
Authorization: Bearer qr2r_live_1a2b3c…Las claves empiezan por qr2r_live_ (o qr2r_test_ para una clave en modo de desarrollo). Ese prefijo qr2r_ es un identificador de infraestructura que deliberadamente no se rebautizó - la misma razón por la que el dominio sigue siendo qr2r.com. Generas una clave en el panel, bajo API keys; el token completo se muestra una sola vez en la creación, y Kilo guarda solo su hash SHA-256, así que ponla directamente en un gestor de secretos. Una petición sin clave válida (y sin sesión) se rechaza:
{ "error": "unauthorized" }Las claves se generan de forma interactiva
Crear, listar y revocar claves es una acción solo de sesión - una clave bearer no puede generar ni revocar otra clave, así que un token filtrado no puede provisionar en silencio toda una flota propia. Gestiona las claves desde el panel. Una cuenta puede tener hasta 10 claves activas a la vez.
El acceso a la API es una función de plan de pago. Una clave en un plan sin ella se rechaza con 402 y { "error": "plan_required", "feature": "api_access" }.
Ámbitos: lectura y escritura
Una clave lleva uno o ambos de dos ámbitos. Una clave de lectura solo puede llamar a métodos seguros - GET, HEAD, OPTIONS. Una clave de escritura tiene permitidos además POST, PUT, PATCH y DELETE. Un intento de escritura con una clave de solo lectura se rechaza:
{ "error": "insufficient_scope", "required": "write" }Los ámbitos son toda la historia de permisos de una clave: una clave puede gestionar enlaces, reglas y leer analítica, pero nunca puede gestionar miembros, facturación ni otras claves - esas acciones quedan ligadas a una sesión interactiva. Dale a una integración una clave de lectura cuando lo único que hace es extraer números.
Los errores son siempre JSON
Cada respuesta de error es un objeto JSON con una cadena error, más campos extra donde ayudan. Los fallos de validación llevan la lista completa de problemas bajo issues:
{ "error": "invalid_body", "issues": [ /* zod issues */ ] }Los códigos que más te encontrarás:
400 invalid_body- el cuerpo de la petición no pasó la validación.401 unauthorized- clave ausente o inválida.402 plan_required- la función necesita un plan superior (llevafeature).403 insufficient_scope/forbidden- la clave no puede realizar este método o acción.404 not_found- no existe tal enlace, regla o dominio en tu espacio de trabajo.409- un conflicto, comoname_takenocap_reached.422 destination_unsafe- el destino no pasó la comprobación de seguridad.429 rate_limited- demasiadas peticiones (ver abajo).
Límites de tasa
Las peticiones autenticadas tienen límite de tasa. El cubo general permite 60 peticiones por minuto por usuario. Además, una clave de API tiene su propio techo por clave y por minuto tomado del límite api_rpm de tu plan. Supera cualquiera y la respuesta es:
{ "error": "rate_limited", "retry_after": 42 }El valor retry_after (enviado también como cabecera Retry-After) es el número de segundos hasta que se reinicia la ventana. Espera ese tiempo y reintenta.
Honestos sobre el limitador actual
Hoy el limitador se ejecuta en cada ubicación de edge de Cloudflare de forma independiente, así que los números por minuto son un suelo más que un contrato global estricto; un limitador durable y entre ubicaciones llega junto al plan de pago. Construye tu cliente para respetar 429 y Retry-After y seguirá funcionando sin cambios cuando se accione ese interruptor.
Con una clave en la mano, la siguiente guía recorre los endpoints de enlaces una llamada a la vez.
Gestiona tus claves de API