Codex · III

De API gebruiken

Gebruik het zonder de buy button

De buy button is een gemakslaag. Onder de motorkap is Coin Moebius een gehuurde webhook plus een paar JSON-endpoints. Als u liever uw eigen UI bouwt, uw eigen checkout-flow draait, of Coin Moebius aansluit op iets dat de knop niet aankan (Square- of Authorize.Net-abonnementen, een eigen betaalformulier, een server-side script, een mobiele app), dan is elk endpoint dat de knop gebruikt ook vanuit alles aanroepbaar. Geen codewijzigingen aan onze kant.

Backend-aanroepen authenticeren

Aanroepen die u vanaf uw eigen server doet kunnen de API key van uw project dragen als bearer-token. Maak een sleutel aan in het dashboard, onder de API keys van uw project (hij begint met cmk_), en stuur hem in de Authorization-header:

Authorization: Bearer cmk_live_xxxxxxxxxxxxxxxxxxxxxxxx

De sleutel is gekoppeld aan één project, en geauthenticeerde aanroepen krijgen een hogere rate limit dan anonieme. De buy button zelf is publiek en heeft geen sleutel nodig. Houd uw sleutel op uw server. Zet hem nooit in browser- of andere client-side code.

Deze endpoints leven allemaal onder uw project-URL. In productie is die basis https://api.coinmoebius.com. De volledige URL voor elk wordt hieronder getoond (vervang de {…}-delen door uw eigen waarden).

EndpointWat het doet
POST https://api.coinmoebius.com/api/checkout/{provider}/{projectId}Start een checkout. POST { productId, metadata }; ontvang terug wat de provider ook nodig heeft (een redirect-URL voor Stripe, een approval-URL voor PayPal, een token voor Authorize.Net Accept Hosted). Geef het weer zoals u wilt.
POST https://api.coinmoebius.com/webhook/{provider}/{projectId}De provider plaatst hier. We verifiëren de handtekening, normaliseren het event, slaan het op, tellen quotum. Richt de webhook van de provider op deze URL, of de oorspronkelijke checkout nu van onze knop of uw eigen integratie kwam.
GET https://api.coinmoebius.com/status/{projectId}/{txId}Poll voor de huidige staat van een betaling of abonnement. Geeft dezelfde genormaliseerde vorm terug die de buy button krijgt.
POST https://api.coinmoebius.com/api/subscriptions/{projectId}/{subscriptionId}/portal-urlGenereer een provider-gehoste portaal-URL voor de koper om zijn abonnement te beheren. Werkt voor elke provider die een portaal heeft.

Identificeer de koper in uw eigen systeem door metadata.customerRef mee te geven op de checkout-aanroep. Het rijgt door de provider en terug bij elk webhook-event, zodat u de records van Coin Moebius kunt koppelen aan uw eigen gebruikersdatabase zonder dat wij iets over de koper opslaan.

Waarom iemand dit pad gebruikt: een statische-sitebouwer die zijn eigen knop wil schrijven die past bij het ontwerp van zijn site en alleen de webhook afgehandeld nodig heeft. Een ontwikkelaar die de knop volledig wil overslaan en de API vanaf zijn eigen server wil aanroepen. Een verkoper die Square- of Authorize.Net-abonnementen wil draaien en het prima vindt om kaartverzameling zelf te bedraden. De knop is een startpunt. De API is het eigenlijke product.

Luisteren naar koper-events

Het element vuurt drie browser-events af. Luister met addEventListener op het element (of op document, de events bubbelen). Alle events zijn cancelable, het aanroepen van event.preventDefault() stopt de standaardflow.

EventWanneer het afvuurtDetail-payload
cm-load-providersDe keuzehulp-modal staat op het punt de API om de lijst van op dit project geconfigureerde providers te vragen.Leeg.
cm-checkout-startedDe koper koos een provider en Coin Moebius staat op het punt een checkout-sessie aan te maken (Stripe / NOWPayments) of een referentiecode te genereren (manual).{ provider: 'stripe' | 'nowpayments' | 'manual', ... }
cm-errorIets faalde: netwerkfout, handtekeningfout, geen provider geconfigureerd.{ error: Error }
document.addEventListener('cm-error', (event) => {
  console.error('Coin Moebius:', event.detail.error);
  // Show your own error UI, send to your analytics, etc.
});

Er is geen cm-success-event in de browser van de koper. Tegen de tijd dat de betaling daadwerkelijk voltooit, is de koper omgeleid naar de gehoste checkout van de betaalprovider (Stripe Checkout, NOWPayments-factuurpagina). Ze keren terug naar uw site via de success_url die u configureerde (zie de volgende sectie), en uw server verneemt de betaling via het dashboard of door het /status-endpoint te pollen.

Pollen vanuit uw backend

Voor een server-side bron van waarheid, poll GET /status/:projectId/:txId vanuit uw backend. De responsvorm:

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

Statuswaarden volgen dezelfde enum als het dashboard (zie Transactiestatussen). Het endpoint is niet-geauthenticeerd maar gerate-limit op 60 verzoeken / minuut per IP. Het transactie-id dat u meegeeft is wat de SDK ook teruggaf in het cm-checkout-started-event of wat wordt getoond in de Referentie-kolom van het dashboard.

Een typisch patroon: wanneer uw success_url-pagina laadt, start een backend-job die /status/:projectId/:txId elke 15 seconden pollt totdat hij succeeded ziet (of failed / een time-out), en handel dan de bestelling af.

Klaar om het te bedraden?

Het gratis abonnement dekt de meeste sites en vraagt nooit om een kaart.