Pular para o conteúdo principal

Money Moves

Money Moves são ciclos de ação financeira estruturados e com prazo definido, entregues aos usuários na cadência escolhida (semanal, quinzenal, etc.). Cada ciclo contém um conjunto de tarefas em três categorias:

Tipo de tarefaDescrição
"do"Uma ação financeira concreta com um valor associado (ex.: transferir R$150 para poupança)
"learn"Uma tarefa curta de educação financeira adaptada à situação do usuário
"mind"Um exercício de mentalidade ou reflexão para construir hábitos financeiros saudáveis

Money Moves requerem que um plano financeiro exista primeiro. Use POST /v1/users/{user_id}/plan antes de chamar /money-moves/generate.


Referência do objeto

Objeto Cycle

CampoTipoDescrição
idstringIdentificador único do ciclo
user_idstringO usuário Ozzie a quem este ciclo pertence
due_datestring (ISO 8601)A data até a qual as tarefas deste ciclo devem ser concluídas
cadence"weekly" | "biweekly" | "twice_monthly" | "monthly"A frequência da qual este ciclo faz parte
status"scheduled" | "available" | "completed" | "skipped"Estado atual do ciclo
tasksTask[]A lista de tarefas neste ciclo
created_atstring (ISO 8601)Quando o ciclo foi gerado

Objeto Task

CampoTipoDescrição
idstringIdentificador único da tarefa
task_type"do" | "learn" | "mind"A categoria da tarefa
titlestringDescrição legível da tarefa
amount_centsinteger | nullValor em centavos (apenas presente para tarefas "do")
status"pending" | "done" | "skipped"Se a tarefa foi concluída
completed_atstring (ISO 8601) | nullQuando a tarefa foi marcada como concluída (null se pendente/pulada)

GET /v1/users/{user_id}/money-moves

Lista todos os ciclos de money move de um usuário. Suporta filtragem por status e paginação baseada em cursor.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
user_idstringSimO ID do usuário Ozzie

Parâmetros de query

ParâmetroTipoObrigatórioDescrição
status"scheduled" | "available" | "completed" | "skipped"NãoFiltrar ciclos por status
limitintegerNãoNúmero de ciclos a retornar. Padrão: 10. Máx: 50.
cursorstringNãoCursor de paginação de uma resposta anterior next_cursor

Requisição

curl "https://api.ozzieapp.com/v1/users/usr_4f8a1b2c3d/money-moves?status=available&limit=5" \
-H "Authorization: Bearer ozp_Y2xpZW50X2ExYjJjM2Q0OnNrX2xpdmVfeEs5bVAycVI3dEwu"

Resposta

{
"object": "list",
"data": [
{
"id": "mmv_3a7c9e1b2d",
"user_id": "usr_4f8a1b2c3d",
"due_date": "2025-05-19T23:59:59Z",
"cadence": "biweekly",
"status": "available",
"created_at": "2025-05-05T14:40:00Z",
"tasks": [
{
"id": "tsk_1a2b3c4d5e",
"task_type": "do",
"title": "Transfira R$150 para sua conta poupança de Fundo de Emergência",
"amount_cents": 15000,
"status": "pending",
"completed_at": null
},
{
"id": "tsk_2b3c4d5e6f",
"task_type": "learn",
"title": "Leia: Por que R$3.000 é o primeiro marco certo para um fundo de emergência",
"amount_cents": null,
"status": "pending",
"completed_at": null
},
{
"id": "tsk_3c4d5e6f7g",
"task_type": "mind",
"title": "Escreva uma coisa com que você se sentiria menos estressado tendo R$10.000 em poupança",
"amount_cents": null,
"status": "pending",
"completed_at": null
}
]
}
],
"pagination": {
"has_more": false,
"next_cursor": null
}
}

Erros

CódigoStatus HTTPQuando ocorre
UNAUTHORIZED401Credenciais ausentes ou inválidas
NOT_FOUND404O usuário não existe
VALIDATION_ERROR422Valor de status inválido ou limit fora do intervalo

POST /v1/users/{user_id}/money-moves/generate

Aciona a geração do próximo ciclo de money move para o usuário. A IA do Ozzie analisa o plano atual, meta e histórico de transações do usuário para produzir um novo conjunto de tarefas personalizadas.

aviso

Este endpoint requer que um plano financeiro já exista para o usuário. Chame POST /v1/users/{user_id}/plan primeiro. Se nenhum plano existir, você receberá um erro PLAN_REQUIRED.

Cada chamada gera exatamente um novo ciclo. O ciclo é colocado em status "scheduled" e se torna "available" na sua due_date.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
user_idstringSimO ID do usuário Ozzie

Corpo da requisição

Nenhum corpo de requisição necessário.

Requisição

curl -X POST https://api.ozzieapp.com/v1/users/usr_4f8a1b2c3d/money-moves/generate \
-H "Authorization: Bearer ozp_Y2xpZW50X2ExYjJjM2Q0OnNrX2xpdmVfeEs5bVAycVI3dEwu" \
-H "Content-Type: application/json"

Resposta

Retorna o ciclo recém-gerado com todas as suas tarefas.

{
"object": "money_move",
"data": {
"id": "mmv_5d8f2a4b9c",
"user_id": "usr_4f8a1b2c3d",
"due_date": "2025-06-02T23:59:59Z",
"cadence": "biweekly",
"status": "scheduled",
"created_at": "2025-05-05T14:45:00Z",
"tasks": [
{
"id": "tsk_4d5e6f7g8h",
"task_type": "do",
"title": "Transfira R$150 para seu Fundo de Emergência — você já está 12% do caminho!",
"amount_cents": 15000,
"status": "pending",
"completed_at": null
},
{
"id": "tsk_5e6f7g8h9i",
"task_type": "learn",
"title": "Leia: Como automatizar sua poupança para nunca esquecer uma transferência",
"amount_cents": null,
"status": "pending",
"completed_at": null
},
{
"id": "tsk_6f7g8h9i0j",
"task_type": "mind",
"title": "Reflita: Qual é uma assinatura que você manteve mas mal usou este mês?",
"amount_cents": null,
"status": "pending",
"completed_at": null
}
]
}
}

Erros

CódigoStatus HTTPQuando ocorre
UNAUTHORIZED401Credenciais ausentes ou inválidas
NOT_FOUND404O usuário não existe
PLAN_REQUIRED422Nenhum plano financeiro existe para o usuário
INTERNAL_ERROR500Falha na geração de IA — seguro para tentar novamente

GET /v1/users/{user_id}/money-moves/{move_id}

Recupera um único ciclo de money move por ID, incluindo todas as suas tarefas.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
user_idstringSimO ID do usuário Ozzie
move_idstringSimO ID do ciclo de money move

Requisição

curl https://api.ozzieapp.com/v1/users/usr_4f8a1b2c3d/money-moves/mmv_3a7c9e1b2d \
-H "Authorization: Bearer ozp_Y2xpZW50X2ExYjJjM2Q0OnNrX2xpdmVfeEs5bVAycVI3dEwu"

Erros

CódigoStatus HTTPQuando ocorre
UNAUTHORIZED401Credenciais ausentes ou inválidas
NOT_FOUND404Usuário ou ciclo de money move não encontrado

PATCH /v1/users/{user_id}/money-moves/{move_id}

Atualiza o status de um ciclo de money move. Use isso para marcar um ciclo como concluído ou pulado quando o usuário termina suas tarefas ou opta por não fazer o ciclo atual.

Parâmetros de caminho

ParâmetroTipoObrigatórioDescrição
user_idstringSimO ID do usuário Ozzie
move_idstringSimO ID do ciclo de money move

Corpo da requisição

CampoTipoObrigatórioDescrição
status"completed" | "skipped"SimO novo status do ciclo

Requisição

curl -X PATCH https://api.ozzieapp.com/v1/users/usr_4f8a1b2c3d/money-moves/mmv_3a7c9e1b2d \
-H "Authorization: Bearer ozp_Y2xpZW50X2ExYjJjM2Q0OnNrX2xpdmVfeEs5bVAycVI3dEwu" \
-H "Content-Type: application/json" \
-d '{
"status": "completed"
}'

Resposta

Retorna o objeto de ciclo atualizado.

{
"object": "money_move",
"data": {
"id": "mmv_3a7c9e1b2d",
"user_id": "usr_4f8a1b2c3d",
"due_date": "2025-05-19T23:59:59Z",
"cadence": "biweekly",
"status": "completed",
"created_at": "2025-05-05T14:40:00Z",
"tasks": [
{
"id": "tsk_1a2b3c4d5e",
"task_type": "do",
"title": "Transfira R$150 para sua conta poupança de Fundo de Emergência",
"amount_cents": 15000,
"status": "done",
"completed_at": "2025-05-06T09:15:00Z"
},
{
"id": "tsk_2b3c4d5e6f",
"task_type": "learn",
"title": "Leia: Por que R$3.000 é o primeiro marco certo para um fundo de emergência",
"amount_cents": null,
"status": "done",
"completed_at": "2025-05-07T20:30:00Z"
},
{
"id": "tsk_3c4d5e6f7g",
"task_type": "mind",
"title": "Escreva uma coisa com que você se sentiria menos estressado tendo R$10.000 em poupança",
"amount_cents": null,
"status": "done",
"completed_at": "2025-05-07T20:35:00Z"
}
]
}
}

Erros

CódigoStatus HTTPQuando ocorre
UNAUTHORIZED401Credenciais ausentes ou inválidas
NOT_FOUND404Usuário ou ciclo de money move não encontrado
VALIDATION_ERROR422Valor de status inválido, ou ciclo já está em estado terminal
INVALID_JSON400Corpo da requisição não é JSON válido
dica

Após marcar um ciclo como "completed" ou "skipped", você pode imediatamente chamar POST /money-moves/generate para enfileirar o próximo ciclo. Isso mantém as listas de tarefas dos seus usuários atualizadas sem lacunas.