# Autenticação (https://docs.rivoo.gg/api/autenticacao) Toda chamada leva a chave da loja no header: ```http Authorization: Bearer rk_... ``` ## Criar a chave [#criar-a-chave] Em **Integrações › Chaves de API**, clique em **Criar chave**. Escolha, para cada recurso (pedidos, catálogo, clientes, entregas, webhooks…), se a chave pode **ler**, **escrever** ou **nada**. O segredo aparece uma vez só, na criação. Guarde num cofre ou variável de ambiente (`RIVOO_API_KEY`), nunca no código nem no navegador. Se vazar, revogue na mesma tela: a chave para de funcionar na hora. - Uma chave vale para **uma loja**. Ela não alcança o saldo, os saques nem a equipe da conta: isso fica só no painel. - Chaves começam com `rk_`. As que começam com `rck_` são de servidor de jogo (plugin) e não servem para a API. ## Erros de autenticação [#erros-de-autenticação] | Status | `code` | O que fazer | | --- | --- | --- | | 401 | `unauthenticated` | Mande o header `Authorization`. | | 401 | `invalid_api_key` | A chave está errada, revogada ou vencida. | | 403 | `permission_denied` | A chave não tem a permissão daquele recurso. Edite as permissões ou crie outra. | ## OAuth (assistentes de IA) [#oauth-assistentes-de-ia] Assistentes como o Claude e o ChatGPT entram pelo [MCP](/ia/mcp), com login OAuth do dono da loja. Esse acesso é **só leitura** e vale só para as lojas que você autorizar. Para integrar um sistema seu, use a chave de API. # Erros (https://docs.rivoo.gg/api/erros) Erros vêm com o status HTTP certo e corpo no formato [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) (`application/problem+json`). Use o campo **`code`**: ele não muda. O `title` é texto para gente e pode mudar. ```json { "type": "https://docs.rivoo.gg/api/erros#validation_failed", "title": "Dados inválidos", "status": 422, "code": "validation_failed", "errors": [{ "field": "items.0.quantity", "code": "min", "message": "quantity must not be less than 1" }], "requestId": "req_mhexample0000request0001" } ``` Mande o `requestId` ao suporte quando precisar de ajuda com uma chamada. ## Códigos comuns [#códigos-comuns] | Status | `code` | Quando | | --- | --- | --- | | 400 | `bad_request` | JSON malformado ou parâmetro inválido. | | 401 | `unauthenticated` / `invalid_api_key` | Sem chave, ou chave inválida. Veja [Autenticação](/api/autenticacao). | | 403 | `permission_denied` | A chave não pode fazer isso. | | 404 | `route_not_found` | Caminho ou método que não existe. | | 404 | `*_not_found` | O recurso não existe nesta loja (ex.: `order_not_found`). | | 409 | `idempotency_in_progress` | A mesma `Idempotency-Key` ainda está sendo processada. Tente de novo em instantes. | | 413 | `payload_too_large` | Corpo acima de 1 MB. | | 422 | `validation_failed` | Campos inválidos: veja `errors[]`, um item por campo. | | 422 | `idempotency_key_reused` | A mesma `Idempotency-Key` com outro corpo. Veja [Idempotência](/api/idempotencia). | | 429 | `rate_limited` | Passou do limite. Espere o `Retry-After`. Veja [Limites](/api/limites). | | 500 | `internal_error` | Falha nossa. Tente de novo com a mesma `Idempotency-Key`. | Cada endpoint pode ter códigos próprios, sempre em `snake_case` e explicados no `title`. # Idempotência (https://docs.rivoo.gg/api/idempotencia) Rede cai, timeout acontece. Para repetir um `POST` sem criar dois pedidos, mande o header `Idempotency-Key` com um valor único por operação (o id do pedido no seu sistema, um UUID): ```http Idempotency-Key: pedido_123 ``` - A primeira chamada com a chave roda normalmente; as seguintes, com o **mesmo corpo**, devolvem a mesma resposta, sem executar de novo. - A chave tem de 8 a 255 caracteres (letras, números e `. _ : -`) e vale por **chave de API** e por rota: repetir com outra chave de API executa de novo. - A mesma chave com **outro corpo** dá `422 idempotency_key_reused`. - Enquanto a primeira ainda está rodando, a repetição recebe `409 idempotency_in_progress`. Vale para todo `POST`. É **obrigatória** (sem ela: `400 idempotency_key_required`) em: - [Criar pedido](/api/referencia/pedidos/criar-pedido) - [Registrar pedido manual](/api/referencia/pedidos/registrar-pedido-manual) - [Criar assinatura](/api/referencia/assinaturas/criar-assinatura) - [Reembolsar pedido](/api/referencia/reembolsos/reembolsar-pedido) - [Reenviar comandos](/api/referencia/comandos/reenviar-comandos) A referência marca o header como obrigatório nessas rotas. Rotas que devolvem um segredo (criar webhook, trocar segredo) ignoram o header. # API (https://docs.rivoo.gg/api) A API da Rivoo é REST com JSON. Tudo o que o painel faz com a loja (pedidos, catálogo, clientes, entregas, cupons) dá para fazer por ela. - **URL base:** `https://api.rivoo.gg` - **Autenticação:** `Authorization: Bearer ` ([como criar a chave](/api/autenticacao)) - **Formato:** JSON em UTF-8. Dinheiro em centavos de real (`2990` = R$ 29,90), datas em ISO 8601 (UTC). - **IDs:** texto com prefixo do tipo (`ord_`, `prod_`, `cus_`…), sempre em ordem de criação. ## Primeiro pedido [#primeiro-pedido] ```bash curl -X POST "https://api.rivoo.gg/v1/orders" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Idempotency-Key: pedido_123" \ -H "Content-Type: application/json" \ -d '{ "items": [{ "productId": "prod_...", "quantity": 1 }], "externalId": "pedido_123" }' ``` A resposta traz o pedido e um `checkoutUrl`: mande o comprador para lá. Quando ele pagar, chega o webhook [`order.paid`](/webhooks/eventos/order.paid). # Limites (https://docs.rivoo.gg/api/limites) Cada chave de API pode fazer **1.200 chamadas por minuto** (janela fixa de 60 segundos). Passou disso, a resposta é `429 rate_limited` com o header `Retry-After` dizendo quantos segundos esperar. ```http HTTP/1.1 429 Too Many Requests Retry-After: 12 Content-Type: application/problem+json ``` Dicas: - Prefira [webhooks](/webhooks) a consultar a API em loop para saber se um pedido foi pago. - Em listas grandes, use `limit=100` ([paginação](/api/paginacao)). - Corpo de requisição: até 1 MB (envio de imagem: até 2 MB de imagem em base64). # Paginação (https://docs.rivoo.gg/api/paginacao) Toda rota de lista (`GET /v1/orders`, `GET /v1/customers`…) devolve no máximo `limit` itens, do mais novo ao mais antigo: ```json { "data": [ { "id": "ord_..." } ], "hasMore": true } ``` | Parâmetro | Padrão | O que faz | | --- | --- | --- | | `limit` | 20 | Itens por página, de 1 a 100. | | `startingAfter` | | Id do último item da página atual: traz a **próxima** página (itens mais antigos). | | `endingBefore` | | Id do primeiro item da página atual: traz a página **anterior** (itens mais novos). | Use um dos dois cursores por vez. Enquanto `hasMore` for `true`, há mais páginas. ```js let cursor; do { const url = new URL('https://api.rivoo.gg/v1/orders'); url.searchParams.set('limit', '100'); if (cursor) url.searchParams.set('startingAfter', cursor); const page = await fetch(url, { headers: { Authorization: `Bearer ${process.env.RIVOO_API_KEY}` } }).then((r) => r.json()); for (const order of page.data) console.log(order.id, order.status); cursor = page.hasMore ? page.data.at(-1).id : undefined; } while (cursor); ``` # Criar a loja (https://docs.rivoo.gg/comecar/criar-loja) ### Crie a conta [#crie-a-conta] Em [rivoo.gg/app/cadastro](https://rivoo.gg/app/cadastro), com seu e-mail. Não tem mensalidade. ### Dê nome e endereço à loja [#dê-nome-e-endereço-à-loja] Escolha o nome e o endereço (`seuservidor.rivoo.gg`). Depois dá para ligar um [domínio próprio](/api/referencia/dominio-proprio/ligar-dominio-proprio). ### Cadastre os produtos [#cadastre-os-produtos] Em **Produtos**: VIP, ranks, kits, moedas. Preço em reais, imagem e descrição. Ranks em escada permitem upgrade pagando só a diferença. ### Ligue o servidor e configure a entrega [#ligue-o-servidor-e-configure-a-entrega] Instale o [plugin](/entrega/plugin-minecraft) no servidor de Minecraft (**Entrega In-game** no painel) e diga, em cada produto, o comando que roda quando ele é pago (por exemplo `lp user {player} parent addtemp vip 30d`). Veja as [variáveis de comando](/referencia-rapida/variaveis-de-comando). ### Personalize a vitrine [#personalize-a-vitrine] Em **Loja › Aparência**: template, cores, logo, banner, IP do servidor e Discord. ### Complete os dados do titular e publique [#complete-os-dados-do-titular-e-publique] CPF ou CNPJ de quem recebe, e a conta para saque no mesmo documento. Feito isso, **Publicar** coloca a loja no ar. Próximo passo: [faça a primeira venda](/comecar/primeira-venda). # Primeira venda (https://docs.rivoo.gg/comecar/primeira-venda) A Rivoo não tem modo de teste: toda venda é real. O jeito mais simples de testar tudo de ponta a ponta é comprar na sua própria loja um produto de R$ 1,00. Num Pix de R$ 1,00, a taxa do Pix é R$ 0,75 e sobram R$ 0,25 no seu saldo. Se preferir, reembolse depois: o dinheiro volta para quem pagou. ### Crie um produto de teste [#crie-um-produto-de-teste] Em **Produtos**, um produto de R$ 1,00 com um comando simples, por exemplo `say {player} comprou na loja!`. ### Compre na vitrine [#compre-na-vitrine] Abra a loja, informe seu nick, escolha Pix e pague o QR Code. A aprovação leva segundos. ### Confira o que aconteceu [#confira-o-que-aconteceu] - **Vendas › Pedidos**: o pedido aparece como pago. - **No jogo**: o comando rodou (se você estava online; se não, roda quando você entrar). - **Extrato**: a entrada de R$ 0,25 no saldo. - **Webhooks**: se você cadastrou um, chegou o [`order.paid`](/webhooks/eventos/order.paid). ### Reembolse, se quiser [#reembolse-se-quiser] No pedido, menu **⋯ › Reembolsar**. O valor volta pelo mesmo Pix. Pela API, o mesmo teste é [criar um pedido](/api/referencia/pedidos/criar-pedido) e abrir o `checkoutUrl` da resposta. # Taxas e saque (https://docs.rivoo.gg/comecar/taxas-e-saque) Sem mensalidade e sem limite de vendas. Você paga só por venda aprovada: ## Quando o dinheiro entra [#quando-o-dinheiro-entra] No Pix, assim que o pagamento é confirmado: a venda aparece em **Vendas** e a entrada no **Extrato**. Valores de vendas em disputa ficam retidos até a disputa terminar. ## Saque [#saque] Em **Transferências › Transferir**, com o código enviado ao seu e-mail (vale 5 minutos). - O dinheiro cai por Pix numa conta no nome do titular (o CPF ou o CNPJ da conta). Na primeira vez, a conta é conferida com uma transferência de R$ 0,01. - Taxa de R$ 1,00 por saque; mínimo de R$ 2,01. - Seguindo as regras do Banco Central, há um limite para o dia (06:00 às 20:00) e outro para a noite (20:00 às 06:00). Em **Transferências** você vê quanto já usou. # Agente RCON (beta) (https://docs.rivoo.gg/entrega/agente-rcon) Em **beta**: funciona, mas ainda está sendo testado em servidores de verdade de cada jogo. Para jogos sem plugin da Rivoo, a entrega usa o RCON do servidor, o console remoto que o jogo já tem. Quem roda os comandos é o **agente da Rivoo**, que segue as mesmas regras do plugin: fila, espera o jogador online, e confere a resposta do jogo. | Jogo | Protocolo | Porta padrão | | --- | --- | --- | | Minecraft Java (com Geyser) | Source RCON | 25575 | | Rust | WebRCON | 28016 | | ARK: Survival Evolved / Ascended | Source RCON | 27020 | | Conan Exiles | Source RCON | 25575 | | Palworld | Source RCON | 25575 | | 7 Days to Die | Telnet | 8081 | | Outro jogo com Source RCON | Source RCON | a sua (sem checar quem está online) | ## Duas formas de rodar [#duas-formas-de-rodar] **Instalado (recomendado).** O agente roda na máquina do jogo, ou num PC/VPS sempre ligado que alcance o RCON. A senha do RCON nunca sai da sua máquina, e ele só faz conexões de saída (não precisa abrir porta). - Baixe em [rivoo-agent/releases](https://github.com/payera-br/rivoo-agent/releases/latest) (Linux amd64/arm64, Windows) ou use a imagem Docker. Para Pterodactyl há um egg pronto. - Rode, informe o jogo, a porta e a senha do RCON, e pareie com o código como no plugin. **Na nuvem da Rivoo.** Para quem aluga o servidor e não pode instalar nada: no painel, informe o jogo, o IP, a porta e a senha do RCON. A Rivoo roda o agente para você. A porta do RCON precisa estar acessível pela internet; o painel testa a conexão antes de salvar e a senha fica guardada cifrada. # Entrega manual (https://docs.rivoo.gg/entrega/entrega-manual) Quando a entrega não é automática (um item feito sob medida, um serviço, um jogo sem RCON), use a ação **Entrega manual** no produto. 1. O pedido é pago e a entrega aparece em **Entrega In-game › Pendentes**. O menu mostra quantas estão esperando. 2. A equipe entrega e clica em **Marcar como entregue**. Pela API: [Entregas manuais pendentes](/api/referencia/entregas/entregas-manuais-pendentes) e [Marcar como entregue](/api/referencia/entregas/marcar-como-entregue). # Jogador offline (https://docs.rivoo.gg/entrega/jogador-offline) Com **Esperar o jogador online** ligado (o padrão), o comando fica na fila até o jogador entrar no servidor. Os outros comandos não ficam presos atrás dele: a fila de cada jogador anda sozinha. - O plugin informa a cada consulta quem está online, e a Rivoo só manda o que dá para executar agora. - Com **espaços livres no inventário**, o comando também espera o jogador liberar espaço, e ele recebe o aviso "Libere N espaços…" no chat (no máximo a cada 5 minutos). - Comandos que não citam o jogador (`{player}`, `{uuid}`, `{id}`) rodam na hora, mesmo com a opção ligada: não há por quem esperar. Desligue a opção para comandos que funcionam com o jogador offline (por exemplo, `lp user {player} parent add vip`, que o LuckPerms aceita offline). Em **Entrega In-game › Pendentes** você vê o que está esperando. # Plugin Minecraft (https://docs.rivoo.gg/entrega/plugin-minecraft) O plugin liga o servidor à loja: executa os comandos das compras e ainda deixa o jogador comprar dentro do jogo com `/comprar`, pagando um Pix que aparece num mapa na mão. **Requisitos:** Paper (ou fork, como Purpur) 1.21.x com Java 21. ## Instalar [#instalar] Baixe o [rivoo-minecraft-paper.jar](https://github.com/payera-br/rivoo-minecraft-plugin/releases/latest/download/rivoo-minecraft-paper.jar) e coloque na pasta `plugins/` do servidor. Reinicie. O console mostra um código de 8 letras, como `K7QM-2XPA`. No painel, **Entrega In-game › Parear servidor**, digite o código. O console mostra `Loja conectada`. Não precisa editar `config.yml`. Tem vários servidores (Survival, Skyblock, Lobby)? Instale em cada um e escolha, na tela, em quais servidores a loja entrega. ![Servidores conectados na tela Entrega In-game](/prints/entrega-in-game.webp) ## Comandos do plugin [#comandos-do-plugin] | Comando | Quem | O que faz | | --- | --- | --- | | `/comprar [pacote]` | jogador | Abre o menu da loja ou gera o Pix de um pacote. | | `/comprar presentear [pacote]` | jogador | Compra de presente para outro jogador. | | `/rivoo status` | admin | Mostra se está conectado, o catálogo e os Pix abertos. | | `rivoo connect` | console | Gera um novo código de pareamento. | | `rivoo secret ` | console | Conecta com uma chave `rck_…` (botão **Conectar com chave** no painel), em vez do código. | ## Como a entrega funciona [#como-a-entrega-funciona] 1. O pedido é pago (na loja web, no `/comprar` ou pela API). 2. A Rivoo põe na fila do servidor os comandos do produto, com as [variáveis](/referencia-rapida/variaveis-de-comando) trocadas. 3. O plugin busca a fila, executa e responde se deu certo. Se falhar (comando desconhecido, erro), o pedido mostra **Entrega falhou** com o motivo, e você pode tentar de novo. Reiniciar o servidor não perde nada: a fila fica na Rivoo e um comando nunca roda duas vezes. ## Opções de cada comando [#opções-de-cada-comando] - **Esperar o jogador online** (ligado por padrão): veja [Jogador offline](/entrega/jogador-offline). - **Espaços livres no inventário:** espera o jogador ter N espaços livres e avisa no chat. - **Atraso** e **Repetir:** roda depois de um tempo, ou repetidamente. - **Em que servidor:** todos ou só alguns. **Reenviar comandos (wipe):** depois de um wipe, reenvie para um servidor os comandos de todos os benefícios ativos. # Assinatura e Pix Automático (https://docs.rivoo.gg/guias/assinatura-e-pix-automatico) Num produto com cobrança **Assinatura** (ou **As duas**), escolha o período (mensal, trimestral…) e o preço. O comprador autoriza uma vez e as renovações são cobradas sozinhas: - **Pix Automático:** o comprador autoriza no app do banco; a Rivoo cobra a cada período. - **Cartão:** o cartão fica guardado no provedor de pagamento e é cobrado a cada período. ## Ciclo [#ciclo] 1. A primeira cobrança paga ativa a assinatura e entrega o benefício até o fim do período. 2. A cada renovação paga, o benefício é estendido ([`subscription.renewed`](/webhooks/eventos/subscription.renewed)). 3. Renovação não paga: a assinatura fica **atrasada** ([`subscription.past_due`](/webhooks/eventos/subscription.past_due)) e a Rivoo tenta de novo antes de encerrar. 4. Cancelada pelo comprador ou por você: o benefício vale até o fim do período pago ([`subscription.canceled`](/webhooks/eventos/subscription.canceled)); ao acabar, as ações de fim rodam ([`subscription.ended`](/webhooks/eventos/subscription.ended)). Em **Vendas › Assinaturas** você vê as ativas, a próxima cobrança, cancela ou retoma. Pela API: [Criar assinatura](/api/referencia/assinaturas/criar-assinatura) devolve o link para o comprador autorizar. # Códigos de criador (https://docs.rivoo.gg/guias/codigos-de-criador) Em **Descontos › Criadores**, cadastre o criador com: - **Código** (`SKYHUNTER`) e **link** (`sualoja.rivoo.gg/?criador=SKYHUNTER`), que já aplica o código. - **Desconto** para quem usa o código (opcional). - **Comissão** sobre o valor pago. O comprador digita o código no carrinho ou no checkout, ou chega pelo link. Numa assinatura, conta a primeira cobrança. ## Relatório e pagamento [#relatório-e-pagamento] O relatório mostra, por mês, as vendas de cada criador e a comissão, já descontados reembolsos e disputas perdidas. A Rivoo não paga o criador por você: quando pagar, registre em **Pagamentos** para o relatório mostrar o que falta. # Cupons e promoções (https://docs.rivoo.gg/guias/cupons-e-promocoes) Em **Descontos**: - **Cupons:** o comprador digita o código no carrinho ou no checkout (`DEMO10`). - **Promoções:** aplicadas sozinhas, sem código, com faixa e contagem regressiva na vitrine. Os dois aceitam: - **Porcentagem ou valor fixo.** - **Prazo** de início e fim. - **Limite de usos** no total e por cliente. - **Gasto mínimo** no carrinho. - **Produtos ou categorias** em que vale. - **Só para quem já tem** um pacote (ex.: desconto de renovação só para quem é VIP). Uma promoção automática também pode rodar **comandos em todos os servidores** quando começa e quando termina (ex.: ligar um evento de XP em dobro). Se você pausar, arquivar ou encurtar a promoção, os comandos de fim rodam na hora. Em **Usos** você vê cada pedido que usou o desconto e quanto foi descontado. Pela API: [Criar cupom ou promoção](/api/referencia/cupons-e-promocoes/criar-cupom-ou-promocao). # Discord (https://docs.rivoo.gg/guias/discord) Em **Integrações › Discord**, adicione o bot da Rivoo ao seu servidor do Discord. ## Cargo para quem compra [#cargo-para-quem-compra] Na aba **Entrega** do produto, adicione a ação **cargo no Discord** e escolha o cargo. Quem compra recebe o cargo; quando o benefício acaba (vencimento, reembolso, upgrade), o cargo sai. O comprador liga a conta do Discord no checkout. O cargo do bot precisa estar **acima** dos cargos que ele vai dar, na lista de cargos do servidor. ## Avisos de venda [#avisos-de-venda] - **Anúncio público:** um canal recebe cada venda, com modelo editável (`{jogador}`, `{comprador}`, `{itens}`, `{loja}`, `{valor}`). Só marca quem comprou. - **Canal da equipe:** venda com valor, disputa, reembolso e entrega de cargo. - **Enviar teste** manda uma mensagem de exemplo nos dois canais. Pedidos manuais não são anunciados. # Domínio próprio (https://docs.rivoo.gg/guias/dominio-proprio) Em **Loja › Domínio**: Digite o domínio (ex.: `loja.seuservidor.com`). Crie no seu provedor de DNS os registros que a tela mostra: um `CNAME` e um `TXT` de verificação. Clique em **Verificar agora**. Quando o DNS estiver certo, a Rivoo emite o certificado HTTPS sozinha. A propagação pode levar algum tempo; a Rivoo confere de novo a cada 15 minutos. O endereço `seuservidor.rivoo.gg` continua funcionando. Para desligar o domínio, use **Remover**: a loja volta a responder só no endereço da Rivoo. Pela API: [Ligar domínio próprio](/api/referencia/dominio-proprio/ligar-dominio-proprio). # Editor da vitrine (https://docs.rivoo.gg/guias/editor-da-vitrine) Em **Loja › Aparência** você monta a vitrine sem código. ![Editor da vitrine com a prévia ao lado](/prints/editor-da-vitrine.webp) - **Páginas:** início, categorias e páginas próprias (regras, equipe, FAQ). - **Layout:** blocos que você liga, desliga e arrasta: faixa de aviso ou cupom, topo com logo, promoção com contagem regressiva, grade de produtos, categorias, escada de ranks, compras recentes, maior comprador do mês. - **Global:** cores, fonte, logo, IP do servidor (com botão de copiar), Discord, jogadores online. As mudanças ficam num **rascunho**: **Ver prévia** mostra como o comprador verá (também no celular) e **Publicar** coloca no ar. Dá para ter várias vitrines salvas, duplicar, exportar e importar. Jogadores online e membros do Discord só aparecem acima de um mínimo (10 e 50 por padrão): número baixo afasta comprador. # Meta da comunidade (https://docs.rivoo.gg/guias/meta-da-comunidade) Em **Descontos › Meta**, defina um valor de vendas para o mês. A vitrine mostra uma barra com a porcentagem atingida (os valores em reais só aparecem se você ligar "Mostrar valores em reais"). - Contam as vendas pagas do mês (horário de Brasília), sem pedidos manuais e sem reembolsos. Dá para contar só alguns pacotes. - **Mensal** (zera todo mês) ou **repetível** (recomeça cada vez que bate). - Ao bater: **comandos em todos os servidores** (ex.: evento de XP em dobro), **mensagem no Discord** e uma **promoção na loja inteira**. Uma vez por ciclo. - O histórico mostra cada vez que a meta foi batida. # Presentes e gift cards (https://docs.rivoo.gg/guias/presentes-e-gift-cards) ## Presentear outro jogador [#presentear-outro-jogador] Na vitrine, o comprador pode marcar um item como **presente** e informar o nick de quem recebe, com uma mensagem. A entrega roda para quem recebe, com as regras do pacote valendo para ele (requisitos, limite). Nos comandos, `{buyer}` é quem pagou e `{gift_message}` a mensagem. No jogo, o plugin aceita `/comprar presentear`. Você liga ou desliga presentes na loja inteira e em cada pacote. ## Gift cards [#gift-cards] Em **Descontos › Gift cards**: - **Criar** um gift card (ou vários de uma vez, com exportação em CSV), com saldo e validade; **vender** como produto da loja. - O comprador usa o código **no campo do cupom**: paga parte ou todo o pedido. O saldo que sobra fica no cartão. - **Recarregar**, desativar e reenviar o e-mail com o código. - Num reembolso, você pode **devolver em gift card** em vez de devolver o dinheiro. - O comprador consulta o saldo na vitrine. O painel mostra o total em aberto em gift cards (dinheiro que os jogadores ainda podem gastar). # Produtos e categorias (https://docs.rivoo.gg/guias/produtos-e-categorias) Em **Produtos** você cadastra o que vende. Cada produto tem três abas: **Geral**, **Entrega** e **Onde aparece**. ![Cadastro de produto no painel](/prints/produto.webp) ## Geral [#geral] - **Nome, descrição e imagem.** Imagens pequenas de item do Minecraft (até 128 px) aparecem ampliadas sem borrar. - **Cobrança:** **Única** (paga uma vez), **Assinatura** (renova sozinha) ou **As duas** (o comprador escolhe). Veja [Assinatura e Pix Automático](/guias/assinatura-e-pix-automatico). - **Preço** em reais e **preço original** (aparece riscado, com o desconto calculado). - **Validade (dias):** depois desse prazo o benefício acaba e as ações de fim rodam (por exemplo, tirar o VIP). Vazio = permanente. - **Ícone:** no Minecraft, um item (`diamond_sword`) vira o ícone no menu do `/comprar`. - **Tags:** até 6, aparecem no card da vitrine (`30 dias`, `Mais vendido`). ## Entrega [#entrega] O que acontece quando o produto é pago, renovado, vence, é reembolsado ou entra em disputa: comandos no servidor, cargo no Discord, chave de licença ou arquivo. Veja [Plugin Minecraft](/entrega/plugin-minecraft) e as [variáveis de comando](/referencia-rapida/variaveis-de-comando). ## Regras de compra [#regras-de-compra] - **Limite por cliente** e **estoque**. - **Requisitos:** exigir (ou proibir) que o comprador já tenha outro pacote. Ex.: o kit de MVP só para quem é MVP. - **Ofertas junto:** produtos sugeridos no checkout quando este está no carrinho. ## Categorias [#categorias] Em **Produtos › Categorias** você agrupa os produtos como aparecem na loja (VIPs, Kits, Cash). Arraste para ordenar. Uma categoria **escalonada** vira uma escada de ranks: veja [Ranks e upgrade](/guias/ranks-e-upgrade). Pela API: [Criar produto](/api/referencia/produtos/criar-produto), [Criar categoria](/api/referencia/categorias/criar-categoria). # Ranks e upgrade (https://docs.rivoo.gg/guias/ranks-e-upgrade) Marque a categoria como **escalonada** e ordene os ranks do menor para o maior (VIP, VIP+, MVP, MVP+). A loja passa a tratar a categoria como uma escada: - Quem já tem um rank vê os de cima com o **preço do upgrade**: o valor do novo menos o que já pagou. - O comprador só pode ter **um rank por categoria**. Ao subir, o anterior termina com o motivo `UPGRADE` e as ações de fim dele rodam (por exemplo, tirar o grupo antigo). - Se o upgrade for reembolsado ou perder uma disputa, o **rank anterior volta**. - Upgrade abaixo de R$ 1,00 não é cobrado: a loja mostra o motivo em vez de criar um Pix de centavos. Dica: nos comandos, use a ação de **fim** do rank para remover o grupo, e a de **compra** para adicionar. Assim a troca no upgrade é automática. Os eventos [`entitlement.ended`](/webhooks/eventos/entitlement.ended) (com `endReason: "UPGRADE"`) e [`entitlement.created`](/webhooks/eventos/entitlement.created) contam a troca para o seu sistema. # Recuperação de carrinho (https://docs.rivoo.gg/guias/recuperacao-de-carrinho) Em **Descontos › Automáticos**: - **Lembrete de carrinho abandonado:** quem criou o pedido com e-mail e não pagou recebe um e-mail com um link que retoma o pedido (ou refaz, se expirou), com cupom opcional. - **Agradecimento pós-compra:** quem pagou recebe um e-mail de agradecimento, com cupom opcional para a próxima compra. O comprador pode se descadastrar pelo próprio e-mail. A tela mostra os números do mês: lembretes enviados, pedidos recuperados e valor recuperado. # IA (https://docs.rivoo.gg/ia) Dois jeitos de uma IA trabalhar com a Rivoo: Em qualquer página, **Abrir na IA** (no topo) manda a página para o ChatGPT, o Claude ou o Cursor, e **Copiar Markdown** copia o texto para colar onde quiser. # Markdown e llms.txt (https://docs.rivoo.gg/ia/llms) Esta doc é feita para ser lida por gente e por IA. - **Qualquer página em Markdown:** some `.md` ao fim da URL. Ex.: [/webhooks.md](/webhooks.md), [/api/referencia/pedidos/criar-pedido.md](/api/referencia/pedidos/criar-pedido.md). Pedidos com `Accept: text/markdown` recebem Markdown na URL normal. - **Índice:** [/llms.txt](/llms.txt) lista todas as páginas com link para o Markdown de cada uma. - **Tudo num arquivo:** [/llms-full.txt](/llms-full.txt), para colar no contexto de um agente. - **API em OpenAPI:** [`https://api.rivoo.gg/openapi.json`](https://api.rivoo.gg/openapi.json), só com as rotas que uma chave de API alcança. Serve para gerar clientes e para agentes que entendem OpenAPI. Para um agente que vai integrar com a Rivoo, um bom começo de prompt: ```text Leia https://docs.rivoo.gg/llms.txt e use a API da Rivoo (https://api.rivoo.gg, chave em RIVOO_API_KEY) para . Verifique a assinatura dos webhooks como em https://docs.rivoo.gg/webhooks.md. ``` # MCP (https://docs.rivoo.gg/ia/mcp) O MCP (Model Context Protocol) deixa um assistente de IA consultar a sua conta Rivoo. Você pergunta em português ("quanto vendi essa semana?", "quais entregas falharam hoje?") e ele busca a resposta na sua loja. **Endereço do servidor:** `https://mcp.rivoo.gg/mcp` O acesso é **só leitura**: o assistente não cria, altera nem reembolsa nada. Você entra com sua conta Rivoo (OAuth), escolhe as lojas que ele pode ver e pode desconectar quando quiser. ## Conectar [#conectar] Em **Configurações › Conectores › Adicionar conector personalizado**, cole `https://mcp.rivoo.gg/mcp` e clique em **Conectar**. Entre com sua conta Rivoo e autorize as lojas. Em **Configurações › Conectores** (com o modo desenvolvedor ligado), crie um conector com a URL `https://mcp.rivoo.gg/mcp` e autenticação OAuth. Entre com sua conta Rivoo e autorize as lojas. Em `~/.cursor/mcp.json`: ```json { "mcpServers": { "rivoo": { "url": "https://mcp.rivoo.gg/mcp" } } } ``` Na primeira chamada o Cursor abre o login da Rivoo. ## O que ele consegue ver [#o-que-ele-consegue-ver] | Ferramenta | O que faz | | --- | --- | | Listar lojas | Lojas que a conexão enxerga. | | Visão geral das lojas | Resumo de vendas de cada loja. | | Saldo da conta | Saldo disponível e a liberar (todas as lojas). | | Vendas ao longo do tempo | Faturamento, pedidos ou reembolsos por dia, semana ou mês. | | Listar pedidos / Ver pedido | Pedidos com status, itens e total. | | Listar produtos / Ver produto | Catálogo com preço e situação. | | Listar clientes / Ver cliente | Clientes da loja. | | Listar entregas | Entregas no jogo, no Discord e manuais, com o último erro. | Para automatizar ações (criar pedidos, cupons, reembolsos), use a [API](/api) com uma chave. # Documentação da Rivoo (https://docs.rivoo.gg/) A Rivoo é a loja do seu servidor de jogo: vitrine pronta, checkout com Pix, cartão e boleto, entrega automática no jogo e saque em reais. ## Para IA [#para-ia] Toda página desta doc existe também em Markdown: some `.md` ao fim da URL (por exemplo, [/webhooks.md](/webhooks.md)). O índice completo está em [/llms.txt](/llms.txt) e tudo num arquivo só em [/llms-full.txt](/llms-full.txt). # Changelog (https://docs.rivoo.gg/referencia-rapida/changelog) ## 31/10/2026 [#31102026] - Documentação pública em `docs.rivoo.gg`, com a referência da API gerada de [`/openapi.json`](https://api.rivoo.gg/openapi.json). - O `type` dos erros aponta para [Erros](/api/erros). - `Idempotency-Key` documentada em todos os `POST`. # Glossário (https://docs.rivoo.gg/referencia-rapida/glossario) Uma vitrine com seus produtos, clientes e pedidos. Na API, o recurso é `project`; uma conta pode ter várias lojas, com saldo único. Uma compra: itens, total, comprador e status. Pode vir da vitrine, de um link de pagamento, da API, do jogo ou do Discord. O que o comprador ganhou com a compra (rank, VIP, item), com início e, se tiver, fim. Acaba por vencimento, upgrade, reembolso ou disputa. O que a Rivoo faz quando o pedido é pago: comando no servidor, cargo no Discord, chave de licença, arquivo ou entrega manual. Uma regra de entrega de um produto (ou da loja toda): o comando ou cargo e quando roda (compra, renovação, fim, reembolso, disputa). Um servidor de jogo ligado à loja, pelo plugin ou pelo RCON, que recebe os comandos. Contestação do pagamento pelo comprador: MED no Pix, chargeback no cartão. O valor fica retido até o resultado. Um link com produtos fixos para mandar a alguém (único) ou divulgar (fixo, pago várias vezes). Parceiro com código de desconto e comissão sobre as vendas que trouxe. Pix recorrente autorizado uma vez pelo comprador: as renovações da assinatura são cobradas sozinhas. # Status de pedido (https://docs.rivoo.gg/referencia-rapida/status-de-pedido) | `status` | Quer dizer | Evento | | --- | --- | --- | | `OPEN` | Criado, esperando pagamento. | [`order.created`](/webhooks/eventos/order.created) | | `PAID` | Pago. As entregas rodam. | [`order.paid`](/webhooks/eventos/order.paid) | | `PARTIALLY_REFUNDED` | Parte do valor foi devolvida. | [`order.partially_refunded`](/webhooks/eventos/order.partially_refunded) | | `REFUNDED` | Todo o valor foi devolvido. | [`order.refunded`](/webhooks/eventos/order.refunded) | | `EXPIRED` | O prazo para pagar acabou. | [`order.expired`](/webhooks/eventos/order.expired) | | `CANCELED` | Cancelado antes do pagamento. | [`order.canceled`](/webhooks/eventos/order.canceled) | Um pedido pago pode ter uma **disputa** (MED no Pix, chargeback no cartão): ela não muda o `status`, aparece em `dispute` na lista de pedidos e nos eventos [`dispute.opened`](/webhooks/eventos/dispute.opened) e [`dispute.closed`](/webhooks/eventos/dispute.closed). ## Origem (`source`) [#origem-source] `STOREFRONT` (vitrine), `API`, `PAYMENT_LINK` (link de pagamento), `PLUGIN` (comando no jogo), `DISCORD`, `SUBSCRIPTION` (renovação) e `MANUAL` (registrado à mão, sem cobrança). # Variáveis de comando (https://docs.rivoo.gg/referencia-rapida/variaveis-de-comando) Nos comandos que um produto roda no servidor, estas variáveis são trocadas pelo valor da compra: | Variável | Vira | Exemplo | | --- | --- | --- | | `{player}` | Nick do jogador (ou o UUID, se não houver nick) | `Steve` | | `{username}` | O mesmo que `{player}` | `Steve` | | `{uuid}` | UUID do Minecraft, com hífens | `069a79f4-44e9-4726-a5be-fca90e38aaf5` | | `{id}` | Id estável: UUID no Minecraft, SteamID64 em jogos Steam | `76561198000000000` | | `{transaction}` | Id do pedido | `ord_mhexample0000vip0000001` | | `{product}` | Nome do produto | `VIP+ 30 dias` | | `{quantity}` | Quantidade comprada | `1` | | `{price}` | Preço pago, em reais | `29.90` | | `{currency}` | Moeda | `BRL` | | `{sku}` | SKU do produto, se tiver | `vip-plus` | | `{email}` | E-mail do comprador | `steve@exemplo.com` | | `{expiresAt}` | Fim do benefício (dd/mm/aaaa) | `30/11/2026` | | `{date}` | Data de hoje (dd/mm/aaaa, horário de Brasília) | `31/10/2026` | | `{server}` | Nome do servidor que roda o comando | `Survival` | | `{buyer}` | Nick de quem pagou (num presente, é quem deu) | `Alex` | | `{gift_message}` | Mensagem do presente | `Feliz aniversário!` | ## Exemplos [#exemplos] ```text lp user {player} parent addtemp vip 30d give {player} diamond 64 broadcast {player} virou VIP! Obrigado pelo apoio. ``` ## Segurança [#segurança] Só valores em formato seguro entram no comando: nick com letras, números e `_` (até 16), UUID e e-mail válidos. Um comando que usa `{player}` não roda se o nick tiver caracteres estranhos (`nome#tag`, link): a entrega fica como falha em vez de rodar com o jogador em branco. Variáveis desconhecidas ficam como foram escritas. Com **esperar o jogador estar online** ligado (o padrão), o comando espera ele entrar no servidor. # delivery.failed (https://docs.rivoo.gg/webhooks/eventos/delivery.failed) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Entrega falhou.** Um comando não pôde ser executado no servidor do jogo. `error` traz o nome do servidor e a resposta dele. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "delivery.failed", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "del_mhexample0000vip0000001", "orderId": "ord_mhexample0000vip0000001", "trigger": "PURCHASED", "error": "Survival: Unknown command" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # dispute.closed (https://docs.rivoo.gg/webhooks/eventos/dispute.closed) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Disputa encerrada.** A disputa terminou. `status` diz o resultado: `WON` (o valor volta ao seu saldo), `LOST` ou `CANCELED`. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "dispute.closed", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "dp_mhexample0000vip00000001", "orderId": "ord_mhexample0000vip0000001", "paymentId": "pay_mhexample0000vip0000001", "kind": "MED", "status": "WON", "amountCents": 2990 } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # dispute.opened (https://docs.rivoo.gg/webhooks/eventos/dispute.opened) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Disputa aberta.** O comprador contestou o pagamento: MED no Pix ou chargeback no cartão. O valor fica retido até o fim. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "dispute.opened", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "dp_mhexample0000vip00000001", "orderId": "ord_mhexample0000vip0000001", "paymentId": "pay_mhexample0000vip0000001", "kind": "MED", "status": "OPEN", "amountCents": 2990 } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # entitlement.created (https://docs.rivoo.gg/webhooks/eventos/entitlement.created) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Benefício entregue.** O comprador ganhou um benefício (rank, VIP, item) por uma compra ou renovação. Um evento por benefício. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "entitlement.created", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ent_mhexample0000vip0000001", "status": "ACTIVE", "productId": "prod_mhexample0000vip00001", "orderItemId": "oitem_mhexample0000vip00001", "customerId": "cus_mhexample0000steve00001", "quantity": 1, "recipient": { "kind": "MINECRAFT", "ref": "Steve", "name": "Steve" }, "discordUserId": null, "subscriptionId": null, "expiresAt": "2026-11-30T21:04:51.000Z", "endReason": null, "endedAt": null } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # entitlement.ended (https://docs.rivoo.gg/webhooks/eventos/entitlement.ended) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Benefício encerrado.** Um benefício acabou. `endReason`: `EXPIRED`, `REFUND`, `DISPUTE`, `UPGRADE`, `SUBSCRIPTION_ENDED` ou `MANUAL`. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "entitlement.ended", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ent_mhexample0000vip0000001", "status": "EXPIRED", "productId": "prod_mhexample0000vip00001", "orderItemId": "oitem_mhexample0000vip00001", "customerId": "cus_mhexample0000steve00001", "quantity": 1, "recipient": { "kind": "MINECRAFT", "ref": "Steve", "name": "Steve" }, "discordUserId": null, "subscriptionId": null, "expiresAt": "2026-11-30T21:04:51.000Z", "endReason": "EXPIRED", "endedAt": "2026-11-30T21:04:51.000Z" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # entitlement.restored (https://docs.rivoo.gg/webhooks/eventos/entitlement.restored) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Benefício restaurado.** Um benefício encerrado voltou a valer (ex.: disputa ganha, ou rank anterior devolvido quando o upgrade foi reembolsado). ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "entitlement.restored", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ent_mhexample0000vip0000001", "status": "ACTIVE", "productId": "prod_mhexample0000vip00001", "orderItemId": "oitem_mhexample0000vip00001", "customerId": "cus_mhexample0000steve00001", "quantity": 1, "recipient": { "kind": "MINECRAFT", "ref": "Steve", "name": "Steve" }, "discordUserId": null, "subscriptionId": null, "expiresAt": "2026-11-30T21:04:51.000Z", "endReason": null, "endedAt": null } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.canceled (https://docs.rivoo.gg/webhooks/eventos/order.canceled) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido cancelado.** Um pedido em aberto foi cancelado antes do pagamento. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.canceled", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.created (https://docs.rivoo.gg/webhooks/eventos/order.created) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido criado.** Um pedido foi criado (pela vitrine, API, link de pagamento, plugin, Discord, assinatura ou à mão). Ainda não foi pago. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.created", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001", "source": "STOREFRONT", "totalCents": 2990 } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.expired (https://docs.rivoo.gg/webhooks/eventos/order.expired) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido expirado.** O prazo para pagar acabou sem pagamento. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.expired", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.paid (https://docs.rivoo.gg/webhooks/eventos/order.paid) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido pago.** O pagamento do pedido foi confirmado. É o evento para liberar o que foi comprado no seu sistema. `paymentId` vem `null` em pedidos grátis e manuais. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.paid", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001", "source": "STOREFRONT", "totalCents": 2990, "paymentId": "pay_mhexample0000vip0000001" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.partially_refunded (https://docs.rivoo.gg/webhooks/eventos/order.partially_refunded) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido reembolsado em parte.** Parte do valor pago foi devolvida. `refundedCents` é o total devolvido até agora. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.partially_refunded", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001", "totalCents": 2990, "refundedCents": 1000, "refundId": "rfd_mhexample0000vip0000001" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.refunded (https://docs.rivoo.gg/webhooks/eventos/order.refunded) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido reembolsado.** O valor pago foi devolvido por inteiro. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.refunded", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001", "totalCents": 2990, "refundedCents": 2990, "refundId": "rfd_mhexample0000vip0000001" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # order.updated (https://docs.rivoo.gg/webhooks/eventos/order.updated) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pedido alterado.** Um pedido em aberto mudou de itens ou de cupom antes do pagamento; o total foi recalculado. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "order.updated", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001", "items": [ { "productId": "prod_mhexample0000vip00001", "quantity": 2 } ], "totalCents": 5980 } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # payment.succeeded (https://docs.rivoo.gg/webhooks/eventos/payment.succeeded) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Pagamento aprovado.** Um pagamento (Pix, cartão ou boleto) foi aprovado e pagou o pedido. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "payment.succeeded", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "pay_mhexample0000vip0000001", "orderId": "ord_mhexample0000vip0000001", "method": "PIX", "amountCents": 2990 } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # payout.failed (https://docs.rivoo.gg/webhooks/eventos/payout.failed) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Saque falhou.** O saque não foi concluído e o valor voltou ao saldo. `failureReason` diz o motivo. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "payout.failed", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "po_mhexample0000saque000001", "status": "FAILED", "amountCents": 50000, "feeCents": 100, "failureReason": "Conta de destino recusou o Pix", "reviewReason": null } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # payout.paid (https://docs.rivoo.gg/webhooks/eventos/payout.paid) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Saque pago.** O saque caiu na conta do titular. Vai para todas as lojas da conta. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "payout.paid", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "po_mhexample0000saque000001", "status": "PAID", "amountCents": 50000, "feeCents": 100, "failureReason": null, "reviewReason": null } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # refund.failed (https://docs.rivoo.gg/webhooks/eventos/refund.failed) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Reembolso falhou.** Não foi possível devolver o dinheiro. O valor continua retido; veja o pedido no painel. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "refund.failed", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "rfd_mhexample0000vip0000001", "orderId": "ord_mhexample0000vip0000001", "paymentId": "pay_mhexample0000vip0000001", "amountCents": 2990, "status": "FAILED", "reason": null, "requestedBy": "API_KEY" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # refund.succeeded (https://docs.rivoo.gg/webhooks/eventos/refund.succeeded) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Reembolso concluído.** O dinheiro chegou de volta ao comprador. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "refund.succeeded", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "rfd_mhexample0000vip0000001", "orderId": "ord_mhexample0000vip0000001", "paymentId": "pay_mhexample0000vip0000001", "amountCents": 2990, "status": "SUCCEEDED", "reason": "Pedido do cliente", "requestedBy": "USER" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # subscription.canceled (https://docs.rivoo.gg/webhooks/eventos/subscription.canceled) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Assinatura cancelada.** A assinatura foi cancelada. Com `atPeriodEnd: true` o benefício vale até `currentPeriodEnd`; com `false` acaba agora. `source`: `MERCHANT`, `CUSTOMER` ou `SYSTEM`. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "subscription.canceled", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "sub_mhexample0000vip0000001", "atPeriodEnd": true, "source": "CUSTOMER", "reason": null, "currentPeriodEnd": "2026-11-30T21:04:13.000Z" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # subscription.created (https://docs.rivoo.gg/webhooks/eventos/subscription.created) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Assinatura criada.** Uma assinatura foi criada, junto com o primeiro pedido dela. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "subscription.created", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "sub_mhexample0000vip0000001", "customerId": "cus_mhexample0000steve00001", "priceId": "price_mhexample0000vip0001", "orderId": "ord_mhexample0000vip0000001" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # subscription.ended (https://docs.rivoo.gg/webhooks/eventos/subscription.ended) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Assinatura encerrada.** A assinatura acabou de vez e os benefícios foram retirados. `reason`: `canceled`, `unpaid` ou `incomplete_expired`. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "subscription.ended", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "sub_mhexample0000vip0000001", "reason": "canceled" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # subscription.past_due (https://docs.rivoo.gg/webhooks/eventos/subscription.past_due) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Assinatura atrasada.** O período acabou sem a renovação paga. A Rivoo tenta cobrar de novo antes de encerrar. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "subscription.past_due", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "sub_mhexample0000vip0000001", "currentPeriodEnd": "2026-11-30T21:04:13.000Z" } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # subscription.renewed (https://docs.rivoo.gg/webhooks/eventos/subscription.renewed) {/* Generated by scripts/webhook-pages.mjs from data/webhook-events.json. Edit the JSON, not this file. */} **Assinatura renovada.** A cobrança de um novo período foi paga. ## Corpo enviado [#corpo-enviado] `POST` para a URL do seu webhook, com os headers `webhook-id`, `webhook-timestamp` e `webhook-signature` ([como verificar](/webhooks#verificar-a-assinatura)). ```json { "id": "evt_mhexample0000event00001", "type": "subscription.renewed", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "sub_mhexample0000vip0000001", "orderId": "ord_mhexample0000vip0000002", "periodStart": "2026-11-30T21:04:13.000Z", "periodEnd": "2026-12-30T21:04:13.000Z", "amountCents": 2990 } } } ``` O `id` do evento é o mesmo em todas as tentativas: use-o para não processar duas vezes. # Webhooks (https://docs.rivoo.gg/webhooks) Um webhook é uma URL sua que a Rivoo chama (`POST`, JSON) sempre que algo acontece na loja: pedido pago, reembolso, disputa, renovação de assinatura. É o jeito certo de liberar uma compra no seu sistema, em vez de ficar consultando a API. ## Cadastrar [#cadastrar] No painel, abra **Integrações › Webhooks** e clique em **Adicionar**. Ou pela API: [Criar webhook](/api/referencia/webhooks/criar-webhook). Informe a URL (HTTPS, pública) e os eventos que ela recebe. Sem eventos marcados, ela recebe todos. Guarde o **segredo de assinatura** (`whsec_...`). Ele aparece só nesta hora e serve para conferir que o pedido veio da Rivoo. ## O que chega [#o-que-chega] ```http POST /webhooks/rivoo HTTP/1.1 Content-Type: application/json User-Agent: Rivoo-Webhooks/1 webhook-id: evt_mhexample0000event00001 webhook-timestamp: 1793567091 webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4= { "id": "evt_mhexample0000event00001", "type": "order.paid", "createdAt": "2026-10-31T21:04:51.000Z", "data": { "object": { "id": "ord_mhexample0000vip0000001", "source": "STOREFRONT", "totalCents": 2990, "paymentId": "pay_mhexample0000vip0000001" } } } ``` `data.object` muda conforme o evento: veja a [lista de eventos](/webhooks/eventos/order.paid). Valores em dinheiro vêm em centavos (`2990` = R$ 29,90). ## Verificar a assinatura [#verificar-a-assinatura] O formato segue o padrão aberto [Standard Webhooks](https://www.standardwebhooks.com). A assinatura é um HMAC-SHA256 de `webhook-id.webhook-timestamp.corpo`, com a chave sendo o segredo sem o prefixo `whsec_`, decodificado de base64. Compare com cada assinatura do header (separadas por espaço, cada uma com o prefixo `v1,`): durante a troca do segredo chegam duas. Use o corpo **cru**, exatamente como chegou, antes de qualquer parse de JSON. E recuse timestamps com mais de 5 minutos de diferença, para ninguém reenviar um pedido antigo. ```js import { createHmac, timingSafeEqual } from 'node:crypto'; // rawBody: o corpo como string, antes do JSON.parse export function verify(rawBody, headers, secret = process.env.RIVOO_WEBHOOK_SECRET) { const id = headers['webhook-id']; const ts = Number(headers['webhook-timestamp']); if (Math.abs(Date.now() / 1000 - ts) > 300) return false; const key = Buffer.from(secret.replace(/^whsec_/, ''), 'base64'); const expected = createHmac('sha256', key).update(`${id}.${ts}.${rawBody}`).digest(); return headers['webhook-signature'].split(' ').some((sig) => { const got = Buffer.from(sig.replace(/^v1,/, ''), 'base64'); return got.length === expected.length && timingSafeEqual(got, expected); }); } ``` ```python import base64, hashlib, hmac, os, time def verify(raw_body: bytes, headers, secret=os.environ["RIVOO_WEBHOOK_SECRET"]) -> bool: msg_id = headers["webhook-id"] ts = int(headers["webhook-timestamp"]) if abs(time.time() - ts) > 300: return False key = base64.b64decode(secret.removeprefix("whsec_")) content = f"{msg_id}.{ts}.".encode() + raw_body expected = base64.b64encode(hmac.new(key, content, hashlib.sha256).digest()).decode() return any( hmac.compare_digest(sig.removeprefix("v1,"), expected) for sig in headers["webhook-signature"].split(" ") ) ``` ```php 300) return false; $key = base64_decode(preg_replace('/^whsec_/', '', $secret)); $expected = base64_encode(hash_hmac('sha256', "$id.$ts.$rawBody", $key, true)); foreach (explode(' ', $headers['webhook-signature']) as $sig) { if (hash_equals($expected, preg_replace('/^v1,/', '', $sig))) return true; } return false; } ``` ## Responder [#responder] Responda **2xx em até 10 segundos**. Faça o trabalho pesado depois (fila), não antes de responder. Redirecionamentos não são seguidos. ## Novas tentativas [#novas-tentativas] Se a resposta não for 2xx (ou demorar mais de 10 s), a Rivoo tenta de novo: 8 tentativas no total, depois de 1 min, 5 min, 30 min, 2 h, 6 h, 12 h e 24 h. O `webhook-id` é o mesmo em todas: guarde os ids já processados e ignore repetidos. Uma URL que falha seguido por mais de 3 dias é desativada, e você recebe um aviso no painel. Reative em **Integrações › Webhooks** depois de corrigir. ## Testar [#testar] Use **Enviar teste** no webhook (ou [Testar webhook](/api/referencia/webhooks/testar-webhook)) para receber um evento de exemplo. Em [Envios do webhook](/api/referencia/webhooks/envios-do-webhook) você vê cada tentativa com o código de resposta. ## Trocar o segredo [#trocar-o-segredo] [Trocar segredo do webhook](/api/referencia/webhooks/trocar-segredo-do-webhook) gera um segredo novo. Por 24 horas as mensagens chegam assinadas com os dois (duas assinaturas no header), para você atualizar sem perder eventos. # Ver configurações (https://docs.rivoo.gg/api/referencia/configuracoes/ver-configuracoes) `GET https://api.rivoo.gg/v1/settings` Devolve as configurações da loja: nome, moeda, e-mails e regras de checkout. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/settings" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar configurações (https://docs.rivoo.gg/api/referencia/configuracoes/alterar-configuracoes) `PATCH https://api.rivoo.gg/v1/settings` Altera só os campos enviados das configurações da loja. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "commandExpiryDays": { "type": "number", "nullable": true, "minimum": 1, "maximum": 365 }, "alwaysAskRecipient": { "type": "boolean" }, "giftingEnabled": { "type": "boolean" }, "playerIdLabel": { "type": "string", "minLength": 1, "maxLength": 40 }, "playerIdHelp": { "type": "string", "nullable": true, "maxLength": 200 }, "playerIdFormat": { "type": "string", "enum": [ "TEXT", "NUMBER", "STEAM_TRADE_URL", "STEAM_ID64" ] }, "refundPolicy": { "type": "string", "enum": [ "NONE", "UNCLAIMED_7_DAYS" ] }, "discountStacking": { "type": "string", "enum": [ "PER_ITEM", "CART_AFTER_AUTOMATIC", "CART_BEFORE_AUTOMATIC" ] }, "checkoutMethods": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "PIX", "PIX_AUTOMATIC", "CARD", "BOLETO" ] } }, "checkoutTheme": { "type": "string", "nullable": true, "enum": [ "LIGHT", "DARK", "SYSTEM" ] }, "checkoutRadius": { "type": "string", "nullable": true, "enum": [ "NONE", "SM", "MD", "LG", "FULL" ] }, "checkoutMessage": { "type": "string", "nullable": true, "maxLength": 500 }, "checkoutSuggestions": { "type": "boolean" }, "checkoutLayout": { "type": "string", "enum": [ "COMPACT", "SPLIT" ] } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/settings" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Listar chaves de API (https://docs.rivoo.gg/api/referencia/chaves-de-api/listar-chaves-de-api) `GET https://api.rivoo.gg/v1/api-keys` Lista as chaves da loja com prefixo, permissões e último uso. O segredo nunca volta. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/api-keys" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar categorias (https://docs.rivoo.gg/api/referencia/categorias/listar-categorias) `GET https://api.rivoo.gg/v1/categories` Lista as categorias da loja na ordem da vitrine. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `parentId` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/categories" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar categoria (https://docs.rivoo.gg/api/referencia/categorias/criar-categoria) `POST https://api.rivoo.gg/v1/categories` Cria uma categoria. Categorias escalonadas viram uma escada de ranks com upgrade pagando a diferença. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "description": { "type": "string", "maxLength": 500 }, "imageUrl": { "type": "string", "format": "uri" }, "kind": { "type": "string", "enum": [ "STANDARD", "TIERED" ] }, "parentId": { "type": "string" } }, "required": [ "name" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/categories" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string"}' ``` ## Resposta 201 # Ordenar categorias (https://docs.rivoo.gg/api/referencia/categorias/ordenar-categorias) `PUT https://api.rivoo.gg/v1/categories/order` Define a ordem das categorias na vitrine pela lista de ids enviada. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "parentId": { "type": "string", "nullable": true }, "categoryIds": { "maxItems": 500, "type": "array", "items": { "type": "string" } } }, "required": [ "categoryIds" ] } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/categories/order" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"categoryIds":["string"]}' ``` ## Resposta 204 # Ver categoria (https://docs.rivoo.gg/api/referencia/categorias/ver-categoria) `GET https://api.rivoo.gg/v1/categories/{id}` Devolve uma categoria. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/categories/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar categoria (https://docs.rivoo.gg/api/referencia/categorias/alterar-categoria) `PATCH https://api.rivoo.gg/v1/categories/{id}` Altera só os campos enviados da categoria. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "description": { "type": "string", "nullable": true, "maxLength": 500 }, "imageUrl": { "type": "string", "nullable": true, "format": "uri" }, "kind": { "type": "string", "enum": [ "STANDARD", "TIERED" ] } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/categories/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Arquivar categoria (https://docs.rivoo.gg/api/referencia/categorias/arquivar-categoria) `DELETE https://api.rivoo.gg/v1/categories/{id}` Tira a categoria da vitrine. Pedidos antigos continuam apontando para ela. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/categories/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Listar produtos (https://docs.rivoo.gg/api/referencia/produtos/listar-produtos) `GET https://api.rivoo.gg/v1/products` Lista os produtos da loja, com busca e filtro por categoria. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `status` | query | não | | | `categoryId` | query | não | | | `search` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar produto (https://docs.rivoo.gg/api/referencia/produtos/criar-produto) `POST https://api.rivoo.gg/v1/products` Cria um produto com preço em centavos, imagem, descrição e regras de compra. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "description": { "type": "string", "maxLength": 5000 }, "sku": { "type": "string", "pattern": "^[A-Za-z0-9._-]{1,64}$" }, "price": { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] }, "compareAt": { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] }, "imageUrl": { "type": "string", "format": "uri" }, "icon": { "type": "string", "maxLength": 60 }, "gallery": { "maxItems": 10, "type": "array", "items": { "type": "string", "format": "uri" } }, "videoUrl": { "type": "string", "format": "uri" }, "tags": { "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 30 } }, "accessDays": { "type": "number", "nullable": true, "minimum": 1, "maximum": 3650 }, "categoryId": { "type": "string" }, "featured": { "type": "boolean" }, "listed": { "type": "boolean" }, "badge": { "type": "string", "nullable": true, "minLength": 1, "maxLength": 20 }, "accentColor": { "type": "string", "nullable": true, "pattern": "^#[0-9a-fA-F]{6}$" }, "visibleFrom": { "type": "string", "nullable": true }, "visibleUntil": { "type": "string", "nullable": true }, "requireLogin": { "type": "boolean" }, "limitTotal": { "type": "number", "nullable": true, "minimum": 1, "maximum": 1000000 }, "limitPerCustomer": { "type": "number", "nullable": true, "minimum": 1, "maximum": 1000000 }, "limitCountsExpired": { "type": "boolean" }, "singleQuantity": { "type": "boolean" }, "giftCardValue": { "nullable": true, "type": "object", "allOf": [ { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] } ] }, "giftCardDays": { "type": "number", "nullable": true, "minimum": 1, "maximum": 3650 }, "acceptsGiftCard": { "type": "boolean" }, "giftable": { "type": "boolean" } }, "required": [ "name", "description", "price" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/products" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","description":"string","price":{"amount":0}}' ``` ## Resposta 201 # Ordenar produtos (https://docs.rivoo.gg/api/referencia/produtos/ordenar-produtos) `PUT https://api.rivoo.gg/v1/products/order` Define a ordem dos produtos dentro da categoria pela lista de ids enviada. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "categoryId": { "type": "string", "nullable": true }, "productIds": { "maxItems": 1000, "type": "array", "items": { "type": "string" } } }, "required": [ "productIds" ] } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/products/order" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"productIds":["string"]}' ``` ## Resposta 204 # Ver produto (https://docs.rivoo.gg/api/referencia/produtos/ver-produto) `GET https://api.rivoo.gg/v1/products/{id}` Devolve um produto com preços, regras e ações de entrega. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar produto (https://docs.rivoo.gg/api/referencia/produtos/alterar-produto) `PATCH https://api.rivoo.gg/v1/products/{id}` Altera só os campos enviados do produto. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "description": { "type": "string", "maxLength": 5000 }, "sku": { "type": "string", "nullable": true, "pattern": "^[A-Za-z0-9._-]{1,64}$" }, "imageUrl": { "type": "string", "nullable": true, "format": "uri" }, "icon": { "type": "string", "nullable": true, "maxLength": 60 }, "gallery": { "maxItems": 10, "type": "array", "items": { "type": "string", "format": "uri" } }, "videoUrl": { "type": "string", "nullable": true, "format": "uri" }, "tags": { "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 30 } }, "accessDays": { "type": "number", "nullable": true, "minimum": 1, "maximum": 3650 }, "categoryId": { "type": "string", "nullable": true }, "featured": { "type": "boolean" }, "listed": { "type": "boolean" }, "badge": { "type": "string", "nullable": true, "minLength": 1, "maxLength": 20 }, "accentColor": { "type": "string", "nullable": true, "pattern": "^#[0-9a-fA-F]{6}$" }, "visibleFrom": { "type": "string", "nullable": true }, "visibleUntil": { "type": "string", "nullable": true }, "requireLogin": { "type": "boolean" }, "limitTotal": { "type": "number", "nullable": true, "minimum": 1, "maximum": 1000000 }, "limitPerCustomer": { "type": "number", "nullable": true, "minimum": 1, "maximum": 1000000 }, "limitCountsExpired": { "type": "boolean" }, "singleQuantity": { "type": "boolean" }, "giftCardValue": { "nullable": true, "type": "object", "allOf": [ { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] } ] }, "giftCardDays": { "type": "number", "nullable": true, "minimum": 1, "maximum": 3650 }, "acceptsGiftCard": { "type": "boolean" }, "giftable": { "type": "boolean" }, "status": { "type": "string", "enum": [ "ACTIVE", "ARCHIVED" ] } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/products/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Arquivar produto (https://docs.rivoo.gg/api/referencia/produtos/arquivar-produto) `DELETE https://api.rivoo.gg/v1/products/{id}` Tira o produto da vitrine. Pedidos e benefícios já entregues não mudam. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/products/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Ver requisitos do produto (https://docs.rivoo.gg/api/referencia/produtos/ver-requisitos-do-produto) `GET https://api.rivoo.gg/v1/products/{id}/requirements` Pacotes que o comprador precisa ter (ou não ter) para comprar este produto. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{id}/requirements" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Definir requisitos do produto (https://docs.rivoo.gg/api/referencia/produtos/definir-requisitos-do-produto) `PUT https://api.rivoo.gg/v1/products/{id}/requirements` Substitui a lista de pacotes exigidos ou proibidos para comprar este produto. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "productIds": { "uniqueItems": true, "maxItems": 20, "type": "array", "items": { "type": "string" } }, "requiresAll": { "type": "boolean" } }, "required": [ "productIds", "requiresAll" ] } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/products/{id}/requirements" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"productIds":["string"],"requiresAll":true}' ``` ## Resposta 200 # Ver ofertas do produto (https://docs.rivoo.gg/api/referencia/produtos/ver-ofertas-do-produto) `GET https://api.rivoo.gg/v1/products/{id}/upsells` Produtos oferecidos junto no checkout quando este está no carrinho. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{id}/upsells" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Definir ofertas do produto (https://docs.rivoo.gg/api/referencia/produtos/definir-ofertas-do-produto) `PUT https://api.rivoo.gg/v1/products/{id}/upsells` Substitui os produtos oferecidos junto no checkout. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "productIds": { "uniqueItems": true, "maxItems": 5, "type": "array", "items": { "type": "string" } } }, "required": [ "productIds" ] } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/products/{id}/upsells" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"productIds":["string"]}' ``` ## Resposta 200 # Listar preços (https://docs.rivoo.gg/api/referencia/precos/listar-precos) `GET https://api.rivoo.gg/v1/products/{productId}/prices` Preços do produto: avulso e de assinatura (mensal, trimestral…). Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `active` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{productId}/prices" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar preço (https://docs.rivoo.gg/api/referencia/precos/criar-preco) `POST https://api.rivoo.gg/v1/products/{productId}/prices` Adiciona um preço ao produto, em centavos, avulso ou recorrente. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "type": { "type": "string", "enum": [ "ONE_TIME", "RECURRING" ] }, "amount": { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] }, "compareAt": { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] }, "interval": { "type": "string", "enum": [ "YEAR", "WEEK", "DAY", "MONTH" ] }, "intervalCount": { "type": "number", "minimum": 1, "maximum": 12 }, "makeDefault": { "type": "boolean" } }, "required": [ "type", "amount" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/products/{productId}/prices" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type":"ONE_TIME","amount":{"amount":0}}' ``` ## Resposta 201 # Alterar preço (https://docs.rivoo.gg/api/referencia/precos/alterar-preco) `PATCH https://api.rivoo.gg/v1/products/{productId}/prices/{priceId}` Altera ou desativa um preço. Assinaturas existentes mantêm o valor contratado. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `priceId` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "active": { "type": "boolean" } }, "required": [ "active" ] } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/products/{productId}/prices/{priceId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"active":true}' ``` ## Resposta 200 # Listar chaves de licença (https://docs.rivoo.gg/api/referencia/chaves-de-licenca/listar-chaves-de-licenca) `GET https://api.rivoo.gg/v1/products/{productId}/license-keys` Estoque de chaves do produto: livres, entregues e revogadas. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `status` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{productId}/license-keys" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Importar chaves de licença (https://docs.rivoo.gg/api/referencia/chaves-de-licenca/importar-chaves-de-licenca) `POST https://api.rivoo.gg/v1/products/{productId}/license-keys` Adiciona chaves ao estoque. Cada compra paga recebe uma chave por e-mail. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "keys": { "minItems": 1, "maxItems": 1000, "type": "array", "items": { "type": "string", "maxLength": 500, "minLength": 1 } } }, "required": [ "keys" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/products/{productId}/license-keys" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"keys":["string"]}' ``` ## Resposta 201 # Revogar chave de licença (https://docs.rivoo.gg/api/referencia/chaves-de-licenca/revogar-chave-de-licenca) `POST https://api.rivoo.gg/v1/products/{productId}/license-keys/{keyId}/revoke` Marca a chave como revogada; ela não é entregue de novo. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `keyId` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/products/{productId}/license-keys/{keyId}/revoke" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar arquivos (https://docs.rivoo.gg/api/referencia/arquivos/listar-arquivos) `GET https://api.rivoo.gg/v1/products/{productId}/files` Arquivos que o comprador baixa pelo recibo depois do pagamento. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{productId}/files" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Adicionar arquivo (https://docs.rivoo.gg/api/referencia/arquivos/adicionar-arquivo) `POST https://api.rivoo.gg/v1/products/{productId}/files` Anexa um arquivo ao produto para download após a compra. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "contentType": { "type": "string", "pattern": "^[\\w.+-]+\\/[\\w.+-]+$" }, "sizeBytes": { "type": "number", "minimum": 1, "maximum": 104857600 } }, "required": [ "name", "contentType", "sizeBytes" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/products/{productId}/files" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","contentType":"string","sizeBytes":1}' ``` ## Resposta 201 # Remover arquivo (https://docs.rivoo.gg/api/referencia/arquivos/remover-arquivo) `DELETE https://api.rivoo.gg/v1/products/{productId}/files/{fileId}` Remove o arquivo do produto. Links já enviados deixam de funcionar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `fileId` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/products/{productId}/files/{fileId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Listar cupons e promoções (https://docs.rivoo.gg/api/referencia/cupons-e-promocoes/listar-cupons-e-promocoes) `GET https://api.rivoo.gg/v1/discounts` Lista cupons (com código) e promoções automáticas da loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `method` | query | não | | | `active` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/discounts" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar cupom ou promoção (https://docs.rivoo.gg/api/referencia/cupons-e-promocoes/criar-cupom-ou-promocao) `POST https://api.rivoo.gg/v1/discounts` Cria um desconto em porcentagem ou valor, com prazo, limite de usos, gasto mínimo e produtos. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "method": { "type": "string", "enum": [ "AUTOMATIC", "CODE" ] }, "code": { "type": "string", "pattern": "^[A-Z0-9_-]{3,32}$" }, "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "kind": { "type": "string", "enum": [ "PERCENT", "FIXED" ] }, "value": { "type": "number", "minimum": 1, "maximum": 2147483647 }, "scope": { "type": "string", "enum": [ "ALL", "CATEGORIES", "PRODUCTS" ] }, "categoryIds": { "uniqueItems": true, "maxItems": 100, "type": "array", "items": { "type": "string" } }, "productIds": { "uniqueItems": true, "maxItems": 500, "type": "array", "items": { "type": "string" } }, "startsAt": { "type": "string", "nullable": true }, "endsAt": { "type": "string", "nullable": true }, "maxUses": { "type": "number", "nullable": true, "minimum": 1, "maximum": 2147483647 }, "maxUsesPerCustomer": { "type": "number", "nullable": true, "minimum": 1, "maximum": 2147483647 }, "minSubtotal": { "nullable": true, "type": "object", "allOf": [ { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] } ] }, "customerId": { "type": "string", "nullable": true }, "requiredProductIds": { "uniqueItems": true, "maxItems": 50, "type": "array", "items": { "type": "string" } }, "startCommands": { "maxItems": 5, "type": "array", "items": { "type": "string", "maxLength": 500 } }, "endCommands": { "maxItems": 5, "type": "array", "items": { "type": "string", "maxLength": 500 } }, "active": { "type": "boolean" } }, "required": [ "method", "name", "kind", "value" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/discounts" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"AUTOMATIC","name":"string","kind":"PERCENT","value":1}' ``` ## Resposta 201 # Ver cupom ou promoção (https://docs.rivoo.gg/api/referencia/cupons-e-promocoes/ver-cupom-ou-promocao) `GET https://api.rivoo.gg/v1/discounts/{id}` Devolve um desconto com as regras e o número de usos. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/discounts/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar cupom ou promoção (https://docs.rivoo.gg/api/referencia/cupons-e-promocoes/alterar-cupom-ou-promocao) `PATCH https://api.rivoo.gg/v1/discounts/{id}` Altera só os campos enviados do desconto. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "code": { "type": "string", "pattern": "^[A-Z0-9_-]{3,32}$" }, "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "kind": { "type": "string", "enum": [ "PERCENT", "FIXED" ] }, "value": { "type": "number", "minimum": 1, "maximum": 2147483647 }, "scope": { "type": "string", "enum": [ "ALL", "CATEGORIES", "PRODUCTS" ] }, "categoryIds": { "uniqueItems": true, "maxItems": 100, "type": "array", "items": { "type": "string" } }, "productIds": { "uniqueItems": true, "maxItems": 500, "type": "array", "items": { "type": "string" } }, "startsAt": { "type": "string", "nullable": true }, "endsAt": { "type": "string", "nullable": true }, "maxUses": { "type": "number", "nullable": true, "minimum": 1, "maximum": 2147483647 }, "maxUsesPerCustomer": { "type": "number", "nullable": true, "minimum": 1, "maximum": 2147483647 }, "minSubtotal": { "nullable": true, "type": "object", "allOf": [ { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "maximum": 10000000000 }, "currency": { "type": "string", "enum": [ "BRL" ] } }, "required": [ "amount" ] } ] }, "customerId": { "type": "string", "nullable": true }, "requiredProductIds": { "uniqueItems": true, "maxItems": 50, "type": "array", "items": { "type": "string" } }, "startCommands": { "maxItems": 5, "type": "array", "items": { "type": "string", "maxLength": 500 } }, "endCommands": { "maxItems": 5, "type": "array", "items": { "type": "string", "maxLength": 500 } }, "active": { "type": "boolean" } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/discounts/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Arquivar cupom ou promoção (https://docs.rivoo.gg/api/referencia/cupons-e-promocoes/arquivar-cupom-ou-promocao) `DELETE https://api.rivoo.gg/v1/discounts/{id}` Encerra o desconto. Pedidos que já usaram continuam com ele. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/discounts/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Usos do cupom (https://docs.rivoo.gg/api/referencia/cupons-e-promocoes/usos-do-cupom) `GET https://api.rivoo.gg/v1/discounts/{id}/redemptions` Pedidos que usaram o desconto, com o valor descontado em cada um. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/discounts/{id}/redemptions" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar clientes (https://docs.rivoo.gg/api/referencia/clientes/listar-clientes) `GET https://api.rivoo.gg/v1/customers` Lista os clientes da loja, com busca por e-mail ou nick. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `search` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/customers" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 ```json { "data": [ { "id": "cus_mhexample0000steve00001", "email": "steve@exemplo.com", "name": "Steve", "taxId": null, "phone": null, "identities": [ { "id": "cid_mhexample0000steve00001", "kind": "MINECRAFT", "value": "Steve", "displayName": "Steve", "createdAt": "2026-10-31T21:04:13.000Z" } ], "createdAt": "2026-10-31T21:04:13.000Z", "updatedAt": "2026-10-31T21:04:13.000Z" } ], "hasMore": false } ``` # Criar cliente (https://docs.rivoo.gg/api/referencia/clientes/criar-cliente) `POST https://api.rivoo.gg/v1/customers` Cadastra um cliente com e-mail e, se quiser, identidades de jogo. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "email": { "type": "string", "format": "email" }, "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "taxId": { "type": "string", "pattern": "^(\\d{11}|\\d{14})$" }, "phone": { "type": "string", "pattern": "^\\+?\\d{10,15}$" } } } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/customers" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 201 # Ver cliente (https://docs.rivoo.gg/api/referencia/clientes/ver-cliente) `GET https://api.rivoo.gg/v1/customers/{id}` Devolve um cliente com total gasto e número de pedidos. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/customers/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 ```json { "id": "cus_mhexample0000steve00001", "email": "steve@exemplo.com", "name": "Steve", "taxId": null, "phone": null, "identities": [ { "id": "cid_mhexample0000steve00001", "kind": "MINECRAFT", "value": "Steve", "displayName": "Steve", "createdAt": "2026-10-31T21:04:13.000Z" } ], "createdAt": "2026-10-31T21:04:13.000Z", "updatedAt": "2026-10-31T21:04:13.000Z" } ``` # Alterar cliente (https://docs.rivoo.gg/api/referencia/clientes/alterar-cliente) `PATCH https://api.rivoo.gg/v1/customers/{id}` Altera só os campos enviados do cliente. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "email": { "type": "string", "nullable": true, "format": "email" }, "name": { "type": "string", "nullable": true, "minLength": 1, "maxLength": 120 }, "taxId": { "type": "string", "nullable": true, "pattern": "^(\\d{11}|\\d{14})$" }, "phone": { "type": "string", "nullable": true, "pattern": "^\\+?\\d{10,15}$" } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/customers/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Arquivar cliente (https://docs.rivoo.gg/api/referencia/clientes/arquivar-cliente) `DELETE https://api.rivoo.gg/v1/customers/{id}` Arquiva o cliente. Pedidos e benefícios ficam no histórico. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/customers/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Listar identidades (https://docs.rivoo.gg/api/referencia/clientes/listar-identidades) `GET https://api.rivoo.gg/v1/customers/{id}/identities` Contas de jogo do cliente (nick do Minecraft, Steam, Discord…). Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/customers/{id}/identities" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Adicionar identidade (https://docs.rivoo.gg/api/referencia/clientes/adicionar-identidade) `POST https://api.rivoo.gg/v1/customers/{id}/identities` Liga uma conta de jogo ao cliente. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "kind": { "type": "string", "enum": [ "DISCORD", "MINECRAFT_UUID", "MINECRAFT_NAME", "EMAIL", "GAME_ACCOUNT" ] }, "value": { "type": "string", "minLength": 1, "maxLength": 200 }, "displayName": { "type": "string", "maxLength": 60 } }, "required": [ "kind", "value" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/customers/{id}/identities" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"kind":"DISCORD","value":"string"}' ``` ## Resposta 201 # Remover identidade (https://docs.rivoo.gg/api/referencia/clientes/remover-identidade) `DELETE https://api.rivoo.gg/v1/customers/{id}/identities/{identityId}` Desliga a conta de jogo do cliente. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `identityId` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/customers/{id}/identities/{identityId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Benefícios do cliente (https://docs.rivoo.gg/api/referencia/clientes/beneficios-do-cliente) `GET https://api.rivoo.gg/v1/customers/{id}/entitlements` Benefícios ativos e encerrados do cliente (ranks, assinaturas, itens). Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/customers/{id}/entitlements" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar bloqueios (https://docs.rivoo.gg/api/referencia/bloqueios/listar-bloqueios) `GET https://api.rivoo.gg/v1/bans` Jogadores, e-mails, contas do Discord e IPs impedidos de comprar na loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `kind` | query | não | | | `search` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/bans" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Bloquear comprador (https://docs.rivoo.gg/api/referencia/bloqueios/bloquear-comprador) `POST https://api.rivoo.gg/v1/bans` Impede um jogador, e-mail, conta do Discord ou IP de comprar na loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "kind": { "type": "string", "enum": [ "DISCORD", "EMAIL", "PLAYER", "IP" ] }, "value": { "type": "string", "minLength": 1, "maxLength": 200 }, "reason": { "type": "string", "enum": [ "MANUAL", "DISPUTE", "FRAUD" ] }, "note": { "type": "string", "maxLength": 500 } }, "required": [ "kind", "value" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/bans" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"kind":"DISCORD","value":"string"}' ``` ## Resposta 201 # Desbloquear comprador (https://docs.rivoo.gg/api/referencia/bloqueios/desbloquear-comprador) `DELETE https://api.rivoo.gg/v1/bans/{id}` Remove o bloqueio. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/bans/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Ver vitrine (https://docs.rivoo.gg/api/referencia/vitrine/ver-vitrine) `GET https://api.rivoo.gg/v1/storefront` Rascunho e versão publicada da vitrine da loja. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/storefront" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Salvar rascunho da vitrine (https://docs.rivoo.gg/api/referencia/vitrine/salvar-rascunho-da-vitrine) `PATCH https://api.rivoo.gg/v1/storefront` Salva o rascunho da vitrine sem publicar. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "draft": { "type": "object", "additionalProperties": true } }, "required": [ "draft" ] } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/storefront" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"draft":{}}' ``` ## Resposta 200 # Publicar vitrine (https://docs.rivoo.gg/api/referencia/vitrine/publicar-vitrine) `POST https://api.rivoo.gg/v1/storefront/publish` Publica o rascunho atual; a loja muda na hora. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefront/publish" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Link de prévia (https://docs.rivoo.gg/api/referencia/vitrine/link-de-previa) `POST https://api.rivoo.gg/v1/storefront/preview-link` Gera um link temporário para ver o rascunho como o comprador verá. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefront/preview-link" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar vitrines (https://docs.rivoo.gg/api/referencia/vitrine/listar-vitrines) `GET https://api.rivoo.gg/v1/storefronts` Vitrines da loja (temas salvos), com a que está no ar marcada. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/storefronts" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar vitrine (https://docs.rivoo.gg/api/referencia/vitrine/criar-vitrine) `POST https://api.rivoo.gg/v1/storefronts` Cria uma vitrine a partir de um template. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "kind": { "type": "string", "enum": [ "IN_GAME", "LANDING", "COLLECTION" ] }, "draft": { "type": "object", "additionalProperties": true } }, "required": [ "name", "kind" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefronts" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","kind":"IN_GAME"}' ``` ## Resposta 201 # Importar vitrine (https://docs.rivoo.gg/api/referencia/vitrine/importar-vitrine) `POST https://api.rivoo.gg/v1/storefronts/import` Cria uma vitrine a partir de um arquivo exportado. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "kind": { "type": "string", "enum": [ "IN_GAME", "LANDING", "COLLECTION" ] }, "draft": { "type": "object", "additionalProperties": true } }, "required": [ "name", "draft" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefronts/import" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","draft":{}}' ``` ## Resposta 201 # Ver vitrine salva (https://docs.rivoo.gg/api/referencia/vitrine/ver-vitrine-salva) `GET https://api.rivoo.gg/v1/storefronts/{id}` Devolve uma vitrine salva. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/storefronts/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar vitrine salva (https://docs.rivoo.gg/api/referencia/vitrine/alterar-vitrine-salva) `PATCH https://api.rivoo.gg/v1/storefronts/{id}` Altera só os campos enviados da vitrine. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "kind": { "type": "string", "enum": [ "IN_GAME", "LANDING", "COLLECTION" ] }, "draft": { "type": "object", "additionalProperties": true } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/storefronts/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Apagar vitrine salva (https://docs.rivoo.gg/api/referencia/vitrine/apagar-vitrine-salva) `DELETE https://api.rivoo.gg/v1/storefronts/{id}` Apaga uma vitrine que não está no ar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/storefronts/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Publicar vitrine salva (https://docs.rivoo.gg/api/referencia/vitrine/publicar-vitrine-salva) `POST https://api.rivoo.gg/v1/storefronts/{id}/publish` Coloca esta vitrine no ar no lugar da atual. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefronts/{id}/publish" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Duplicar vitrine (https://docs.rivoo.gg/api/referencia/vitrine/duplicar-vitrine) `POST https://api.rivoo.gg/v1/storefronts/{id}/duplicate` Cria uma cópia da vitrine para editar sem mexer na original. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 } } } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefronts/{id}/duplicate" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 201 # Exportar vitrine (https://docs.rivoo.gg/api/referencia/vitrine/exportar-vitrine) `GET https://api.rivoo.gg/v1/storefronts/{id}/export` Baixa a vitrine num arquivo para importar em outra loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/storefronts/{id}/export" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Link de prévia da vitrine salva (https://docs.rivoo.gg/api/referencia/vitrine/link-de-previa-da-vitrine-salva) `POST https://api.rivoo.gg/v1/storefronts/{id}/preview-link` Gera um link temporário para ver esta vitrine antes de publicar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/storefronts/{id}/preview-link" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver domínio próprio (https://docs.rivoo.gg/api/referencia/dominio-proprio/ver-dominio-proprio) `GET https://api.rivoo.gg/v1/domain` Domínio ligado à loja e o estado da verificação e do certificado. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/domain" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Desligar domínio próprio (https://docs.rivoo.gg/api/referencia/dominio-proprio/desligar-dominio-proprio) `DELETE https://api.rivoo.gg/v1/domain` Desliga o domínio; a loja volta a responder só no endereço da Rivoo. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/domain" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Ligar domínio próprio (https://docs.rivoo.gg/api/referencia/dominio-proprio/ligar-dominio-proprio) `PUT https://api.rivoo.gg/v1/domain` Liga um domínio seu à loja. Devolve o registro DNS que você precisa criar. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "hostname": { "type": "string", "minLength": 4, "maxLength": 253 } }, "required": [ "hostname" ] } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/domain" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"hostname":"string"}' ``` ## Resposta 200 # Verificar domínio (https://docs.rivoo.gg/api/referencia/dominio-proprio/verificar-dominio) `POST https://api.rivoo.gg/v1/domain/verify` Confere o DNS agora e, se estiver certo, emite o certificado. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/domain/verify" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar pedidos (https://docs.rivoo.gg/api/referencia/pedidos/listar-pedidos) `GET https://api.rivoo.gg/v1/orders` Lista os pedidos da loja, do mais novo ao mais antigo, com filtro por status e cliente. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `status` | query | não | | | `paid` | query | não | | | `paidFrom` | query | não | | | `paidTo` | query | não | | | `source` | query | não | | | `customerId` | query | não | | | `state` | query | não | | | `q` | query | não | | | `method` | query | não | | | `paymentLinkId` | query | não | | | `subscriptionId` | query | não | | | `delivery` | query | não | | | `dispute` | query | não | | | `createdFrom` | query | não | | | `createdTo` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/orders" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 ```json { "data": [ { "id": "ord_mhexample0000vip0000001", "source": "API", "status": "PAID", "customerId": "cus_mhexample0000steve00001", "externalId": "pedido_123", "recipient": { "kind": "MINECRAFT", "ref": "Steve", "name": "Steve" }, "items": [ { "id": "oitem_mhexample0000vip00001", "productId": "prod_mhexample0000vip00001", "priceId": "price_mhexample0000vip0001", "name": "VIP+ 30 dias", "quantity": 1, "unitAmount": { "amount": 2990, "currency": "BRL" }, "total": { "amount": 2990, "currency": "BRL" }, "adjustments": [], "recipient": null, "gift": null } ], "totals": { "subtotal": { "amount": 2990, "currency": "BRL" }, "discount": { "amount": 0, "currency": "BRL" }, "giftCard": { "amount": 0, "currency": "BRL" }, "total": { "amount": 2990, "currency": "BRL" }, "refunded": { "amount": 0, "currency": "BRL" } }, "allowedMethods": [ "PIX", "CARD", "BOLETO" ], "paidByPaymentId": "pay_mhexample0000vip0000001", "note": null, "metadata": { "pedido": "123" }, "customer": { "id": "cus_mhexample0000steve00001", "name": "Steve", "email": "steve@exemplo.com" }, "expiresAt": "2026-11-01T21:04:13.000Z", "paidAt": "2026-10-31T21:04:51.000Z", "expiredAt": null, "canceledAt": null, "createdAt": "2026-10-31T21:04:13.000Z", "method": "PIX", "paymentLink": null, "dispute": null, "delivery": "done" } ], "hasMore": false, "totalCount": 1 } ``` # Criar pedido (https://docs.rivoo.gg/api/referencia/pedidos/criar-pedido) `POST https://api.rivoo.gg/v1/orders` Cria um pedido com produtos do catálogo. Mande o comprador para o `checkoutUrl` da resposta para pagar. Use `Idempotency-Key` para não duplicar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "items": { "minItems": 1, "maxItems": 50, "type": "array", "items": { "type": "object", "properties": { "productId": { "type": "string" }, "quantity": { "type": "number", "minimum": 1, "maximum": 100 } }, "required": [ "productId", "quantity" ] } }, "customer": { "type": "object", "properties": { "email": { "type": "string", "format": "email" }, "name": { "type": "string", "minLength": 1, "maxLength": 120 } }, "required": [ "email" ] }, "recipient": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": [ "name" ] }, "externalId": { "type": "string", "minLength": 1, "maxLength": 100 }, "metadata": { "type": "object", "additionalProperties": true }, "successUrl": { "type": "string", "format": "uri" }, "cancelUrl": { "type": "string", "format": "uri" }, "expiresInMinutes": { "type": "number", "minimum": 5, "maximum": 10080 }, "allowedMethods": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "PIX", "PIX_AUTOMATIC", "CARD", "BOLETO" ] } } }, "required": [ "items" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/orders" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"items":[{"productId":"string","quantity":1}]}' ``` ## Resposta 201 ```json { "id": "ord_mhexample0000vip0000001", "source": "API", "status": "PENDING", "customerId": "cus_mhexample0000steve00001", "externalId": "pedido_123", "recipient": { "kind": "MINECRAFT", "ref": "Steve", "name": "Steve" }, "items": [ { "id": "oitem_mhexample0000vip00001", "productId": "prod_mhexample0000vip00001", "priceId": "price_mhexample0000vip0001", "name": "VIP+ 30 dias", "quantity": 1, "unitAmount": { "amount": 2990, "currency": "BRL" }, "total": { "amount": 2990, "currency": "BRL" }, "adjustments": [], "recipient": null, "gift": null } ], "totals": { "subtotal": { "amount": 2990, "currency": "BRL" }, "discount": { "amount": 0, "currency": "BRL" }, "giftCard": { "amount": 0, "currency": "BRL" }, "total": { "amount": 2990, "currency": "BRL" }, "refunded": { "amount": 0, "currency": "BRL" } }, "allowedMethods": [ "PIX", "CARD", "BOLETO" ], "paidByPaymentId": null, "note": null, "metadata": { "pedido": "123" }, "customer": { "id": "cus_mhexample0000steve00001", "name": "Steve", "email": "steve@exemplo.com" }, "expiresAt": "2026-11-01T21:04:13.000Z", "paidAt": null, "expiredAt": null, "canceledAt": null, "createdAt": "2026-10-31T21:04:13.000Z", "checkoutUrl": "https://rivoo.gg/pay/c/ord_mhexample0000vip0000001?k=exemplo" } ``` # Registrar pedido manual (https://docs.rivoo.gg/api/referencia/pedidos/registrar-pedido-manual) `POST https://api.rivoo.gg/v1/orders/manual` Registra uma venda feita fora da Rivoo e roda as entregas dos produtos, sem cobrar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "items": { "minItems": 1, "maxItems": 50, "type": "array", "items": { "type": "object", "properties": { "productId": { "type": "string" }, "quantity": { "type": "number", "minimum": 1, "maximum": 100 } }, "required": [ "productId", "quantity" ] } }, "recipient": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": [ "name" ] }, "customerId": { "type": "string" }, "note": { "type": "string", "minLength": 1, "maxLength": 500 } }, "required": [ "items", "note" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/orders/manual" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"items":[{"productId":"string","quantity":1}],"note":"string"}' ``` ## Resposta 201 # Ver pedido (https://docs.rivoo.gg/api/referencia/pedidos/ver-pedido) `GET https://api.rivoo.gg/v1/orders/{id}` Devolve o pedido com itens, pagamentos, reembolsos e entregas. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/orders/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 ```json { "id": "ord_mhexample0000vip0000001", "source": "API", "status": "PAID", "customerId": "cus_mhexample0000steve00001", "externalId": "pedido_123", "recipient": { "kind": "MINECRAFT", "ref": "Steve", "name": "Steve" }, "items": [ { "id": "oitem_mhexample0000vip00001", "productId": "prod_mhexample0000vip00001", "priceId": "price_mhexample0000vip0001", "name": "VIP+ 30 dias", "quantity": 1, "unitAmount": { "amount": 2990, "currency": "BRL" }, "total": { "amount": 2990, "currency": "BRL" }, "adjustments": [], "recipient": null, "gift": null } ], "totals": { "subtotal": { "amount": 2990, "currency": "BRL" }, "discount": { "amount": 0, "currency": "BRL" }, "giftCard": { "amount": 0, "currency": "BRL" }, "total": { "amount": 2990, "currency": "BRL" }, "refunded": { "amount": 0, "currency": "BRL" } }, "allowedMethods": [ "PIX", "CARD", "BOLETO" ], "paidByPaymentId": "pay_mhexample0000vip0000001", "note": null, "metadata": { "pedido": "123" }, "customer": { "id": "cus_mhexample0000steve00001", "name": "Steve", "email": "steve@exemplo.com" }, "expiresAt": "2026-11-01T21:04:13.000Z", "paidAt": "2026-10-31T21:04:51.000Z", "expiredAt": null, "canceledAt": null, "createdAt": "2026-10-31T21:04:13.000Z" } ``` # Cancelar pedido (https://docs.rivoo.gg/api/referencia/pedidos/cancelar-pedido) `POST https://api.rivoo.gg/v1/orders/{id}/cancel` Cancela um pedido ainda não pago; o link de pagamento deixa de funcionar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/orders/{id}/cancel" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Reenviar e-mail do pedido (https://docs.rivoo.gg/api/referencia/pedidos/reenviar-e-mail-do-pedido) `POST https://api.rivoo.gg/v1/orders/{id}/resend-email` Manda de novo o recibo ao comprador, com chaves e links de download. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/orders/{id}/resend-email" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 202 # Gift cards usados no pedido (https://docs.rivoo.gg/api/referencia/pedidos/gift-cards-usados-no-pedido) `GET https://api.rivoo.gg/v1/orders/{id}/gift-card-credits` Gift cards que pagaram parte ou todo o pedido. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/orders/{id}/gift-card-credits" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Devolver em gift card (https://docs.rivoo.gg/api/referencia/pedidos/devolver-em-gift-card) `POST https://api.rivoo.gg/v1/orders/{id}/gift-card-credit` Devolve o valor do pedido como saldo num gift card, em vez de reembolsar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "amountCents": { "type": "number", "minimum": 100, "maximum": 1000000 } }, "required": [ "amountCents" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/orders/{id}/gift-card-credit" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"amountCents":100}' ``` ## Resposta 201 # Listar pagamentos (https://docs.rivoo.gg/api/referencia/pagamentos/listar-pagamentos) `GET https://api.rivoo.gg/v1/payments` Pagamentos recebidos, com meio (Pix, cartão, boleto), taxa e valor líquido. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `orderId` | query | não | | | `status` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/payments" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver pagamento (https://docs.rivoo.gg/api/referencia/pagamentos/ver-pagamento) `GET https://api.rivoo.gg/v1/payments/{id}` Devolve um pagamento. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/payments/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar meios de pagamento (https://docs.rivoo.gg/api/referencia/pagamentos/listar-meios-de-pagamento) `GET https://api.rivoo.gg/v1/payment-methods` Meios de pagamento da loja e se cada um está ativo. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/payment-methods" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ligar ou desligar cartão (https://docs.rivoo.gg/api/referencia/pagamentos/ligar-ou-desligar-cartao) `PATCH https://api.rivoo.gg/v1/payment-methods/CARD` Liga ou desliga o pagamento com cartão no checkout. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "enabled": { "type": "boolean" } }, "required": [ "enabled" ] } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/payment-methods/CARD" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"enabled":true}' ``` ## Resposta 200 # Reembolsos do pedido (https://docs.rivoo.gg/api/referencia/reembolsos/reembolsos-do-pedido) `GET https://api.rivoo.gg/v1/orders/{id}/refunds` Reembolsos feitos no pedido. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/orders/{id}/refunds" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Reembolsar pedido (https://docs.rivoo.gg/api/referencia/reembolsos/reembolsar-pedido) `POST https://api.rivoo.gg/v1/orders/{id}/refunds` Reembolsa todo ou parte do pedido. O benefício entregue é retirado quando o produto tem ação de reembolso. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "amount": { "type": "number", "minimum": 1 }, "reason": { "type": "string", "maxLength": 200 }, "pixKey": { "type": "object", "properties": { "type": { "enum": [ "CPF", "CNPJ", "EMAIL", "PHONE", "RANDOM" ], "type": "string" }, "key": { "type": "string", "minLength": 1, "maxLength": 77 } }, "required": [ "type", "key" ] } } } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/orders/{id}/refunds" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 201 # Informar destino do reembolso (https://docs.rivoo.gg/api/referencia/reembolsos/informar-destino-do-reembolso) `POST https://api.rivoo.gg/v1/refunds/{id}/destination` Informa a chave Pix para onde devolver quando o pagamento original não permite devolução automática. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "type": { "enum": [ "CPF", "CNPJ", "EMAIL", "PHONE", "RANDOM" ], "type": "string" }, "key": { "type": "string", "minLength": 1, "maxLength": 77 } }, "required": [ "type", "key" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/refunds/{id}/destination" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type":"CPF","key":"string"}' ``` ## Resposta 200 # Listar reembolsos (https://docs.rivoo.gg/api/referencia/reembolsos/listar-reembolsos) `GET https://api.rivoo.gg/v1/refunds` Todos os reembolsos da loja. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/refunds" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar disputas (https://docs.rivoo.gg/api/referencia/disputas/listar-disputas) `GET https://api.rivoo.gg/v1/disputes` Contestações abertas pelos compradores (chargeback e MED do Pix). Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/disputes" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver disputa (https://docs.rivoo.gg/api/referencia/disputas/ver-disputa) `GET https://api.rivoo.gg/v1/disputes/{id}` Devolve a disputa com prazo e provas enviadas. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/disputes/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Enviar prova (https://docs.rivoo.gg/api/referencia/disputas/enviar-prova) `POST https://api.rivoo.gg/v1/disputes/{id}/evidence` Anexa uma prova à disputa (comprovante de entrega, conversa, log do servidor). Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "description": { "type": "string", "minLength": 1, "maxLength": 2000 }, "url": { "type": "string", "format": "uri" }, "file": { "type": "object", "properties": { "contentType": { "type": "string", "enum": [ "application/pdf", "image/png", "image/jpeg" ] }, "sizeBytes": { "type": "number", "minimum": 1, "maximum": 10485760 } }, "required": [ "contentType", "sizeBytes" ] } }, "required": [ "description" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/disputes/{id}/evidence" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"description":"string"}' ``` ## Resposta 201 # Enviar defesa (https://docs.rivoo.gg/api/referencia/disputas/enviar-defesa) `POST https://api.rivoo.gg/v1/disputes/{id}/submit` Envia as provas para análise. Depois disso não dá para anexar mais. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/disputes/{id}/submit" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Aceitar disputa (https://docs.rivoo.gg/api/referencia/disputas/aceitar-disputa) `POST https://api.rivoo.gg/v1/disputes/{id}/accept` Aceita a contestação sem defesa; o valor volta ao comprador. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/disputes/{id}/accept" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar links de pagamento (https://docs.rivoo.gg/api/referencia/links-de-pagamento/listar-links-de-pagamento) `GET https://api.rivoo.gg/v1/payment-links` Links de pagamento da loja. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/payment-links" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar link de pagamento (https://docs.rivoo.gg/api/referencia/links-de-pagamento/criar-link-de-pagamento) `POST https://api.rivoo.gg/v1/payment-links` Cria um link com produtos e quantidades. Único (paga uma vez) ou fixo (paga várias vezes). Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "items": { "minItems": 1, "maxItems": 20, "type": "array", "items": { "type": "object", "properties": { "productId": { "type": "string" }, "priceId": { "type": "string" }, "quantity": { "type": "number", "minimum": 1, "maximum": 100 } }, "required": [ "quantity" ] } }, "askRecipient": { "type": "boolean" }, "successUrl": { "type": "string", "format": "uri" } }, "required": [ "name", "items" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/payment-links" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","items":[{"quantity":1}]}' ``` ## Resposta 201 # Ver link de pagamento (https://docs.rivoo.gg/api/referencia/links-de-pagamento/ver-link-de-pagamento) `GET https://api.rivoo.gg/v1/payment-links/{id}` Devolve o link com os pedidos que ele gerou. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/payment-links/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar link de pagamento (https://docs.rivoo.gg/api/referencia/links-de-pagamento/alterar-link-de-pagamento) `PATCH https://api.rivoo.gg/v1/payment-links/{id}` Altera só os campos enviados do link. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 120 }, "active": { "type": "boolean" }, "askRecipient": { "type": "boolean" }, "successUrl": { "type": "string", "nullable": true, "format": "uri" } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/payment-links/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Arquivar link de pagamento (https://docs.rivoo.gg/api/referencia/links-de-pagamento/arquivar-link-de-pagamento) `DELETE https://api.rivoo.gg/v1/payment-links/{id}` Desativa o link; quem abrir vê que ele não está mais disponível. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/payment-links/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Listar assinaturas (https://docs.rivoo.gg/api/referencia/assinaturas/listar-assinaturas) `GET https://api.rivoo.gg/v1/subscriptions` Assinaturas da loja, com status e próxima cobrança. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `status` | query | não | | | `customerId` | query | não | | | `state` | query | não | | | `productId` | query | não | | | `method` | query | não | | | `q` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/subscriptions" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar assinatura (https://docs.rivoo.gg/api/referencia/assinaturas/criar-assinatura) `POST https://api.rivoo.gg/v1/subscriptions` Cria uma assinatura e devolve o link para o comprador autorizar o Pix Automático ou o cartão. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "priceId": { "type": "string" }, "customer": { "type": "object", "properties": { "email": { "type": "string", "format": "email" }, "name": { "type": "string", "minLength": 1, "maxLength": 120 } }, "required": [ "email" ] }, "recipient": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": [ "name" ] } }, "required": [ "priceId", "customer" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/subscriptions" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"priceId":"string","customer":{"email":"string"}}' ``` ## Resposta 201 # Resumo das assinaturas (https://docs.rivoo.gg/api/referencia/assinaturas/resumo-das-assinaturas) `GET https://api.rivoo.gg/v1/subscriptions/summary` Ativas, receita recorrente do mês e cancelamentos. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/subscriptions/summary" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver assinatura (https://docs.rivoo.gg/api/referencia/assinaturas/ver-assinatura) `GET https://api.rivoo.gg/v1/subscriptions/{id}` Devolve a assinatura com as cobranças. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/subscriptions/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Cancelar assinatura (https://docs.rivoo.gg/api/referencia/assinaturas/cancelar-assinatura) `POST https://api.rivoo.gg/v1/subscriptions/{id}/cancel` Cancela a renovação. O benefício vale até o fim do período pago. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "atPeriodEnd": { "type": "boolean" }, "reason": { "type": "string", "minLength": 1, "maxLength": 200 } } } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/subscriptions/{id}/cancel" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Retomar assinatura (https://docs.rivoo.gg/api/referencia/assinaturas/retomar-assinatura) `POST https://api.rivoo.gg/v1/subscriptions/{id}/resume` Desfaz o cancelamento antes do fim do período. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/subscriptions/{id}/resume" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar imagens (https://docs.rivoo.gg/api/referencia/imagens/listar-imagens) `GET https://api.rivoo.gg/v1/media` Imagens enviadas pela loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `search` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/media" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Enviar imagem (https://docs.rivoo.gg/api/referencia/imagens/enviar-imagem) `POST https://api.rivoo.gg/v1/media` Envia uma imagem (até 2 MB, em base64) para usar em produtos e na vitrine. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "contentType": { "type": "string", "enum": [ "image/png", "image/jpeg", "image/webp", "image/gif" ] }, "data": { "type": "string", "maxLength": 2796211 }, "name": { "type": "string", "maxLength": 255 } }, "required": [ "contentType", "data" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/media" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"contentType":"image/png","data":"string"}' ``` ## Resposta 201 # Apagar imagem (https://docs.rivoo.gg/api/referencia/imagens/apagar-imagem) `DELETE https://api.rivoo.gg/v1/media/{id}` Apaga a imagem. Produtos que usavam ficam sem ela. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/media/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Cargos do Discord (https://docs.rivoo.gg/api/referencia/discord/cargos-do-discord) `GET https://api.rivoo.gg/v1/connections/{id}/discord/roles` Cargos do servidor do Discord, para usar nas ações de entrega. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/connections/{id}/discord/roles" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Canais do Discord (https://docs.rivoo.gg/api/referencia/discord/canais-do-discord) `GET https://api.rivoo.gg/v1/connections/{id}/discord/channels` Canais de texto do servidor do Discord, para os avisos de venda. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/connections/{id}/discord/channels" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver avisos do Discord (https://docs.rivoo.gg/api/referencia/discord/ver-avisos-do-discord) `GET https://api.rivoo.gg/v1/connections/{id}/discord` Canal e modelo do anúncio público de venda e do canal da equipe. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/connections/{id}/discord" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Configurar avisos do Discord (https://docs.rivoo.gg/api/referencia/discord/configurar-avisos-do-discord) `PATCH https://api.rivoo.gg/v1/connections/{id}/discord` Define os canais e o modelo da mensagem de venda. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "logChannelId": { "type": "string", "nullable": true, "pattern": "^\\d{15,21}$" }, "saleChannelId": { "type": "string", "nullable": true, "pattern": "^\\d{15,21}$" }, "saleMessage": { "type": "string", "nullable": true, "maxLength": 500 } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/connections/{id}/discord" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Testar avisos do Discord (https://docs.rivoo.gg/api/referencia/discord/testar-avisos-do-discord) `POST https://api.rivoo.gg/v1/connections/{id}/discord/test` Manda uma mensagem de teste nos canais configurados. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "channel": { "type": "string", "enum": [ "sale", "staff" ] } }, "required": [ "channel" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/connections/{id}/discord/test" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"channel":"sale"}' ``` ## Resposta 202 # Listar servidores (https://docs.rivoo.gg/api/referencia/servidores/listar-servidores) `GET https://api.rivoo.gg/v1/connections` Servidores de jogo ligados à loja (plugin ou agente) e se estão online. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `type` | query | não | | | `status` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/connections" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Adicionar servidor (https://docs.rivoo.gg/api/referencia/servidores/adicionar-servidor) `POST https://api.rivoo.gg/v1/connections` Cria a conexão de um servidor e devolve a chave que vai no plugin. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "type": { "type": "string", "enum": [ "MINECRAFT", "FIVEM", "REDM", "RUST", "HYTALE" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 60 } }, "required": [ "type", "name" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/connections" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type":"MINECRAFT","name":"string"}' ``` ## Resposta 201 # Ver servidor (https://docs.rivoo.gg/api/referencia/servidores/ver-servidor) `GET https://api.rivoo.gg/v1/connections/{id}` Devolve o servidor com o último contato. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/connections/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar servidor (https://docs.rivoo.gg/api/referencia/servidores/alterar-servidor) `PATCH https://api.rivoo.gg/v1/connections/{id}` Altera só os campos enviados do servidor. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 } }, "required": [ "name" ] } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/connections/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string"}' ``` ## Resposta 200 # Remover servidor (https://docs.rivoo.gg/api/referencia/servidores/remover-servidor) `DELETE https://api.rivoo.gg/v1/connections/{id}` Desliga o servidor da loja; a chave para de funcionar. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/connections/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Trocar chave do servidor (https://docs.rivoo.gg/api/referencia/servidores/trocar-chave-do-servidor) `POST https://api.rivoo.gg/v1/connections/{id}/rotate-key` Gera uma chave nova e invalida a antiga. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/connections/{id}/rotate-key" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver pareamento (https://docs.rivoo.gg/api/referencia/servidores/ver-pareamento) `GET https://api.rivoo.gg/v1/connection-pairings/{code}` Mostra o servidor que pediu pareamento com o código exibido no console. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `code` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/connection-pairings/{code}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Confirmar pareamento (https://docs.rivoo.gg/api/referencia/servidores/confirmar-pareamento) `POST https://api.rivoo.gg/v1/connection-pairings/{code}/claim` Liga à loja o servidor que mostrou o código no console. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `code` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "connectionId": { "type": "string" } } } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/connection-pairings/{code}/claim" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Adicionar servidor por RCON (https://docs.rivoo.gg/api/referencia/servidores/adicionar-servidor-por-rcon) `POST https://api.rivoo.gg/v1/connections/cloud-agents` Liga um servidor pelo RCON, sem instalar nada nele (beta). Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "game": { "type": "string", "enum": [ "MINECRAFT_JAVA", "RUST", "ARK_SE", "ARK_SA", "CONAN", "PALWORLD", "SEVEN_DAYS", "HYTALE", "SOURCE_GENERIC" ] }, "host": { "type": "string", "minLength": 1, "maxLength": 253 }, "port": { "type": "number", "minimum": 1, "maximum": 65535 }, "password": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": [ "name", "game", "host", "port", "password" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/connections/cloud-agents" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","game":"MINECRAFT_JAVA","host":"string","port":1,"password":"string"}' ``` ## Resposta 201 # Alterar servidor por RCON (https://docs.rivoo.gg/api/referencia/servidores/alterar-servidor-por-rcon) `PATCH https://api.rivoo.gg/v1/connections/{id}/cloud-agent` Altera endereço, porta ou senha do RCON. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "host": { "type": "string", "minLength": 1, "maxLength": 253 }, "port": { "type": "number", "minimum": 1, "maximum": 65535 }, "password": { "type": "string", "minLength": 1, "maxLength": 200 } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/connections/{id}/cloud-agent" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Resumo de vendas (https://docs.rivoo.gg/api/referencia/relatorios/resumo-de-vendas) `GET https://api.rivoo.gg/v1/reports/summary` Vendas, receita, ticket médio e reembolsos no período. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `from` | query | não | | | `to` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/reports/summary" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Vendas por dia (https://docs.rivoo.gg/api/referencia/relatorios/vendas-por-dia) `GET https://api.rivoo.gg/v1/reports/timeseries` Série de vendas e receita por dia no período. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `from` | query | não | | | `to` | query | não | | | `metric` | query | não | | | `interval` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/reports/timeseries" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Produtos mais vendidos (https://docs.rivoo.gg/api/referencia/relatorios/produtos-mais-vendidos) `GET https://api.rivoo.gg/v1/reports/top-products` Produtos com mais receita no período. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `from` | query | não | | | `to` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/reports/top-products" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Melhores clientes (https://docs.rivoo.gg/api/referencia/relatorios/melhores-clientes) `GET https://api.rivoo.gg/v1/reports/top-customers` Clientes que mais gastaram no período. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `from` | query | não | | | `to` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/reports/top-customers" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Conversão (https://docs.rivoo.gg/api/referencia/relatorios/conversao) `GET https://api.rivoo.gg/v1/reports/conversion` Pedidos criados, pagos e a taxa de conversão no período. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `from` | query | não | | | `to` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/reports/conversion" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar ações do produto (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/listar-acoes-do-produto) `GET https://api.rivoo.gg/v1/products/{productId}/actions` Comandos e cargos que o produto entrega quando o pedido é pago, expira ou é reembolsado. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/products/{productId}/actions" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar ação do produto (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/criar-acao-do-produto) `POST https://api.rivoo.gg/v1/products/{productId}/actions` Adiciona um comando no servidor ou cargo no Discord ao produto, com o momento em que roda. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "type": { "enum": [ "MANUAL", "COMMAND", "DISCORD_ROLE", "FILE", "LICENSE_KEY" ], "type": "string" }, "trigger": { "enum": [ "REFUNDED", "REMOVED", "PURCHASED", "RENEWED", "DISPUTED" ], "type": "string" }, "config": { "type": "object" }, "connectionIds": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "sortOrder": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "trigger", "config" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/products/{productId}/actions" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type":"MANUAL","trigger":"REFUNDED","config":{}}' ``` ## Resposta 201 # Alterar ação do produto (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/alterar-acao-do-produto) `PATCH https://api.rivoo.gg/v1/products/{productId}/actions/{actionId}` Altera só os campos enviados da ação. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `actionId` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "trigger": { "enum": [ "REFUNDED", "REMOVED", "PURCHASED", "RENEWED", "DISPUTED" ], "type": "string" }, "config": { "type": "object" }, "connectionIds": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "sortOrder": { "type": "number", "minimum": 0, "maximum": 1000 } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/products/{productId}/actions/{actionId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Remover ação do produto (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/remover-acao-do-produto) `DELETE https://api.rivoo.gg/v1/products/{productId}/actions/{actionId}` Remove a ação. Entregas já feitas não são desfeitas. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `productId` | path | sim | | | `actionId` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/products/{productId}/actions/{actionId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Listar ações da loja (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/listar-acoes-da-loja) `GET https://api.rivoo.gg/v1/actions` Ações que rodam em toda compra, de qualquer produto. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `scope` | query | não | | | `type` | query | não | | | `limit` | query | não | | | `after` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/actions" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar ação da loja (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/criar-acao-da-loja) `POST https://api.rivoo.gg/v1/actions` Adiciona um comando ou cargo que roda em toda compra. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "type": { "enum": [ "MANUAL", "COMMAND", "DISCORD_ROLE", "FILE", "LICENSE_KEY" ], "type": "string" }, "trigger": { "enum": [ "REFUNDED", "REMOVED", "PURCHASED", "RENEWED", "DISPUTED" ], "type": "string" }, "config": { "type": "object" }, "connectionIds": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "sortOrder": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "trigger", "config" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/actions" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type":"MANUAL","trigger":"REFUNDED","config":{}}' ``` ## Resposta 201 # Alterar ação da loja (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/alterar-acao-da-loja) `PATCH https://api.rivoo.gg/v1/actions/{actionId}` Altera só os campos enviados da ação. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `actionId` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "trigger": { "enum": [ "REFUNDED", "REMOVED", "PURCHASED", "RENEWED", "DISPUTED" ], "type": "string" }, "config": { "type": "object" }, "connectionIds": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "sortOrder": { "type": "number", "minimum": 0, "maximum": 1000 } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/actions/{actionId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Remover ação da loja (https://docs.rivoo.gg/api/referencia/acoes-de-entrega/remover-acao-da-loja) `DELETE https://api.rivoo.gg/v1/actions/{actionId}` Remove a ação da loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `actionId` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/actions/{actionId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Listar benefícios (https://docs.rivoo.gg/api/referencia/beneficios/listar-beneficios) `GET https://api.rivoo.gg/v1/entitlements` Benefícios entregues (ranks, assinaturas, itens), com início e fim. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `customerId` | query | não | | | `productId` | query | não | | | `status` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/entitlements" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Revogar benefício (https://docs.rivoo.gg/api/referencia/beneficios/revogar-beneficio) `POST https://api.rivoo.gg/v1/entitlements/{id}/revoke` Encerra o benefício agora e roda as ações de fim do produto. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/entitlements/{id}/revoke" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar comandos (https://docs.rivoo.gg/api/referencia/comandos/listar-comandos) `GET https://api.rivoo.gg/v1/command-runs` Comandos enviados aos servidores, com status (na fila, entregue, falhou). Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `connectionId` | query | não | | | `status` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/command-runs" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Enviar comando de teste (https://docs.rivoo.gg/api/referencia/comandos/enviar-comando-de-teste) `POST https://api.rivoo.gg/v1/command-runs` Envia um comando a um servidor, sem pedido, para testar a entrega. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "connectionId": { "type": "string" }, "command": { "type": "string", "minLength": 1, "maxLength": 500 }, "recipient": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": [ "name" ] } }, "required": [ "connectionId", "command" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/command-runs" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connectionId":"string","command":"string"}' ``` ## Resposta 201 # Ver comando (https://docs.rivoo.gg/api/referencia/comandos/ver-comando) `GET https://api.rivoo.gg/v1/command-runs/{id}` Devolve o comando com as tentativas e a resposta do servidor. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/command-runs/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Reenviar comandos (https://docs.rivoo.gg/api/referencia/comandos/reenviar-comandos) `POST https://api.rivoo.gg/v1/command-runs/resend` Reenvia ao servidor os comandos de um pedido. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "connectionId": { "type": "string" }, "productIds": { "maxItems": 200, "type": "array", "items": { "type": "string" } }, "from": { "type": "string" }, "to": { "type": "string" }, "dryRun": { "type": "boolean" } }, "required": [ "connectionId" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/command-runs/resend" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"connectionId":"string"}' ``` ## Resposta 200 # Cancelar comando (https://docs.rivoo.gg/api/referencia/comandos/cancelar-comando) `POST https://api.rivoo.gg/v1/command-runs/{id}/cancel` Cancela um comando que ainda está na fila. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/command-runs/{id}/cancel" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Entregas manuais pendentes (https://docs.rivoo.gg/api/referencia/entregas/entregas-manuais-pendentes) `GET https://api.rivoo.gg/v1/deliveries/manual` Itens que a equipe entrega à mão. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `status` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/deliveries/manual" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Contar entregas manuais (https://docs.rivoo.gg/api/referencia/entregas/contar-entregas-manuais) `GET https://api.rivoo.gg/v1/deliveries/manual/count` Quantas entregas manuais estão pendentes. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/deliveries/manual/count" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Marcar como entregue (https://docs.rivoo.gg/api/referencia/entregas/marcar-como-entregue) `POST https://api.rivoo.gg/v1/deliveries/manual/{id}/delivered` Marca a entrega manual como feita. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/deliveries/manual/{id}/delivered" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar entregas (https://docs.rivoo.gg/api/referencia/entregas/listar-entregas) `GET https://api.rivoo.gg/v1/deliveries` Entregas dos pedidos (comandos, cargos, chaves, arquivos) e o status de cada uma. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `status` | query | não | | | `orderId` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/deliveries" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Tentar entrega de novo (https://docs.rivoo.gg/api/referencia/entregas/tentar-entrega-de-novo) `POST https://api.rivoo.gg/v1/deliveries/{id}/retry` Roda de novo uma entrega que falhou. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/deliveries/{id}/retry" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar webhooks (https://docs.rivoo.gg/api/referencia/webhooks/listar-webhooks) `GET https://api.rivoo.gg/v1/webhook-endpoints` Endereços que recebem os eventos da loja. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/webhook-endpoints" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar webhook (https://docs.rivoo.gg/api/referencia/webhooks/criar-webhook) `POST https://api.rivoo.gg/v1/webhook-endpoints` Cadastra uma URL e os eventos que ela recebe. O segredo de assinatura aparece só nesta resposta. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "url": { "type": "string", "maxLength": 2048 }, "events": { "maxItems": 50, "type": "array", "items": { "type": "string" } } }, "required": [ "name", "url" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/webhook-endpoints" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","url":"string"}' ``` ## Resposta 201 ```json { "id": "whe_mhexample0000hook000001", "name": "Meu servidor", "url": "https://exemplo.com/webhooks/rivoo", "events": [ "order.paid", "order.refunded" ], "status": "ENABLED", "disabledReason": null, "rotation": null, "createdAt": "2026-10-31T21:04:13.000Z", "updatedAt": "2026-10-31T21:04:13.000Z", "secret": "whsec_exemplo_nao_use" } ``` # Ver webhook (https://docs.rivoo.gg/api/referencia/webhooks/ver-webhook) `GET https://api.rivoo.gg/v1/webhook-endpoints/{id}` Devolve o webhook com os eventos assinados. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/webhook-endpoints/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 ```json { "id": "whe_mhexample0000hook000001", "name": "Meu servidor", "url": "https://exemplo.com/webhooks/rivoo", "events": [ "order.paid", "order.refunded" ], "status": "ENABLED", "disabledReason": null, "rotation": null, "createdAt": "2026-10-31T21:04:13.000Z", "updatedAt": "2026-10-31T21:04:13.000Z" } ``` # Alterar webhook (https://docs.rivoo.gg/api/referencia/webhooks/alterar-webhook) `PATCH https://api.rivoo.gg/v1/webhook-endpoints/{id}` Altera URL, eventos ou pausa o envio. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "url": { "type": "string", "maxLength": 2048 }, "events": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "status": { "type": "string", "enum": [ "ACTIVE", "DISABLED" ] } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/webhook-endpoints/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Apagar webhook (https://docs.rivoo.gg/api/referencia/webhooks/apagar-webhook) `DELETE https://api.rivoo.gg/v1/webhook-endpoints/{id}` Para de enviar eventos para a URL. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/webhook-endpoints/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Trocar segredo do webhook (https://docs.rivoo.gg/api/referencia/webhooks/trocar-segredo-do-webhook) `POST https://api.rivoo.gg/v1/webhook-endpoints/{id}/rotate-secret` Gera um segredo de assinatura novo. O antigo continua valendo por 24 horas, para você trocar sem perder eventos. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/webhook-endpoints/{id}/rotate-secret" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Testar webhook (https://docs.rivoo.gg/api/referencia/webhooks/testar-webhook) `POST https://api.rivoo.gg/v1/webhook-endpoints/{id}/test` Envia um evento de teste para a URL. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/webhook-endpoints/{id}/test" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Envios do webhook (https://docs.rivoo.gg/api/referencia/webhooks/envios-do-webhook) `GET https://api.rivoo.gg/v1/webhook-endpoints/{id}/deliveries` Tentativas de envio para a URL, com o código de resposta de cada uma. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/webhook-endpoints/{id}/deliveries" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar eventos (https://docs.rivoo.gg/api/referencia/eventos/listar-eventos) `GET https://api.rivoo.gg/v1/events` Eventos da loja (pedido pago, reembolso, assinatura…), do mais novo ao mais antigo. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `type` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/events" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver evento (https://docs.rivoo.gg/api/referencia/eventos/ver-evento) `GET https://api.rivoo.gg/v1/events/{id}` Devolve o evento com o mesmo corpo enviado aos webhooks. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/events/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar criadores (https://docs.rivoo.gg/api/referencia/criadores/listar-criadores) `GET https://api.rivoo.gg/v1/creators` Criadores de conteúdo com código de desconto e comissão. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `archived` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/creators" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar criador (https://docs.rivoo.gg/api/referencia/criadores/criar-criador) `POST https://api.rivoo.gg/v1/creators` Cadastra um criador com código, desconto para o comprador e comissão. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "code": { "type": "string", "pattern": "^[A-Z0-9_-]{3,32}$" }, "commissionBps": { "type": "number", "minimum": 100, "maximum": 5000 }, "discountBps": { "type": "number", "minimum": 0, "maximum": 5000 }, "contact": { "type": "string", "nullable": true, "minLength": 0, "maxLength": 120 }, "active": { "type": "boolean" } }, "required": [ "name", "code" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/creators" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"string","code":"string"}' ``` ## Resposta 201 # Ver criador (https://docs.rivoo.gg/api/referencia/criadores/ver-criador) `GET https://api.rivoo.gg/v1/creators/{id}` Devolve o criador. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/creators/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar criador (https://docs.rivoo.gg/api/referencia/criadores/alterar-criador) `PATCH https://api.rivoo.gg/v1/creators/{id}` Altera só os campos enviados do criador. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "code": { "type": "string", "pattern": "^[A-Z0-9_-]{3,32}$" }, "commissionBps": { "type": "number", "minimum": 100, "maximum": 5000 }, "discountBps": { "type": "number", "minimum": 0, "maximum": 5000 }, "contact": { "type": "string", "nullable": true, "minLength": 0, "maxLength": 120 }, "active": { "type": "boolean" } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/creators/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Arquivar criador (https://docs.rivoo.gg/api/referencia/criadores/arquivar-criador) `DELETE https://api.rivoo.gg/v1/creators/{id}` Desativa o código do criador. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/creators/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Relatório do criador (https://docs.rivoo.gg/api/referencia/criadores/relatorio-do-criador) `GET https://api.rivoo.gg/v1/creators/{id}/report` Vendas e comissão do criador por mês, descontados reembolsos e disputas perdidas. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/creators/{id}/report" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Pagamentos ao criador (https://docs.rivoo.gg/api/referencia/criadores/pagamentos-ao-criador) `GET https://api.rivoo.gg/v1/creators/{id}/payouts` Pagamentos de comissão registrados pela loja. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/creators/{id}/payouts" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Registrar pagamento ao criador (https://docs.rivoo.gg/api/referencia/criadores/registrar-pagamento-ao-criador) `POST https://api.rivoo.gg/v1/creators/{id}/payouts` Registra que a loja pagou a comissão do criador. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "amountCents": { "type": "number", "minimum": 1 }, "paidAt": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "note": { "type": "string", "minLength": 0, "maxLength": 200 } }, "required": [ "amountCents", "paidAt" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/creators/{id}/payouts" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"amountCents":1,"paidAt":"string"}' ``` ## Resposta 201 # Apagar pagamento ao criador (https://docs.rivoo.gg/api/referencia/criadores/apagar-pagamento-ao-criador) `DELETE https://api.rivoo.gg/v1/creators/{id}/payouts/{payoutId}` Remove um registro de pagamento de comissão. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `payoutId` | path | sim | | ## Exemplo ```bash curl -X DELETE "https://api.rivoo.gg/v1/creators/{id}/payouts/{payoutId}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 204 # Ver recuperação de carrinho (https://docs.rivoo.gg/api/referencia/recuperacao-de-carrinho/ver-recuperacao-de-carrinho) `GET https://api.rivoo.gg/v1/settings/recovery` Devolve o lembrete de carrinho abandonado e o agradecimento pós-compra, com os cupons de cada um. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/settings/recovery" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Configurar recuperação de carrinho (https://docs.rivoo.gg/api/referencia/recuperacao-de-carrinho/configurar-recuperacao-de-carrinho) `PUT https://api.rivoo.gg/v1/settings/recovery` Liga, desliga e ajusta o lembrete de carrinho abandonado e o agradecimento pós-compra. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "recoveryEnabled": { "type": "boolean" }, "recoveryDelayMinutes": { "type": "number", "minimum": 60, "maximum": 1440 }, "recoveryDiscountBps": { "type": "number", "minimum": 0, "maximum": 5000 }, "followUpEnabled": { "type": "boolean" }, "followUpDelayHours": { "type": "number", "minimum": 1, "maximum": 168 }, "followUpDiscountBps": { "type": "number", "minimum": 0, "maximum": 5000 }, "followUpCouponDays": { "type": "number", "minimum": 1, "maximum": 30 } } } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/settings/recovery" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Números da recuperação (https://docs.rivoo.gg/api/referencia/recuperacao-de-carrinho/numeros-da-recuperacao) `GET https://api.rivoo.gg/v1/settings/recovery/stats` Lembretes enviados, pedidos recuperados e valor recuperado no mês. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/settings/recovery/stats" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Ver meta da comunidade (https://docs.rivoo.gg/api/referencia/meta-da-comunidade/ver-meta-da-comunidade) `GET https://api.rivoo.gg/v1/community-goal` Meta de vendas do mês, progresso e ações ao bater. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/community-goal" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Configurar meta da comunidade (https://docs.rivoo.gg/api/referencia/meta-da-comunidade/configurar-meta-da-comunidade) `PUT https://api.rivoo.gg/v1/community-goal` Define o valor, o ciclo e o que acontece quando a meta é batida. Autenticação: `Authorization: Bearer `. ## Corpo (JSON) ```json { "type": "object", "properties": { "active": { "type": "boolean" }, "targetCents": { "type": "number", "minimum": 100 }, "period": { "type": "string", "enum": [ "MONTHLY", "REPEATING" ] }, "productIds": { "maxItems": 200, "type": "array", "items": { "type": "string" } }, "showAmount": { "type": "boolean" }, "commands": { "maxItems": 5, "type": "array", "items": { "type": "string", "maxLength": 500 } }, "discordMessage": { "type": "string", "nullable": true, "maxLength": 500 }, "saleBps": { "type": "number", "minimum": 0, "maximum": 5000 }, "saleHours": { "type": "number", "minimum": 1, "maximum": 168 } }, "required": [ "active", "targetCents", "period", "productIds", "showAmount", "commands", "saleBps", "saleHours" ] } ``` ## Exemplo ```bash curl -X PUT "https://api.rivoo.gg/v1/community-goal" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"active":true,"targetCents":100,"period":"MONTHLY","productIds":["string"],"showAmount":true,"commands":["string"],"saleBps":0,"saleHours":1}' ``` ## Resposta 200 # Metas batidas (https://docs.rivoo.gg/api/referencia/meta-da-comunidade/metas-batidas) `GET https://api.rivoo.gg/v1/community-goal/reaches` Histórico das vezes em que a meta foi batida. Autenticação: `Authorization: Bearer `. ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/community-goal/reaches" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Listar gift cards (https://docs.rivoo.gg/api/referencia/gift-cards/listar-gift-cards) `GET https://api.rivoo.gg/v1/gift-cards` Gift cards da loja com saldo. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `status` | query | não | | | `q` | query | não | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/gift-cards" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Criar gift card (https://docs.rivoo.gg/api/referencia/gift-cards/criar-gift-card) `POST https://api.rivoo.gg/v1/gift-cards` Cria um gift card com saldo e, se quiser, manda por e-mail. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "amountCents": { "type": "number", "minimum": 100, "maximum": 1000000 }, "expiresAt": { "type": "string", "nullable": true }, "note": { "type": "string", "maxLength": 200 }, "recipientEmail": { "type": "string", "maxLength": 254, "format": "email" }, "recipientName": { "type": "string", "minLength": 1, "maxLength": 80 }, "message": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": [ "amountCents" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/gift-cards" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"amountCents":100}' ``` ## Resposta 201 # Criar gift cards em lote (https://docs.rivoo.gg/api/referencia/gift-cards/criar-gift-cards-em-lote) `POST https://api.rivoo.gg/v1/gift-cards/batch` Cria vários gift cards de uma vez. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `Idempotency-Key` | header | sim | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "count": { "type": "number", "minimum": 1, "maximum": 500 }, "amountCents": { "type": "number", "minimum": 100, "maximum": 1000000 }, "expiresAt": { "type": "string", "nullable": true }, "note": { "type": "string", "maxLength": 200 } }, "required": [ "count", "amountCents" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/gift-cards/batch" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"count":1,"amountCents":100}' ``` ## Resposta 201 # Recarregar gift card (https://docs.rivoo.gg/api/referencia/gift-cards/recarregar-gift-card) `POST https://api.rivoo.gg/v1/gift-cards/{id}/top-up` Adiciona saldo a um gift card. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Corpo (JSON) ```json { "type": "object", "properties": { "amountCents": { "type": "number", "minimum": 100, "maximum": 1000000 } }, "required": [ "amountCents" ] } ``` ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/gift-cards/{id}/top-up" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"amountCents":100}' ``` ## Resposta 200 # Ver gift card (https://docs.rivoo.gg/api/referencia/gift-cards/ver-gift-card) `GET https://api.rivoo.gg/v1/gift-cards/{id}` Devolve o gift card com saldo e usos. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Exemplo ```bash curl -X GET "https://api.rivoo.gg/v1/gift-cards/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 200 # Alterar gift card (https://docs.rivoo.gg/api/referencia/gift-cards/alterar-gift-card) `PATCH https://api.rivoo.gg/v1/gift-cards/{id}` Altera validade ou desativa o gift card. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | ## Corpo (JSON) ```json { "type": "object", "properties": { "status": { "type": "string", "enum": [ "ACTIVE", "DISABLED" ] }, "note": { "type": "string", "nullable": true, "maxLength": 200 }, "expiresAt": { "type": "string", "nullable": true } } } ``` ## Exemplo ```bash curl -X PATCH "https://api.rivoo.gg/v1/gift-cards/{id}" \ -H "Authorization: Bearer $RIVOO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Resposta 200 # Reenviar gift card (https://docs.rivoo.gg/api/referencia/gift-cards/reenviar-gift-card) `POST https://api.rivoo.gg/v1/gift-cards/{id}/resend` Manda de novo o e-mail com o código do gift card. Autenticação: `Authorization: Bearer `. ## Parâmetros | Nome | Onde | Obrigatório | Descrição | | --- | --- | --- | --- | | `id` | path | sim | | | `Idempotency-Key` | header | não | Chave única por operação (ex.: o id do pedido no seu sistema). Repetir a chamada com a mesma chave devolve a mesma resposta, sem duplicar. | ## Exemplo ```bash curl -X POST "https://api.rivoo.gg/v1/gift-cards/{id}/resend" \ -H "Authorization: Bearer $RIVOO_API_KEY" ``` ## Resposta 202