Docs
API

Pedidos

Do pedido criado pela API até a entrega, com padrões, erros e o ciclo de vida.

O fluxo de uma venda pela API tem quatro passos:

  1. Criar o pedido com os produtos e, se quiser, o comprador e o jogador.
  2. Mandar o comprador para o checkoutUrl da resposta.
  3. Receber o webhook order.paid e conferir a assinatura.
  4. Buscar o pedido completo com Ver pedido e liberar a compra.

Criar

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_mhexample0000vip00001", "quantity": 1 }],
    "customer": { "email": "[email protected]", "name": "Steve" },
    "recipient": { "name": "Steve" },
    "externalId": "pedido_123",
    "metadata": { "pedido": "123" },
    "successUrl": "https://seusite.com/obrigado"
  }'
CampoObrigatórioPadrãoO que é
items[]simDe 1 a 50 itens. Cada um tem productId e quantity (1 a 100).
customerComprador: email (obrigatório) e name (até 120 caracteres). Se o e-mail já existir na loja, o pedido vai para esse cliente.
recipientQuem recebe no jogo: name é o nick do jogador. Só em lojas que entregam para jogadores.
externalIdO id do pedido no seu sistema, até 100 caracteres. Único por loja.
metadataObjeto livre. Volta igual no pedido.
successUrl / cancelUrlPara onde o comprador volta depois de pagar ou desistir.
expiresInMinutes1440 (24 h)Prazo para pagar, de 5 a 10080 (7 dias).
allowedMethodsos da lojaMeios aceitos: PIX, PIX_AUTOMATIC, CARD, BOLETO. Sem o campo, valem os meios ligados nas configurações da loja.

Pedidos criados pela API usam o preço padrão de cada produto. Eles não aplicam cupons, promoções, limites de estoque nem requisitos de outros produtos: essas regras são da vitrine.

Erros ao criar

Além dos erros comuns:

StatuscodeQuando
400idempotency_key_requiredFaltou o header Idempotency-Key.
409external_id_takenJá existe um pedido com esse externalId na loja.
409recipient_not_supportedMandou recipient, mas a loja não entrega para jogadores.
422validation_failedCampo inválido (quantidade fora da faixa, e-mail inválido…). Veja errors[].
422product_unavailableO produto não existe nesta loja, está arquivado ou não tem preço de compra única ativo. errors[].field traz o productId.
422total_below_minimumO total ficou acima de zero e abaixo de R$ 1,00. Pedido de R$ 0,00 passa.
422no_payment_methodNenhum dos allowedMethods está disponível para esse valor.
422project_unavailableA loja ou a conta está suspensa ou arquivada.

Ciclo de vida

                ┌──▶ PAID ──┬──▶ PARTIALLY_REFUNDED ──▶ REFUNDED
                │           └──────────────────────────▶ REFUNDED
OPEN ───────────┼──▶ EXPIRED
                └──▶ CANCELED
DeParaQuandoWebhook
OPENPedido criado.order.created
OPENOPENItens ou cupom mudaram antes do pagamento.order.updated
OPENPAIDPagamento confirmado.order.paid
OPENEXPIREDO prazo (expiresAt) passou sem pagamento.order.expired
OPENCANCELEDCancelar pedido, ou cancelado no painel.order.canceled
PAIDPARTIALLY_REFUNDEDParte do valor devolvida.order.partially_refunded
PAID / PARTIALLY_REFUNDEDREFUNDEDTodo o valor devolvido.order.refunded

PAID, EXPIRED, CANCELED e REFUNDED não voltam para OPEN. Veja o que cada status quer dizer em Status de pedido.

Depois do order.paid

O webhook traz só o essencial (id, source, total, paymentId). Para liberar a compra, busque o pedido completo, com itens, comprador, jogador e metadata:

curl "https://api.rivoo.gg/v1/orders/ord_mhexample0000vip0000001" \
  -H "Authorization: Bearer $RIVOO_API_KEY"

Se a loja entrega no jogo (plugin, agente RCON ou Discord), a Rivoo já roda as entregas sozinha. Se uma delas falhar, chega delivery.failed.

Valores

Dinheiro vem sempre como objeto, na API e nos webhooks: { "amount": 2990, "currency": "BRL" }, com amount em centavos. Os webhooks ainda mandam, ao lado, o campo antigo terminado em Cents (totalCents: 2990), depreciado: ele sai em 01/05/2027.

Nesta página