Saltar al contenido principal

Claves de API

Cada llamada a la API REST de Joryio se autentica con una clave de API. Las claves se limitan a un único espacio de trabajo, incluyen una lista explícita de permisos y se pueden restringir a un conjunto de direcciones IP.

Todos los endpoints de esta página son relativos a la URL base: https://api-eu1.joryio.com. Consulta Resumen de API.

Crear una clave

  1. Abre el panel de Joryio y ve a Configuración → Claves de API.
  2. Haz clic en Crear clave de API.
  3. Asigna un nombre a la clave y, opcionalmente, una descripción que verán tus compañeros.
  4. Añade opcionalmente una lista de IP permitidas: lista de CIDR o IP individuales separada por comas o espacios. Déjala vacía para permitir cualquier IP.
  5. Marca los permisos que necesita la clave. Elige el conjunto más pequeño que funcione; consulta el catálogo de ámbitos más abajo.
  6. Haz clic en Crear clave.
Se muestra una sola vez

El valor completo de la clave se muestra exactamente una vez, justo después de crearla, y nunca más. Cópialo en tu gestor de secretos (1Password, Vault, AWS Secrets Manager, etc.) antes de cerrar el diálogo. Si lo pierdes, elimina la clave y crea otra: Joryio no puede recuperar la original.

El formato de la clave es jry_live_<aleatorio> para claves de producción y jry_test_<aleatorio> para claves de prueba. El prefijo visible de la clave (jry_live_abc123) aparece en la lista de claves del panel y en los registros de servidor, para que puedas identificar qué hizo cada clave sin exponer el valor completo.

Usar una clave

Envía la clave como token bearer en el encabezado Authorization de cada solicitud:

GET /users/by-user-id/user_123
Host: api-eu1.joryio.com
Authorization: Bearer jry_live_98f31a72…
Content-Type: application/json

Catálogo de ámbitos

Los permisos siguen el formato <recurso>:<verbo>. Los verbos usados son:

VerboSignificadoEjemplo
readEnumera u obtiene registros existentesusers:read, campaigns:read
writeCrea o actualiza registrosusers:write, segments:write
sendActiva una acción de entrega o envíocampaigns:send
deleteElimina registros permanentementeusers:delete, campaigns:delete
trackEnvía eventos de analíticaevents:track
activateInicia, pausa o reanuda un flujo activocanvas:activate
aliasVincula o desvincula identificadores alternativosusers:alias
mergeCombina dos perfiles de usuariousers:merge
exportExporta registros en bloqueusers:export

A continuación está el catálogo público completo; también lo devuelve GET /api-keys/permissions:

Eventos

ÁmbitoQué permite
events:trackEnviar eventos personalizados desde tus servidores o SDK.
events:readConsultar eventos que se han registrado.

Usuarios

ÁmbitoQué permite
users:readConsultar perfiles y atributos de usuario por ID.
users:writeCrear o actualizar atributos y propiedades de usuario.
users:deleteEliminar perfiles de usuario permanentemente (RGPD / derecho de supresión).
users:aliasVincular o desvincular ID externos y alias de email de un usuario.
users:mergeCombinar dos perfiles de usuario en uno.
users:exportExportar perfiles de usuario en bloque para análisis sin conexión.

Campañas

ÁmbitoQué permite
campaigns:readEnumerar campañas y ver su configuración.
campaigns:writeCrear o editar borradores de campaña mediante API.
campaigns:sendActivar el envío de una campaña a un usuario o segmento concreto.
campaigns:deleteEliminar campañas permanentemente de este espacio de trabajo.

Segmentos

ÁmbitoQué permite
segments:readEnumerar segmentos y ver recuentos de pertenencia.
segments:writeCrear o actualizar definiciones de segmentos.
segments:deleteEliminar segmentos y su historial permanentemente.

Recorridos de usuario

ÁmbitoQué permite
canvas:readEnumerar recorridos de usuario e inspeccionar su grafo de pasos.
canvas:writeCrear o editar borradores de recorridos de usuario.
canvas:activateIniciar, pausar o reanudar un recorrido de usuario activo.
canvas:deleteEliminar recorridos de usuario y su historial.

Plantillas

ÁmbitoQué permite
templates:readObtener contenido de plantillas de email, SMS y push.
templates:writeCrear o editar plantillas de mensajes reutilizables.
templates:deleteEliminar plantillas de Brand Studio permanentemente.

Suscripciones

ÁmbitoQué permite
subscriptions:readVer el estado de consentimiento de un usuario por canal.
subscriptions:writeSuscribir o dar de baja usuarios de grupos y canales.

Apps y claves de SDK

ÁmbitoQué permite
apps:readEnumerar las apps y claves de SDK registradas en este espacio de trabajo.
apps:writeAñadir, rotar o eliminar claves de SDK para apps móviles y web.

Biblioteca de recursos

ÁmbitoQué permite
assets:readObtener imágenes, fuentes y otros medios compartidos.
assets:writeSubir, renombrar o eliminar archivos en la biblioteca de recursos.

Entidades

ÁmbitoQué permite
entities:readConsultar registros de entidades (productos, artículos, lugares…).
entities:writeCrear o actualizar registros y propiedades de entidades.

Analítica

ÁmbitoQué permite
analytics:readObtener métricas agregadas, embudos y datos de informes.

Entregabilidad

ÁmbitoQué permite
email_suppression:readInspeccionar la lista de supresión de email (rebotes, quejas y manual).
email_suppression:writeAñadir o eliminar entradas de la lista de supresión de email.
sms_suppression:readInspeccionar la lista de supresión de SMS (respuestas STOP y fallos).
sms_suppression:writeAñadir o eliminar números de teléfono de la lista de supresión de SMS.

Límites de frecuencia

ÁmbitoQué permite
touching_rules:readInspeccionar reglas de límite de frecuencia y sus contadores actuales.
touching_rules:writeCrear, editar o eliminar reglas de límite de frecuencia.

WhatsApp

ÁmbitoQué permite
whatsapp:readLeer la configuración de la cuenta WhatsApp Business.
whatsapp:writeActualizar la configuración de la cuenta WhatsApp Business.

Agentes de IA

ÁmbitoQué permite
ai_agents:readEnumerar agentes de IA y su configuración.
ai_agents:writeCrear o editar agentes de IA y sus opciones de proveedor.

Lista de IP permitidas

Puedes restringir una clave a un conjunto fijo de IP de origen. Cuando la lista de IP permitidas está vacía, se aceptan solicitudes desde cualquier IP (es el valor predeterminado). Cuando tiene entradas, solo pasan las solicitudes cuya IP de origen coincida con al menos una entrada.

Sintaxis aceptada

  • Dirección IPv4 simple: 203.0.113.42.
  • Rango CIDR IPv4: 10.0.0.0/24, 192.168.1.0/16.
  • Dirección IPv6: solo coincidencia exacta (todavía no hay CIDR para IPv6).

Combina varias entradas separándolas con comas en el panel:

10.0.0.0/24, 203.0.113.42, 2001:db8::1

Resolución de IP de origen

La IP de cliente se resuelve desde el encabezado de confianza de la red perimetral (se establece de nuevo en cada solicitud en el borde, por lo que un valor proporcionado por el cliente no puede sobrevivir), con la dirección de conexión del proxy de confianza como alternativa. La entrada X-Forwarded-For situada más a la izquierda y controlada por el cliente no se usa deliberadamente, para que no se pueda falsear la lista de IP permitidas. Las direcciones IPv6 asignadas a IPv4 (::ffff:203.0.113.42) se normalizan a su forma IPv4 antes de comparar.

Forma de la solicitud rechazada

Cuando una solicitud procede de una IP no permitida, la API devuelve 401 No autorizado con:

{
"statusCode": 401,
"message": "Request IP is not allowed for this API key",
"timestamp": "2026-05-12T08:14:00.000Z",
"path": "/users"
}

El rechazo se registra en el servidor con el prefijo de la clave y la IP infractora para que puedas auditarlo.

Endpoints de gestión de claves

Las claves se gestionan mediante el panel (Configuración → Claves de API) o la API:

MétodoEndpointDescripción
GET/api-keys/permissionsEnumerar todos los ámbitos que se pueden conceder
POST/api-keysCrear una clave (?environment=live o test; cuerpo: name, description?, permissions[], ipAllowlist?, expiresAt?): el valor completo se devuelve una vez
GET/api-keysEnumerar claves del espacio de trabajo
GET/api-keys/:apiKeyIdObtener metadatos de una clave
PUT/api-keys/:apiKeyIdActualizar nombre, descripción, permisos, lista de IP permitidas o vencimiento
POST/api-keys/:apiKeyId/revokeDesactivar una clave (deja de autenticar de inmediato)
POST/api-keys/:apiKeyId/rotateGenerar un valor de clave nuevo manteniendo los mismos permisos; el valor se devuelve una vez
DELETE/api-keys/:apiKeyIdEliminar una clave permanentemente (devuelve 204)

Quien realiza la llamada nunca puede conceder a una clave ámbitos que no posee.

Campos de respuesta de lista

GET /api-keys devuelve { "apiKeys": [...] }, con cada clave de la siguiente forma (el valor completo y su hash nunca se exponen):

{
"apiKeys": [
{
"id": "7c2e4f6a-1b3d-4e5f-8a9b-0c1d2e3f4a5b",
"name": "ServerSide Updates",
"description": "Used by our backend to send events.",
"keyPrefix": "jry_live_98f31a72",
"permissions": ["events:track", "users:write"],
"lastUsedAt": "2026-05-12T08:14:00.000Z",
"expiresAt": null,
"isActive": true,
"createdAt": "2026-02-19T12:00:00.000Z",
"updatedAt": "2026-02-19T12:00:00.000Z"
}
]
}

La ipAllowlist de la clave se establece al crear o actualizar; se aplica en cada solicitud, pero no se incluye en la respuesta de lista.

Errores habituales

EstadoMensajeQué comprobar
401Invalid API key formatFalta el encabezado, tiene un formato incorrecto o no empieza por jry_.
401Invalid or expired API keyLa clave se revocó, eliminó o superó su expiresAt.
401Request IP is not allowed for this API keyLa IP de origen no coincidió con ninguna entrada permitida; consulta Lista de IP permitidas.
403This API key does not have the required permissions: ...La clave es válida, pero no tiene el ámbito necesario para el endpoint.
403ORG_HARD_SUSPENDED: organization is suspended. Read-only access only.La organización propietaria está suspendida; contacta con soporte.

Rotar una clave

Llama a POST /api-keys/:apiKeyId/rotate (o usa el panel): la clave recibe un valor secreto nuevo (y un keyPrefix nuevo), que se devuelve exactamente una vez en la respuesta, y conserva el nombre, los ámbitos y el ID. Todo lo que siga llamando con el valor antiguo empieza a fallar de inmediato, así que despliega primero el valor nuevo donde puedas y usa el keyPrefix en tus registros de acceso para encontrar integraciones que aún usan la clave antigua. Si prefieres una rotación sin tiempo de inactividad, crea una segunda clave con los mismos ámbitos, migra a quienes realizan llamadas y elimina después la clave antigua.