API REST

API REST

Base, token personal, límites, errores, enlaces y el formato de los textos.

Para CI, scripts e importación desde otras herramientas. JSON en los dos sentidos.

  • Base: https://tracker.aquarela.app/api/v1
  • Autenticación: token personal en el encabezado Authorization: Bearer <token>. La persona crea el token en https://tracker.aquarela.app/account/tokens, elige la validez (30, 90, 180, 365 días) y si puede crear issues; el token vale para la organización en la que se creó, aparece una sola vez y se puede revocar en la misma pantalla (hasta 20 activos por persona). Los tokens OAuth del MCP no valen en la API.
  • Las mismas reglas de la interfaz: el token ve solo los proyectos de la persona y crea issues solo donde su perfil lo permite. Una persona desactivada o quitada de la organización apaga el token al instante.
  • Enlaces: el url de una issue es el enlace canónico por el código, https://tracker.aquarela.app/issues/MOB-0012?org=<slug de la empresa>, que se lee, se escribe y sigue valiendo después de mover la issue de proyecto (el código anterior también la abre). El prefijo es único solo dentro de la empresa, así que org dice de cuál: la app cambia a ella cuando la persona participa. Sin org, /issues/MOB-0012 busca primero en la empresa seleccionada y después en las demás de la persona (si el código existe en más de una, pregunta en cuál abrir); /issues/<id> también funciona, en cualquier empresa de la persona.
  • Límite: 120 llamadas por minuto por token (429 con Retry-After).
  • Errores: {"error": "<código>", "message": "<texto>"}, con 400 (datos inválidos, y details por campo), 401 (sin token o token inválido), 403 (perfil o token sin permiso), 404 (también para un proyecto en la papelera y sus issues: eliminar y restaurar proyectos queda en la app, solo admin), 409 (ya existe), 413, 415, 422 (rechazado por las reglas del proyecto), 429. El message viene en el idioma de la persona del token (el locale de GET /me; en Automático, el Accept-Language del pedido); el error no cambia.
  • GET /version (público, sin token): la versión de tracker en producción, {"version": "0.2.0", "commit": "5f83c7b"} (commit es el deploy, null fuera de él). La tag v<version> en GitHub marca cada versión. GET /me y whoami traen lo mismo en server.

Markdown: todo texto largo es markdown. En la issue, description y los demás textos largos (preconditions, steps_to_reproduce, actual_result, expected_result, impact, suggested_solution, root_cause, fix_notes) y el texto de los comentarios; fuera de ella, las notas de la release, la precondición, los datos, los pasos y el resultado esperado de los casos de prueba, el comentario de cada resultado de prueba, la descripción y las respuestas de las ideas, las actualizaciones de incidente de la página de estado, el comentario de las horas y el de la decisión de aprobación. Vale **negrita**, *cursiva*, ~~tachado~~, listas con - o 1. (sublista con dos espacios de sangría), código entre comillas invertidas (una para un fragmento, tres para un bloque), [link](https://...), > cita y títulos con ##. La API devuelve el texto como se escribió (markdown crudo); las pantallas de tracker (web y app) y los correos lo muestran con formato. El HTML no se interpreta.