Usuários
URL Base: https://channel.ozzieapp.com/v1
O 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
Cria um novo usuário sob seu cliente de API.
Corpo da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
external_user_id | string | Sim | Seu ID de usuário interno (máx 100 caracteres). Não inclua o prefixo "external:" — esse prefixo é usado apenas em parâmetros de caminho. |
name | string | Não | Nome de exibição |
email | string | Não | Endereço de e-mail |
phone | string | Não | Número de telefone no formato E.164, ex.: "+5511999990000" |
language | string | Não | "en" | "pt" | "es" — padrão "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']}")
Resposta (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"
}
}
Erros:
| Código | HTTP | Quando |
|---|---|---|
CONFLICT | 409 | Já existe um usuário com este external_user_id |
VALIDATION_ERROR | 400 | Formato de e-mail inválido |
GET /v1/users/:user_id
Recupera um usuário pelo UUID Ozzie ou por external:{external_user_id}.
# Por UUID 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"
Resposta (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
Retorna o perfil do canal para um usuário, incluindo o estágio de onboarding e as preferências de plano.
curl https://channel.ozzieapp.com/v1/users/external:usr_8821/profile \
-H "Authorization: Bearer YOUR_TOKEN"
Resposta (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 | O usuário ainda não enviou um intake financeiro |
personality | Intake concluído; quiz de personalidade ainda não realizado |
plan | Personalidade pontuada; plano ainda não gerado |
active | Onboarding concluído — usuário totalmente ativo |
PATCH /v1/users/:user_id/onboarding/complete
Avança o estágio de onboarding do usuário de plan para active. Nenhum corpo de requisição é necessário. O endpoint é idempotente — chamá-lo quando o usuário já está active retorna a mesma resposta sem erro.
curl -X PATCH https://channel.ozzieapp.com/v1/users/external:usr_8821/onboarding/complete \
-H "Authorization: Bearer YOUR_TOKEN"
Resposta (200 OK):
{
"object": "onboarding_complete",
"data": {
"onboarding_stage": "active"
}
}
Erros:
| Código | HTTP | Quando |
|---|---|---|
NOT_FOUND | 404 | Usuário não existe |
VALIDATION_ERROR | 400 | O usuário não está no estágio plan (e ainda não está active) |