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
    • Flexepin
    • ForumPay
    • Gigadat
    • Neosurf
    • PayOne
    • Trust Payments
    • Worldpay
    • Emerchantpay
  • 8. Redirect Flow APIs
    • Redirect Flow APIs - overview
    • Pay-In
      • WorldPay
      • Forumpay
      • Payone
      • Gigadat
      • Flexepin
      • Trust
    • Pay-Out
      • Forumpay
      • Payone
      • Gigadat withdraw ETO
      • Gigadat withdraw ACH
    • Webhook
      • Payone status webhook
  • Schemas
    • TransactionData
  1. 7. Payment Providers (PSPs)

Cleo

Bank transfer payment provider supporting multiple Latin American markets (Chile, Peru, Mexico). Pay-In and Pay-Out.
Operations: Pay-In ✓ | Pay-Out ✓ | Webhook ✓
Processing: Asynchronous - redirect user to hosted page; final status via webhook
Markets: Chile (CLP), Peru (PEN), Mexico (MXN)
Currency restriction: Cleo only processes local currencies. Use "CLP" for Chile, "PEN" for Peru, and "MXN" for Mexico. No other currencies are accepted.
Fields marked with * are required.

Configuration (Mozarto back office)#

FieldDescription
cleoApiKey.chileApiKey *API key for Chile transactions
cleoApiKey.peruApiKey *API key for Peru transactions
cleoApiKey.mexicoApiKey *API key for Mexico transactions
customerExternalKeyForCleo *Your external key identifier for Cleo
webhookUrl *Your HTTPS endpoint for transaction status updates
isWebhookSecuredAdds Authorization header to outbound webhook calls
The correct regional API key is selected automatically based on the countryCode in the transaction request.

Pay-In#

POST /v1/api/mozarto/cashier

Request body#

FieldTypeDescription
pspType *stringAlways "CLEO"
type *stringAlways "PAYIN"
baseamount *numberAmount as a number (e.g. 10000.00)
currency *stringCurrency code (e.g. "CLP", "PEN", "MXN")
currencyCode *stringCurrency code
userId *stringYour internal user/player identifier
email *stringUser's email address
firstName *stringUser's first name
lastName *stringUser's last name
phone *stringPhone number (min 6 digits)
gender *stringUser's gender
dob *stringDate of birth (e.g. "1990-01-15")
countryCode *stringCountry code - determines which regional API key is used ("CL", "PE", "MX")
kycVerified *booleanKYC verification status
blocked *booleanWhether user is blocked
isVelocity *booleanVelocity check flag
transactionCount *stringNumber of prior transactions
userBalance *numberUser's current balance
partnerName *stringPartner/operator name
emailVerification *stringVerified email address
verificationDate *stringDate email was verified
brandIdstringBrand identifier
bonusCodestringBonus code
address *object{ line1, line2?, city, state, postalCode, country }

Example request#

{
  "pspType": "CLEO",
  "type": "PAYIN",
  "baseamount": 10000.00,
  "currency": "CLP",
  "currencyCode": "CLP",
  "userId": "user_123",
  "email": "player@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "56912345678",
  "gender": "male",
  "dob": "1988-05-20",
  "countryCode": "CL",
  "kycVerified": true,
  "blocked": false,
  "isVelocity": false,
  "transactionCount": "1",
  "userBalance": 0,
  "partnerName": "ExamplePartner",
  "emailVerification": "player@example.com",
  "verificationDate": "2024-01-01",
  "address": {
    "line1": "Av. Libertador 1234",
    "city": "Santiago",
    "state": "RM",
    "postalCode": "8320000",
    "country": "CL"
  }
}

Response#

{
  "status": "success",
  "isSuccess": true,
  "data": {
    "status": "PENDING",
    "url": "https://checkout.cleo.finance/...",
    "sessionId": "60a74038-5b94-427e-8cff-abc123"
  }
}

Pay-Out#

POST /v1/api/mozarto/cashier
Uses the same request body as Pay-In, with type set to "PAYOUT".

Response#

{
  "status": "success",
  "isSuccess": true,
  "data": {
    "status": "PENDING",
    "sessionId": "60a74038-5b94-427e-8cff-abc123"
  }
}

Webhook#

Mozarto calls your webhookUrl when the transaction reaches a final state.
The method field will be CLEO_PAYIN or CLEO_PAYOUT.

Error codes#

Cleo Pay-In transport failures are mapped to normalized Mozarto errorCode values. Use errorCode for programmatic handling rather than parsing the raw Cleo response.
Mozarto errorCodePSP raw signalWhen
INVALID_PSP_CREDENTIALSHTTP 404 / 401 / 403Cleo API key (per-country) is missing, wrong, or the account is not active
PSP_TIMEOUTHTTP 408 or response body contains "timeout"Cleo did not respond in time - safe to retry
PSP_UNAVAILABLEHTTP 5xxCleo service error - safe to retry with backoff
PSP_RATE_LIMITEDHTTP 429Too many requests - retry after a delay
UNKNOWN_PSP_ERRORAny other responseUnrecognised error - check the raw response and contact support if it persists
For the full list of errorCode values and retryability guidance, see Errors.
Modified at 2026-06-09 11:01:55
Previous
Brite
Next
Flexepin
Built with