Ir al contenido

Colas vía API

Las colas son el mecanismo de NORA para alimentar a tus robots con unidades de trabajo (items). Esta página documenta los endpoints públicos que te permiten encolar y consultar items de una cola desde tus sistemas (ERP, backend, scripts) usando una API Key, sin necesidad del token de un agente.

Si buscas la guía conceptual de colas, revisa Colas.

  • URL base de producción: https://nora.valisoftconsulting.com
  • Prefijo de la API: /api/v1
  • Autenticación: cabecera X-API-Key: nora_ak_...

Cada endpoint exige un scope concreto en la API Key. Consulta cómo crear y limitar claves en autenticación.

AcciónScope requerido
Encolar item(s)queues:write (o una clave sin restricción de scopes)
Listar itemsqueues:read (o una clave sin restricción de scopes)

Todas las respuestas van envueltas. Las operaciones simples usan SuccessResponse:

{
"success": true,
"data": { }
}

Los listados usan PaginatedResponse, que añade meta:

{
"success": true,
"data": [ ],
"meta": { "page": 1, "limit": 20, "total": 0, "pages": 0 }
}

El campo status de cada item evoluciona durante su ciclo de vida. Los valores posibles son:

EstadoSignificado
newRecién encolado, aún sin tomar. Es el valor por defecto al crear.
pendingEn espera para ser procesado.
processingTomado por un job en ejecución.
completedProcesado con éxito (con result opcional).
failedFalló su procesamiento (ver error_message, retry_count).
reviewMarcado para revisión humana.
abandonedDescartado sin completar.
flowchart TD
  new --> pending --> processing
  processing --> completed
  processing --> failed
  processing --> review
  failed --> abandoned
  review --> completed

El número máximo de reintentos se define a nivel de cola (max_retries, entre 0 y 10; por defecto 3).

POST /api/v1/queues/by-name/{name}/items
  • Scope: queues:write
  • Límite de tasa: 60 solicitudes/minuto (por API Key, o por IP).

Cuerpo de la petición (AddQueueItemRequest):

CampoTipoRequeridoDescripción
dataobjetoCarga de negocio del item (JSON libre).
priorityenteroNo (3)1 = baja, 3 = normal, 5 = urgente.
referencestring | nullNoClave de negocio del productor; es buscable y se muestra en la lista.
deadlinefecha-hora ISO 8601 | nullNoSLA: los items con deadline más cercano se despachan primero.
postponefecha-hora ISO 8601 | nullNoEl agente omite el item hasta que pase este momento.

Ejemplo con curl:

Ventana de terminal
curl -X POST \
"https://nora-api.valisoftconsulting.com/api/v1/queues/by-name/facturas/items" \
-H "X-API-Key: nora_ak_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"data": { "factura_id": "F-2026-0042", "monto": 1280.50 },
"priority": 5,
"reference": "F-2026-0042",
"deadline": "2026-06-30T23:59:00Z"
}'

Respuesta 200:

{
"success": true,
"data": {
"id": "5b1c0a3e-2f4d-4a91-9c10-7e2f8c4d1a22",
"queue_id": "0a9f7b2c-1d3e-4f56-8a7b-9c0d1e2f3a4b",
"status": "new",
"priority": 5,
"reference": "F-2026-0042",
"deadline": "2026-06-30T23:59:00Z",
"postpone": null,
"data": { "factura_id": "F-2026-0042", "monto": 1280.50 },
"result": null,
"retry_count": 0,
"error_message": null,
"processed_by": null,
"created_at": "2026-06-19T14:00:00Z",
"processed_at": null,
"reviewed_by": null,
"reviewed_at": null
}
}
POST /api/v1/queues/by-name/{name}/items/bulk
  • Scope: queues:write
  • Límite de tasa: 20 solicitudes/minuto (por API Key, o por IP).
  • Máximo 1000 items por solicitud.

Cuerpo de la petición (BulkAddQueueItemsRequest):

CampoTipoRequeridoDescripción
itemslista de objetosCada objeto es la carga de negocio (data) de un item.

Ejemplo con curl:

Ventana de terminal
curl -X POST \
"https://nora-api.valisoftconsulting.com/api/v1/queues/by-name/facturas/items/bulk" \
-H "X-API-Key: nora_ak_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "factura_id": "F-2026-0043", "monto": 90.00 },
{ "factura_id": "F-2026-0044", "monto": 410.75 }
]
}'

Respuesta 200 (devuelve cuántos items se añadieron):

{
"success": true,
"data": { "added": 2 }
}
GET /api/v1/queues/by-name/{name}/items
  • Scope: queues:read
  • Límite de tasa: 60 solicitudes/minuto (por API Key, o por IP).

Parámetros de consulta:

ParámetroTipoPor defectoRestricciones
pageentero1entre 1 y 500
limitentero20entre 1 y 100
statusstring(todos)uno de: new, pending, processing, completed, failed, review, abandoned

Los items se devuelven ordenados por fecha de creación descendente (más recientes primero).

Ejemplo con curl (filtrando por estado):

Ventana de terminal
curl -G \
"https://nora-api.valisoftconsulting.com/api/v1/queues/by-name/facturas/items" \
-H "X-API-Key: nora_ak_xxxxxxxxxxxxxxxxxxxxxxxx" \
--data-urlencode "status=completed" \
--data-urlencode "page=1" \
--data-urlencode "limit=50"

Respuesta 200:

{
"success": true,
"data": [
{
"id": "5b1c0a3e-2f4d-4a91-9c10-7e2f8c4d1a22",
"queue_id": "0a9f7b2c-1d3e-4f56-8a7b-9c0d1e2f3a4b",
"status": "completed",
"priority": 5,
"reference": "F-2026-0042",
"deadline": "2026-06-30T23:59:00Z",
"postpone": null,
"data": { "factura_id": "F-2026-0042", "monto": 1280.50 },
"result": { "estado": "registrada" },
"retry_count": 0,
"error_message": null,
"processed_by": "9d8c7b6a-5e4f-4321-8a90-0b1c2d3e4f5a",
"created_at": "2026-06-19T14:00:00Z",
"processed_at": "2026-06-19T14:05:00Z",
"reviewed_by": null,
"reviewed_at": null
}
],
"meta": { "page": 1, "limit": 50, "total": 1, "pages": 1 }
}
import requests
BASE = "https://nora-api.valisoftconsulting.com/api/v1"
HEADERS = {"X-API-Key": "nora_ak_xxxxxxxxxxxxxxxxxxxxxxxx"}
# Encolar un item con prioridad alta
resp = requests.post(
f"{BASE}/queues/by-name/facturas/items",
headers=HEADERS,
json={
"data": {"factura_id": "F-2026-0045", "monto": 75.0},
"priority": 5,
"reference": "F-2026-0045",
},
)
resp.raise_for_status()
item = resp.json()["data"]
print(item["id"], item["status"]) # ... new
# Listar los items pendientes
resp = requests.get(
f"{BASE}/queues/by-name/facturas/items",
headers=HEADERS,
params={"status": "pending", "limit": 100},
)
resp.raise_for_status()
payload = resp.json()
print(payload["meta"]["total"], "items pendientes")
for it in payload["data"]:
print(it["reference"], it["status"])
CódigoCausa
401Falta la cabecera X-API-Key o la clave es inválida.
403La clave no tiene el scope requerido (queues:read / queues:write).
404No existe una cola con ese name en tu organización.
422Cuerpo inválido (p. ej. más de 1000 items en bulk, o status no permitido).
429Se superó el límite de tasa del endpoint.
  • Consulta cómo procesan los robots estos items en Colas.
  • Revisa scopes y gestión de claves en autenticación.