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)

Brite

Open banking payment provider using instant bank payments — no card or voucher required. The user authenticates directly with their bank on Brite's hosted page.
Note: Brite is a EU/EEA-licensed (PSD2) provider. It supports EU/EEA markets + Switzerland only. Your Brite merchant account must be enabled for the country you send.
Operations: Pay-In ✓ | Pay-Out - | Webhook ✓
Processing: Asynchronous - redirect user to Brite's hosted page; final status via webhook
Payment type: Open banking / instant bank transfer
Fields marked with * are required.

Configuration (Mozarto back office)#

FieldDescription
accountName *Display name for this account
public_key *Brite public key (issued by Brite onboarding)
secret *Brite secret key
webhookUrl *Your HTTPS endpoint for transaction status updates
siteUrl *Your return URL - used as the redirect_uri Brite opens after payment

Pay-In#

POST /v1/api/mozarto/cashier

Request body#

FieldTypeDescription
pspType *stringAlways "BRITE"
type *stringAlways "PAYIN"
baseamount *numberAmount, > 0, up to 2 decimals. In the domestic currency of countryCode
countryCode *stringISO-3166-1 alpha-2 (e.g. "FI", "DE", "SE"). Drives Brite's country_id and the settlement currency
currency *stringCurrency code (e.g. "EUR"). Must match the domestic currency of countryCode
userId *stringYour internal user/player identifier
countrystringFull country name (e.g. "Finland") - stored for reporting
merchantReferencestringYour reference for the payment
firstName / lastNamestringCustomer name - optional; Brite identifies the customer at bank login if omitted
emailstringCustomer email
dobstringCustomer date of birth (YYYY-MM-DD)
addressobjectBilling address: { line1, city, postalCode, country }
hppSuccessUrl / hppFailureUrl / hppCancelUrlstringOverrides the redirect URL for this request (Brite uses a single redirect for all outcomes). Falls back to the configured siteUrl
testModebooleantrue for sandbox testing
Currency is derived from country. Brite settles in the domestic currency of countryCode — FI/DE → EUR, SE → SEK, NO → NOK. Send a currency that matches, and baseamount in that currency.

Example request#

{
  "pspType": "BRITE",
  "type": "PAYIN",
  "baseamount": 1,
  "userId": "user_123",
  "country": "Finland",
  "countryCode": "FI",
  "currency": "EUR",
  "merchantReference": "BT-PAYIN-001",
  "testMode": true
}

Response#

{
  "status": "success",
  "message": "Transaction successfully processed",
  "isSuccess": true,
  "data": {
    "id": "ag9ofmFib25lYS0xNzYyMTNy...",
    "token": "eyJpZCI6ICJhZzlvZm1G...",
    "url": "https://sandbox.britepaymentgroup.com/eyJpZCI6...",
    "redirectUrl": "https://sandbox.britepaymentgroup.com/eyJpZCI6...",
    "sessionId": "ag9ofmFib25lYS0xNzYyMTNy...",
    "transactionId": "6a4cf9020848a21b6b125750",
    "merchantReference": "BT-PAYIN-001",
    "amount": 1,
    "transaction_status": "Pending"
  }
}
Redirect the user to data.url (Brite's hosted payment page), or embed the Brite client with data.token.
FieldDescription
data.url / data.redirectUrlBrite hosted payment page - redirect the user here
data.tokenClient token for the embedded Brite widget (new Brite(token))
data.id / data.sessionIdBrite session ID
data.transactionIdMozarto transaction ID - use for status queries and idempotency
data.merchantReferenceYour reference, echoed back
data.amountTransaction amount as a number
data.transaction_statusNormalized status - "Pending" on creation

Webhook#

Brite notifies Mozarto when the session/transaction changes state; Mozarto then calls your configured webhookUrl once the payment reaches a final status. The method field will be BRITE_PAYIN.

Payload example#

{
  "transaction_id": "6a4cf9020848a21b6b125750",
  "psp_transaction_id": "ag9ofmFib25lYS0xNzYyMTNy...",
  "session_id": "ag9ofmFib25lYS0xNzYyMTNy...",
  "user_id": "user_123",
  "status": "SUCCESS",
  "transaction_status": "Approved",
  "message": "Transaction approved and successfully processed",
  "amount": 1,
  "merchantReference": "BT-PAYIN-001"
}
FieldDescription
transaction_idMozarto transaction ID - matches data.transactionId from the Pay-In response
psp_transaction_idBrite session/transaction ID
session_idBrite session ID
user_idThe userId passed in the original request
statusRaw internal status - do not use for business logic
transaction_statusNormalized Mozarto status - use this for all business logic (Approved / Failed / Cancelled)
messageHuman-readable description of the outcome
amountTransaction amount as a number
merchantReferenceThe merchant reference passed in the original request - empty string if not set
Mozarto notifies your webhookUrl once per final status - Brite fires several terminal callbacks (completed, credit, session completed) for one payment, all de-duplicated to a single delivery.

Error codes#

Brite transport failures are mapped to normalized Mozarto errorCode values. Use errorCode for programmatic handling.
Mozarto errorCodePSP raw signalWhen
INVALID_PSP_CREDENTIALSHTTP 404 / 401 / 403Brite public_key / secret missing or rejected, or PSP configuration not set
PSP_TIMEOUTHTTP 408 or response body contains "timeout"Brite did not respond in time - safe to retry
PSP_UNAVAILABLEHTTP 5xxBrite service error - safe to retry with backoff
PSP_RATE_LIMITEDHTTP 429Too many requests - retry after a delay
UNKNOWN_PSP_ERRORAny other responseDeposit session creation failed - check data for the raw Brite response
Brite business-level rejections return a data object with the raw Brite error, mapped to UNKNOWN_PSP_ERROR. Common cases:
Brite error_messageCause
The country is not valid or not supported.countryCode is missing, malformed, or not a Brite market
Merchant <id> is disabled in <country>Your Brite account is not enabled for that country - contact Brite
... must be a valid URLSafe ID.A Brite-format ID field was sent an invalid value
For the full list of errorCode values and retryability guidance, see Errors.
Modified at 2026-07-08 09:45:40
Previous
Overview
Next
Cleo
Built with