Mona Collections allows you to set up recurring payments and subscriptions with flexible scheduling options. Whether you need weekly, monthly, or custom intervals, our collections system handles the complexity of recurring billing while providing your customers with transparent control over their payment schedules.The system supports both fixed amount and variable collections with flexible scheduling options including weekly, monthly, and quarterly frequencies. Customer consent management ensures transparent terms, while automatic and merchant-triggered debit options give you control over collection timing. Real-time status tracking and webhook notifications keep you informed throughout the collection lifecycle.
Collections Hero LightCollections Hero Dark

Collection Types

Scheduled Collections

Perfect for installment payments with predetermined amounts and dates. Customers see exactly when and how much will be debited.

Subscription Collections

Ideal for recurring services with consistent billing cycles. Set up once and let the system handle ongoing collections.

Debit Types

MONA (Auto-scheduled)

Mona automatically handles the scheduling and execution of debits based on your configuration.

MERCHANT (Manual trigger)

You have full control over when collections are triggered, perfect for event-driven billing. You still cannot debit more than the consented amount or before the intervals your customer agreed to—you simply control the exact timing of collection execution within those boundaries.

How It Works

The collections process follows these key steps:
  1. Create Collection: Use the create collection endpoint to set up a recurring payment schedule
  2. Initialize SDK: Set up the Mona Collections SDK in your app with your merchant key
  3. Request Consent: Use the collection ID (accessRequestId) to request user consent for the collection
  4. Monitor Status: Handle consent responses and collection lifecycle events

Platform Integration

Installation

<!-- Load the Mona Script (same as checkout) -->
<Script
  src="/mona_web_embedding.js"
  strategy="beforeInteractive"
/>

<!-- Or in vanilla HTML -->
<head>
  <script src="mona_embedding.js" />
</head>

Usage

// Note: Web Collections SDK integration not yet documented
// Follow similar pattern to Checkout:

// 1. Create collection via API, get collectionId/accessRequestId

// 2. Initialize collections (method not yet documented)
// Expected pattern similar to:
// window.MonaClient.initCollections(accessRequestId, container, ...)

// 3. Handle events (events not yet documented)
// Expected pattern similar to:
// window.addEventListener("monaCollectionConsented", ...)
// window.addEventListener("monaCollectionConsentFailed", ...)

// Complete Web Collections SDK documentation coming soon

Collection Lifecycle

1. Create Collection (Backend)

First, create a collection on your backend using the API:
{
  "maximumAmount": "600",
  "debitType": "MERCHANT",
  "startDate": "2025-05-22T05:43:00",
  "expiryDate": "2025-06-19T08:42:00",
  "schedule": {
    "type": "SCHEDULED",
    "frequency": "MONTHLY",
    "amount": "200"
  }
}
Use the returned collection ID to request user consent through the SDK.

3. Monitor Collection Status

Track collection status through webhooks or polling:
  • NOT_STARTED - Collection created, awaiting consent
  • ACTIVE - Collection consented and active
  • PAUSED - Collection temporarily paused
  • COMPLETED - All scheduled payments completed
  • CANCELLED - Collection cancelled

State Management

Collection Events

Event DescriptionWebReact NativeFlutter
Collection consent successfulNot yet documentedSuccess callback in useCollectionsSuccess callback in createCollection()
Collection consent failedNot yet documentedError callback in useCollectionsError callback in createCollection()
Initialize consent flowNot yet documentedinitiate(accessRequestId)collectionsConsent()
Operation in progressNot yet documentedloading booleanSDK state streams
User authenticatedNot yet documented-AuthState.loggedIn

Platform-Specific APIs

React Native Hooks:
  • useCollections() - Main hook for collection management
  • loading - Boolean indicating if operation is in progress
  • error - Error object if operation fails
Flutter Streams:
  • authStateStream - Monitor user authentication status
  • sdkStateStream - Monitor overall SDK state

Next Steps

  1. Design Collection Schedule: Plan your recurring payment frequency and amounts
  2. Implement Backend: Set up the create collection endpoint
  3. Integrate SDK: Choose your platform and implement the consent flow
  4. Test Thoroughly: Test the complete collection lifecycle in sandbox
  5. Monitor Collections: Set up webhooks to track collection status changes
Check out our API Reference for detailed information about creating and managing collections.