Codex · III

Usando a API

Use sem o botão de compra

O botão de compra é uma camada de conveniência. Por baixo, Coin Moebius é um webhook alugado mais alguns endpoints JSON. Se você preferir construir a sua própria interface, rodar o seu próprio fluxo de checkout, ou conectar Coin Moebius a algo que o botão não consegue tratar (assinaturas do Square ou Authorize.Net, um formulário de pagamento personalizado, um script no servidor, um app móvel), cada endpoint que o botão usa também pode ser chamado de qualquer lugar. Sem mudanças de código do nosso lado.

Autenticando chamadas do backend

As chamadas que você faz a partir do seu próprio servidor podem carregar a chave de API do seu projeto como um token bearer. Crie uma chave no painel, sob as chaves de API do seu projeto (ela começa com cmk_), e envie-a no cabeçalho Authorization:

Authorization: Bearer cmk_live_xxxxxxxxxxxxxxxxxxxxxxxx

A chave está vinculada a um projeto, e as chamadas autenticadas recebem um limite de taxa mais alto do que as anônimas. O botão de compra em si é público e não precisa de chave. Mantenha a sua chave no seu servidor. Nunca a coloque no navegador ou em outro código do lado do cliente.

Todos esses endpoints ficam sob a URL do seu projeto. Em produção, essa base é https://api.coinmoebius.com. A URL completa de cada um é mostrada abaixo (substitua as partes {…} pelos seus próprios valores).

EndpointO que faz
POST https://api.coinmoebius.com/api/checkout/{provider}/{projectId}Inicia um checkout. POST { productId, metadata }; receba de volta o que quer que o provedor precise (uma URL de redirecionamento para o Stripe, uma URL de aprovação para o PayPal, um token para o Authorize.Net Accept Hosted). Renderize como você quiser.
POST https://api.coinmoebius.com/webhook/{provider}/{projectId}O provedor faz o post aqui. Verificamos a assinatura, normalizamos o evento, o armazenamos, contamos a cota. Aponte o webhook do provedor para esta URL quer o checkout original tenha vindo do nosso botão ou da sua própria integração.
GET https://api.coinmoebius.com/status/{projectId}/{txId}Consulta o estado atual de um pagamento ou assinatura. Retorna o mesmo formato normalizado que o botão de compra recebe.
POST https://api.coinmoebius.com/api/subscriptions/{projectId}/{subscriptionId}/portal-urlGera uma URL de portal hospedado pelo provedor para o comprador gerenciar a assinatura dele. Funciona para qualquer provedor que tenha um portal.

Identifique o comprador no seu próprio sistema passando metadata.customerRef na chamada de checkout. Ele passa pelo provedor e volta em cada evento de webhook, para que você possa unir os registros de Coin Moebius ao seu próprio banco de dados de usuários sem que guardemos nada sobre o comprador.

Por que alguém usa este caminho: um construtor de site estático que quer escrever o próprio botão para combinar com o design do site e só precisa do webhook tratado. Um desenvolvedor que quer pular o botão completamente e chamar a API a partir do próprio servidor. Um comerciante que quer rodar assinaturas do Square ou Authorize.Net e não se importa em conectar a coleta de cartão por conta própria. O botão é um ponto de partida. A API é o produto de verdade.

Ouvindo eventos do comprador

O elemento dispara três eventos do navegador. Ouça com addEventListener no elemento (ou no document, os eventos propagam). Todos os eventos são canceláveis, chamar event.preventDefault() interrompe o fluxo padrão.

EventoQuando disparaPayload de detalhe
cm-load-providersO modal do seletor está prestes a pedir à API a lista de provedores configurados neste projeto.Vazio.
cm-checkout-startedO comprador escolheu um provedor e Coin Moebius está prestes a criar uma sessão de checkout (Stripe / NOWPayments) ou gerar um código de referência (manual).{ provider: 'stripe' | 'nowpayments' | 'manual', ... }
cm-errorAlgo falhou: erro de rede, falha de assinatura, nenhum provedor configurado.{ error: Error }
document.addEventListener('cm-error', (event) => {
  console.error('Coin Moebius:', event.detail.error);
  // Show your own error UI, send to your analytics, etc.
});

Não há nenhum evento cm-success no navegador do comprador. Quando o pagamento de fato se conclui, o comprador já foi redirecionado para o checkout hospedado do provedor de pagamento (Stripe Checkout, página de fatura do NOWPayments). Ele volta para o seu site através da success_url que você configurou (veja a próxima seção), e o seu servidor fica sabendo do pagamento via o painel ou consultando o endpoint /status.

Consultando do seu backend

Para uma fonte da verdade no servidor, consulte GET /status/:projectId/:txId a partir do seu backend. O formato da resposta:

{
  "status": "succeeded",
  "amount": 29.99,
  "currency": "USD",
  "isTest": false,
  "createdAt": "2026-05-14T01:04:21.000Z",
  "updatedAt": "2026-05-14T01:04:21.000Z"
}

Os valores de status seguem o mesmo enum do painel (veja Status de transação). O endpoint é não autenticado mas com limite de taxa de 60 requisições / minuto por IP. O id de transação que você passa é o que quer que o SDK tenha retornado no evento cm-checkout-started ou o que é mostrado na coluna Referência do painel.

Um padrão típico: quando a sua página de success_url carrega, dispare um job de backend que consulta /status/:projectId/:txId a cada 15 segundos até ver succeeded (ou failed / um timeout), depois atenda o pedido.

Pronto para conectar?

O plano gratuito cobre a maioria dos sites e nunca pede cartão.