charge.paid
{"id":"evt_123","type":"charge.paid","livemode":false,"data":{"charge_id":"<uuid>","invoice_id":"<uuid>","amount_cents":55000,"currency":"BRL"}}Merchant API reference
Stable reference for merchant integrations using scoped rm_test_ or rm_live_ API keys.
API rules
| Method | Path | Purpose | Scope |
|---|---|---|---|
| GET | /v1/payment-links/{id} | Get payment link | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/entitlements/check | Check entitlement balance | customers:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/customers/{id} | Get customer | customers:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/orders/{id}/invoice | Create invoice for order | invoices:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/invoices/{id} | Get invoice | invoices:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/payments/{id}/refund-request | Request payment refund | refunds:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/subscriptions/{id} | Get subscription | subscriptions:read. Errors use {error:{type,code,message,param,request_id}}. |
| PATCH | /v1/subscriptions/{id} | Update subscription | subscriptions:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/products | List products | orders:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/checkout/sessions/{id} | Get hosted checkout session | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/payment-links | Create payment link | charges:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/payment-links | List payment links | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/products/{id} | Get product | orders:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/prices | List prices | orders:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/payments | List payments | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/entitlements/consume | Consume entitlement units | customers:write. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/payment-links/{id}/cancel | Cancel payment link | charges:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/invoices | List invoices | invoices:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/charges | List charges | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/charges/{id} | Get charge | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/portal/sessions | Create customer portal session | customers:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/invoices/{id}/pdf | Download invoice PDF | invoices:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/customers | Create customer | customers:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/customers | List customers | customers:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/checkout/sessions | Create hosted checkout session | charges:write. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/subscriptions | Create subscription | subscriptions:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/subscriptions | List subscriptions | subscriptions:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /merchant/dashboard | Manage webhook URL, event subscriptions, delivery history, and retry | webhooks:write. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/orders | Create order | orders:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/orders | List orders | orders:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/orders/{id} | Get order | orders:read. Errors use {error:{type,code,message,param,request_id}}. |
| POST | /v1/invoices/{id}/charge | Create or reuse invoice charge | charges:write. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/invoices/{id}/charge | Get invoice payment instructions | charges:read. Errors use {error:{type,code,message,param,request_id}}. |
| GET | /v1/entitlements | List entitlements | customers:read. Errors use {error:{type,code,message,param,request_id}}. |
Webhooks
charge.paid{"id":"evt_123","type":"charge.paid","livemode":false,"data":{"charge_id":"<uuid>","invoice_id":"<uuid>","amount_cents":55000,"currency":"BRL"}}invoice.paid{"id":"evt_124","type":"invoice.paid","livemode":false,"data":{"invoice_id":"<uuid>","status":"paid","paid_at":"2026-07-02T10:00:00Z"}}subscription.active{"id":"evt_125","type":"subscription.active","livemode":false,"data":{"subscription_id":"<uuid>","customer_id":"<uuid>","status":"active"}}refund_request.created{"id":"evt_126","type":"refund_request.created","livemode":false,"data":{"refund_request_id":"<uuid>","payment_id":"<uuid>","status":"requested"}}refund_request.approved{"id":"evt_127","type":"refund_request.approved","livemode":false,"data":{"refund_request_id":"<uuid>","status":"approved"}}refund_request.rejected{"id":"evt_128","type":"refund_request.rejected","livemode":false,"data":{"refund_request_id":"<uuid>","status":"rejected","reason":"Not eligible"}}refund_request.processed{"id":"evt_129","type":"refund_request.processed","livemode":false,"data":{"refund_request_id":"<uuid>","payment_id":"<uuid>","status":"processed","amount_cents":55000}}merchant.webhook.test{"id":"evt_test","type":"merchant.webhook.test","livemode":false,"data":{"message":"MoneyPaga signed webhook test event."}}Signature
const crypto = require("crypto");
function verifyMoneyPagaWebhook(rawBody, header, secret) {
const received = String(header || "").replace(/^sha256=/, "");
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
}func verifyMoneyPagaWebhook(rawBody []byte, header, secret string) bool {
mac := hmac.New(sha256.New, []byte(secret))
mac.Write(rawBody)
expected := hex.EncodeToString(mac.Sum(nil))
received := strings.TrimPrefix(header, "sha256=")
return hmac.Equal([]byte(received), []byte(expected))
}