1. 7. Payment Providers (PSPs)
Mozarto - The Payments Orchestration Platform
  • 1. Introduction
  • 2. Quick Start
  • 3. Authentication
  • 4. Webhook Setup
  • 5. Errors
  • 6. Redirect flow
    • Pay-In Flow
    • Pay-Out Flow
  • 7. Payment Providers (PSPs)
    • Overview
    • Brite
    • Cleo
    • Contiant
    • emerchantpay
    • Flexepin
    • ForumPay
    • Gigadat
    • Neosurf
    • PayOne
    • PawaPay
    • Trust Payments
    • Worldpay
  • 8. Redirect Flow APIs
    • Redirect Flow APIs - overview
    • Pay-In
      • Brite
      • Cleo
      • Contiant
      • emerchantpay
      • Flexepin
      • Forumpay
      • Gigadat
      • Neosurf
      • PayOne
      • PawaPay
      • Trust Payments
      • WorldPay
    • Pay-Out
      • Cleo
      • Gigadat withdraw ETO
      • Gigadat withdraw ACH
      • Forumpay
      • PayOne
      • PawaPay
  • Webhook
    • Payone status webhook
  • Schemas
    • TransactionData
  1. 7. Payment Providers (PSPs)

Neosurf

Prepaid voucher payment method. The user is redirected to Neosurf's hosted page to redeem their voucher — no bank account or card required.
Operations: Pay-In ✓ | Pay-Out - | Webhook ✓
Processing: Asynchronous - redirect user to Neosurf's hosted page; final status via webhook
Payment type: Prepaid voucher
Fields marked with * are required.

Configuration (Mozarto back office)#

FieldDescription
accountName *Display name for this account
apiKey *Neosurf API key - used to sign the request hash and verify webhook signatures
siteUrl *Your site URL - used to build the success, failure, and pending redirect URLs
merchantId *Your Neosurf merchant ID
webhookUrl *Your HTTPS endpoint for the final transaction status (required — the redirect returns a PENDING status only)

Pay-In#

POST /v1/api/mozarto/cashier

Request body#

FieldTypeDescription
pspType *stringAlways "NEOSURF"
type *stringAlways "PAYIN"
baseamount *numberAmount to redeem as a number (e.g. 50.00)
currency *stringCurrency code (e.g. "EUR")
currencyCode *stringCurrency code
userId *stringYour internal user/player identifier
email *stringUser's email address
siteUrlstringPer-transaction redirect URL. Overrides the siteUrl from your configuration for the success, failure, and pending return URLs

Example request#

{
  "pspType": "NEOSURF",
  "type": "PAYIN",
  "baseamount": 50.00,
  "currency": "EUR",
  "currencyCode": "EUR",
  "userId": "user_123",
  "email": "player@example.com"
}

Response#

{
  "status": "success",
  "message": "Successfully",
  "isSuccess": true,
  "data": {
    "url": "https://webpayment.neosurf.com/...",
    "transactionId": "64a1f2b3c4d5e6f7a8b9c0d1",
    "amount": 50,
    "merchantReference": ""
  }
}
Redirect the user to data.url — Neosurf's hosted page where they enter their voucher. The transaction stays PENDING until the final status arrives via the webhook.
FieldDescription
data.urlNeosurf hosted payment page - redirect the user here
data.transactionIdMozarto transaction ID - use for status queries and idempotency
data.amountTransaction amount as a number
data.merchantReferenceYour reference, echoed back - empty string if not set

Webhook#

Neosurf notifies Mozarto once the voucher is redeemed; Mozarto verifies the signature (hash) and then calls your configured webhookUrl. The method field will be NEOSURF_PAYIN.

Payload example#

{
  "transaction_id": "64a1f2b3c4d5e6f7a8b9c0d1",
  "user_id": "000000000000000000000001",
  "status": "success",
  "transaction_status": "Approved",
  "message": "Transaction completed successfully",
  "amount": 50,
  "currency": "eur",
  "merchantReference": ""
}
FieldDescription
transaction_idMozarto transaction ID - matches data.transactionId from the Pay-In response
user_idThe user ID associated with the transaction
statusRaw status (success / pending / other) - do not use for business logic
transaction_statusNormalized Mozarto status - use this for all business logic (Approved / Pending / Declined)
messageHuman-readable description of the outcome
amountTransaction amount as a number
currencyCurrency, lowercase (as sent by Neosurf)
merchantReferenceThe merchant reference passed in the original request - empty string if not set
Neosurf raw status maps to transaction_status as: ok → Approved, pending → Pending, anything else → Declined.

Error codes#

Neosurf transport failures are mapped to normalized Mozarto errorCode values. Use errorCode for programmatic handling rather than parsing raw response fields.
Mozarto errorCodePSP raw signalWhen
INVALID_PSP_CREDENTIALSHTTP 404 / 401 / 403API key, merchant ID, or site URL is missing or rejected by Neosurf
PSP_TIMEOUTHTTP 408 or response body contains "timeout"Neosurf did not respond in time - safe to retry
PSP_UNAVAILABLEHTTP 5xxNeosurf service error - safe to retry with backoff
PSP_RATE_LIMITEDHTTP 429Too many requests - retry after a delay
UNKNOWN_PSP_ERRORAny other responseUnrecognised error - check data.error for the raw message and contact support if it persists
Voucher-level rejections (invalid voucher, declined amount) are returned by Neosurf with an HTTP 200 and a populated data.error / data.errorcode; these surface in the standard error response with the raw message.
For the full list of errorCode values and retryability guidance, see Errors.
Modified at 2026-07-08 09:45:56
Previous
Gigadat
Next
PayOne
Built with