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
Fields
| Field | Type | Required | Description |
|---|---|---|---|
amount | integer | conditional | Amount in cents. Required unless customer_choice is set. |
customer_choice | boolean | optional | If true, the customer picks the amount. Useful for donations or tips. |
description | string | optional | Description shown on the hosted page and in the receipt. |
customer_id | string | optional | Pre-fill with a known customer's contact details. |
collect_shipping | boolean | optional | Render shipping address fields. |
collect_phone | boolean | optional | Require a phone number. |
allow_ach | boolean | optional | Offer ACH alongside card. Default: account setting. |
expires_at | string | optional | ISO-8601 timestamp after which the link stops accepting payments. |
return_url | string | optional | Where to send the customer after successful payment. |
success_message | string | optional | Alternative: 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
| Status | Meaning |
|---|---|
open | Link is live and accepting payments. |
paid | Payment completed. A corresponding transaction has been created. |
expired | Past expires_at. No further payments accepted. |
canceled | Merchant voided the link. |
Other operations
| Endpoint | Purpose |
|---|---|
GET /api/simple-payment/{id} | Retrieve a payment link. |
POST /api/simple-payment/{id}/cancel | Cancel. Idempotent. |
POST /api/simple-payment/search | Search. |
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.