Usuarios
URL Base: https://channel.ozzieapp.com/v1
El objeto User
{
"object": "user",
"data": {
"id": "ozz_usr_01HX9KZMR4P5JQNBVT7YCW3DE",
"external_user_id": "usr_8821",
"name": "Maria Santos",
"email": "maria@example.com",
"language": "en",
"created_at": "2026-05-15T14:30:00Z"
}
}
POST /v1/users
Crea un nuevo usuario bajo tu cliente de API.
Cuerpo de la solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
external_user_id | string | Sí | Tu ID de usuario interno (máx 100 caracteres). No incluyas el prefijo "external:" — ese prefijo solo se usa en los parámetros de ruta. |
name | string | No | Nombre de visualización |
email | string | No | Dirección de correo electrónico |
phone | string | No | Número de teléfono en formato E.164, ej. "+5511999990000" |
language | string | No | "en" | "pt" | "es" — por defecto "en" |
- curl
- Node.js
- Python
curl -X POST https://channel.ozzieapp.com/v1/users \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"external_user_id": "usr_8821",
"name": "Maria Santos",
"email": "maria@example.com",
"language": "en"
}'
const token = Buffer.from('your_client_id:your_client_secret').toString('base64');
const response = await fetch('https://channel.ozzieapp.com/v1/users', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
external_user_id: 'usr_8821',
name: 'Maria Santos',
email: 'maria@example.com',
language: 'en',
}),
});
const { data: user } = await response.json();
console.log('Created user:', user.id);
import requests, base64
token = base64.b64encode(b'your_client_id:your_client_secret').decode()
response = requests.post(
'https://channel.ozzieapp.com/v1/users',
headers={
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json',
},
json={
'external_user_id': 'usr_8821',
'name': 'Maria Santos',
'email': 'maria@example.com',
'language': 'en',
}
)
user = response.json()['data']
print(f"Created: {user['id']}")
Respuesta (201 Created):
{
"object": "user",
"data": {
"id": "ozz_usr_01HX9KZMR4P5JQNBVT7YCW3DE",
"external_user_id": "usr_8821",
"name": "Maria Santos",
"email": "maria@example.com",
"language": "en",
"created_at": "2026-05-15T14:30:00Z"
}
}
Errores:
| Código | HTTP | Cuándo |
|---|---|---|
CONFLICT | 409 | Ya existe un usuario con este external_user_id |
VALIDATION_ERROR | 400 | Formato de correo electrónico inválido |
GET /v1/users/:user_id
Recupera un usuario por UUID de Ozzie o por external:{external_user_id}.
# Por UUID de Ozzie
curl https://channel.ozzieapp.com/v1/users/ozz_usr_01HX9KZMR4P5JQNBVT7YCW3DE \
-H "Authorization: Bearer YOUR_TOKEN"
# Por external_user_id
curl "https://channel.ozzieapp.com/v1/users/external:usr_8821" \
-H "Authorization: Bearer YOUR_TOKEN"
Respuesta (200 OK):
{
"object": "user",
"data": {
"id": "ozz_usr_01HX9KZMR4P5JQNBVT7YCW3DE",
"external_user_id": "usr_8821",
"name": "Maria Santos",
"email": "maria@example.com",
"language": "en",
"created_at": "2026-05-15T14:30:00Z"
}
}
GET /v1/users/:user_id/profile
Devuelve el perfil del lado del canal para un usuario, incluyendo la etapa de onboarding y las preferencias del plan.
curl https://channel.ozzieapp.com/v1/users/external:usr_8821/profile \
-H "Authorization: Bearer YOUR_TOKEN"
Respuesta (200 OK):
{
"object": "channel_user_profile",
"data": {
"core_user_id": "ozz_usr_01HX9KZMR4P5JQNBVT7YCW3DE",
"external_user_id": "usr_8821",
"onboarding_stage": "financial_intake",
"plan_speed": "moderate",
"created_at": "2026-05-16T14:30:00Z"
}
}
Valores de onboarding_stage:
| Valor | Significado |
|---|---|
financial_intake | El usuario aún no ha enviado un intake financiero |
personality | Intake completado; quiz de personalidad aún no realizado |
plan | Personalidad puntuada; plan aún no generado |
active | Onboarding completo — el usuario está completamente activo |
PATCH /v1/users/:user_id/onboarding/complete
Avanza la etapa de onboarding del usuario de plan a active. No se requiere cuerpo de solicitud. El endpoint es idempotente — llamarlo cuando el usuario ya está active devuelve la misma respuesta sin error.
curl -X PATCH https://channel.ozzieapp.com/v1/users/external:usr_8821/onboarding/complete \
-H "Authorization: Bearer YOUR_TOKEN"
Respuesta (200 OK):
{
"object": "onboarding_complete",
"data": {
"onboarding_stage": "active"
}
}
Errores:
| Código | HTTP | Cuándo |
|---|---|---|
NOT_FOUND | 404 | El usuario no existe |
VALIDATION_ERROR | 400 | El usuario no está en la etapa plan (y tampoco está ya en active) |