Arena Upya Arena Upya
← Voltar à landing

Desenvolvedores · Documentação técnica

Arena Upya

Autenticação

API Key estática por empresa (tenant), com escopos por módulo — cada escopo cobre várias rotas.

Visão geral

A chave autentica a empresa no papel de gestor. Não há login de usuário na API. Envie a chave em:

  • Authorization: Bearer <api_key>
  • ou X-API-Key: <api_key>

Obtendo a chave

  1. Entre no App como gestor.
  2. Abra API no menu.
  3. Informe o nome da aplicação e marque os escopos desejados (por módulo).
  4. Clique em Gerar chave e copie o token — ele não será exibido de novo.
Segurança: trate a chave como senha. Revogue em App → API se houver vazamento.

Escopos (por módulo)

Não há checkbox por endpoint: um escopo libera um conjunto de rotas. *.write implica *.read no mesmo módulo. Sem o escopo necessário → 403 FORBIDDEN.

Escopo Grupo Permissão Endpoints cobertos
ranking.entries.write Ranking Ranking · lançar vendas POST /api/v1/ranking/entries
ranking.read Ranking Ranking · leitura GET /api/v1/ranking/campaigns
GET /api/v1/ranking/campaigns/{id}
GET /api/v1/ranking/teams
GET /api/v1/ranking/sellers
GET /api/v1/ranking/prizes
GET /api/v1/ranking/awards
ranking.write Ranking Ranking · escrita (campanhas/times/vendedores) POST/PATCH /api/v1/ranking/campaigns
POST/PATCH/DELETE /api/v1/ranking/teams
POST/PATCH /api/v1/ranking/sellers
POST/DELETE /api/v1/ranking/prizes
POST/DELETE /api/v1/ranking/awards
missions.read Missões Missões · leitura GET /api/v1/missions
GET /api/v1/missions/{id}
GET /api/v1/missions/board
missions.write Missões Missões · escrita POST/PATCH/DELETE /api/v1/missions
POST /api/v1/missions/{id}/complete
shop.read Baú Baú · leitura GET /api/v1/shop/tiers
GET /api/v1/shop/tiers/{id}
GET /api/v1/shop/redeems
shop.write Baú Baú · escrita / resgates POST/PATCH /api/v1/shop/tiers
POST /api/v1/shop/redeems
links.read Links Links · leitura GET /api/v1/links
GET /api/v1/links/{id}
links.write Links Links · escrita POST/PATCH/DELETE /api/v1/links
meetings.read Reuniões Reuniões · leitura GET /api/v1/meetings
GET /api/v1/meetings/{id}
meetings.write Reuniões Reuniões · escrita POST /api/v1/meetings
PATCH /api/v1/meetings/{id}
followups.read Follow-ups Follow-ups · leitura GET /api/v1/followups
GET /api/v1/followups/{id}
GET /api/v1/followups/settings
followups.write Follow-ups Follow-ups · escrita POST /api/v1/followups
POST /api/v1/followups/{id}/done
PATCH /api/v1/followups/settings
withdrawals.read Resgates Resgates · leitura GET /api/v1/withdrawals
GET /api/v1/withdrawals/{id}
withdrawals.write Resgates Resgates · aprovar/rejeitar POST /api/v1/withdrawals/{id}/approve
POST /api/v1/withdrawals/{id}/reject
commissions.read Comissões Comissões · leitura GET /api/v1/commissions/report
GET /api/v1/commissions/rules
GET /api/v1/commissions/settings
commissions.write Comissões Comissões · regras POST/PATCH/DELETE /api/v1/commissions/rules
PATCH /api/v1/commissions/settings
users.read Usuários Usuários · leitura GET /api/v1/users
GET /api/v1/users/{id}
GET /api/v1/users?external_code=
users.write Usuários Usuários · escrita POST /api/v1/users
PATCH /api/v1/users/{id}
notices.read Avisos Avisos · inbox / marcar lido GET /api/v1/notices
POST /api/v1/notices/{id}/read
POST /api/v1/notices/read-all
notices.write Avisos Avisos · broadcast POST /api/v1/notices

Rate limit

Por API key, janela fixa. Precedência:

  1. Específico da chave — definido só em Gestão → API (TI)
  2. Global (Gestão → Configurações, TI) — fallback se a chave não tiver limite próprio (ex.: criada no App)
  • Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-RateLimit-Policy (key|global)
  • Estouro → 429 RATE_LIMITED + Retry-After
  • GET /health não consome o limite

Anti-IDOR

O tenant é sempre o company_id da chave. IDs de outra empresa (ou inexistentes) respondem 404 NOT_FOUND com mensagem genérica — não revelamos existência cross-tenant.

Teste smoke: chave da empresa A não deve ler/escrever IDs da empresa B.

Exemplo

curl -X GET "https://arenaupya.com.br/api/v1/users" \
  -H "Authorization: Bearer arena_live_SEU_TOKEN"