RapidCents Developer Documentation
Payment Pages Integration Guide
v1.0 · REST API

Payment Pages

Reusable hosted payment pages · Customer-entered amounts · Card payments with optional 3D Secure

Summary

Payment Pages are reusable, shareable hosted checkout pages that allow merchants to accept payments without building a custom payment form. Unlike Payment Links (which are single-use with a fixed amount), Payment Pages can be used multiple times and the customer enters the payment amount at checkout.

💲

Payment Pages support manual card entry with optional 3D Secure verification, configurable surcharge, and tax. Each payment creates a transaction record while the page remains active for future payments.

Payment Page Lifecycle

  1. Create — Merchant creates a payment page with a name, optional description, surcharge, tax, and 3D Secure settings.
  2. Share — The page is accessible via a public URL using the business slug and page slug: /payment_pages/{business_slug}/{page_slug}/pay
  3. Customer Registration — Before paying, the customer provides their name, email, and phone number to create or retrieve a customer record.
  4. Pay — Customer enters the desired amount, fills in card details, and submits. 3D Secure step-up is triggered if enabled.
  5. Result — On approval, a transaction is recorded. Both merchant and customer receive payment confirmation emails. The page remains active for future payments.

Payment Pages vs Payment Links

FeaturePayment PagePayment Link
AmountCustomer enters at checkoutFixed by merchant at creation
ReusabilityUnlimited — reusableSingle-use
CustomerCreated / found at payment timeRequired at link creation
URL Structure/{business_slug}/{page_slug}/pay/{payment_link_id}/pay
Status TrackingNo status — always activeCREATED → PAID / EXPIRED
Google PayNot supportedSupported
Invoice LinkingNot supportedSupported
Contract LinkingNot supportedSupported
ExpiryNever expiresOptional expiry

Processing Flow

MerchantCreates & Shares Page
CustomerOpens Page & Enters Amount
RapidCentsValidates & Processes
Visa · Mastercard · Discover · Amex

When 3D Secure is enabled on the page, the customer is redirected to their card issuer for authentication before the payment is processed.

Authentication

Merchant API (Private)

All merchant-facing endpoints require a valid Bearer token via the Authorization header and are scoped to a business:

Authorization: Bearer {access_token}
Content-Type: application/json

Base URL pattern: /api/{business_id}/payment_pages

Customer API (Public)

Public endpoints do not require authentication. They are accessed by slug-based URLs:

GET  /api/payment_pages/{business_slug}/{page_slug}/pay
POST /api/payment_pages/{business_slug}/{page_slug}/pay

Create Payment Page

POST /api/{business}/payment_pages

Request Body

FieldTypeRequiredDescription
namestringYesPage name — a URL slug is automatically derived from this
descriptionstringNoDescription displayed to the customer on the payment page
surchargebooleanNoApply surcharge to the transaction. Default: false
threeDSecurebooleanNoEnable 3D Secure verification. Default: true
taxnumberNoTax rate. Stored internally as integer (e.g. 25.002500). Default: 0
Request
POST /api/{business}/payment_pages
Content-Type: application/json
Authorization: Bearer {token}

{
  "name": "Donation Page",
  "description": "Support our community initiative",
  "surcharge": false,
  "threeDSecure": true,
  "tax": 0
}
Response — 200 OK
{
  "ok": true,
  "payment_page": {
    "id": "uuid",
    "name": "Donation Page",
    "slug": "donation-page",
    "description": "Support our community initiative",
    "surcharge": false,
    "three_d_secure": true,
    "tax": 0,
    "created_at": "2026-02-19T12:00:00.000000Z"
  }
}

List Payment Pages

GET /api/{business}/payment_pages

Returns a paginated list of all payment pages belonging to the business.

Query Parameters

ParameterTypeDescription
fromDatedateFilter pages created on or after this date
toDatedateFilter pages created on or before this date
perPageintegerResults per page (default: 10)
Response — 200 OK
{
  "ok": true,
  "payment_pages": {
    "data": [ /* array of payment page objects */ ],
    "current_page": 1,
    "per_page": 10,
    "total": 5
  },
  "business": { /* business object with configurations */ },
  "filters": { "fromDate": null, "toDate": null }
}

Get Page Details

GET /api/{business}/payment_pages/{payment_page}

Returns full details for a single payment page by its UUID.

Update Payment Page

PUT /api/{business}/payment_pages/{payment_page}

Request Body

FieldTypeRequiredDescription
namestringNoUpdated page name
slugstringNoUpdated URL slug (must be unique per business)
descriptionstringNoUpdated description
surchargebooleanNoEnable/disable surcharge
threeDSecurebooleanNoEnable/disable 3D Secure
taxnumberNoUpdated tax rate
Response — 200 OK
{
  "ok": true,
  "payment_page": { /* updated payment page object */ }
}

Delete Payment Page

DELETE /api/{business}/payment_pages/{payment_page}

Permanently deletes a payment page. This action cannot be undone. The public URL will no longer be accessible.

Response — 200 OK
{
  "ok": true,
  "message": "Payment page deleted successfully"
}

Payment Attempts

GET /api/{business}/payment_pages/{payment_page}/attempts

Returns a list of all payment attempts (successful and failed) made through this payment page. Requires ownership verification.

Response — 200 OK
{
  "ok": true,
  "attempts": [
    {
      "id": "uuid",
      "amount": 50.00,
      "status": "approved",
      "customer": { "name": "John Doe", "email": "[email protected]" },
      "created_at": "2026-02-19T14:30:00.000000Z"
    }
  ]
}

Create / Find Customer (Public)

POST /api/{business}/public/customers

Before paying through a payment page, the customer must be identified. If a customer with the given email already exists, their existing ID is returned.

Request Body

FieldTypeRequiredDescription
namestringYesCustomer full name
emailstringYesCustomer email address
phonestringYesCustomer phone number
paymentPageIdstring (UUID)YesID of the payment page
Response — 200 OK
{
  "ok": true,
  "customerId": "customer-uuid"
}

View Payment Page (Public)

GET /api/payment_pages/{business_slug}/{page_slug}/pay

Loads the payment page details for customer display. No authentication required.

Response — 200 OK
{
  "ok": true,
  "paymentPage": {
    "name": "Donation Page",
    "description": "Support our community initiative",
    "surcharge": false,
    "tax": 0
  },
  "logo": "https://s3.amazonaws.com/...",
  "dddSecure": true,
  "three_d_secure": true
}

Pay via Payment Page (Public)

POST /api/payment_pages/{business_slug}/{page_slug}/pay

Request Body

FieldTypeRequiredDescription
amountnumberYesPayment amount entered by the customer
customerIdstringYesCustomer UUID from the create/find step
cardData.cardNumberstringYesFull card number
cardData.nameOnCardstringYesCardholder name
cardData.monthstringYesExpiry month (01-12)
cardData.yearintegerYesExpiry year
cardData.cvvstringYesCard verification value
cardData.saveCardbooleanNoSave card for future use
cardData.address.postalCodestringConditionalRequired if AVS is enabled
cardData.address.line1stringConditionalRequired if AVS is enabled
invoiceNumberstringConditionalRequired if invoice number is enabled in config
dddobjectConditional3D Secure authentication data (if 3DS is enabled)
dddSessionIDstringConditional3D Secure session ID (if 3DS is enabled)
Request
POST /api/payment_pages/my-business/donation-page/pay
Content-Type: application/json

{
  "amount": 50.00,
  "customerId": "customer-uuid",
  "cardData": {
    "cardNumber": "4111111111111111",
    "nameOnCard": "John Doe",
    "month": "12",
    "year": 2028,
    "cvv": "123",
    "saveCard": false
  }
}
Response — 200 OK
{
  "ok": true,
  "result": {
    "code": "000",
    "recordID": "txn-uuid",
    "message": "Approved"
  }
}

3D Secure Flow

When 3D Secure is enabled on the payment page (and the business has 3DS configured), the payment process includes an additional authentication step.

Step 1 — Initialize 3DS Session

POST /api/ddd/init

Request
{
  "amount": 50.00,
  "cardNumber": "4111111111111111",
  "businessId": "business-uuid"
}
Response
{
  "ok": true,
  "threeDSecureId": "session-uuid",
  "acsURL": "https://acs.issuer-bank.com/...",
  "creq": "base64-encoded-challenge-request",
  "transStatus": "C"
}

Step 2 — Authenticate

POST /api/ddd/authenticate

Request
{
  "threeDSecureId": "session-uuid"
}
Response
{
  "ok": true,
  "transStatus": "Y",
  "eci": "05",
  "authenticationValue": "base64-cavv-value"
}

Transaction Status Codes

StatusMeaningAction
YAuthenticatedProceed with payment — include ddd and dddSessionID
CChallenge RequiredRedirect customer to acsURL for challenge, then call authenticate
NNot AuthenticatedPayment should not proceed
RRejectedPayment should not proceed

All Endpoints

Merchant Endpoints (Authenticated)

MethodEndpointDescription
GET/api/{business}/payment_pagesList all payment pages
POST/api/{business}/payment_pagesCreate a payment page
GET/api/{business}/payment_pages/{id}Get page details
PUT/api/{business}/payment_pages/{id}Update a payment page
DELETE/api/{business}/payment_pages/{id}Delete a payment page
GET/api/{business}/payment_pages/{id}/attemptsList payment attempts

Public Endpoints (No Authentication)

MethodEndpointDescription
POST/api/{business}/public/customersCreate or find customer
GET/api/payment_pages/{slug}/{page}/payView payment page
POST/api/payment_pages/{slug}/{page}/paySubmit payment

Card Data Fields

FieldTypeValidationDescription
cardNumberstringRequiredFull card number (no spaces or dashes)
nameOnCardstringRequiredCardholder name as it appears on the card
monthstringRequired, 01–12Two-digit expiry month
yearintegerRequiredFour-digit expiry year
cvvstringRequired3 or 4-digit security code
saveCardbooleanOptionalStore card on file for future transactions

Error Handling

HTTP CodeScenarioResponse
404Payment failed{ "ok": false, "message": "Payment failed. Please check your details." }
422Validation error{ "ok": false, "errors": { "field": ["Error message"] } }
404Page not found{ "ok": false, "message": "Payment page not found" }
500Server error{ "ok": false, "message": "An error occurred" }

Notifications

After a successful payment, RapidCents sends email notifications to both the customer and the merchant.

RecipientNotificationContent
CustomerPayment Page PaidPayment confirmation with receipt details and PDF attachment
MerchantPayment Page PaidNotification of received payment with customer and amount details

Merchant users can opt out of payment page notifications through their notification preferences. Emails are the only supported channel.