Moedas e loja são a camada de gamificação com valor real. O usuário acumula moedas participando da comunidade e as troca por itens numa loja. O diferencial da Cativa é que o pedido tem um ciclo de vida que você conecta ao seu próprio fulfillment (enviar um brinde físico, liberar um cupom, disparar uma integração).
Os dois lados
Base URL e autenticação
Todas as rotas ficam na API da Cativa:Moedas (Wallets)
O saldo e o extrato vivem na carteira do usuário.
Do lado admin, você credita saldo e consulta a carteira de qualquer usuário (por id ou por email). Veja os endpoints e os campos exatos na API Reference, tag Wallets.
Consultar o saldo do usuário
balance é o saldo de moedas do usuário, em unidades inteiras:
A estrutura exata da resposta (nomes dos campos de saldo, moeda, extrato) está na API Reference. Consulte as tags Wallets e Store em vez de assumir o shape aqui.
Loja (Store)
O usuário navega pelas lojas, vê os itens e resgata com moedas.
Os IDs (
storeId, itemId, orderId) são ULID.
Do lado admin, você gerencia lojas e itens e opera os pedidos:
POST /admin/monetization/stores·PUT/DELETE /admin/monetization/stores/{storeId}POST /admin/monetization/stores/{storeId}/items·PUT/DELETE /admin/monetization/stores/items/{itemId}GET /admin/monetization/stores/orders·GET /admin/monetization/stores/orders/{orderId}
O ciclo do pedido
Quando o usuário resgata um item, nasce um pedido. Esse pedido percorre um ciclo, e cada transição é uma ação admin:- approve / reject: você valida o resgate (estoque, elegibilidade, antifraude) e aprova ou recusa.
- fulfill: você marca o pedido como entregue. Esse é o ponto onde o fulfillment externo acontece: enviar o brinde físico, gerar o cupom, chamar sua integração de logística.
- refund: devolve as moedas ao usuário quando o item não pode ser entregue.
POST /admin/monetization/stores/orders/{orderId}/approvePOST /admin/monetization/stores/orders/{orderId}/rejectPOST /admin/monetization/stores/orders/{orderId}/fulfillPOST /admin/monetization/stores/orders/{orderId}/refund
1
Usuário resgata
POST /monetization/stores/items/{itemId}/purchase debita as moedas e cria o pedido em estado inicial.2
Você valida e aprova
POST /admin/monetization/stores/orders/{orderId}/approve (ou reject) depois de checar estoque, elegibilidade e antifraude.3
Você entrega e conclui
Rode seu fulfillment externo (enviar o brinde, gerar o cupom) e feche com
POST .../fulfill.4
Se algo falhar, devolva
POST .../refund estorna as moedas ao usuário quando o item não pode ser entregue.Aprovar e concluir um pedido
approve (o schema autoritativo fica na API Reference, tag Store). O status reflete a etapa do ciclo:
Os campos de resposta de cada rota (status do pedido, valores, timestamps) estão na API Reference, tags Store e Wallets. Não assuma o shape a partir dos exemplos acima.
Erros comuns e dúvidas
O resgate falhou por saldo insuficiente
O resgate falhou por saldo insuficiente
purchase só cria o pedido se o usuário tem moedas suficientes para o item. Sem saldo, a chamada é recusada e nenhum pedido nasce. Consulte GET /monetization/wallet/coins antes, ou credite saldo pelo endpoint admin (tag Wallets) se a regra do seu programa permitir.O pedido travou em aprovado e nunca foi entregue
O pedido travou em aprovado e nunca foi entregue
approve só valida o resgate; ele não entrega nada sozinho. A entrega é o seu fulfillment externo, e é você quem chama fulfill ao concluir. Um pedido aprovado e nunca fulfill-ado fica em aberto de propósito, esperando sua operação fechar o ciclo.As moedas foram debitadas mas o item não pôde ser entregue
As moedas foram debitadas mas o item não pôde ser entregue
Use
refund. Ele estorna as moedas do pedido de volta à carteira do usuário. É a saída correta quando o estoque acabou ou a integração de logística falhou depois do débito.Chamei approve duas vezes, dobrou alguma coisa?
Chamei approve duas vezes, dobrou alguma coisa?
As transições de pedido são idempotentes por estado: reaplicar
approve num pedido já aprovado não cria um segundo pedido nem debita de novo. Isso torna seguro dar retry nas ações admin em jobs.Quero liberar acesso a um grupo, não entregar um item físico
Quero liberar acesso a um grupo, não entregar um item físico
A loja entrega itens; ela não é o mecanismo de acesso. Para liberar grupo, curso ou espaço, use badge como permissão (veja badges como permissão). Moedas e acesso são camadas separadas.
Como isso se conecta
- Para creditar moedas por uma ação externa (compra, indicação, brinde), use os endpoints admin de crédito por id ou email (tag Wallets).
- Para liberar acesso em vez de entregar item físico, o mecanismo é outro: veja badges como permissão.
- Para entender quem é o usuário dono da carteira e do pedido, veja identidade e usuários.
