Desenvolvedores · Documentação técnica
Arena Upya
API Shop
Tiers do baú e resgates em nome do vendedor (user_id ou external_code obrigatório).
shop.readshop.write
Resgate debita pontos e cria withdrawal do user informado.
Cross-tenant → 404 sem debitar.
Endpoints
| Método | Rota | Escopo | Descrição |
|---|---|---|---|
GET |
/api/v1/shop/tiers |
shop.read |
Listar tiers |
GET |
/api/v1/shop/tiers/{id} |
shop.read |
Obter tier |
POST |
/api/v1/shop/tiers |
shop.write |
Criar tier |
PATCH |
/api/v1/shop/tiers/{id} |
shop.write |
Atualizar tier |
GET |
/api/v1/shop/redeems |
shop.read |
Histórico do user |
POST |
/api/v1/shop/redeems |
shop.write |
Resgatar (user + tier_id) |
Por endpoint — assinaturas e exemplos
ShopTier
Item da loja de prêmios (custo em pontos).
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do tier. ex.: 3
|
title |
string |
não |
Nome do prêmio. ex.: "Vale R$ 50"
|
points_cost |
integer |
não |
Custo em pontos. ex.: 500
|
reward_type |
string · cash | benefit |
não | `cash` = valor em R$; `benefit` = benefício nominal. |
cash_brl |
number | null |
não | Valor em R$ quando `reward_type=cash`. |
benefit_label |
string | null |
não | Rótulo do benefício quando `reward_type=benefit`. |
is_active |
integer |
não |
`1` disponível. ex.: 1
|
Exemplo
Response 2xx
{
"status": "success",
"data": {
"items": [
{
"id": 3,
"title": "Vale R$ 50",
"points_cost": 500,
"reward_type": "cash",
"cash_brl": 50,
"is_active": 1
}
]
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
id |
path |
integer |
sim | ID do recurso na empresa |
ShopTier
Item da loja de prêmios (custo em pontos).
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do tier. ex.: 3
|
title |
string |
não |
Nome do prêmio. ex.: "Vale R$ 50"
|
points_cost |
integer |
não |
Custo em pontos. ex.: 500
|
reward_type |
string · cash | benefit |
não | `cash` = valor em R$; `benefit` = benefício nominal. |
cash_brl |
number | null |
não | Valor em R$ quando `reward_type=cash`. |
benefit_label |
string | null |
não | Rótulo do benefício quando `reward_type=benefit`. |
is_active |
integer |
não |
`1` disponível. ex.: 1
|
Exemplo
Response 2xx
{
"status": "success",
"data": {
"tier": {
"id": 3,
"title": "Vale R$ 50",
"points_cost": 500,
"reward_type": "cash",
"cash_brl": 50,
"is_active": 1
}
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
ShopTierCreate — body
Body para criar item da loja.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
title |
string |
sim |
Nome. ex.: "Vale R$ 50"
|
points_cost |
integer |
sim |
Custo em pontos. ex.: 500
|
reward_type |
string · cash | benefit |
não |
Tipo de recompensa. ex.: "cash"
|
cash_brl |
number |
não |
Valor R$ (cash). ex.: 50
|
benefit_label |
string |
não | Label (benefit). |
bonus_pct |
number |
não | Bônus percentual opcional. |
sort_order |
integer |
não | Ordem. |
ShopTier
Item da loja de prêmios (custo em pontos).
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do tier. ex.: 3
|
title |
string |
não |
Nome do prêmio. ex.: "Vale R$ 50"
|
points_cost |
integer |
não |
Custo em pontos. ex.: 500
|
reward_type |
string · cash | benefit |
não | `cash` = valor em R$; `benefit` = benefício nominal. |
cash_brl |
number | null |
não | Valor em R$ quando `reward_type=cash`. |
benefit_label |
string | null |
não | Rótulo do benefício quando `reward_type=benefit`. |
is_active |
integer |
não |
`1` disponível. ex.: 1
|
Exemplo
Request POST (body)
{
"title": "Vale R$ 50",
"points_cost": 500,
"reward_type": "cash",
"cash_brl": 50
}
Response 2xx
{
"status": "success",
"data": {
"tier": {
"id": 3,
"title": "Vale R$ 50",
"points_cost": 500,
"reward_type": "cash",
"cash_brl": 50,
"is_active": 1
}
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
Parâmetros
| Campo | Em | Tipo | Obrig. | Descrição |
|---|---|---|---|---|
id |
path |
integer |
sim | ID do recurso na empresa |
ShopTierCreate — body
Body para criar item da loja.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
title |
string |
sim |
Nome. ex.: "Vale R$ 50"
|
points_cost |
integer |
sim |
Custo em pontos. ex.: 500
|
reward_type |
string · cash | benefit |
não |
Tipo de recompensa. ex.: "cash"
|
cash_brl |
number |
não |
Valor R$ (cash). ex.: 50
|
benefit_label |
string |
não | Label (benefit). |
bonus_pct |
number |
não | Bônus percentual opcional. |
sort_order |
integer |
não | Ordem. |
ShopTier
Item da loja de prêmios (custo em pontos).
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do tier. ex.: 3
|
title |
string |
não |
Nome do prêmio. ex.: "Vale R$ 50"
|
points_cost |
integer |
não |
Custo em pontos. ex.: 500
|
reward_type |
string · cash | benefit |
não | `cash` = valor em R$; `benefit` = benefício nominal. |
cash_brl |
number | null |
não | Valor em R$ quando `reward_type=cash`. |
benefit_label |
string | null |
não | Rótulo do benefício quando `reward_type=benefit`. |
is_active |
integer |
não |
`1` disponível. ex.: 1
|
Exemplo
Request PATCH (body)
{
"title": "Vale R$ 50",
"points_cost": 450
}
Response 2xx
{
"status": "success",
"data": {
"tier": {
"id": 3,
"title": "Vale R$ 50",
"points_cost": 450,
"reward_type": "cash",
"cash_brl": 50,
"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 |
Withdrawal
Pedido de saque / resgate financeiro. Listagem pode incluir campos de join do user.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do withdrawal. ex.: 77
|
user_id |
integer |
não |
Usuário solicitante. ex.: 42
|
tier_id |
integer | null |
não | Tier da loja origem, se houver. |
status |
string |
não |
Ex.: `pending`, `approved`, `rejected`, `paid`. ex.: "pending"
|
cost_points |
integer |
não |
Pontos debitados. ex.: 500
|
reward_type |
string |
não | Tipo da recompensa (`cash`/`benefit`). |
user_name |
string |
não |
Nome do user (join na listagem). ex.: "Ana Silva"
|
user_email |
string |
não |
E-mail do user (join na listagem). ex.: "ana@empresa.com"
|
external_code |
string | null |
não |
Código CRM do user (join na listagem). ex.: "CRM-8841"
|
data.items[]
Exemplo
Response 2xx
{
"status": "success",
"data": {
"items": [
{
"id": 77,
"user_id": 42,
"status": "pending",
"cost_points": 500,
"reward_type": "cash",
"user_name": "Ana Silva",
"user_email": "ana@empresa.com",
"external_code": "CRM-8841"
}
]
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
RedeemCreate — body
Body para resgatar item da loja. Identifique o usuário com `user_id` ou `external_code`.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
tier_id |
integer |
sim |
Item da loja. ex.: 3
|
user_id |
integer |
não |
Usuário que resgata. ex.: 42
|
external_code |
string |
não |
Código CRM do usuário. ex.: "CRM-8841"
|
Withdrawal
Pedido de saque / resgate financeiro. Listagem pode incluir campos de join do user.
| Campo | Tipo | Obrig. | Descrição |
|---|---|---|---|
id |
integer |
não |
ID do withdrawal. ex.: 77
|
user_id |
integer |
não |
Usuário solicitante. ex.: 42
|
tier_id |
integer | null |
não | Tier da loja origem, se houver. |
status |
string |
não |
Ex.: `pending`, `approved`, `rejected`, `paid`. ex.: "pending"
|
cost_points |
integer |
não |
Pontos debitados. ex.: 500
|
reward_type |
string |
não | Tipo da recompensa (`cash`/`benefit`). |
user_name |
string |
não |
Nome do user (join na listagem). ex.: "Ana Silva"
|
user_email |
string |
não |
E-mail do user (join na listagem). ex.: "ana@empresa.com"
|
external_code |
string | null |
não |
Código CRM do user (join na listagem). ex.: "CRM-8841"
|
Exemplo
Request POST (body)
{
"external_code": "CRM-8841",
"tier_id": 3
}
Response 2xx
{
"status": "success",
"data": {
"withdrawal": {
"id": 77,
"user_id": 42,
"status": "pending",
"cost_points": 500,
"reward_type": "cash",
"user_name": "Ana Silva",
"user_email": "ana@empresa.com",
"external_code": "CRM-8841"
}
},
"meta": {
"request_id": "a1b2c3d4e5f6789012345678"
}
}
curl — resgate
curl -X POST "https://arenaupya.com.br/api/v1/shop/redeems" \
-H "Authorization: Bearer arena_live_SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"external_code":"CRM-8841","tier_id":3}'