Desenvolvedores · Documentação técnica
Arena Upya
API Missions
Definições de missões, board de progresso e conclusão em nome de um usuário.
Leitura
missions.readEscrita
missions.writeBoard e complete exigem user_id ou external_code.
Endpoints
| Método | Rota | Escopo | Descrição |
|---|---|---|---|
GET |
/api/v1/missions |
missions.read |
Listar definições |
GET |
/api/v1/missions/{id} |
missions.read |
Obter missão |
GET |
/api/v1/missions/board |
missions.read |
Board do user (?user_id|external_code) |
POST |
/api/v1/missions |
missions.write |
Criar missão |
PATCH |
/api/v1/missions/{id} |
missions.write |
Atualizar missão |
DELETE |
/api/v1/missions/{id} |
missions.write |
Excluir missão |
POST |
/api/v1/missions/{id}/complete |
missions.write |
Concluir para um user |
Por endpoint — assinaturas e exemplos
Mission
Missão / desafio de pontos.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID. ex.: 5
|
title |
string |
não |
Título. ex.: "Login diário"
|
code |
string |
não |
Código estável (integração). ex.: "login_daily"
|
description |
string | null |
não | Texto explicativo. |
period |
string |
não |
Periodicidade (ex. `daily`, `weekly`, `once`). ex.: "daily"
|
points |
integer |
não |
Pontos ao concluir. ex.: 10
|
sort_order |
integer |
não | Ordem de exibição. |
is_active |
integer |
não |
`1` ativa. ex.: 1
|
Exemplo
Response 2xx
{
"status": "success",
"data": {
"items": [
{
"id": 5,
"title": "Login diário",
"code": "login_daily",
"period": "daily",
"points": 10,
"is_active": 1
}
]
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
id |
path |
integer |
sim | ID do recurso na empresa |
Mission
Missão / desafio de pontos.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID. ex.: 5
|
title |
string |
não |
Título. ex.: "Login diário"
|
code |
string |
não |
Código estável (integração). ex.: "login_daily"
|
description |
string | null |
não | Texto explicativo. |
period |
string |
não |
Periodicidade (ex. `daily`, `weekly`, `once`). ex.: "daily"
|
points |
integer |
não |
Pontos ao concluir. ex.: 10
|
sort_order |
integer |
não | Ordem de exibição. |
is_active |
integer |
não |
`1` ativa. ex.: 1
|
Exemplo
Response 2xx
{
"status": "success",
"data": {
"mission": {
"id": 5,
"title": "Login diário",
"code": "login_daily",
"period": "daily",
"points": 10,
"is_active": 1
}
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
user_id |
query |
integer |
não | Ou external_code |
external_code |
query |
string |
não | Código CRM |
period |
query |
string |
não | Filtro da def (ex. daily) |
MissionBoard
Resposta de `GET /missions/board`.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
board |
array<MissionBoardItem> |
não | Lista def+progress do user. |
MissionBoardItem
Item do board: definição + progresso.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
def |
Mission |
não | — |
progress |
MissionProgress |
não | — |
MissionProgress
Progresso de uma missão no board do user.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do progress. ex.: 501
|
user_id |
integer |
não |
Usuário. ex.: 42
|
mission_id |
integer |
não |
Missão. ex.: 5
|
window_key |
string |
não |
Janela (ex. data daily). ex.: "2026-03-20"
|
progress_count |
integer |
não |
Progresso atual. ex.: 0
|
target_count |
integer |
não |
Meta da janela. ex.: 1
|
points_awarded |
integer |
não |
Pontos já creditados. ex.: 0
|
completed_at |
string | null |
não | Quando concluiu, ou null. |
data.board[] = {def, progress}
Exemplo
Response 2xx
{
"status": "success",
"data": {
"board": [
{
"def": {
"id": 5,
"title": "Login diário",
"code": "login_daily",
"period": "daily",
"points": 10,
"is_active": 1
},
"progress": {
"id": 501,
"user_id": 42,
"mission_id": 5,
"window_key": "2026-03-20",
"progress_count": 0,
"target_count": 1,
"points_awarded": 0,
"completed_at": null
}
}
]
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
MissionCreate — body
Body para criar missão.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
title |
string |
sim |
Título. ex.: "Login diário"
|
code |
string |
não |
Código estável. ex.: "login_daily"
|
description |
string |
não | Texto. |
period |
string |
não |
Periodicidade. ex.: "daily"
|
points |
integer |
não |
Pontos. ex.: 10
|
sort_order |
integer |
não | Ordem. |
Mission
Missão / desafio de pontos.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID. ex.: 5
|
title |
string |
não |
Título. ex.: "Login diário"
|
code |
string |
não |
Código estável (integração). ex.: "login_daily"
|
description |
string | null |
não | Texto explicativo. |
period |
string |
não |
Periodicidade (ex. `daily`, `weekly`, `once`). ex.: "daily"
|
points |
integer |
não |
Pontos ao concluir. ex.: 10
|
sort_order |
integer |
não | Ordem de exibição. |
is_active |
integer |
não |
`1` ativa. ex.: 1
|
Exemplo
Request POST (body)
{
"title": "Login diário",
"code": "login_daily",
"points": 10,
"period": "daily"
}
Response 2xx
{
"status": "success",
"data": {
"mission": {
"id": 5,
"title": "Login diário",
"code": "login_daily",
"period": "daily",
"points": 10,
"is_active": 1
}
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
id |
path |
integer |
sim | ID do recurso na empresa |
MissionCreate — body
Body para criar missão.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
title |
string |
sim |
Título. ex.: "Login diário"
|
code |
string |
não |
Código estável. ex.: "login_daily"
|
description |
string |
não | Texto. |
period |
string |
não |
Periodicidade. ex.: "daily"
|
points |
integer |
não |
Pontos. ex.: 10
|
sort_order |
integer |
não | Ordem. |
Mission
Missão / desafio de pontos.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID. ex.: 5
|
title |
string |
não |
Título. ex.: "Login diário"
|
code |
string |
não |
Código estável (integração). ex.: "login_daily"
|
description |
string | null |
não | Texto explicativo. |
period |
string |
não |
Periodicidade (ex. `daily`, `weekly`, `once`). ex.: "daily"
|
points |
integer |
não |
Pontos ao concluir. ex.: 10
|
sort_order |
integer |
não | Ordem de exibição. |
is_active |
integer |
não |
`1` ativa. ex.: 1
|
Exemplo
Request PATCH (body)
{
"title": "Login diário",
"points": 15
}
Response 2xx
{
"status": "success",
"data": {
"mission": {
"id": 5,
"title": "Login diário",
"code": "login_daily",
"period": "daily",
"points": 15,
"is_active": 1
}
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
id |
path |
integer |
sim | ID do recurso na empresa |
DeletedResult
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
deleted |
boolean |
não |
Sempre `true` quando excluído. ex.: true
|
Exemplo
Response 2xx
{
"status": "success",
"data": {
"deleted": true
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
id |
path |
integer |
sim | ID da missão |
UserRefBody — body
Identifica o usuário com `user_id` ou `external_code` (um dos dois).
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
user_id |
integer |
não |
ID do usuário. ex.: 42
|
external_code |
string · máx. 120 |
não |
Código CRM. ex.: "CRM-8841"
|
CompletedResult
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
completed |
boolean |
não |
`true` se a missão foi concluída agora; `false` se já estava. ex.: true
|
Exemplo
Request POST (body)
{
"external_code": "CRM-8841"
}
Response 2xx
{
"status": "success",
"data": {
"completed": true
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
curl — complete
curl -X POST "https://arenaupya.com.br/api/v1/missions/3/complete" \
-H "Authorization: Bearer arena_live_SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"external_code":"CRM-8841"}'