API REST
Actualizado: 16 de septiembre de 2026
AZbox publica librerías para tres stacks: Dart/Flutter en pub.dev, Node.js en npm y PHP en Packagist. Cualquier otro stack — React Native, iOS o Android nativos, Vue, Angular, Go, Python — se integra a través de esta API.
Preferimos decirlo aquí a que pierdas una tarde buscando un SDK que no existe.
Obtener las keywords de un proyecto
GET https://api.azbox.io/v1/projects/{projectId}/keywords
| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
projectId | ruta | sí | El ID de tu proyecto, en el panel |
api_key | query | sí | Tu clave de API |
language | query | sí | Código de idioma tal y como está en el proyecto, en mayúsculas: EN-US, ES, PT-PT… |
afterUpdatedAtStr | query | no | Fecha ISO. Devuelve solo las keywords actualizadas después |
Ejemplo
curl "https://api.azbox.io/v1/projects/TU_PROJECT_ID/keywords?api_key=TU_API_KEY&language=ES"
Respuesta
Un array de keywords:
[
{
"id": "8Kd0pQ2mNvXyZ1aB3cD4",
"data": {
"keyword": "home.title",
"translation": "Bienvenido a AZbox",
"createdAt": "2026-08-14T09:02:00.000Z",
"updatedAt": "2026-09-02T10:14:00.000Z",
"categories": []
}
}
]
La clave que usas en tu código es data.keyword, no id. El id es el
identificador interno del documento y se genera solo, así que no significa nada
para tu aplicación. Montar el diccionario sobre id te deja un mapa indexado
por cadenas aleatorias.
Dos cosas más que la forma no enseña:
translationno aparece cuando esa keyword todavía no tiene texto en el idioma que has pedido. No es una cadena vacía: el campo directamente no está.context,commentyreferencese omiten cuando están vacíos, así que léelos a la defensiva.
Sincronizar solo lo que ha cambiado
Pasa afterUpdatedAtStr con la marca de tiempo de tu última sincronización y recibirás únicamente las keywords tocadas desde entonces. Esto es lo que hace practicables las actualizaciones over-the-air: corriges un texto en el panel y tu siguiente refresco lo recoge sin desplegar y sin pasar por la store.
curl "https://api.azbox.io/v1/projects/TU_PROJECT_ID/keywords?api_key=TU_API_KEY&language=ES&afterUpdatedAtStr=2026-09-01T00:00:00.000Z"
Guarda la marca de tiempo de la respuesta que aplicaste, no la hora actual, o perderás todo lo que se escriba mientras tu petición viaja.
El informe de calidad
GET https://api.azbox.io/v1/projects/{projectId}/qa
| Parámetro | Dónde | Obligatorio | |
|---|---|---|---|
api_key / x-api-key | query o cabecera | sí | la misma clave de arriba |
source | query | no | idioma contra el que se compara todo; por defecto, el primero del proyecto |
languages | query | no | separados por comas; por defecto, todos los del proyecto |
format | query | no | csv para hoja de cálculo en vez de JSON |
Devuelve totales, un resumen por idioma y la lista de avisos: marcadores que no cuadran, plurales ICU rotos, etiquetas HTML que no coinciden, traducciones mucho más largas que el original y lo que falta por traducir. Qué significa cada comprobación está en la página del informe de calidad; el CLI convierte ese mismo informe en un código de salida para CI.
Antes de ponerte a construir
- Un resultado vacío es un 404, no un array vacío. Un proyecto sin
keywords en ese idioma responde
404con{"detail": "No keywords found"}. Trátalo como «todavía no hay nada», no como un fallo. - El código de idioma tiene que coincidir con el del proyecto, en mayúsculas. Uno en minúsculas o que no existe no da error: la API responde
200con todas las keywords y sintranslation, lo que parece «no hay nada traducido». Los códigos del proyecto están enGET /v1/projects/{projectId}. - La API es de solo lectura para keywords. Se crean en el panel o importando un archivo. Aquí no hay ningún endpoint que las suba.
- Una petición por idioma. No hay respuesta combinada.
- La interpolación es cosa tuya. Los textos vuelven tal y como están guardados, con sus placeholders. Sustituir
{count}y compañía te toca a ti. - Cachea el resultado. Una petición por texto en tiempo de render va a ir lenta. Pide una vez al arrancar y refresca cada cierto tiempo.
- Guarda la clave en el servidor siempre que puedas. Viaja como parámetro de query, así que acaba en los logs de acceso, en los proxys y en el historial del navegador si llamas a la API directamente desde el cliente.
Implementación de referencia
El cliente que lleva dentro azbox-cli son unas cien líneas, sin dependencias, y cubre todos los casos de arriba. Si vas a escribir un cliente para otro lenguaje, es lo más corto que puedes leer: src/api.mjs en GitHub.
Para los tres stacks que sí tienen librería, empieza mejor por la guía rápida: Flutter, Node.js o PHP.
Comienza el Crecimiento Global Hoy
Sube tus archivos de idioma, recibe las traducciones y mantén cada idioma sincronizado mientras tu producto sigue cambiando.
Comenzar - Es Gratis