Changed
Expanded Payment Request webhook payloads
New fields onpayment_request.created, payment_request.updated and payment_request.paid:modeβliveortest, depending on the API key that created the Payment Request. Always present.statement_descriptorβ the text shown on the customerβs statement, present when it was set on the Payment Request.
payment_request.updatedis sent when a Payment Request becomesexpiredorfailed, as well as when you update it.- A paid Payment Request sends both
payment_request.updatedandpayment_request.paid. - Deleting a Payment Request does not send an event.
payment_page.payment_receivedis not available yet and has been removed until it is released.
New
Added Complete Payment Session endpoint and expanded Payment Method Options
New endpoint:POST /collect/payment_sessions/{id}/completeβ update an existing Payment Session with a new payment method selection. Used in merchant-controlled flows to reuse the session after a failed attempt without creating a new one. Acceptsselected_payment_methodandvisible_payment_methodsusing the same identifier formats as session creation.
payment_method_options:mobile_money.phone_numberβ pre-fills the customerβs phone number for mobile money payment methods (for example M-Pesa, MTN MoMo, Airtel Money). Must be in E.164 format and match the session country.capitec_pay.phone_numberβ pre-fills the customerβs Capitec-registered phone number. Must be in E.164 format and match the session country.prefill_modeβ controls how the checkout handles pre-filled payment method fields.reviewpresents the value for the customer to confirm;auto_advanceskips the review step and advances automatically.
checkout_options:payment_method_selectionβ controls who manages payment method selection during checkout.gateway(default) has Moment Checkout display and manage selection.merchantdelegates selection to the merchantβs own checkout; requiresreturn_urland redirects back automatically after each payment attempt.
Changed
Renamed the instant_eft payment method type to pay_by_bank
The Payment payment_method_details discriminated union variant previously identified as instant_eft is now pay_by_bank. This affects the type discriminator value, the nested details object key, and the payment.succeeded webhook payload.What changed:type: instant_eftis nowtype: pay_by_bank- The
instant_eftdetails object (containingbank) is nowpay_by_bank
NewChangedDeprecated
Consolidated in-flight Payment statuses under a single pending status
The Payment status field now reports a single pending value for any payment with an in-flight attempt, instead of exposing the more granular initiating, pending_action, and processing values at the payment level. The detailed phase of an in-flight payment is an attempt-level concern and is no longer surfaced on the payment aggregate status.New value on Payment status:pending: the payment has an in-flight attempt and is awaiting a final outcome
initiating,pending_action, andprocessingare deprecated as Paymentstatusvalues. They remain valid enum members for backwards compatibility, but new payment responses and webhook payloads will not emit them. Integrations should treat any of these legacy values aspending.
status: initiating, processing, or pending_action will now appear with status: pending. Terminal statuses (succeeded, failed, cancelled, expired) and draft are unchanged. If your integration matches on the legacy in-flight values, map them to pending.π See the Payment object referenceNewChangedDeprecated
Introduced payment_outcome on Payment Sessions, deprecating payment_status
The Payment Session resource now exposes a richer payment_outcome field that supersedes payment_status. The new field carries the existing paid, unpaid, and pending values and adds three more to cover flows that the binary payment_status could not express cleanly.New field on the Payment Session object:payment_outcomeβ the canonical state of the payment associated with the session
not_startedβ payment has not been initiatedpendingβ payment is in flight, awaiting a final outcomepaidβ payment succeeded (terminal)unpaidβ payment failed, expired, or was cancelled (terminal)reservedβ funds were authorised on acapture_method: manualflow; subsequent capture and void operations are tracked on the underlying Payment resourcepayment_method_verifiedβ supportedamount: 0verification flow succeeded and the payment method was vaulted
payment_statusis now deprecated. It continues to be populated withpaid,unpaid, orpendingfor backwards compatibility. New integrations should readpayment_outcome.
New
Added Authorisation and Capture and Payment Method Verification to Payments and Payment Sessions APIs
Introduced support for authorisation and capture payment flows, and payment method verification, across both the Payments and Payment Sessions APIs.Payments API β new endpoints:POST /collect/payments/{id}/capturesβ capture a previously authorised paymentPOST /collect/payments/{id}/voidsβ cancel a previously authorised payment
capture_methodβ whether the payment uses immediate or manual captureauthorized_amountβ the amount held under authorisationpaid_amountβ the amount captured and collectedvoided_amountβ the amount voided when an authorisation is cancelledintentβ indicates whether the payment was initiated for verification or payment collectionmetadatanow accepted on capture and void requestsexternal_referenceenforces a pattern of^[a-zA-Z0-9_-]+$
payment_method_optionsadded to One Time, First In Series, and Next In Series payment sessions to configure the capture method and enable payment method verification flows
New
Added Mandate and Subscription Options to Payment Sessions API
Payment sessions now support mandate and subscription options for recurring payment flows. Merchants can configure consent terms, validity periods, execution schedules, and payment amount controls when initiating a mandate.Mandate options:mandate_optionsadded to First In Series payment sessions- Supported mandate types: Scheduled, On Demand, and Installment
- Execution constraints control when recurring payments can be collected:
day_of_month,day_of_week,day_of_year,nth_day_of_month - Period limits define how much can be collected within a given window, with support for calendar-aligned and cycle-aligned windows
- Amount can be fixed or variable within defined bounds
subscription_optionsadded to support plan-driven recurring payments- Recurrence can be configured as daily, weekly, or monthly with flexible scheduling
NewChanged
Added Payment Rules and Schema Refinements to Billing API
New fields on the Account object:payment_rules.min_amountβ minimum payment amount acceptedpayment_rules.max_amountβ maximum payment amount acceptedpayment_rules.overpayment_allowedβ whether payments exceeding the balance are acceptedpayment_rules.underpayment_allowedβ whether partial payments are accepted
external_referenceon accounts now excludes the reservedbacc_prefixexternal_referenceon customers and bills now excludes the reservedbcus_prefixconflictandpayment_not_founderror codes added across all billing endpoints
NewChanged
Added Presentation Mode to Payment Sessions API
presentation_mode is now available on checkout_options in the Payment Sessions API to control how the Moment checkout is presented to customers.Supported modes:redirectβ redirects the customer to the Moment-hosted checkout pageembedded_modalβ displays checkout as a modal overlay within the merchantβs pageembedded_inlineβ renders checkout inline within the merchantβs page
display_pay_buttonreplaces the previousdisplayPayButtonfield on embedded mode optionspayment_not_foundadded as a new error code across create and retrieve endpoints
New
Introduced Payments API
Initial release of the Payments API.Endpoints:GET /collect/payments/{id}β retrieve the full Payment object by its identifier
payment_method_details is returned as a discriminated union β each payment method type (Card, Capitec Pay, Instant EFT, Zapper, MTN MoMo) is a distinct subschema identified by a type discriminator.π See Payment Objectπ See Payments OverviewNew
Introduced Payment Requests API
Initial release of the Payment Requests API, enabling merchants to create and share direct payment links with customers via SMS, email, or messaging apps.Endpoints:POST /collect/payment_requestsβ create a payment requestGET /collect/payment_requests/{id}β retrieve a payment requestPATCH /collect/payment_requests/{id}β update a payment requestDELETE /collect/payment_requests/{id}β delete a payment request
payment_request.createdβ triggered when a payment request is createdpayment_request.updatedβ triggered when a payment request is updatedpayment_request.paidβ triggered when a payment request is paid
New
Added obligation.amount_applied Webhook to Billing API
The obligation.amount_applied webhook event is now available, triggered when an amount is received against a billing obligation such as a bill, account, or customer.π See obligation.amount_appliedNew
Introduced Payment Pages API
Initial release of the Payment Pages API, enabling merchants to create branded hosted payment pages that customers can access via a shareable link.Endpoints:POST /collect/payment_pagesβ create a payment pageGET /collect/payment_pages/{id}β retrieve a payment pagePATCH /collect/payment_pages/{id}β update a payment pageDELETE /collect/payment_pages/{id}β delete a payment pagePATCH /collect/payment_pages/{id}/inactiveβ deactivate a payment pageGET /collect/payment_pages/{id}/transactionsβ retrieve transactions for a payment page
New
Introduced Billing API
Initial release of the Billing API, providing full lifecycle management of customers, accounts, and bills.Customers:POST /billing/customersβ create a customerGET /billing/customers/{customer}β retrieve a customerPATCH /billing/customers/{customer}β update a customer
POST /billing/accountsβ create an account under a customerGET /billing/accounts/{account}β retrieve an accountPATCH /billing/accounts/{account}β update an account
POST /billing/billsβ create a billGET /billing/bills/{bill}β retrieve a billPATCH /billing/bills/{bill}β update a billPOST /billing/bills/{bill}/voidβ cancel a bill
New
Added Checkout Options to Payment Sessions API
checkout_options added to One Time and First In Series payment sessions, allowing merchants to configure the checkout experience presented to customers.π See Checkout OptionsNew
Introduced Payment Sessions API
Initial release of the Payment Sessions API.Endpoints:POST /collect/payment_sessionsβ create a new payment sessionGET /collect/payment_sessions/{id}β retrieve a payment session by its identifier
- One Time β a single payment flow with checkout and payment method options
- First In Series β initiates a recurring payment flow and captures the mandate
- Next In Series β continues a recurring payment flow using an existing mandate

