Checkout hospedado

Aplique nas Configurações, aguarde aprovação, depois crie uma sessão e envie os compradores para uma página de pagamento da RMT. Você cumpre após order.paid. Parceiros aprovados pagam 4% do valor bloqueado.

Receba pagamentos da sua própria loja. A RMT.GG é o comerciante registrado. Use a API do Vendedor para enviar compradores para uma página de pagamento da RMT.

Como funciona o checkout hospedado

A RMT.GG permanece como comerciante registrado. Sua loja parceira envia um valor e moeda bloqueados. O comprador paga na nossa página hospedada. Após o pagamento, você entrega na sua loja. Os pedidos são concluídos automaticamente para que a liquidação da carteira possa ser realizada.

  • O comprador paga exatamente o valor e a moeda que você enviar. Não aumentamos o valor.
  • Sua taxa de vendedor é 4% desse valor bloqueado. As listagens do marketplace permanecem em 5%.
  • As taxas de processamento de cartão, PayPal e cripto são absorvidas pela plataforma nesse fluxo.

Lista de permissões necessária

Solicite nas Configurações, Checkout hospedado, e aguarde a aprovação do administrador. Chaves de API não aprovadas recebem CHECKOUT_PARTNER_NOT_APPROVED.

Solicite e obtenha aprovação

Após a aprovação, crie uma chave de API com checkout:write e um webhook JSON para checkout.completed na página de configurações do Checkout Hospedado. Até a aprovação, as APIs de checkout hospedado permanecem bloqueadas.

  1. 1Abra Configurações → Checkout hospedado e envie a URL da sua loja junto com uma breve nota sobre como você usará o checkout.
  2. 2Aguarde a aprovação de um administrador. Você verá um badge pendente até lá.
  3. 3Após a aprovação, crie uma chave de API e um webhook JSON para checkout.completed em Configurações → Checkout Hospedado.

API do Vendedor

Use isso de qualquer loja ou seu próprio servidor. Crie uma sessão com POST /api/v1/checkout/sessions. Envie checkout:write e uma Idempotency-Key. Redirecione o comprador para hosted_url. Escute por order.paid, depois cumpra em sua loja.

Crie uma sessão de checkout hospedado

bash
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: inv-12345" \
  https://rmt.gg/api/v1/checkout/sessions \
  -d @session.json

session.json

javascript
{
  amount: 10, // required when items is omitted
  currency: "USD", // optional; defaults to USD
  itemName: "Gold pack", // required when items is omitted; alias title
  description: "1000 gold for account example", // optional
  imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
  categorySlug: "games", // send with offering, or omit both
  offering: "Mods", // send with categorySlug
  email: "[email protected]", // optional
  returnUrl: "https://your-shop.example/thanks", // optional
  cancelUrl: "https://your-shop.example/cancel", // optional
  invoiceId: "12345" // optional
}

Várias linhas bloqueadas com entrega opcional (session.json)

javascript
{
  currency: "USD",
  invoiceId: "12345", // optional
  items: [ // required when amount is omitted
    {
      name: "Gold pack", // required per line
      description: "1000 gold", // optional
      amount: 10, // required per line
      quantity: 1, // optional, default 1
      imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
      delivery: [ // optional
        { name: "Code", type: "text", value: "XXXX-YYYY" } // name and value required; type is optional
      ]
    }
  ]
}
  • Envie o valor mais itemName (ou título) para um único item, ou um array items[] não vazio. A moeda padrão é USD. Campos opcionais: descrição, URL da imagem HTTPS, e-mail (preenche a página de pagamento), returnUrl, cancelUrl, invoiceId, categorySlug mais offering (envie ambos ou nenhum), e metadata. itemName é o título da página de pagamento; descrição é o texto mais longo abaixo. O comprador deve confirmar um e-mail válido antes de pagar. Após o pagamento, o comprador permanece na confirmação do RMT.GG para que possa copiar os campos de entrega. Se você definir returnUrl e houver campos de entrega, eles continuarão para sua loja a partir daquela tela. Se não houver, nós os enviaremos de volta após uma contagem regressiva curta. Se você omitir returnUrl ou cancelUrl, o comprador permanece na página de pagamento do RMT.GG após o pagamento, cancelamento ou expiração.
  • Em caso de sucesso, anexamos o uid do pedido a returnUrl como ?order= quando essa URL é HTTPS (ou localhost).
  • Valores repetidos de Idempotency-Key ou invoiceId reutilizam a mesma sessão em vez de criar um duplicado.
  • itemName e descrição aparecem apenas na página de pagamento da RMT. O checkout com cartão, PayPal e criptomoedas usa rótulos codificados de catálogo como Jogos · Adicionais, nunca o título da sua loja. Defina um padrão em Configurações, Checkout hospedado, ou envie categorySlug e oferta na sessão.
  • As sessões duram 24 horas. Depois disso, a página de pagamento não pode ser concluída, as sessões em andamento do Stripe e PayPal são encerradas, e nós POSTamos checkout.canceled com a razão expirada.
  • items[] é a alternativa de várias linhas para um único valor mais itemName. Cada linha precisa de nome e valor. Com items, o valor pode ser omitido e é calculado a partir das linhas, ou deve corresponder à soma se você o enviar. A quantidade é fixa no rmt.gg: os compradores não podem adicionar, remover ou alterar linhas. imageUrl deve ser HTTPS; não o buscamos. Campos de entrega opcionais (texto, senha ou textarea) precisam de um nome e valor. Eles são exibidos após o pagamento na página de confirmação e Compras. A solicitação GET pública da sessão inclui valores de entrega apenas após o pagamento. A solicitação GET do vendedor e webhooks nunca os incluem.

Verifique o status do pagamento

Escute primeiro por checkout.completed. Se um webhook estiver atrasado, FAÇA uma solicitação GET na sessão. paid é verdadeiro quando o comprador pagou. Você pode procurar pelo uid da sessão ou pelo invoiceId que você enviou.

  • GET /api/v1/checkout/sessions/{uid} usando o uid retornado quando você criou a sessão.
  • GET /api/v1/checkout/sessions?invoiceId=SEU_INVOICE_ID se você armazenou seu próprio id de fatura.

Procure pelo id da fatura

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/checkout/sessions?invoiceId=inv-12345

Digiseller e lojas similares

Ignore isso se você criar checkouts com a API do Vendedor. Use quando sua loja (por exemplo, Digiseller) enviar o comprador aqui através de um método de pagamento personalizado. O Digiseller envia para nossa URL de Pagamento, nós recebemos o pagamento, então o Digiseller verifica a URL de Status.

  1. 1Copie a URL de Pagamento, a URL de Status e o segredo de pagamento de Configurações → Checkout hospedado.
  2. 2Cole-os no Digiseller como um método de pagamento personalizado. Mantenha o segredo privado.
  3. 3O Digiseller então envia os compradores para nós pagarem e verifica a URL de Status para pago ou não pago.
  • item_name (ou título) é o cabeçalho na página de pagamento. description é o texto mais longo abaixo. Se ambos os nomes forem omitidos, description é usado como cabeçalho.

Exemplo de solicitação que o Digiseller envia

json
{
  "invoice_id": "12345",
  "amount": "10.00",
  "currency": "USD",
  "item_name": "Pacote de Ouro",
  "description": "1000 ouro para exemplo de conta",
  "signature": "…"
}

Prefira um webhook JSON

A URL de Status é para o Digiseller. Se você cumprir a partir do seu próprio servidor, adicione um webhook JSON e escute por checkout.completed. Você também pode FAZER uma solicitação GET na sessão como backup.

Webhooks JSON

O checkout hospedado não usa uma API de webhook separada. Sob Desenvolvedor, aponte um endpoint JSON HTTPS para os mesmos eventos das vendas do marketplace. Após o pagamento, fazemos um POST order.paid. Após um reembolso, fazemos um POST order.refunded. Combine a venda com externalInvoiceId (seu invoiceId) ou partnerSessionUid.

Payload de order.paid (campos do checkout hospedado)

json
{
  "id": "whd_…",
  "type": "order.paid",
  "created": "2026-08-14T12:00:00.000Z",
  "data": {
    "order": {
      "uid": "ord_…",
      "status": "PAGO",
      "partnerSessionUid": "…",
      "externalInvoiceId": "inv-12345",
      "partnerSource": "api"
    }
  }
}
  • source é a API para sessões da API do Vendedor.
  • A assinatura opcional usa X-RMT-Timestamp e X-RMT-Signature. Verifique HMAC da mesma forma que qualquer outro webhook de vendedor.
  • checkout.canceled inclui a razão buyer_canceled quando o comprador sai da página de pagamento sem pagar, ou razão expired quando o TTL da sessão de 24 horas expira sem pagamento.
  • checkout.items lista linhas bloqueadas (name, description, amount, quantity, imageUrl). Valores de entrega nunca são incluídos em webhooks.

Não duplique o cumprimento

O Digiseller também recebe seu próprio callback de pagamento. Se você também escutar por checkout.completed, cumpra o pedido apenas uma vez. Sessões da API do Vendedor nunca enviam esse callback do Digiseller.

Email de convidado e recibos

Os compradores devem inserir um e-mail na página de pagamento para que possamos enviar o recibo e a fatura de imposto. Contas RMT correspondentes são anexadas sem que o comprador precise fazer login.

  • Se o email já pertence a uma conta RMT, o pedido aparece nas Compras dessa conta. Nenhum cookie de login é definido na página de pagamento.
  • Um novo email cria um usuário leve, então recibos e o login posterior ainda funcionam.
  • O e-mail é necessário para concluir o pagamento. Sua loja ainda deve escutar por checkout.completed.

Moedas e limites

Use uma moeda ISO suportada, como USD ou EUR. O checkout com cartão funciona melhor em USD ou EUR. Cripto e PayPal ainda podem funcionar para outras moedas quando o provedor as aceita.

Não nesta versão

Não há SDK de iframe, domínio de página de pagamento personalizada ou saldo de carteira na página de pagamento hospedada. Compradores usam checkout redirecionado com cartão, PayPal ou cripto.

Antes de você ir ao vivo

Lista de verificação de staging

Testes unitários cobrem taxas, HMAC e reutilização. Passe por esta lista em staging antes de enviar compradores reais.

  • Solicite, confirme o badge pendente e depois peça a um administrador para aprovar. Credenciais aparecem apenas quando aprovadas. Uma chave não aprovada em POST /api/v1/checkout/sessions retorna 403.
  • Crie uma sessão com itemName, descrição e categorySlug, além da oferta (ou um padrão salvo). Abra hosted_url. O título é o nome do item; a descrição fica abaixo. A página de pagamento não tem navegação superior ou barra lateral. Pague com cartão em USD ou EUR. As páginas de cartão, PayPal e cripto devem mostrar um rótulo de catálogo como Jogos · Complementos, não o título da sua loja.
  • Confirme que checkout.completed inclui invoiceId, checkout.uid e source, e então cumpra na sua loja. Cancele a página de pagamento e confirme checkout.canceled com a razão buyer_canceled. Deixe uma sessão passar de 24 horas e confirme checkout.canceled com a razão expired que não pode mais ser paga.
  • Para o Digiseller, cole a URL de Pagamento, a URL de Status e o segredo de pagamento em um método de pagamento personalizado. Confirme que o Digiseller pode ver o status pago e que você cumpre o pedido apenas uma vez.
  • Pague com um e-mail RMT existente: o pedido vai para Compras e um recibo é enviado, sem cookie de login. Um novo e-mail cria um usuário leve. O e-mail é necessário na página de pagamento.
  • A oferta sintética oculta não deve aparecer na busca do marketplace. Em um host com lista de espera, /pay/:uid e rotas de adaptador ainda funcionam.
  • Envie imageUrl opcional e items[] se precisar de uma imagem do produto ou várias linhas bloqueadas. Confirme que a página de pagamento não possui controles de quantidade. Após o pagamento, campos de entrega aparecem em Compras e na página do pedido. URLs de imagem HTTPS apenas.

Guias relacionadas

Solicite o checkout hospedado

Abra Configurações → Checkout hospedado para solicitar, ou vá para a referência da API após ser aprovado.