Docs/Services/Simple Payments

Simple Payments

A hosted checkout page you can link to from anywhere — email, SMS, invoice — with no code required on your side. Customer lands on a moat-hosted page, pays, and comes back.

Simple Payments gives you a fully hosted "Pay Now" checkout page. You create a payment link via the API (or directly in the Control Panel), share it with the customer however you like, and moat takes it from there: collects card info, runs the charge, emails a receipt. No front-end development on your side.

Create a payment link

POST /api/simple-payment

Fields

FieldTypeRequiredDescription
amountintegerconditionalAmount in cents. Required unless customer_choice is set.
customer_choicebooleanoptionalIf true, the customer picks the amount. Useful for donations or tips.
descriptionstringoptionalDescription shown on the hosted page and in the receipt.
customer_idstringoptionalPre-fill with a known customer's contact details.
collect_shippingbooleanoptionalRender shipping address fields.
collect_phonebooleanoptionalRequire a phone number.
allow_achbooleanoptionalOffer ACH alongside card. Default: account setting.
expires_atstringoptionalISO-8601 timestamp after which the link stops accepting payments.
return_urlstringoptionalWhere to send the customer after successful payment.
success_messagestringoptionalAlternative: a confirmation message to display on moat's hosted page.

Example

fetch("https://sandbox.fluidpay.com/api/simple-payment", {
  method: "POST",
  headers: { "Authorization": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    amount: 12500,
    description: "April invoice — consulting",
    expires_at: "2026-05-01T00:00:00Z",
    return_url: "https://yoursite.com/thanks"
  })
})

Response

{
  "status": "success",
  "data": {
    "id": "sp_01H9XK...",
    "url": "https://sandbox.fluidpay.com/pay/sp_01H9XK...",
    "amount": 12500,
    "status": "open",
    "created_at": "2026-04-23T10:00:00Z",
    "expires_at": "2026-05-01T00:00:00Z"
  }
}

Payment lifecycle

StatusMeaning
openLink is live and accepting payments.
paidPayment completed. A corresponding transaction has been created.
expiredPast expires_at. No further payments accepted.
canceledMerchant voided the link.

Other operations

EndpointPurpose
GET /api/simple-payment/{id}Retrieve a payment link.
POST /api/simple-payment/{id}/cancelCancel. Idempotent.
POST /api/simple-payment/searchSearch.

Branding

The hosted page picks up your account's branding — logo, primary color, business name — from Settings → Brand in the Control Panel. Upload a PNG logo (recommended 240 × 80 px, transparent background) and a hex color for the primary button.

Webhooks

Subscribe to simple_payment.paid to get a server-side notification when the customer completes payment. The webhook payload includes the simple_payment.id and the transaction.id it produced.