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 transferFields marked with * are required.
Configuration (Mozarto back office)#
These fields are in the locked API Credentials section of the account's Processing Scope tab. Unlock it with your 2FA code first - see Unlock API credentials.
| Field | Description |
|---|
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#
| Field | Type | Description |
|---|
pspType * | string | Always "BRITE" |
type * | string | Always "PAYIN" |
baseamount * | number | Amount, > 0, up to 2 decimals. In the domestic currency of country |
currency * | string | Currency code (e.g. "EUR"). Must match the domestic currency of country |
userId * | string | Your internal user/player identifier |
country * | string | Full country name (e.g. "Finland"), or ISO 3166-1 alpha-2/alpha-3 (e.g. "FI", "FIN"). Matched against the account's Processing Scope, and converted to alpha-2 to drive Brite's country_id and the settlement currency. See Country codes |
merchantReference | string | Your reference for the payment |
firstName / lastName | string | Customer name - optional; Brite identifies the customer at bank login if omitted |
email | string | Customer email |
dob | string | Customer date of birth (YYYY-MM-DD) |
address | object | Billing address: { line1, city, postalCode, country } |
hppSuccessUrl / hppFailureUrl / hppCancelUrl | string | Overrides the redirect URL for this request (Brite uses a single redirect for all outcomes). Falls back to the configured siteUrl |
Currency is derived from country. Brite settles in the domestic currency of country — 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",
"currency": "EUR",
"merchantReference": "BT-PAYIN-001"
}
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.| Field | Description |
|---|
data.url / data.redirectUrl | Brite hosted payment page - redirect the user here |
data.token | Client token for the embedded Brite widget (new Brite(token)) |
data.id / data.sessionId | Brite session ID |
data.transactionId | Mozarto transaction ID - use for status queries and idempotency |
data.merchantReference | Your reference, echoed back |
data.amount | Transaction amount as a number |
data.transaction_status | Normalized 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. See Webhook Setup for the shared field reference.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"
}
| Field | Description |
|---|
transaction_id | Mozarto transaction ID - matches data.transactionId from the Pay-In response |
psp_transaction_id | Brite session/transaction ID |
session_id | Brite session ID |
user_id | The userId passed in the original request |
status | Raw internal status - do not use for business logic |
transaction_status | Normalized Mozarto status - use this for all business logic (Approved / Failed / Cancelled) |
message | Human-readable description of the outcome |
amount | Transaction amount as a number |
merchantReference | The 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 errorCode | PSP raw signal | When |
|---|
INVALID_PSP_CREDENTIALS | HTTP 404 / 401 / 403 | Brite public_key / secret missing or rejected, or PSP configuration not set |
PSP_TIMEOUT | HTTP 408 or response body contains "timeout" | Brite did not respond in time - safe to retry |
PSP_UNAVAILABLE | HTTP 5xx | Brite service error - safe to retry with backoff |
PSP_RATE_LIMITED | HTTP 429 | Too many requests - retry after a delay |
UNKNOWN_PSP_ERROR | Any other response | Deposit 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_message | Cause |
|---|
The country is not valid or not supported. | country 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-11-02 13:16:45