Me API
GET /me le dice a quien llama quién es: en qué organización y espacio de trabajo actúa la credencial, qué región la atiende y qué URL base de la API debe llamar, qué tipo de credencial es y qué permisos tiene ahora mismo. Funciona con cualquier credencial - una clave de API, una sesión del panel o un token de acceso OAuth - y no necesita ningún permiso concreto, así que es la llamada natural para "probar la conexión".
Todos los endpoints de esta página son relativos a la URL base: https://api-eu1.joryio.com/api - consulta la Descripción general de la API.
Obtener a quien llama
GET /me
curl https://api-eu1.joryio.com/api/me \
-H "Authorization: Bearer jry_live_your_api_key"
Respuesta 200:
{
"organization": { "id": "8f0c2c1e-3b0a-4d2e-9a51-0f6f4d1c2b11", "name": "Acme" },
"workspace": { "id": "1d2e3f40-5a6b-4c7d-8e9f-a0b1c2d3e4f5", "name": "Production" },
"region": "eu1",
"api_base_url": "https://api-eu1.joryio.com/api",
"principal": {
"type": "oauth",
"client_kind": "integration",
"client": "zapier",
"name": "Dana Levi"
},
"scopes": ["events:track", "users:read", "users:write"]
}
| Campo | Tipo | Notas |
|---|---|---|
organization | object | id y name de la organización. |
workspace | object o null | El espacio de trabajo en el que actúa la credencial. Una clave de API y un token OAuth están ligados a un espacio de trabajo; una sesión del panel usa el encabezado X-Workspace-Id y recibe null sin él. |
region | string | La región que guarda los datos, por ejemplo eu1. |
api_base_url | string | La URL base de la REST API de esa región. Llama a esta, no a un host fijo en el código. |
principal | object | Qué es la credencial - ver abajo. |
scopes | string[] | Los permisos que la credencial puede usar ahora mismo, ordenados. |
Tipos de principal
principal.type | Credencial | Otros campos |
|---|---|---|
api_key | Una clave de API | api_key_id, name (el nombre de la clave). scopes son los scopes de la clave, incluidos los que estos contienen (por ejemplo canvas:activate contiene canvas:enter). |
oauth | Un token de acceso OAuth | client_kind (integration - por ejemplo Zapier - o mcp, un agente de IA), client (zapier para Zapier, si no el nombre del cliente), y el email y el name de la persona que lo conectó. scopes son lo concedido Y lo que esa persona todavía tiene. |
user | Una sesión del panel | email, name; scopes son los permisos de la persona en el espacio de trabajo. |
OAuth para integraciones
Las integraciones como Zapier se conectan con "Sign in with Joryio" (OAuth 2.0 authorization code) en lugar de una clave de API pegada. La persona elige el espacio de trabajo y los permisos en una página de consentimiento de Joryio; desde entonces la integración actúa como esa persona, en ese espacio de trabajo, limitada a lo que permitió y a lo que todavía tiene. Joryio registra los clientes de integración - no hay registro de clientes en autoservicio.
Los endpoints OAuth están en el host neutral respecto a la región connect.joryio.com, que reenvía cada solicitud a la región que emitió el código o el token:
| Paso | Endpoint |
|---|---|
| Autorizar (navegador) | GET https://connect.joryio.com/oauth/authorize?response_type=code&client_id=...&redirect_uri=...&scope=...&state=... |
| Token | POST https://connect.joryio.com/oauth/token |
| Revocar | POST https://connect.joryio.com/oauth/revoke |
- Autenticación del cliente:
client_secret_basic(HTTP Basic) oclient_secret_post(client_idyclient_secreten el cuerpo del formulario). PKCE (S256) es opcional y se exige cuando se envía. - Redirect URI: debe coincidir exactamente con una de las URI registradas del cliente.
- Respuesta del token:
access_token,refresh_token,token_type,expires_in,scope, además deapi_base_url(llama a la API allí) yregion. - Los tokens de acceso duran una hora. Uno caducado recibe
401; renueva y vuelve a intentarlo. - Los refresh tokens rotan en cada uso y siguen siendo válidos mientras se use la conexión - caducan tras 180 días sin ningún uso. Dos renovaciones con el mismo token en menos de 60 segundos (pasos en paralelo) reciben ambas el mismo par nuevo; un token ya rotado que se presenta más tarde termina la conexión.
- Scopes que una integración puede pedir:
users:read,pii:view(opcional, ver abajo),users:write,events:read,events:track,lists:read,subscriptions:read,segments:read,subscriptions:write,canvas:enter,hooks:manage. - Permisos implícitos: un token OAuth nunca obtiene
users:export,users:mergeniusers:aliasa través de otro scope (segments:readyusers:writelos incluyen para roles y claves API, no para OAuth). La exportación masiva de contactos, la fusión y los cambios de alias quedan para roles y claves API. - Datos personales (
pii:view, opcional): sin él una integración solo recibe los IDs de los contactos -GET /usersy las demás lecturas de contactos devuelvenemail,phoneyexternalIdcomonully ocultan los atributos marcados como datos personales (y los nombres), y las entregas de webhook solo llevancontact.id. Con él, llevan el email, el teléfono y el External ID del contacto. Solo tiene efecto mientras la persona que conectó también tengapii:viewen el espacio de trabajo, y se comprueba en cada solicitud y entrega: si lo pierde, la siguiente ya va oculta. La página de consentimiento lo muestra como "Ver el email y el número de teléfono de los contactos", sin marcar por defecto y solo a quien tienepii:view; a quien no lo tiene se le explica que la app solo recibirá los IDs de los contactos, y aun así puede conectarla. Ningún otro scope - tampocousers:read- lo concede. Los agentes de IA (MCP) no pueden pedirlo. - Desconectar: la persona elimina la conexión en Configuración > General > Apps conectadas; todos los tokens de la conexión dejan de funcionar al instante.