Comprar sistema

Descripción General de la API de Agentes

Introducción a la API de Agentes para operaciones de fidelización máquina a máquina.

La API de Agentes permite que sistemas externos operen tu plataforma de fidelización sin una interfaz de usuario. Los sistemas POS otorgan puntos por compra, los asistentes de IA revisan saldos y sugieren recompensas, y las herramientas de automatización activan acciones de fidelidad desde eventos externos — todo a través de una única API REST sin estado.

💡
Diferente de la API estándar: La API REST utiliza tokens de inicio de sesión basados en sesiones. La API de Agentes utiliza claves de API de larga duración con recortes granulares — diseñada para máquinas, no para humanos.

Qué Hace

Capacidad Descripción
Puntos y Recompensas Otorgar puntos en compras, canjear recompensas al pagar.
Gestión de Recursos Crear, leer, actualizar y eliminar clubes, tarjetas, recompensas, sellos, cupones, niveles y personal.
Búsqueda de Miembros Consultar detalles del miembro y saldos en las tarjetas.
Billetera de Miembros Los miembros ven su propio saldo, navegan por las recompensas y envían reclamos.
Integración POS Flujo completo de ganar y gastar para sistemas de punto de venta.
Automatización Activar acciones de fidelización desde Zapier, Make, n8n o scripts personalizados.
Acceso de Agentes de IA Los asistentes de IA pueden consultar y operar programas de fidelidad a través de la misma API.

Arquitectura de un vistazo

Tu Sistema

POS / IA / Automatización

HTTPS + JSON Encabezado X-Agent-Key

Fidelización de Recompensas

API de Agentes
/api/agent/v1
  • Autenticación de clave
  • Aplicación de alcances
  • Límite de tasa
  • Registro de auditoría
  • Lógica de negocio

Principios clave de diseño:

  • Sin estado — Sin sesiones, sin cookies, sin CSRF. Cada solicitud es independiente.
  • Basado en JSON — Todas las solicitudes y respuestas son JSON.
  • Mismas reglas de negocio — La API aplica exactamente las mismas validaciones, límites y permisos que el panel interactivo.
  • Cero-UI — Sin configuración regional en la URL. El idioma es opcional a través del encabezado Accept-Language.
  • Auditado — Cada solicitud se registra en los Registros de Actividad con completa trazabilidad.

Es una Herramienta, No una IA

La API de Agentes no incluye una IA — es una interfaz estructurada que los agentes de IA (o cualquier otro sistema) pueden llamar como una herramienta. Se ubica junto a la búsqueda web, operaciones de archivos y consultas de base de datos como algo sobre lo que actúa un agente autónomo.

Piensa en los agentes de IA de hoy — herramientas como Claude (Anthropic), Operator de OpenAI, Perplexity, Google Gemini o modelos alojados como DeepSeek y Qwen — como el lado del "cerebro" de este diagrama. La API de Agentes está en el lado de las "herramientas". Este espacio evoluciona rápidamente; para cuando leas esto, pueden haber surgido nuevos actores. A la API no le importa qué agente se conecte — habla HTTP y JSON puros.

Ya sea que estés conectando un asistente de IA, un sistema POS o un canal de automatización, la arquitectura sigue siendo la misma:

Capa Dónde se Ejecuta Responsabilidad
Tu agente / integración Tu infraestructura Inteligencia, razonamiento y decisión sobre qué llamadas a la API hacer.
Tu LLM (si lo hay) Tu configuración Impulsar tu IA — proveedores en la nube, modelos autoalojados o ninguno.
La API de Agentes Tu plataforma Recibir solicitudes REST, devolver JSON, aplicar tus reglas de negocio.

No se necesita una clave de proveedor de LLM en el lado de la plataforma. La API de Agentes solo ve el encabezado X-Agent-Key y el cuerpo de la solicitud JSON. Todo funciona idénticamente — un comando curl es un "agente" tan válido como un asistente de IA autónomo complejo.

Qué está listo para agentes hoy:

  • Recuperación de errores estructurada — cada respuesta incluye un campo retry_strategy para que los agentes manejen errores autónomamente.
  • Claves que se auto-identifican — el endpoint /health devuelve el rol de la clave, alcances y límites, permitiendo a los agentes entender sus propios permisos.
  • Referencia completa de endpoints — documenta cada ruta, parámetro y campo de respuesta.
  • Especificación OpenAPI 3.0 — Disponible en /api/agent/docs.json para importar en Swagger UI o Postman.
  • Endpoint de descubrimiento de herramientasGET /api/agent/v1/tools devuelve definiciones de herramientas legibles por máquina, con el formato que tu framework de agentes requiere.

Inicio Rápido

1

Habilitar la característica de la API de Agentes

Agrega lo siguiente a tu archivo .env:

FEATURE_AGENT_API=true

La API de Agentes es una función opcional. Cuando está desactivada (por defecto), todas las rutas y herramientas de agentes se ocultan en toda la plataforma.

2

Habilitar la API de Agentes para un socio

Como administrador, edita la cuenta del socio y habilita el permiso de la API de Agentes en la pestaña Permisos.

3

Crear una Clave de Agente

En el panel del socio, ve a Integraciones → Claves de Agente y crea una nueva clave escogiendo el nivel de permiso adecuado.

4

Copiar la clave (visualización única)

La clave completa se muestra solo una vez. Se ve así:

rl_agent_a8f3k2m1x9v4b7n2p5q8r1t6w3y0z4d7f0h3j6l9...

Después de cerrar el diálogo, solo el prefijo (rl_agent_a8f3k2m1) es visible — la clave completa es irrecuperable.

5

Haz tu primera solicitud

curl -X GET https://tu-dominio.com/api/agent/v1/health \
  -H "X-Agent-Key: rl_agent_a8f3k2m1x9v4b7n2p5q8r1t6w3y0z4d7f0h3j6l9..."

Respuesta:

{
  "error": false,
  "data": {
    "status": "ok",
    "key": {
      "name": "POS Terminal 1",
      "prefix": "rl_agent_a8f3k2m1",
      "role": "partner",
      "scopes": ["read", "write:transactions"],
      "rate_limit": 60,
      "expires_at": null
    },
    "owner": {
      "id": "9e1a...",
      "name": "Coffee Corner",
      "type": "partner"
    }
  }
}

URL Base

Todas las solicitudes de la API de Agentes utilizan:

https://tu-dominio.com/api/agent/v1

Sin prefijo de configuración regional. Sin token de sesión. Solo la clave.

Estado Actual y Hoja de Ruta

Enviado — Cobertura Completa de API

Todos los endpoints a través de los tres roles están en vivo y listos para producción:

Categoría Estado Endpoints
Chequeo de salud✅ En vivoGET /health
Clubes✅ En vivoCRUD Completo
Tarjetas de Fidelidad✅ En vivoCRUD Completo
Recompensas✅ En vivoCRUD Completo
Miembros✅ En vivoLectura + Saldo
Transacciones✅ En vivoCompra + Canje
Tarjetas de Sellos✅ En vivoCRUD Completo + Sellar + Canjear
Cupones✅ En vivoCRUD Completo + Validar + Canjear
Niveles✅ En vivoCRUD Completo
Personal✅ En vivoCRUD Completo
Admin: Socios✅ En vivoLista, ver, permisos, activar/desactivar
Admin: Miembros✅ En vivoBúsqueda global + detalles
Admin: Analíticas✅ En vivoMétricas de plataforma + por socio
Miembro: Perfil✅ En vivoLectura + Actualización
Miembro: Saldos y Tarjetas✅ En vivoVista de billetera + Detalles de tarjeta
Miembro: Transacciones✅ En vivoHistorial (todos + por tarjeta)
Miembro: Recompensas✅ En vivoNavegar + Reclamar

Enviado — Herramientas Nativas de Agente

Características Descripción Estado
Especificación OpenAPI 3.0 Especificación de API en /api/agent/docs.json, importable por Swagger UI, Postman, etc. ✅ En vivo
Swagger UI Documentación interactiva de API en /api/agent/docs. ✅ En vivo
Endpoint de descubrimiento GET /api/agent/v1/tools?format=openai devuelve operaciones disponibles como definiciones de herramientas. ✅ En vivo
Exportación multi-formato Definiciones de herramientas en formato de OpenAI, Claude, MCP y JSON Schema genérico. ✅ En vivo

Autenticación

Cómo funcionan las claves de la API de Agentes, modelo de seguridad y flujo de autenticación.

La API de Agentes utiliza claves de API de larga duración en lugar de tokens de inicio de sesión. Cada clave es autosuficiente — contiene la identidad, el rol y los permisos necesarios para autenticar una solicitud.

Cómo Funciona

Cada solicitud debe incluir la clave en el encabezado X-Agent-Key:

curl -X GET https://tu-dominio.com/api/agent/v1/health \
  -H "X-Agent-Key: rl_agent_a8f3k2m1x9v4b7n2..."

El flujo de autenticación:

  • Extraer la clave del encabezado X-Agent-Key
  • Detectar el rol de la clave desde el prefijo (rl_admin_, rl_agent_, rl_member_)
  • Buscar claves candidatas por prefijo (consulta de base de datos indexada — rápida)
  • Verificar la clave sin procesar contra el hash bcrypt almacenado
  • Comprobar que la clave esté activa y no haya expirado
  • Comprobar que la cuenta del propietario de la clave esté activa
  • Vincular la clave y el propietario a la solicitud para uso en etapas posteriores

Formato de Clave

Las claves siguen un formato predecible:

rl_agent_a8f3k2m1x9v4b7n2p5q8r1t6w3y0z4d7f0h3j6l9m2o5r8u1w4z7c0e3...
└──────┘ └──────┘ └─────────────────────────────────────────────────────┘
  rol    prefijo                  secreto aleatorio
Componente Longitud Descripción
Prefijo de rol 9-11 caracteres rl_admin_, rl_agent_, rl_member_
Prefijo de clave 8 caracteres Identificador único para búsqueda en base de datos.
Secreto aleatorio 40 caracteres Aleatorio criptográficamente, con hash bcrypt.

El prefijo es la única parte almacenada en texto plano. Permite búsquedas rápidas sin escanear toda la tabla. El resto tiene un hash con bcrypt — incluso con acceso a la base de datos, la clave no puede ser reconstruida.

Roles de Clave

Cada clave pertenece a un tipo de propietario:

Prefijo Rol Propietario
rl_admin_ Admin Cuenta de administrador
rl_agent_ Partner Cuenta de socio/negocio
rl_member_ Member Cuenta de cliente

Los tres tipos de clave están disponibles.

Modelo de Seguridad

Visualización Única

Cuando se crea una clave, la clave completa se muestra exactamente una vez. Después de cerrar el cuadro de diálogo, solo es visible el prefijo. No hay forma de recuperar la clave completa — si se pierde, crea una nueva.

Hash Bcrypt

Las claves se almacenan como hashes bcrypt (el mismo algoritmo utilizado para las contraseñas). Esto significa:

  • Las fugas de base de datos no exponen las claves.
  • Ni siquiera los administradores pueden ver la clave completa.
  • Cada verificación de clave toma ~100ms (factor de carga incorporado de bcrypt).

Límite de Tasa (Rate Limiting)

Cada clave tiene un límite de tasa configurable (solicitudes por minuto, por defecto: 60). El límite se aplica por clave utilizando una ventana fija de 1 minuto — dos claves propiedad del mismo socio tienen límites separados.

Cada respuesta incluye encabezados de límite de tasa para que los clientes puedan regular el ritmo proactivamente:

X-RateLimit-Limit: 60          ← máximas solicitudes por ventana
X-RateLimit-Remaining: 42      ← solicitudes restantes en la ventana actual
X-RateLimit-Reset: 1741260000  ← marca de tiempo Unix de cuándo se reinicia la ventana

Cuando se excede el límite, la API devuelve HTTP 429 con un encabezado adicional Retry-After:

{
  "error": true,
  "code": "RATE_LIMITED",
  "message": "Too many requests. Please slow down.",
  "retry_strategy": "backoff",
  "details": {
    "limit": 60,
    "window_seconds": 60,
    "retry_after_seconds": 23
  }
}

Expiración

Las claves pueden tener opcionalmente una fecha de expiración. Las claves expiradas son rechazadas en la autenticación. Esto es útil para:

  • Integraciones temporales.
  • Acceso de API por tiempo limitado.
  • Rotación de claves programada.

Comprobación de Actividad del Propietario

Incluso con una clave válida, si la cuenta del propietario está desactivada (por ejemplo, cuenta de socio deshabilitada por el administrador), la clave es rechazada. Esto asegura que la revocación de la clave a nivel de cuenta sea inmediata.

Errores de Autenticación

Todos los errores de autenticación siguen la estructura de error estándar:

Código de Error Estado HTTP Significado
AUTH_MISSING_KEY401Ningún encabezado X-Agent-Key proporcionado.
AUTH_INVALID_KEY401Formato de clave incorrecto, prefijo no encontrado o el hash no coincide.
AUTH_KEY_REVOKED401La clave existe pero ha sido desactivada.
AUTH_KEY_EXPIRED401La clave ha superado su fecha de expiración.
AUTH_OWNER_INACTIVE403La cuenta del propietario está desactivada.
AUTH_ANONYMOUS_MEMBER403Los miembros anónimos no pueden usar claves de agente.

Ejemplo de respuesta de error:

{
  "error": true,
  "code": "AUTH_KEY_REVOKED",
  "message": "This agent key has been revoked.",
  "retry_strategy": "no_retry"
}

Consulta el Manejo de Errores para ver el formato completo de la estructura de error.

Mejores Prácticas

Práctica Por qué Importa
Almacenar claves en variables de entorno Nunca codifiques las claves en el código fuente.
Utilizar los alcances mínimos requeridos Principio de menor privilegio — otorga solo lo necesario.
Establecer fechas de expiración Limitación del radio de impacto de las claves comprometidas.
Rotar claves periódicamente Crea una nueva clave, actualiza tu integración, revoca la antigua.
Monitorear el registro de auditoría Busca patrones inesperados en los Registros de Actividad.
Utilizar HTTPS La clave se envía como un encabezado — usa siempre conexiones cifradas.

Primera Llamada

Realiza tu primera llamada autenticada a la API de Agentes y elige el modelo de clave adecuado para tu integración.

Esta guía permite configurar una nueva integración desde cero hasta su primera solicitud exitosa. Se centra en el contrato de producción real: prefijos de clave, formato de encabezado, sobres de respuesta y las primeras comprobaciones que debe realizar una integración antes de comenzar a otorgar puntos o canjear recompensas.

1. Elije el tipo de clave correcto

Utiliza la clave más restrictiva que se ajuste a la tarea.

Tipo de clave Prefijo Úselo para
Clave de socio rl_agent_ Sistemas de punto de venta, reversiones de transacciones en comercio electrónico, automatización de procesos administrativos.
Clave de miembro rl_member_ Vistas de la billetera, navegación de recompensas para miembros, flujos de reclamación de autoservicio.
Clave de administrador rl_admin_ Administración de la plataforma, supervisión de socios, analíticas.

Si tu sistema necesita realizar operaciones financieras o de programas de fidelización en nombre de una empresa, utiliza una clave de socio. Si solo necesitas leer o actualizar la billetera de un miembro, utiliza una clave de miembro. No utilices una clave de socio cuando una clave de miembro sea suficiente.

2. Habilitar la función

La API de Agentes está restringida por funcionalidades.

  • Establece FEATURE_AGENT_API=true en tu entorno.
  • Para las integraciones con socios, habilita el permiso de API de Agentes del socio en la interfaz de administración.
  • Crea la clave en el área correspondiente del panel de control.

Si la función está deshabilitada para un socio, los endpoints del socio devuelven:

{
  "error": true,
  "code": "FEATURE_DISABLED",
  "message": "Agent API access is not enabled for this partner.",
  "retry_strategy": "contact_support"
}

3. Almacena la clave correctamente

Cada solicitud envía la clave en el encabezado X-Agent-Key.

X-Agent-Key: rl_agent_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0
X-Agent-Key: rl_member_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8
X-Agent-Key: rl_admin_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0

Datos importantes:

  • El prefijo de rol es parte de la clave sin procesar: rl_agent_, rl_member_, o rl_admin_.
  • La parte secreta aleatoria tiene 40 caracteres.
  • La clave completa se muestra una sola vez en el momento de la creación.
  • La clave completa no se puede recuperar posteriormente. En caso de pérdida, crea una nueva clave y revoca la anterior.

4. Primero, haz un chequeo de estado

Antes de llamar a cualquier endpoint de negocio, llama a GET /api/agent/v1/health.

GET /api/agent/v1/health HTTP/1.1
Host: tu-dominio.com
Accept: application/json
X-Agent-Key: rl_agent_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0

Respuesta exitosa:

{
  "error": false,
  "data": {
    "status": "ok",
    "key": {
      "name": "POS Terminal 1",
      "prefix": "rl_agent_A1b2C3d4",
      "role": "partner",
      "scopes": ["read", "write:transactions", "write:rewards"],
      "rate_limit": 60,
      "expires_at": null,
      "created_at": "2026-03-08T16:00:00+00:00",
      "last_used_at": "2026-03-08T16:10:00+00:00"
    },
    "owner": {
      "id": "019cce5d-bd7e-73ec-b4ce-9dc6f7f73ed8",
      "name": "Coffee Corner",
      "type": "partner"
    }
  }
}

Utiliza esta respuesta para verificar:

  • La clave se autentica correctamente.
  • El rol es correcto.
  • Los alcances coinciden con tu integración.
  • El límite de tasa es apropiado.

5. Comprender el patrón de respuesta principal

Las respuestas de éxito utilizan un sobre JSON estable:

{
  "error": false,
  "data": {
    "id": "resource-id"
  }
}

Las respuestas paginadas añaden un objeto pagination:

{
  "error": false,
  "data": [],
  "pagination": {
    "current_page": 1,
    "last_page": 4,
    "per_page": 25,
    "total": 81
  }
}

Comportamiento de paginación predeterminado:

  • per_page por defecto es 25.
  • per_page está limitado a 100.

Convenciones de localización:

  • Los campos de recursos, como el uso de miembros, utilizan códigos de configuración regional instalados como en_US o es_ES.
  • El encabezado Accept-Language utiliza etiquetas de lenguaje HTTP normales como en-US o es-ES.

6. Manejar errores mediante retry_strategy

Todos los errores son legibles por máquina.

{
  "error": true,
  "code": "AUTH_INSUFFICIENT_SCOPE",
  "message": "This key does not have the required scope.",
  "retry_strategy": "no_retry",
  "details": {
    "required_scope": "write:transactions"
  }
}

Utiliza retry_strategy para decidir qué hacer:

Estrategia Significado
no_retry Fallo permanente para esta solicitud.
fix_request Corrige la carga útil y vuelve a enviarla.
backoff Problema temporal como la limitación de tasa.
contact_support Se requiere acción humana.

Consulta la sección de Gestión de errores para ver la matriz completa.

7. Elije los alcances antes de realizar el envío

No crees claves amplias por defecto. Comienza con el conjunto de ámbitos útiles más pequeño.

Puntos de partida típicos:

Integración Alcances recomendados
Gana y canjea en el punto de venta read, write:transactions, write:rewards
TPV con sellos read, write:transactions, write:rewards, write:stamps
Pago mediante cupón read, write:vouchers
Billetera de miembro read o read, write:profile, write:redeem

Habilitación y Gestión de Claves

Cómo crear, configurar y revocar claves de la API de Agentes.

Las claves de agente se administran mediante el panel del socio. Los administradores controlan qué socios pueden usar la API de Agentes, y los socios crean y revocan sus propias claves.

Requisitos Previos

Antes de que un socio pueda crear claves de agente:

  • Indicador de característica habilitado — Agrega FEATURE_AGENT_API=true a tu archivo .env. La API de Agentes está desactivada de forma predeterminada.
  • El administrador habilita la API de Agentes — El permiso de API de Agentes debe estar activado para el socio.
  • El socio tiene al menos un club — La mayoría de los endpoints de agente operan en el contexto de un club.

Habilitar Acceso a la API de Agentes

Como Administrador:

  • Navega hasta Socios en la barra lateral del administrador.
  • Haz clic en el nombre del socio para editar su cuenta.
  • Cambia a la pestaña Permisos.
  • Habilita el permiso de la API de Agentes.
  • Opcionalmente, establece un Límite de Claves de Agente (cuántas claves puede crear este socio; -1 para ilimitado).
  • Haz clic en Guardar.

Una vez habilitado, el socio verá Claves de Agente en Integraciones en su barra lateral.

Creación de una Clave

Como Socio:

  • Navega a Integraciones → Claves de Agente en la barra lateral.
  • Haz clic en Crear.
  • Rellena:
    • Nombre — Una etiqueta descriptiva (por ejemplo, "Terminal POS Centro", "Integración Zapier").
    • Alcances — Elige un ajuste preestablecido de nivel de permiso.
    • Expira En — Fecha de caducidad opcional.
  • Haz clic en Guardar.

Visualización Única de Clave

Después de guardar, un cuadro de diálogo muestra la clave completa:

rl_agent_a8f3k2m1x9v4b7n2p5q8r1t6w3y0z4d7f0h3j6l9m2o5r8u1w4z7c0e3...
⚠️
Copia esta clave de inmediato. Después de cerrar este cuadro de diálogo, la clave completa no se volverá a mostrar nunca. Solo el prefijo (rl_agent_a8f3k2m1) permanece visible. Si pierdes la clave, debes crear una nueva.

Preajustes de Nivel de Permiso

Al crear una clave, eliges una de las siguientes preselecciones:

Ajuste Preestablecido Alcances Otorgados Caso de Uso
Solo Lectura (View Only) read Paneles, informes, comprobaciones de saldo.
Punto de Venta (Point of Sale) read, write:transactions, write:rewards Gestión de recompensas, ganancias y gastos en el punto de venta.
Gestión Completa (Full Management) read, write:cards, write:rewards, write:stamps, write:vouchers, write:clubs Integraciones generales (Zapier, Make).
Acceso Completo (Full Access) admin (super-alcance) Control programático completo.

Después de la creación, los alcances no se pueden cambiar. Para usar diferentes alcances, crea una nueva clave.

Visualización de Claves

La lista de Claves de Agente muestra:

Columna Descripción
NombreTu etiqueta descriptiva.
Prefijo de ClavePrimeros caracteres de la clave (para identificación en registros).
ActivaSi la clave está actualmente activa.
Fecha de CaducidadFecha de expiración, si está configurada.
Último UsoCuándo se utilizó la clave por última vez (se actualiza cada 5+ minutos).
CreadaCuándo se creó la clave.

Revocación de una Clave

Para revocar una clave de inmediato:

  • Navega a Integraciones → Claves de Agente.
  • Encuentra la clave en la lista.
  • Haz clic en Eliminar para quitarla permanentemente, o haz clic en Editar y desactiva el control de Activa (reversible).
  • Confirma la acción.

Qué ocurre al revocar una clave:

  • Todas las solicitudes que utilicen esa clave reciben de inmediato AUTH_KEY_REVOKED (401).
  • El registro de la clave permanece en la base de datos para seguimiento de auditoría.
  • Las entradas existentes del registro de actividad para esa clave se conservan.
  • Cualquier integración que utilice esta clave debe actualizarse con una nueva clave.
⚠️
La revocación es inmediata e irreversible. No se puede deshacer. Si revocas accidentalmente una clave de producción, crea una nueva y actualiza tu integración.

Estrategia de Rotación de Claves

Para integraciones críticas en materia de seguridad, rota las claves periódicamente:

  • Crea una nueva clave con los mismos alcances.
  • Actualiza tu integración para usar la nueva clave.
  • Verifica que la nueva clave funciona (llama a GET /api/agent/v1/health).
  • Revoca la clave anterior.

Esto asegura que no haya tiempo de inactividad durante la rotación.

Claves de Miembro

Los miembros (clientes) también pueden crear claves de agente para acceder a sus propios datos desde aplicaciones externas e integraciones de billetera.

Creando una Clave de Miembro

  • Inicia sesión en el panel del miembro.
  • Abre el menú de usuario y haz clic en Claves de Agente.
  • Haz clic en Crear.
  • Elige un nombre y un preset de permiso.
  • Copia la clave del cuadro de diálogo de visualización única.

Diferencias en las Claves de Miembro

Aspecto Claves de Socio Claves de Miembro
Prefijo rl_agent_ rl_member_
Expiración por defecto Ninguna (permanente) 90 días
Máximo de claves Configurable por admin (por defecto 5) Fijo en 3
Límite de tasa de ejecución 1,000 RPM 120 RPM (automático)
Exportar Disponible No disponible
Alcances 4 preajustes 2 preajustes
Ajuste de límite de tasa Configurable No se muestra (automático)

Preajustes de Permiso de Miembro

Preajuste Alcances Caso de Uso
Solo Lectura (View Only) read Comprobaciones de saldo, navegación de recompensas.
Acceso Completo (Full Access) read, write:redeem, write:profile Billetera completa: reclamar recompensas + guardar tarjetas + actualizar perfil.

Restricciones

  • Los miembros anónimos no pueden crear claves — Solo los miembros verificados con una dirección de correo electrónico pueden acceder a la gestión de claves de agente.
  • Expiración predeterminada de 90 días — Las claves de los miembros vencen tras 90 días de forma predeterminada. Los miembros pueden establecer una fecha personalizada, pero el sistema impone un valor predeterminado para la seguridad de la clave orientada al consumidor.

Límites

  • Claves de socio: Los administradores pueden establecer cuántas claves puede crear cada socio a través del 'Límite de claves de agente' en Permisos de socio. Un valor de -1 indica ilimitado.
  • Claves de miembro: Fijo a 3 claves por miembro. Esto no es configurable.

Lista de Verificación de Producción

Lista de verificación de seguridad de lanzamiento para integraciones de la API de Agentes, incluyendo idempotencia, reintentos, gestión de claves y reconciliación.

Utiliza esta lista de verificación antes de poner en producción un POS, un conector de comercio electrónico o una automatización.

Gestión de Claves

  • Utiliza claves separadas por entorno. No compartas una clave entre desarrollo local, pruebas (staging) y producción.
  • Utiliza claves separadas por superficie de integración cuando sea práctico. Una flota de terminales POS no debe compartir la misma clave que un trabajo de informes nocturno.
  • Almacena las claves en variables de entorno o un gestor de secretos.
  • Mantén las claves de socio solo en el lado del servidor. Nunca las expongas en código del navegador o aplicaciones móviles.
  • Recuerda que las claves completas se muestran una vez y nunca son recuperables.
  • Rota las claves creando primero el reemplazo, actualizando la integración y luego revocando la clave antigua.

Higiene de Alcances

  • Empieza con el menor privilegio.
  • Otorga alcances de escritura (write) solo para los recursos que la integración realmente muta.
  • Utiliza claves de miembro para operaciones en la billetera del miembro y claves de socio para acciones comerciales propiedad del socio.
  • Verifica los alcances finalmente otorgados llamando a GET /api/agent/v1/health.

Seguridad de Transacciones

Los flujos de compras y canjes no son idempotentes.

  • POST /partner/transactions/purchase puede otorgar puntos más de una vez si vuelves a enviar el mismo pedido lógico.
  • POST /partner/transactions/redeem puede deducir puntos más de una vez si vuelves a enviar el mismo canje lógico.

Práctica recomendada:

  • Trata una respuesta exitosa confirmada como final.
  • Compra devuelve 201; canje devuelve 200.
  • Si obtienes un tiempo de espera agotado o una falla de red ambigua, reconcilia antes de volver a intentar.
  • Rastrea tus propios identificadores de pedido externos o identificadores de canje.
  • Pasa esos identificadores en el campo note donde sea compatible, para que la reconciliación sea posible más adelante.

Ejemplo:

POST /api/agent/v1/partner/transactions/purchase HTTP/1.1
Host: tu-dominio.com
Accept: application/json
Content-Type: application/json
X-Agent-Key: rl_agent_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0

{
  "card_id": "3598a5db-f008-477c-ac4d-5365c662ad62",
  "member_identifier": "customer@example.com",
  "purchase_amount": 24.50,
  "note": "Order #12345"
}

Notas y Reconciliación

Utiliza el campo note siempre que el endpoint lo admita.

Buenos valores:

  • Order #12345
  • POS ticket 98441
  • Shopify order gid://shopify/Order/123456789
  • Cashier session 2026-03-08-07

Esto es especialmente útil para:

  • Reconciliación de compras
  • Investigación de canje de recompensas
  • Auditorías de ajustes de sellos
  • Tickets de soporte

Paginación y Filtrado

No asumas que los endpoints de lista devuelven todos los registros en una sola respuesta.

  • per_page por defecto es 25.
  • per_page tiene un máximo de 100.
  • Los filtros from y to de la lista de transacciones aceptan formato Y-m-d.

Ejemplo:

GET /api/agent/v1/partner/transactions?from=2026-03-01&to=2026-03-08&per_page=100 HTTP/1.1
Host: tu-dominio.com
Accept: application/json
X-Agent-Key: rl_agent_A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6Q7r8S9t0

Construye bucles de paginación explícitamente.

Manejo de Errores

Tu cliente debe ramificar la lógica basado en retry_strategy, no solo en el estado HTTP.

Estrategia Acción
no_retryDetenerse y mostrar el fallo.
fix_requestCorregir el cuerpo de la solicitud.
backoffReintentar con retroceso exponencial (exponential backoff).
contact_supportAlertar a un humano.

Pruebas requeridas antes del lanzamiento:

  • Clave inválida
  • Alcance incorrecto
  • Rol incorrecto
  • Recurso no encontrado
  • Puntos o saldo insuficientes
  • Límite de tasa excedido
  • API de agentes del socio deshabilitada

Límites de Tasa

Cada respuesta incluye encabezados de límite de tasa:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

En caso de un 429 RATE_LIMITED, respeta el encabezado Retry-After. No bombardees la API después de recibir una respuesta de límite de tasa.

Monitoreo Operativo

  • Registra los identificadores de solicitudes salientes y tus propias referencias de pedidos o tickets.
  • Monitorea los Registros de Actividad en busca de comportamiento de automatización inesperado.
  • Mantén una cola de "mensajes muertos" o cola de reintento para los errores de retroceso (backoff).
  • Alerta sobre respuestas repetidas de AUTH_INVALID_KEY, AUTH_INSUFFICIENT_SCOPE y RATE_LIMITED.

Lista Final de Verificación de Lanzamiento

  • Indicador de característica activado en el entorno correcto.
  • Permiso de API de Agentes del socio activado donde se requiera.
  • Tipo de clave correcto elegido.
  • Alcances minimizados y verificados mediante /health.
  • Lógica de reintento implementada.
  • Flujos de compra y canje no idempotentes reconciliados por referencia externa.
  • Notas rellenadas con identificadores externos donde esté soportado.
  • Paginación implementada.
  • Manejo del límite de tasa implementado.
  • Ramas de error probadas.

Alcances y Permisos

Entendiendo la aplicación de alcances y lo que permite cada nivel de permiso.

Los alcances (scopes) definen lo que se le permite hacer a una clave de agente. Cada endpoint de agente verifica la clave de la solicitud en busca del alcance requerido antes de ejecutarse. Si la clave carece del alcance requerido, la solicitud es rechazada con un error HTTP 403.

Cómo Funcionan los Alcances

Cada clave lleva un arreglo de alcances asignados en el momento de su creación. Cuando una solicitud llega a un endpoint:

  • El controlador verifica qué alcance(s) requiere el endpoint.
  • Los alcances de la clave se comparan con el requisito.
  • Si coincide cualquier alcance requerido, se concede el acceso (lógica OR).
  • Si no coincide ningún alcance, se devuelve un error 403 AUTH_INSUFFICIENT_SCOPE.

Alcances Disponibles

Alcance de Lectura

Alcance Qué Permite
read Acceso de lectura a todos los recursos (clubes, tarjetas, miembros, recompensas, etc.).

El alcance read es un permiso de lectura global. Cualquier clave con read puede llamar a cualquier endpoint GET.

Alcances de Escritura

Alcance Qué Permite
write:clubsCrear, actualizar y eliminar clubes.
write:cardsCrear, actualizar y eliminar tarjetas de fidelidad.
write:rewardsCrear, actualizar y eliminar recompensas.
write:transactionsRegistrar compras y canjear recompensas.
write:stampsCrear, actualizar y eliminar tarjetas de sellos; añadir sellos; canjear recompensas de sellos.
write:vouchersCrear, actualizar y eliminar cupones; validar y canjear códigos de cupón.
write:tiersCrear, actualizar y eliminar niveles de membresía.
write:staffCrear, actualizar y eliminar miembros del personal.

Los alcances de escritura son específicos del recurso. Una clave con write:transactions puede registrar compras pero no puede crear clubes.

Alcances de Escritura de Miembro

Las claves de miembro usan un conjunto separado de alcances de escritura:

Alcance Qué Permite
write:profileActualizar el propio perfil (nombre, idioma).
write:redeemEnviar solicitudes de reclamo de recompensa.

Los alcances de escritura de miembro están auto-limitados — solo afectan los datos del propietario de la clave.

Súper Alcance

Alcance Qué Permite
admin Acceso completo — todas las operaciones de lectura y escritura.

El alcance admin omite todas las verificaciones de alcance. Úsalo para claves que necesiten acceso sin restricciones.

Alcances de Administrador

Las claves de administrador tienen alcances a nivel de plataforma:

Alcance Qué Permite
read:partnersVer todos los perfiles de socios y permisos.
write:partnersActualizar permisos de socio, activar/desactivar socios.
read:membersBúsqueda global de miembros y detalles.
read:analyticsMétricas analíticas de la plataforma y por socio.

Jerarquía de Alcances

Los alcances siguen una jerarquía lógica:

Otorga todo
admin
read y write:*
write:clubs write:cards write:rewards write:transactions write:stamps write:vouchers write:tiers write:staff

Comportamientos importantes:

  • Escritura implica lectura en ese recurso: Una clave con write:cards puede llamar a GET /partner/cards, pero no puede leer miembros u otros recursos.
  • Admin otorga todo: El alcance admin actúa como un súper alcance para todo.
  • Lectura no puede escribir: Una clave de solo lectura no puede crear, actualizar ni eliminar nada.
  • Los alcances de escritura están aislados: write:clubs no puede leer recompensas, write:transactions no puede leer personal.

Ajustes Preestablecidos de Permiso

Al crear una clave en el panel, eliges desde presets que mapean arreglos de alcances:

Ajuste Preestablecido Alcances Mejor Para
Solo Lectura (View Only) read Paneles de informes, comprobaciones de saldo, consultas IA.
Punto de Venta (Point of Sale) read, write:transactions, write:rewards Sistemas de punto de venta (ganar, canjear y recompensas).
Gestión Completa (Full Management) read, write:cards, write:rewards, write:stamps, write:vouchers, write:clubs Herramientas de automatización, integraciones generales.
Acceso Completo (Full Access) admin Control programático completo, desarrollo.

Preajustes de Miembro

Preajuste Alcances Mejor Para
Solo Lectura (View Only) read Comprobaciones de saldo, navegar recompensas, historial de transacciones.
Acceso Completo (Full Access) read, write:redeem, write:profile Billetera completa: reclamos + actualizaciones de perfil + guardar tarjetas.

Preajustes de Administrador

Preajuste Alcances Mejor Para
Solo Lectura (View Only) read:partners, read:members, read:analytics Paneles de monitoreo, exportaciones de CRM.
Estándar (Standard) read:partners, read:members, read:analytics, write:partners Integración de facturación SaaS, gestión de socios.
Acceso Completo (Full Access) admin Control total de la plataforma.

Requisitos de Alcance por Endpoint

Clubes

GET /partner/clubsread o write:clubs
GET /partner/clubs/{id}read o write:clubs
POST /partner/clubswrite:clubs
PUT /partner/clubs/{id}write:clubs
DELETE /partner/clubs/{id}write:clubs

Tarjetas de Fidelidad

GET /partner/cardsread o write:cards
GET /partner/cards/{id}read o write:cards
POST /partner/cardswrite:cards
PUT /partner/cards/{id}write:cards
DELETE /partner/cards/{id}write:cards

Recompensas

GET /partner/rewardsread o write:rewards
GET /partner/rewards/{id}read o write:rewards
POST /partner/rewardswrite:rewards
PUT /partner/rewards/{id}write:rewards
DELETE /partner/rewards/{id}write:rewards

Transacciones

GET /partner/transactionsread o write:transactions
POST /partner/transactions/purchasewrite:transactions
POST /partner/transactions/redeemwrite:rewards

Miembros

GET /partner/membersread
GET /partner/members/{id}read
GET /partner/members/{id}/balance/{cardId}read

Tarjetas de Sellos

GET /partner/stamp-cardsread o write:stamps
GET /partner/stamp-cards/{id}read o write:stamps
POST /partner/stamp-cardswrite:stamps
PUT /partner/stamp-cards/{id}write:stamps
DELETE /partner/stamp-cards/{id}write:stamps
POST /partner/stamp-cards/{id}/stampswrite:stamps
POST /partner/stamp-cards/{id}/redeemwrite:stamps

Cupones

GET /partner/vouchersread o write:vouchers
GET /partner/vouchers/{id}read o write:vouchers
POST /partner/voucherswrite:vouchers
PUT /partner/vouchers/{id}write:vouchers
DELETE /partner/vouchers/{id}write:vouchers
POST /partner/vouchers/validatewrite:vouchers
POST /partner/vouchers/{id}/redeemwrite:vouchers

Niveles

GET /partner/tiersread o write:tiers
GET /partner/tiers/{id}read o write:tiers
POST /partner/tierswrite:tiers
PUT /partner/tiers/{id}write:tiers
DELETE /partner/tiers/{id}write:tiers

Personal

GET /partner/staffread o write:staff
GET /partner/staff/{id}read o write:staff
POST /partner/staffwrite:staff
PUT /partner/staff/{id}write:staff
DELETE /partner/staff/{id}write:staff

Perfil de Miembro

GET /member/profileread
PUT /member/profilewrite:profile

Saldo y Tarjetas de Miembro

GET /member/balanceread
GET /member/cardsread
GET /member/cards/{id}read

Transacciones de Miembro

GET /member/transactionsread
GET /member/transactions/{cardId}read

Recompensas de Miembro

GET /member/rewardsread
POST /member/rewards/{id}/claimwrite:redeem

Socios de Administrador

GET /admin/partnersread:partners
GET /admin/partners/{id}read:partners
PATCH /admin/partners/{id}/permissionswrite:partners
POST /admin/partners/{id}/activatewrite:partners
POST /admin/partners/{id}/deactivatewrite:partners

Miembros de Administrador

GET /admin/membersread:members
GET /admin/members/{id}read:members

Analíticas de Administrador

GET /admin/analytics/overviewread:analytics
GET /admin/analytics/partners/{id}read:analytics

Errores de Alcance

Cuando una clave carece del alcance requerido:

{
  "error": true,
  "code": "AUTH_INSUFFICIENT_SCOPE",
  "message": "This action requires the 'write:cards' scope.",
  "retry_strategy": "no_retry",
  "details": {
    "required_scope": "write:cards"
  }
}

El retry_strategy es no_retry — la clave no puede ganar alcances dinámicamente. En su lugar, crea una nueva clave con los alcances requeridos.

Endpoints de Socio

Referencia completa de endpoints para operaciones de agentes con alcance de socio.

Todos los endpoints de socio tienen el prefijo /api/agent/v1/partner y requieren una clave con alcance de socio (rl_agent_).

Patrones Comunes

Todos los endpoints de socio comparten estos comportamientos:

  • Aislamiento multi-inquilino (Multi-tenant) — Una clave de socio solo puede acceder a los recursos creados por ese socio.
  • Contratos de API canónicos — Las solicitudes se validan contra el esquema de agente en vivo, puertas de permisos y verificaciones de propiedad.
  • Solicitud/respuesta JSON — Envía y recibe application/json.
  • Paginación — Los endpoints de lista admiten los parámetros de consulta ?page=1&per_page=25.

Chequeo de Salud

Chequeo de Salud

GET /api/agent/v1/health

Disponible para todos los roles de clave. Devuelve la identidad de la clave, los alcances y la información del propietario. Úsalo para verificar que tu clave funciona antes de realizar otras solicitudes.

Alcance: No se requiere alcance.

Clubes

Los clubes organizan el personal y las operaciones de un socio. La mayoría de los recursos (tarjetas, personal) pertenecen a un club.

Listar Clubes

GET /api/agent/v1/partner/clubs

Alcance: read o write:clubs

Obtener Club

GET /api/agent/v1/partner/clubs/{id}

Alcance: read o write:clubs

Crear Club

POST /api/agent/v1/partner/clubs

Alcance: write:clubs

{
  "name": "Downtown Location",
  "description": "Our flagship store"
}

Actualizar Club

PUT /api/agent/v1/partner/clubs/{id}

Alcance: write:clubs

Eliminar Club

DELETE /api/agent/v1/partner/clubs/{id}

Alcance: write:clubs

Tarjetas de Fidelidad

Las tarjetas de fidelidad definen las reglas para ganar puntos y las recompensas asociadas.

Listar Tarjetas

GET /api/agent/v1/partner/cards

Alcance: read o write:cards

Obtener Tarjeta

GET /api/agent/v1/partner/cards/{id}

Alcance: read o write:cards

Crear Tarjeta

POST /api/agent/v1/partner/cards

Alcance: write:cards

Actualizar Tarjeta

PUT /api/agent/v1/partner/cards/{id}

Alcance: write:cards

Eliminar Tarjeta

DELETE /api/agent/v1/partner/cards/{id}

Alcance: write:cards

Recompensas

Las recompensas son para lo que ahorran los miembros. Cada recompensa pertenece a una tarjeta de fidelidad.

Listar Recompensas

GET /api/agent/v1/partner/rewards

Alcance: read o write:rewards

Obtener Recompensa

GET /api/agent/v1/partner/rewards/{id}

Alcance: read o write:rewards

Crear Recompensa

POST /api/agent/v1/partner/rewards

Alcance: write:rewards

Actualizar Recompensa

PUT /api/agent/v1/partner/rewards/{id}

Alcance: write:rewards

Eliminar Recompensa

DELETE /api/agent/v1/partner/rewards/{id}

Alcance: write:rewards

Transacciones

Las transacciones manejan el flujo principal de ganar y quemar (canjear). Estos son los endpoints más críticos para las integraciones POS.

Listar Transacciones

GET /api/agent/v1/partner/transactions

Alcance: read o write:transactions

Lista las transacciones de la cuenta de socio, las más recientes primero. Acepta los siguientes parámetros de consulta:

ParámetroTipoDescripción
member_identifierstringFiltrar por miembro (UUID, email, o unique_identifier)
card_idUUIDFiltrar por una tarjeta de fidelidad específica
eventstringFiltrar por tipo de evento (ej. staff_credited_points_for_purchase)
fromdateFecha de inicio (Y-m-d)
todateFecha de fin (Y-m-d)
per_pageintResultados por página (por defecto 25, máximo 100)

Registrar una Compra (Otorgar Puntos)

POST /api/agent/v1/partner/transactions/purchase

Alcance: write:transactions

{
  "card_id": "uuid-of-loyalty-card",
  "member_identifier": "member@example.com",
  "purchase_amount": 24.50,
  "staff_id": "uuid-of-staff-member",
  "note": "Coffee and pastry"
}

Identificación de miembro — El campo member_identifier acepta múltiples formatos:

  • UUID del Miembro
  • Dirección de correo electrónico
  • Número de miembro
  • Identificador único

El sistema resuelve el miembro automáticamente. Esta flexibilidad es fundamental para los sistemas POS que pueden tener solo el correo electrónico de un cliente o un número de lealtad.

El staff_id es opcional — atribuye la transacción a un miembro específico del personal para los informes. Sin él, la transacción se atribuye al "Sistema".

Canjear una Recompensa (Deducir Puntos)

POST /api/agent/v1/partner/transactions/redeem

Alcance: write:rewards

{
  "card_id": "uuid-of-loyalty-card",
  "reward_id": "uuid-of-reward",
  "member_identifier": "member@example.com",
  "staff_id": "uuid-of-staff-member"
}

El staff_id es opcional. Sin él, el canje se atribuye al "Sistema" — esto permite integraciones sin interfaz (headless como Shopify o WooCommerce) que no tienen cuentas de personal.

Las respuestas exitosas de canje incluyen transaction_id, points_deducted, member_balance, new_balance, reward_id, reward, card_id, y member_id.

Miembros

Los endpoints de miembro son de solo lectura para las claves de socio. Los miembros no se pueden crear ni modificar a través de la API de agente — ellos se registran solos a través de la plataforma.

Listar Miembros

GET /api/agent/v1/partner/members

Alcance: read

Obtener Miembro

GET /api/agent/v1/partner/members/{id}

Alcance: read

Obtener Saldo de Miembro

GET /api/agent/v1/partner/members/{id}/balance/{cardId}

Alcance: read

Devuelve el saldo de puntos del miembro para una tarjeta de fidelidad específica.

Las respuestas de lista/detalle de miembros exponen solo la carga de datos pública endurecida: id, unique_identifier, name, email, locale, currency, time_zone, last_login_at, created_at, updated_at, avatar, is_anonymous.

Tarjetas de Sellos

Las tarjetas de sellos funcionan como tarjetas perforadas digitales. Los miembros coleccionan sellos y ganan una recompensa cuando la tarjeta está completa.

Listar Tarjetas de Sellos

GET /api/agent/v1/partner/stamp-cards

Alcance: read o write:stamps

Obtener Tarjeta de Sellos

GET /api/agent/v1/partner/stamp-cards/{id}

Alcance: read o write:stamps

Crear Tarjeta de Sellos

POST /api/agent/v1/partner/stamp-cards

Alcance: write:stamps

Actualizar Tarjeta de Sellos

PUT /api/agent/v1/partner/stamp-cards/{id}

Alcance: write:stamps

Eliminar Tarjeta de Sellos

DELETE /api/agent/v1/partner/stamp-cards/{id}

Alcance: write:stamps

Añadir Sellos

POST /api/agent/v1/partner/stamp-cards/{id}/stamps

Alcance: write:stamps

Otorgar sellos a un miembro en una tarjeta de sellos específica.

Canjear Recompensa de Sellos

POST /api/agent/v1/partner/stamp-cards/{id}/redeem

Alcance: write:stamps

Canjear la recompensa de la tarjeta de sellos cuando un miembro ha coleccionado todos los sellos requeridos.

Usar campos canónicos de creación/actualización: stamps_expire_days y requires_physical_claim.

Cupones

Los cupones proporcionan descuentos de valor instantáneo a través de códigos promocionales.

Listar Cupones

GET /api/agent/v1/partner/vouchers

Alcance: read o write:vouchers

Obtener Cupón

GET /api/agent/v1/partner/vouchers/{id}

Alcance: read o write:vouchers

Crear Cupón

POST /api/agent/v1/partner/vouchers

Alcance: write:vouchers

Actualizar Cupón

PUT /api/agent/v1/partner/vouchers/{id}

Alcance: write:vouchers

Eliminar Cupón

DELETE /api/agent/v1/partner/vouchers/{id}

Alcance: write:vouchers

Validar Código de Cupón

POST /api/agent/v1/partner/vouchers/validate

Alcance: write:vouchers

Comprueba si un código de cupón es válido y se puede canjear sin canjearlo realmente.

Usa campos canónicos de cupones: type, value, valid_from, valid_until, max_uses_total, y max_uses_per_member. El identificador code es opcional en la creación y se genera automáticamente cuando se omite.

Validar cuerpo de la solicitud (request body):

  • code
  • member_identifier
  • club_id
  • order_amount (opcional, unidades menores)

Validar campos de respuesta:

  • valid, voucher_id, code, name, type, value, currency, discount_amount, capped, original_amount, final_amount, times_used, remaining_uses, valid_until

Canjear Cupón

POST /api/agent/v1/partner/vouchers/{id}/redeem

Alcance: write:vouchers

Cuerpo de solicitud de canje (Redeem request body):

  • member_identifier
  • order_amount (opcional, unidades menores)
  • order_reference (opcional)

Campos de respuesta de canje:

  • voucher_id, code, type, member_id, discount_amount, points_awarded, remaining_uses, redemption_id

Niveles

Los niveles de membresía definen niveles VIP con multiplicadores y beneficios.

Listar Niveles

GET /api/agent/v1/partner/tiers

Alcance: read o write:tiers

Obtener Nivel

GET /api/agent/v1/partner/tiers/{id}

Alcance: read o write:tiers

Crear Nivel

POST /api/agent/v1/partner/tiers

Alcance: write:tiers

Usa el campo canónico de umbral de nivel: points_threshold.

Actualizar Nivel

PUT /api/agent/v1/partner/tiers/{id}

Alcance: write:tiers

Eliminar Nivel

DELETE /api/agent/v1/partner/tiers/{id}

Alcance: write:tiers

Personal

Administra a los miembros del personal que procesan transacciones en las ubicaciones de los socios.

Listar Personal

GET /api/agent/v1/partner/staff

Alcance: read o write:staff

Obtener Miembro del Personal

GET /api/agent/v1/partner/staff/{id}

Alcance: read o write:staff

Crear Miembro del Personal

POST /api/agent/v1/partner/staff

Alcance: write:staff

Usa el campo canónico de asignación de personal: club_id.

Las respuestas de lista/detalle del personal exponen: id, club_id, club_name, name, email, locale, time_zone, number_of_times_logged_in, last_login_at, created_at, updated_at, avatar.

Actualizar Miembro del Personal

PUT /api/agent/v1/partner/staff/{id}

Alcance: write:staff

Eliminar Miembro del Personal

DELETE /api/agent/v1/partner/staff/{id}

Alcance: write:staff

Manejo de Errores

Entendiendo las respuestas de error estructuradas y estrategias de reintento.

Cada respuesta de la API de Agente sigue una estructura predecible. Las respuestas de éxito y de error usan el mismo formato de envoltura, haciéndolas fáciles de analizar programáticamente — crítico para agentes de inteligencia artificial y herramientas de automatización.

Envoltura de Respuesta

Respuesta Exitosa

{
  "error": false,
  "data": {
    "id": "9e1a...",
    "name": "Downtown Club"
  }
}

Las respuestas de listas paginadas incluyen metadatos de paginación:

{
  "error": false,
  "data": [...],
  "pagination": {
    "current_page": 1,
    "per_page": 25,
    "total": 42
  }
}

Todas las respuestas incluyen encabezados de límite de tasa:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1741260060

Respuesta de Error

{
  "error": true,
  "code": "VALIDATION_FAILED",
  "message": "The request data did not pass validation.",
  "retry_strategy": "fix_request",
  "details": {
    "errors": {
      "card_id": ["The card_id field is required."],
      "purchase_amount": ["The purchase_amount must be at least 0.01."]
    }
  }
}

Campos de Error

CampoTipoDescripción
errorbooleanSiempre true para respuestas de error.
codestringCódigo de error legible por máquina (ej. AUTH_INVALID_KEY).
messagestringDescripción legible por humanos.
retry_strategystringCómo debe manejar este error el que llama.
detailsobjectContexto adicional opcional (errores de validación, límites, etc.).

Estrategias de Reintento

El campo retry_strategy le dice a los agentes de IA y herramientas de automatización cómo manejar el error:

EstrategiaSignificadoQué Hacer
no_retryLa solicitud es fundamentalmente inválida.Corrige la integración. Clave incorrecta, alcance incorrecto, recurso no encontrado.
fix_requestEl cuerpo de la solicitud tiene errores.Corrige los datos de la solicitud y vuelve a intentar (errores de validación).
backoffProblema temporal.Reintenta con retroceso exponencial (exponential backoff). Límite de tasa alcanzado, error de servidor.
contact_supportRequiere intervención humana.Característica deshabilitada, límite alcanzado, cuenta desactivada.

Ejemplos de Estrategias de Reintento

no_retry — No vuelvas a intentar. La solicitud está mal.

{
  "code": "AUTH_INVALID_KEY",
  "retry_strategy": "no_retry"
}

fix_request — Rectifica los datos y vuelve a intentar.

{
  "code": "VALIDATION_FAILED",
  "retry_strategy": "fix_request",
  "details": {
    "errors": {
      "card_id": ["The card_id field is required."]
    }
  }
}

backoff — Espera y reintenta con retroceso exponencial.

{
  "code": "INTERNAL_ERROR",
  "retry_strategy": "backoff"
}

Práctica recomendada de backoff: 1s → 2s → 4s → 8s → 16s → stop.

contact_support — Se requiere intervención humana.

{
  "code": "FEATURE_DISABLED",
  "retry_strategy": "contact_support",
  "details": {
    "permission": "loyalty_cards_permission"
  }
}

Referencia de Códigos de Error

Errores de Autenticación (401/403)

CódigoHTTPReintentoDescripción
AUTH_MISSING_KEY401no_retryNo hay encabezado X-Agent-Key
AUTH_INVALID_KEY401no_retryEl formato de la clave es incorrecto o no coincide el hash
AUTH_KEY_REVOKED401no_retryLa clave ha sido desactivada
AUTH_KEY_EXPIRED401no_retryLa clave ya pasó su fecha de expiración
AUTH_OWNER_INACTIVE403contact_supportCuenta del propietario desactivada
AUTH_ANONYMOUS_MEMBER403no_retryLos miembros anónimos no pueden usar claves
AUTH_INSUFFICIENT_SCOPE403no_retryLa clave carece del alcance requerido
AUTH_WRONG_ROLE403no_retryEl rol de la clave no coincide con el endpoint

Errores de Validación (422)

CódigoHTTPReintentoDescripción
VALIDATION_FAILED422fix_requestEl cuerpo de la solicitud no superó la validación
LIMIT_REACHED422contact_supportLímite del recurso de socio alcanzado

Errores de Recurso (404)

CódigoHTTPReintentoDescripción
NOT_FOUND404no_retryRecurso no encontrado o no pertenece al socio

Errores de Permisos (403)

CódigoHTTPReintentoDescripción
FEATURE_DISABLED403contact_supportCaracterística no habilitada para el socio

Errores de Servidor (500)

CódigoHTTPReintentoDescripción
INTERNAL_ERROR500backoffError inesperado del servidor

Limitación de Tasa (429)

CódigoHTTPReintentoDescripción
RATE_LIMITED429backoffLímite de solicitudes por minuto excedido

La respuesta 429 incluye detalles y encabezados adicionales:

Retry-After: 23
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1741260023

Revisa la sección de Autenticación — Límites de Tasa para detalles completos.

Para Desarrolladores de Agentes de IA

Si estás construyendo un agente de IA que consume esta API, aquí se explica cómo manejar los errores programáticamente:

response = call_agent_api(endpoint, data)

if response["error"]:
    match response["retry_strategy"]:
        case "no_retry":
            log_error(response["code"], response["message"])
            raise PermanentError(response["message"])
        case "fix_request":
            fix_fields(response["details"]["errors"])
            retry_with_fixed_data()
        case "backoff":
            wait_exponential(attempt)
            retry()
        case "contact_support":
            notify_human(response["message"])
            raise NeedsHumanIntervention(response["message"])

Endpoints de Miembro

Referencia completa de endpoints para operaciones de agente con alcance de miembro.

Todos los endpoints de miembro tienen el prefijo /api/agent/v1/member y requieren una clave con alcance de miembro (rl_member_).

Patrones Comunes

Todos los endpoints de miembro comparten estos comportamientos:

  • Alcance propio — Una clave de miembro solo puede acceder a los datos de su propio titular. No es posible el acceso cruzado entre miembros.
  • Principalmente de solo lectura — Los miembros pueden ver su saldo, tarjetas, transacciones y recompensas. El acceso de escritura se limita a las actualizaciones de perfil y a los reclamos de recompensas.
  • Solicitud/respuesta JSON — Envía y recibe application/json.
  • Paginación — Los endpoints de lista admiten los parámetros de consulta ?page=1&per_page=25.

Diferencias Clave con las Claves de Socio

AspectoClave de SocioClave de Miembro
Prefijorl_agent_rl_member_
Expiración por defectoNinguna (permanente)90 días
Máx. de clavesConfigurable por administrador (por defecto: 5)Fijo en 3
Límite de tasa máximo1,000 RPM120 RPM (automático)
Preajustes de alcanceView Only, POS, Full Management, FullView Only, Full Access

Perfil

Obtener Perfil

GET /api/agent/v1/member/profile

Alcance: read

Devuelve la propia información de perfil del miembro.

{
  "data": {
    "id": "member-uuid",
    "name": "Jane Smith",
    "email": "jane@example.com",
    "locale": "en_US",
    "unique_identifier": "454-925-184-086",
    "avatar": null,
    "is_anonymous": false,
    "has_interacted": true,
    "first_interaction_at": "2026-01-15T10:30:00+00:00",
    "created_at": "2026-01-01T00:00:00+00:00"
  }
}

Actualizar Perfil

PUT /api/agent/v1/member/profile

Alcance: write:profile

Solo el nombre (name) y el idioma (locale) pueden actualizarse mediante la API. Los cambios de correo electrónico requieren el flujo de autenticación completo mediante el panel del miembro.

{
  "name": "Jane Updated",
  "locale": "fr_FR"
}

Saldo y Tarjetas

Resumen de Billetera (Todos los Saldos)

GET /api/agent/v1/member/balance

Alcance: read

Devuelve los saldos de todas las tarjetas de fidelidad inscritas en una sola llamada. Este es el endpoint principal para los widgets de "resumen de billetera" (wallet overview) en tiendas web.

Las respuestas dirigidas al miembro omiten intencionalmente la información del club. Los clubes son estructuras internas de enrutamiento y acceso del personal; los miembros interactúan directamente con las tarjetas.

{
  "data": [
    {
      "card_id": "card-uuid-1",
      "card_title": "Coffee Rewards",
      "balance": 250,
      "currency": "points"
    },
    {
      "card_id": "card-uuid-2",
      "card_title": "VIP Club",
      "balance": 1200,
      "currency": "points"
    }
  ]
}

Listar Tarjetas

GET /api/agent/v1/member/cards

Alcance: read

Lista paginada de tarjetas inscritas con mayor nivel de detalle que /balance, incluyendo saldos específicos para el miembro y campos de presentación.

Obtener Tarjeta

GET /api/agent/v1/member/cards/{id}

Alcance: read

Devuelve los detalles y el saldo del miembro para una sola tarjeta. Devuelve un error 404 si el miembro no está inscrito en dicha tarjeta.

Historial de Transacciones

Todas las Transacciones

GET /api/agent/v1/member/transactions

Alcance: read

Devuelve el historial completo de transacciones del miembro en todas las tarjetas. Ordenado por el más reciente primero y también paginado.

Transacciones por Tarjeta

GET /api/agent/v1/member/transactions/{cardId}

Alcance: read

Filtra el historial de transacciones de una tarjeta específica. Devuelve un error 404 si el miembro no está inscrito en esta tarjeta.

Recompensas

Navegar por Recompensas Disponibles

GET /api/agent/v1/member/rewards

Alcance: read

Enumera todas las recompensas disponibles en las tarjetas inscritas del miembro. Cada recompensa incluye:

  • Si el miembro puede costearla (según su saldo actual).
  • El mejor saldo del miembro entre las tarjetas vinculadas.
  • El coste en puntos de la recompensa.

Esto permite crear mensajes como "Necesitas X puntos más" en las interfaces de las webshops.

Reclamar una Recompensa

POST /api/agent/v1/member/rewards/{id}/claim

Alcance: write:redeem

Envía una solicitud de reclamo de recompensa. Esto no deduce directamente los puntos — el personal debe confirmar el canje mediante el panel de socios o la API de agente de socio.

Esto preserva el flujo de la plataforma según el cual "el personal confirma el canje", lo cual previene el fraude de autoservicio en ubicaciones físicas.

Respuesta de Éxito (200):

{
  "data": {
    "status": "claim_submitted",
    "reward_id": "reward-uuid",
    "reward_title": "Free Coffee",
    "points_required": 100,
    "card_id": "card-uuid",
    "card_title": "Coffee Rewards",
    "current_balance": 250,
    "message": "Your claim has been submitted. A staff member will confirm it."
  }
}

Saldo Insuficiente (422):

{
  "error": true,
  "code": "INSUFFICIENT_BALANCE",
  "message": "Not enough points. You have 50, but this reward requires 100.",
  "details": {
    "balance": 50,
    "required": 100,
    "deficit": 50
  }
}

Descubrimiento

Los miembros descubren tarjetas de dos formas:

  • Navegar por la página inicial — Los recursos activos cuyo ajuste is_visible_by_default está habilitado aparecen de forma pública.
  • Códigos QR / enlaces compartidos — Se puede hallar cualquier tarjeta de fidelidad, tarjeta de sellos o cupón escaneando un código QR o abriendo un enlace directo.

Navegar Tarjetas Descubribles

GET /api/agent/v1/member/discover

Alcance: read

Devuelve todas las tarjetas (de fidelidad, sellos y cupones) actualmente visibles en la página de inicio. Incluye el estado de inscripción del miembro y el saldo de cada tarjeta que sigue.

{
  "data": {
    "cards": [
      {
        "type": "loyalty_card",
        "id": "card-uuid",
        "name": "Barista Club",
        "title": "Coffee Rewards",
        "description": "Earn points on every cup",
        "currency": "USD",
        "bg_color": "#C49A00",
        "text_color": "#ffffff",
        "is_following": true,
        "balance": 37519,
        "rewards_count": 4
      }
    ],
...

Resolver URL o Identificador

POST /api/agent/v1/member/discover/resolve

Alcance: read

Resuelve una URL de tarjeta (desde un escaneo QR o enlace) o identificador en detalles completos. Endpoint principal para flujos de escaneo usando códigos QR.

Formatos de entrada soportados:

FormatoEjemplo
URL completa de tarjetahttps://example.com/en-us/card/{uuid}
URL de enlace para seguirhttps://example.com/en-us/follow/{uuid}
URL de tarjeta de selloshttps://example.com/en-us/stamp-card/{uuid}
URL de cupónhttps://example.com/en-us/voucher/{uuid}
UUID sin procesar019cc3a5-51cb-7315-97e1-69147399f94d
Identificador único344-319-665-971

Petición (URL):

{
  "url": "https://example.com/en-us/card/019cc3a5-51cb-7315-97e1-69147399f94d"
}

O mediante código identificador:

{
  "identifier": "344-319-665-971"
}

Seguir una Tarjeta

POST /api/agent/v1/member/discover/follow

Alcance: write:profile

Guarda una tarjeta de fidelidad de manera segura a la colección de "Mis Tarjetas" del miembro. Idempotente (seguir tarjetas que ya sigues es una operación sin efecto).

{
  "card_id": "card-uuid"
}

Dejar de Seguir una Tarjeta

POST /api/agent/v1/member/discover/unfollow

Alcance: write:profile

Remueve una tarjeta de la colección de "Mis Tarjetas".

{
  "card_id": "card-uuid"
}

Preajustes de Alcance

Las claves de miembro usan preajustes de alcance simplificados:

PreajusteAlcancesCaso de Uso
View OnlyreadComprobaciones de saldo, navegación y revisión de recompensas
Full Accessread, write:redeem, write:profileFuncionalidad de billetera completamente operativa

Para Integraciones de Tiendas Web

La API de agente de miembro se diseñó para el flujo de punto de venta (POS) y tiendas online (eCommerce):

  • Al iniciar sesión: Usa GET /member/balance para mostrar el resumen de los saldos generales.
  • En la página de producto: Usa GET /member/rewards para promocionar mensajes como "Usa 100 puntos y obtén 10% de descuento".
  • En la caja: Combina procesos con la API de socio para otorgar los correspondientes puntos al confirmar una compra final.
  • Después de la compra: Muestra el saldo actualizado y validado.

Revisa la sección de Autenticación sobre cómo usar ambas claves de la manera ideal y combinada en tus proyectos.

Endpoints de Administrador

Administración de la plataforma mediante la API de Agente — gestión de socios, búsqueda de miembros y analíticas.

Las claves de agente de administrador otorgan a los administradores de la plataforma acceso programático para gestionar socios, ver datos de miembros en toda la plataforma y obtener analíticas — ideal para integraciones CRM, paneles de facturación SaaS y herramientas de monitoreo.

URL Base

/api/agent/v1/admin/

Todos los endpoints requieren una clave de agente de tipo administrador (rl_admin_***).

Socios

Listar Socios

GET /api/agent/v1/admin/partners

Alcance: read:partners

ParámetroTipoDescripción
is_activebooleanFiltrar por estado activo
searchstringBuscar por nombre o correo electrónico
per_pageintegerResultados por página (1–100, por defecto 25)
pageintegerNúmero de página

Respuesta:

{
  "error": false,
  "data": [
    {
      "id": "uuid",
      "name": "Coffee Corner",
      "email": "partner@example.com",
      "locale": "en_US",
      "currency": "USD",
      "time_zone": "America/New_York",
      "is_active": true,
      "avatar": null,
      "created_at": "2026-01-15T10:00:00Z"
    }
  ],
  "pagination": {
    "current_page": 1,
    "last_page": 3,
    "per_page": 25,
    "total": 72
  }
}

Obtener Socio

GET /api/agent/v1/admin/partners/{id}

Alcance: read:partners

Devuelve el perfil del socio junto con sus permisos y conteos de uso.

{
  "error": false,
  "data": {
    "id": "uuid",
    "name": "Coffee Corner",
    "email": "partner@example.com",
    "is_active": true,
    "permissions": {
      "loyalty_cards_permission": true,
      "loyalty_cards_limit": -1,
      "stamp_cards_permission": true,
      "stamp_cards_limit": -1,
      "vouchers_permission": true,
      "agent_api_permission": true,
      "agent_keys_limit": 10
    },
    "usage": {
      "loyalty_cards": 3,
      "stamp_cards": 1,
      "vouchers": 5,
      "rewards": 8,
      "staff_members": 2
    }
  }
}

Actualizar Permisos

PATCH /api/agent/v1/admin/partners/{id}/permissions

Alcance: write:partners

Actualiza los permisos de funciones y los límites de uso de un socio. Ideal para cambios de nivel de facturación (tiers) de SaaS.

CampoTipoDescripción
loyalty_cards_permissionbooleanSi el socio puede crear tarjetas de fidelidad
loyalty_cards_limitintegerMáx. tarjetas de fidelidad (-1 = ilimitado)
stamp_cards_permissionbooleanSi el socio puede crear tarjetas de sellos
stamp_cards_limitintegerMáx. tarjetas de sellos (-1 = ilimitado)
vouchers_permissionbooleanSi el socio puede crear cupones
vouchers_limitintegerMáx. cupones (-1 = ilimitado)
rewards_limitintegerMáx. recompensas (-1 = ilimitado)
staff_members_limitintegerMáx. personal (-1 = ilimitado)
email_campaigns_permissionbooleanSi el socio puede enviar campañas de correo
agent_api_permissionbooleanSi el socio puede crear claves de agente
agent_keys_limitintegerMáx. claves de agente (-1 = ilimitado, por defecto: 5)
cards_on_homepagebooleanSi las tarjetas del socio aparecen en la página principal

Petición (JSON):

{
  "agent_api_permission": true,
  "agent_keys_limit": 10,
  "loyalty_cards_limit": 5
}

Activar / Desactivar Socio

POST /api/agent/v1/admin/partners/{id}/activate
POST /api/agent/v1/admin/partners/{id}/deactivate

Alcance: write:partners

Alterna la marca is_active del socio. Cuando se desactiva, todas las claves de agente del socio se vuelven inválidas (el middleware de autenticación verifica la propiedad de estado activo).

Miembros (Solo Lectura)

El acceso a miembros por parte del administrador es estrictamente de solo lectura. El ciclo de vida de los miembros se gestiona a través de transacciones de socios (inscripción automática) o el autoservicio del propio miembro.

Listar Miembros

GET /api/agent/v1/admin/members

Alcance: read:members

ParámetroTipoDescripción
searchstringBuscar por nombre, correo electrónico o identificador único
is_activebooleanFiltrar por estado activo
per_pageintegerResultados por página (1–100, por defecto 25)

Obtener Miembro

GET /api/agent/v1/admin/members/{id}

Alcance: read:members

Devuelve el perfil del miembro junto con los saldos de todas sus tarjetas.

{
  "error": false,
  "data": {
    "id": "uuid",
    "name": "Jane Doe",
    "email": "jane@example.com",
    "unique_identifier": "846-346-383-611",
    "is_active": true,
    "is_anonymous": false,
    "card_balances": [
      {
        "card_id": "uuid",
        "card_title": "Coffee Rewards",
        "club_name": "General",
        "balance": 250,
        "currency": "USD"
      }
    ]
  }
}

Analíticas

Resumen de la Plataforma

GET /api/agent/v1/admin/analytics/overview

Alcance: read:analytics

Devuelve métricas globales agregadas de la plataforma.

{
  "error": false,
  "data": {
    "total_partners": 45,
    "active_partners": 42,
    "total_members": 12500,
    "total_cards": 38,
    "total_stamp_cards": 15,
    "total_vouchers": 92,
    "transactions_today": 340,
    "transactions_this_week": 2100,
    "transactions_this_month": 8500
  }
}

Métricas por Socio

GET /api/agent/v1/admin/analytics/partners/{id}

Alcance: read:analytics

Desglose de uso detallado para un socio específico.

{
  "error": false,
  "data": {
    "partner_id": "uuid",
    "partner_name": "Coffee Corner",
    "is_active": true,
    "loyalty_cards": 3,
    "stamp_cards": 1,
    "vouchers": 5,
    "rewards": 8,
    "staff_members": 2,
    "total_transactions": 15420,
    "transactions_today": 45,
    "total_members_enrolled": 1250
  }
}

Alcances de Administrador

AlcanceOtorga
read:partnersListar y visualizar todos los socios
write:partnersCrear, actualizar, activar/desactivar socios
read:membersBúsqueda y detalles de miembros de toda la plataforma
read:analyticsAnalíticas de la plataforma y por socio
adminTodo lo anterior (súper-alcance)

Recetas de Integración

Sincronización CRM

# Sincronizar lista de socios al CRM
GET /api/agent/v1/admin/partners?is_active=true

# Enviar métricas a un panel de monitoreo
GET /api/agent/v1/admin/analytics/overview

Cambio de Nivel de Facturación SaaS

# Actualizar el socio al nivel premium
PATCH /api/agent/v1/admin/partners/{id}/permissions
{
  "loyalty_cards_limit": -1,
  "stamp_cards_limit": -1,
  "vouchers_limit": -1,
  "agent_api_permission": true,
  "agent_keys_limit": 20
}

Búsqueda de Miembros

# Buscar a un miembro en todos los socios
GET /api/agent/v1/admin/members?search=jane@example.com

# Obtener los saldos de sus tarjetas
                

Registro de Auditoría

Cómo se rastrean y monitorean las solicitudes de la API del agente.

Cada solicitud autenticada de la API del Agente se registra automáticamente en los Registros de Actividad (Activity Logs). Esto proporciona un rastro de auditoría completo de todas las operaciones de máquina a máquina — crítico para la seguridad, el cumplimiento normativo y la depuración de errores.

Cómo Funciona

El registro de auditoría se ejecuta en la fase de terminación (después de que la respuesta ya ha sido enviada al cliente). Esto significa:

  • Impacto de latencia cero — El cliente recibe su respuesta sin esperar a que el registro sea escrito en la base de datos.
  • Automático — No se requiere configuración. Toda solicitud autenticada es registrada sin excepción.
  • Integrado — Utiliza el mismo sistema global de Registros de Actividad que todos los demás eventos de la plataforma.

Qué se Registra

Cada solicitud de agente crea una entrada de registro de actividad con:

CampoEjemploDescripción
Nombre del Registroagent_apiCategoría útil para filtrado en búsquedas
Eventoagent_read, agent_write, agent_deleteDerivado del método HTTP de la petición
DescripciónAgent GET /api/agent/v1/partner/clubs → 200Resumen legible por humanos
CausantePartner "Coffee Corner"El propietario de la clave (quién)
SujetoAgentKey "POS Terminal 1"La clave que fue utilizada (cuál)
Endpoint/api/agent/v1/partner/clubsRuta completa de la solicitud
MétodoGETVerbo y método HTTP usado
Código de Estado200Estado de la respuesta del servidor
Prefijo de Claverl_agent_a8f3k2m1Identificación clara de la clave
Tipo de PropietarioPartnerRol del titular de la clave
Alcances["read", "write:transactions"]Permisos asignados a la clave
Dirección IP192.168.1.100IP original del cliente
Agente de Usuariocurl/8.1.2Identificador del cliente
Marca de Tiempo2026-03-06 10:15:32Momento exacto en que ocurrió la solicitud

Tipos de Evento

Los eventos se derivan del método HTTP en el registro base de datos:

Método HTTPEventoDescripción
GETagent_readRecuperación o consulta de datos
POSTagent_writeCreación u operación
PUT / PATCHagent_writeActualización y edición
DELETEagent_deleteEliminación de entidades o recursos

Visualización de Registros de Agente

La actividad de la API del Agente aparece en los Registros de Actividad globales junto con todos los demás eventos de la plataforma.

En el Panel del Socio

Los socios ven su propia actividad de la API del agente bajo ActividadRegistros de Actividad:

  • Filtro de categoría → Selecciona Claves de Agente para mostrar solo las solicitudes de los agentes.
  • Filtro de evento → Selecciona Agent Read, Agent Write o Agent Delete.
  • Filtro de sujeto → Selecciona una Clave de Agente para ver qué clave específica fue utilizada.

Los eventos del agente se muestran con insignias visuales descriptivas: 👁 Lectura (información), ⚡ Escritura (principal), ❌ Eliminación (peligro).

En el Panel de Administración

Los administradores ven toda la actividad de la API del agente a través de la totalidad de socios:

  • Los mismos filtros mostrados arriba, además de un filtrado por socio original (causante).
  • Sumamente útil para monitorear el uso general de la API en toda la plataforma e investigar integraciones o problemas.

Revisa la sección Ver Registros de Actividad general de Fideko para revisar toda la interfaz de filtrado avanzada.

Qué NO se Registra

Por razones fundamentales de seguridad, privacidad y rendimiento de los procesos:

  • Los cuerpos de solicitud no se registran (podrían contener PII o datos personales sensibles del cliente final).
  • Los cuerpos de respuesta no se registran (podrían ser pesados, grandes listados JSON, y perjudicarían la DB).
  • Los intentos de autenticación fallidos no se registran aquí (la solicitud nunca llega al middleware que rastrea las solicitudes de agentes autenticadas — AuthenticateAgent los rechaza mucho antes).
  • Detalles del chequeo de salud — Los chequeos a /health se registran como cualquier otra solicitud en su bitácora de red, pero no contienen datos confidenciales inherentes a la aplicación.

Patrones de Monitoreo

Detectar Actividad Inusual

PatrónLo Que Podría Significar
Alto volumen de eventos agent_deleteEliminación masiva inesperada
Solicitudes desde IPs extrañas y desconocidasLa clave y el servidor podrían haber sido comprometidos
Numerosos códigos de estado 403 simultáneosLa clave se está utilizando desesperadamente más allá de su alcance o intentando accesos prohibidos
Solicitudes constantes fuera del horario laboralSistema automatizado mal configurado o uso no autorizado
Pico repentino en el volumen de solicitudesError en el bucle de integración del cliente (abuso de API)

Auditoría Tras Compromiso de Clave

Si sospechas que una clave ha sido expuesta o vulnerada, sigue estos pasos de manera rigurosa y rápida:

  1. Revoca la clave inmediatamente desde tu panel (revisa Gestión de Claves).
  2. Filtra los Registros de Actividad de manera global buscando el prefijo de esa clave específica.
  3. Revisa a qué endpoints se llamó minuciosamente y a qué datos se intentó acceder malintencionadamente.
  4. Si amerita, crea una nueva clave con los mismos alcances únicamente después de verificar la solución o el origen del fallo y utilízala para tu integración legítima.

Para Desarrolladores (Laravel)

Los registros de agente usan el mismo modelo de Activity que todos los demás registros de la plataforma y el ecosistema en Laravel. Si estás construyendo analíticas, flujos o rastreos personalizados dentro del servidor:

use App\Models\Activity;

// Obtener todos los registros de la API de agente
$agentLogs = Activity::agentApi()->latest()->get();

// Obtener registros de agente para un socio o usuario específico
$partnerLogs = Activity::agentApi()
    ->where('causer_id', $partnerId)
    ->where('causer_type', Partner::class)
    ->latest()
    ->get();

// Filtra para obtener solamente operaciones de escritura o de eliminación exclusivas del agente
$writes = Activity::agentApi()
    ->forEvents(['agent_write', 'agent_delete'])
    ->latest()
    ->get();

Descubrimiento de Herramientas

Descubre operaciones de API disponibles dinámicamente como definiciones de herramientas legibles por máquina.

El endpoint /tools permite a tu agente descubrir por sí mismo qué puede hacer. Éste devuelve definiciones de herramientas limitadas estrictamente al rol y a los permisos de la clave de acceso actualmente autenticada — no se requiere configuración manual alguna de dichas herramientas.

Cómo Funciona

  • 1. El agente se inicia:
    • Lee agent-api.json desde la base de datos o almacenamiento.
    • Filtra de inmediato por el Rol de la clave (e.g., admin, partner, member).
    • Filtra por los Alcances (Scopes) precisos de esa clave.
    • Filtra por los Permisos vigentes y comprueba que ninguna funcionalidad superior haya sido revocada.
    • Formatea la lista de retornos para coincidir con tu marco de trabajo elegido (OpenAI, Anthropic, etc.).
  • 2. Disposición: El servidor pasa de forma segura la lista de herramientas disponibles al proveedor del LLM que se haya elegido para actuar en la solicitud.
  • 3. Invocación: Cuando el LLM elige llamar a alguna herramienta, sus llamadas son enrutadas como invocaciones HTTP reales (POST, GET, PUT) hacia la API de Agente como correspondientes.

En resumen, tu agente llama a /tools una sola vez al inciar labores y, luego, confía en usar y reciclar esas definiciones de esquema devueltas para todas sus interacciones subsiguientes.

Petición y Respuesta

GET /api/agent/v1/tools?format=openai

Acepta un parámetro principal a través de la solicitud de búsqueda:

ParámetroTipoPor DefectoDescripción
formatstringgenericFormato de salida esperado: openai, anthropic, mcp o generic.

Respuesta:

{
  "error": false,
  "tools": [ ... ],
  "meta": {
    "role": "partner",
    "format": "openai",
    "tool_count": 46,
    "cached": false
  }
}

La sección superior meta sirve informativamente e incluye cuántas herramientas netas están disponibles para la clave actual y si esa respuesta en particular provino desde la caché de Fideko o tuvo que ser procesada en el momento.

Formatos Soportados

OpenAI Function Calling (?format=openai)

Muestra las herramientas en el formato function calling oficial de OpenAI. Cada herramienta se expone como un objeto de tipo "función" que dispone de estructura con información vital de variables requeridas y de opción múltiple.

[
  {
    "type": "function",
    "function": {
      "name": "list_loyalty_cards",
      "description": "Lista todas las tarjetas de fidelidad para este socio\n...\n\nHTTP: GET /api/agent/v1/partner/cards",
      "parameters": {
        "type": "object",
        "properties": {
          "page": { "type": "integer", "default": 1 },
          "per_page": { "type": "integer", "default": 25 }
        },
        "required": []
      }
    }
  }
]

Anthropic/Claude Tool Use (?format=anthropic)

Devuelve todas las herramientas en su formato tool use especial estandarizado. Cada herramienta provee un name, una description y un bloque interno input_schema.

[
  {
    "name": "record_purchase",
    "description": "Registra una compra y otorga puntos de lealtad\n...\n\nHTTP: POST /api/agent/v1/partner/transactions/purchase",
    "input_schema": {
      "type": "object",
      "properties": { ... },
      "required": ["card_id", "member_identifier", "purchase_amount"]
    }
  }
]

MCP (?format=mcp)

Devuelve las herramientas envueltas para el estándar Model Context Protocol. En específico, va albergadas en una macro estructura { "tools": [...] } y añade el respectivo inputSchema a lo largo de cada herramienta para mantener la compatibilidad.

Generic JSON Schema (?format=generic)

Devuelve un valioso formato muy completo y auto-documentado contando con method, path, scopes y todos sus esquemas de parámetros a través de entidades o campos denominados de primera clase. Es sumamente recomendable y adecuado si haces integraciones de bajo flujo en Zapier / Make / n8n y en la mayoría abrumadora de plataformas de trabajo que aceptan consumir y manipular datos JSON brutos.

{
  "api_name": "Reward Loyalty Agent API",
  "api_version": "1.0.0",
  "base_url": "/api/agent/v1",
  "auth": {
    "type": "api_key",
    "header": "X-Agent-Key"
  },
  "tools": [
    {
      "name": "list_loyalty_cards",
      "description": "Lista todas las tarjetas de fidelidad para este socio",
      "method": "GET",
      "path": "/api/agent/v1/partner/cards",
      "required_scopes": ["read", "write:cards"],
      "parameters": { ... }
    }
  ]
}

Conservación de Esquemas

Los parámetros que recubren las herramientas logran exitosamente preservar toda su compleja estructura y reglas provenientes de la especificación madre original del servidor (OpenAPI Schema). Esto incluye:

  • Campos traducibles — Aceptan un literal en cadena simple o, alternativamente, un objeto JSON enlazado por idioma y región (e.g. {"en": "...", "es": "..."}).
  • Objetos anidados — Entidades jerárquicas como diccionarios, acompañados de múltiples sub-propiedades exclusivas.
  • Arreglos (Arrays) — Soporte para matrices ordenadas y listas de parámetros iterables bajo la etiqueta del esquema items.
  • Limitaciones Semánticas — Palabras clave para la validación automática desde el modelo original hacia el LLM, como: Enums predefinidos, patrones regex, reglas maximos / mínimos y formatos estandarizados (como uri, base64 o uuid).

Todo el esfuerzo arquitectónico mencionado asegura con una enorme eficacia que el modelo al que te encomiendes (Tu LLM de elección) sea instruido detalladamente logrando enrutar su propia interacción sin erradicar en interpretaciones pobres ni datos erróneos.

Filtrado por Rol, Alcance y Permiso

El endpoint /tools solo devuelve un número y formato limitado de herramientas al que sabe legítimamente que la clave bajo uso tiene derechos para consumirla exitosamente de acuerdo con tres sofisticadas capas restrictivas.

Filtrado de Rol

  • Claves de Socio: Ven endpoints de socio + chequeo de salud general (hasta un total de 46 herramientas).
  • Claves de Administrador: Ven endpoints de administrador + chequeos visuales de salud (hasta un total de 10 herramientas).
  • Claves de Miembro: Identifican perfiles de cuentas cerradas, limitados a miembros + status check base de salud (hasta un total de 14 posibles herramientas).

Filtrado de Alcance

Si la clave está delimitada por alcances cortos y parciales (Ej: Únicamente read o vista simple), la respuesta únicamente emitirá los métodos GET limitando severamente la huella técnica. Las claves equipadas con el súper alcance absoluto del modelo maestro o administrador verán absolutamente y sin exclusión, cualquier endpoint pertinente que concierna a la naturaleza entera de su rol.

Filtrado de Permisos (Sólo Socio)

Las claves de socio están sujetas a dos chequeos severos más que pueden recortar sus resultados devueltos:

  • Acceso API de Agente Absoluto: Si agent_api_permission se encuentra marcado en falso o desactivado desde su administración central, la petición de la API abortará devoviendo la alerta de 403 FEATURE_DISABLED con la orden clara de "Acceso de API de Agente Revocado". Las herramientas retornarán una matriz vacía sin dar más detalles.
  • Filtrado por Funciones Específicas: Si el socio retiene los accesos a la API general temporalmente y legalmente preestablecido, pero de su propio conjunto se ha revocado artificialmente uno o más servicios del backend o plan desahabilitado de pago. Dichos servicios simplemente quedarán en exclusión estricta frente al modelo:
Permiso de Dominio de FunciónEndpoints Excluidos y Bloqueados si ha sido Apagado o Rescindido
loyalty_cards_permissionTodas las validaciones, crud y manejos de puntos o recompensas (10 endpoints ocultos)
stamp_cards_permissionComprobaciones de las tarjetas para colecciones / cupones temporales tipo plantilla (7 endpoints ocultos)
vouchers_permissionExclusión total de redenciones del apartado de Vouchers o vales exclusivos (7 endpoints ocultos)

Exportación CLI

También puedes exportar cómodamente descripciones generales de múltiples escenarios dentro de los parámetros esperados de estas herramientas mediante la consola o terminal del servidor internamente y en tu entorno dev local u otro entorno que permita Laravel.

# Por defecto: formato `generic`, rol de socio
php artisan agent:export-tools

# Formato `openai` para herramientas de tipo administrador (admin endpoints)
php artisan agent:export-tools openai --role=admin

# Formato `anthropic` únicamente referenciado como nivel de miembro final
php artisan agent:export-tools anthropic --role=member

# Herramientas de solo-lectura destinadas a socios en un subformato de lectura (`generic`)
php artisan agent:export-tools generic --role=partner --scopes=read

Cualquier salida de estos mandatos se va a procesar en plano y depositar amigablemente sobre storage/api-docs/agent-tools-{formato_requerido}.json.

Caché

Las definiciones resultantes pueden y van a ser precacheadas sin remordimiento durante bloques exactos de 24 horas por métricas identificadas que incluyan todas sus iteraciones de atributos en simultáneo. Un vaciado y sobreescritura de cachés ocurre rápida, obligatoria y desatendidamente al percibir esto en su motor:

  • La especificación de la OpenAPI original generada y subyacente ha sido sustituida o refaccionada por Laravel.
  • Un intento de obtención a la API cruza por un umbral no listado pidiendo un recálculo bajo demanda sobre un rol específico que difiera en la longitud de caracteres de su Scope o en su árbol de permisos.

No es en ningún sentido y forma, útil o provechoso aplicar órdenes arbitrarias tipo cache:clear.

Códigos de Error

StatusCódigo InternoCausa Subyacente del Error a Nivel Plataforma
403FEATURE_DISABLEDEl acceso a la API del socio ha sido revocado en panel. (agent_api_permission = false)
422INVALID_FORMATEl parámetro format de la petición carece de validez. Se esperaba openai, anthropic, mcp o generic.
503TOOLS_UNAVAILABLELa especificación madre interna sobre la OpenAPI no está lista o es defectuosa en este despliegue.

Ejemplo de Integración con Python y OpenAI

A continuación se demuestra una manera eficiente para vincular el entorno, recuperar e inyectar todas las iteraciones dispuestas en cuestión de un vistazo para el famoso LLM gpt-4:

import openai, requests, json

AGENT_KEY = "rl_agent_..."
BASE_URL = "https://your-domain.com"

# 1. Rutina de arranque, recuperar definiciones e imprimirlas pasándolas al proveedor en "startUp"
resp = requests.get(
    f"{BASE_URL}/api/agent/v1/tools?format=openai",
    headers={"X-Agent-Key": AGENT_KEY}
)

# Convertir o extraer un listado a partir de esta macro matriz provista de un Array base
tools = resp.json()["tools"]

# 2. Paso hacia los modelos o APIs de OpenAI propiamente.
response = openai.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Award 50 points to customer@email.com"}],
    tools=tools,
)

# 3. Invocar la llamada a la herramienta si el LLM nos devolvió parámetros a ejecutar e invocar
tool_call = response.choices[0].message.tool_calls[0]
fn = tool_call.function

# Búsqueda manual de su respectivo HTTP Method predefinido incrustado en nuestra propia descripción provista a GPT en pasos previos.
desc = next(t["function"]["description"] for t in tools if t["function"]["name"] == fn.name)
http_line = [l for l in desc.split("\n") if l.startswith("HTTP:")][0]
method, path = http_line.replace("HTTP: ", "").split(" ", 1)

# Procesar ejecución y reflejar éxito global de todos los eventos solicitados por nuestra IA
result = requests.request(
    method=method,
    url=f"{BASE_URL}{path}",
    headers={"X-Agent-Key": AGENT_KEY},
    json=json.loads(fn.arguments),
)

print(result.json())

Referencia Completa de Endpoints

Todos los endpoints de la API del agente a través de todos los roles — rutas, métodos, alcances, parámetros y campos de respuesta. El panorama completo.

Cada endpoint de la API del agente, leído desde el código fuente.
URL Base: /api/agent/v1 (69 endpoints en total).

Todos los endpoints requieren una clave de agente válida a través del encabezado X-Agent-Key. Consulta la sección de Autenticación para más detalles.

Versión interactiva disponible: Explora la especificación OpenAPI completa en la UI interactiva (Swagger) o descarga el archivo JSON para importarlo en Postman o generadores de código. Para definiciones legibles por máquinas de LLMs, consulta la sección Descubrimiento de Herramientas.

Globales

Chequeo de Salud

GET /health
  • Alcance: Cualquier clave válida (no requiere alcance específico)
  • Rol: Todos (socio, miembro, administrador)

Devuelve la identidad de la clave, alcances, límite de tasa y el estado de conectividad.

Campos de respuesta: status, key.name, key.prefix, key.role, key.scopes[], key.rate_limit, key.expires_at, key.created_at, key.last_used_at, owner.id, owner.name, owner.type

Descubrimiento de Herramientas

GET /tools
  • Alcance: Cualquier clave válida (no requiere alcance específico)
  • Rol: Todos (socio, miembro, administrador)

Devuelve definiciones de herramientas legibles por máquina limitadas al rol y a los permisos de la clave de agente que autentica. Enviar ?format=openai, ?format=anthropic, ?format=mcp o ?format=generic (por defecto) para obtener un resultado apto a integrarlo en el marco de trabajo o lenguaje escogido.

Este endpoint queda excluido por sí solo internamente.

Parámetros de consulta: format (cadena, defecto: generic)

Campos de respuesta: tools[], meta.role, meta.format, meta.tool_count, meta.cached

Endpoints de Socio

Todos los endpoints de socio tienen el prefijo /partner y exigen una clave con rol socio.

Clubes (Clubs)

Unidades organizativas que agrupan y albergan tarjetas, personal y niveles (tiers).

MétodoEndpointAlcanceDescripción
GET/partner/clubsread o write:clubsListar todos los clubes
GET/partner/clubs/{id}read o write:clubsObtener detalle del club
POST/partner/clubswrite:clubsCrear un club
PUT/partner/clubs/{id}write:clubsActualizar un club
DELETE/partner/clubs/{id}write:clubsEliminar un club

Campos de creación (POST): name (requerido), is_active (defecto: true).

Tarjetas de Fidelidad (Loyalty Cards)

MétodoEndpointAlcanceDescripción
GET/partner/cardsread o write:cardsListar tarjetas de fidelidad
POST/partner/cardswrite:cardsCrear una tarjeta de fidelidad
PUT/partner/cards/{id}write:cardsActualizar una tarjeta de fidelidad
DELETE/partner/cards/{id}write:cardsEliminar una tarjeta de fidelidad

Recompensas (Rewards)

MétodoEndpointAlcanceDescripción
GET/partner/rewardsread o write:rewardsListar todas las recompensas
POST/partner/rewardswrite:rewardsCrear una recompensa
PUT/partner/rewards/{id}write:rewardsActualizar una recompensa
DELETE/partner/rewards/{id}write:rewardsEliminar una recompensa

Transacciones

Flujo central de "ganar y canjear" para puntos de venta o CRM.

MétodoEndpointAlcanceDescripción
GET/partner/transactionsread o write:transactionsListar transacciones
POST/partner/transactions/purchasewrite:transactionsRegistrar compra → otorgar puntos
POST/partner/transactions/redeemwrite:rewardsCanjear recompensa → deducir puntos

Miembros

Acceso de lectura a miembros registrados o auto-inscritos bajo las franquicias del socio.

MétodoEndpointAlcanceDescripción
GET/partner/membersreadListar miembros registrados
GET/partner/members/{id}readObtener detalle del miembro
GET/partner/members/{id}/balance/{cardId}readObtener saldo del miembro en una tarjeta

Tarjetas de Sellos (Stamp Cards)

MétodoEndpointAlcanceDescripción
GET/partner/stamp-cardsread o write:stampsListar tarjetas de sellos
POST/partner/stamp-cardswrite:stampsCrear tarjeta de sellos
POST/partner/stamp-cards/{id}/stampswrite:stampsAñadir sellos a miembro
POST/partner/stamp-cards/{id}/redeemwrite:stampsCanjear sello completado

Cupones (Vouchers)

MétodoEndpointAlcanceDescripción
GET/partner/vouchersread o write:vouchersListar cupones
POST/partner/voucherswrite:vouchersCrear un cupón
POST/partner/vouchers/validatewrite:vouchersValidar si un cupón sirve aún
POST/partner/vouchers/{id}/redeemwrite:vouchersCanjear cupón final por el usuario

Niveles (Tiers)

MétodoEndpointAlcanceDescripción
GET/partner/tiersread o write:tiersListar todos los niveles
POST/partner/tierswrite:tiersCrear un nivel VIP o estándar
DELETE/partner/tiers/{id}write:tiersBorrar un nivel

Personal (Staff)

MétodoEndpointAlcanceDescripción
GET/partner/staffread o write:staffListar operadores personal de la tienda
POST/partner/staffwrite:staffCrear cajero / personal
PUT/partner/staff/{id}write:staffActualizar personal
DELETE/partner/staff/{id}write:staffRevocar personal

Endpoints de Miembro

Todos los endpoints de miembro están prefijados con /member y requieren de inicio de sesión con clave rl_member_.

GrupoMétodoEndpointDescripción
PerfilGET/member/profileObtener registro propio
PUT/member/profileActualizar registro
TarjetasGET/member/balanceAgrupación de saldos completos
GET/member/cardsVer mis tarjetas listadas
TransaccionesGET/member/transactionsConsultar mi historial
RecompensasGET/member/rewardsListar recompensas para canjear en tiendas
POST/member/rewards/{id}/claimHacer reclamo explícito que requerirá visita física
DescubrimientoPOST/member/discover/resolveEscanear URL del comercio para añadir club
POST/member/discover/followMover a Mis Tarjetas
POST/member/discover/unfollowOlvidar / desvincular un club

Endpoints de Administrador

Tienen super-privilegios por bloque /admin. Dedicados para el SaaS base.

GrupoMétodoEndpointDescripción
SociosGET/admin/partnersListar dueños de comercios inscritos al plan
PATCH/admin/partners/{id}/permissionsRevocar o reestablecer sus límites de uso
POST/admin/partners/{id}/deactivateBan / Desactivación a un comercio
MiembrosGET/admin/membersVer todos los consumidores universales
AnalíticasGET/admin/analytics/overviewEstadísticas del desempeño principal

Resumen de Conteo de Endpoints

Rol / NivelGETPOSTPUTPATCHDELETETotal
Global22
Socio (Partner)18137745
Miembro (Member)84113
Administrador6219
Subtotal General341981769