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)

PayOne

Bank transfer via Interac for Canada. Supports Pay-In and Pay-Out.
Note: PayOne processes Interac bank transfers in Canada only. Use "CAD" as the currency.
Operations: Pay-In ✓ | Pay-Out ✓ | Webhook ✓
Processing: Asynchronous - redirect user to hosted page; final status via webhook
Fields marked with * are required.

Configuration (Mozarto back office)#

FieldDescription
accountName *Display name for this account
apiKey *PayOne API key
webhookUrl *Your HTTPS endpoint for transaction status updates
siteUrl *Your site URL - used by PayOne to build redirect URLs after payment
isWebhookSecuredAdds Authorization header to outbound webhook calls

Pay-In#

POST /v1/api/mozarto/cashier

Request body#

FieldTypeDescription
pspType *stringAlways "PAYONE"
type *stringAlways "PAYIN"
baseamount *numberAmount as a number (e.g. 100.00)
currency *stringCurrency code - must be "CAD"
currencyCode *stringCurrency code - must be "CAD"
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)
brandIdstringBrand identifier
siteUrlstringPer-transaction redirect URL. Overrides the siteUrl from your configuration for PayOne's post-payment redirect

Example request#

{
  "pspType": "PAYONE",
  "type": "PAYIN",
  "baseamount": 100.00,
  "currency": "CAD",
  "currencyCode": "CAD",
  "userId": "user_123",
  "email": "player@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "4915112345678"
}

Response#

{
  "status": "success",
  "message": "Transaction successfully processed",
  "isSuccess": true,
  "data": {
    "success": true,
    "message": "Transaction successfully Ongoing Process ",
    "redirect_url": "https://demo.payonepayment.com/webflow-payment/<reference>/<token>",
    "transactionId": "64a1f2b3c4d5e6f7a8b9c0d1",
    "merchantReference": "",
    "amount": 10
  }
}
Note: PayOne uses data.redirect_url - not data.url as returned by other providers. Update any redirect logic accordingly.
FieldDescription
data.redirect_urlHosted Interac payment page URL - redirect the user here. Format: https://demo.payonepayment.com/webflow-payment/<reference>/<token>
data.successtrue when PayOne accepted the transaction
data.messagePayOne status message - informational only
data.transactionIdMozarto transaction ID - use for status queries and idempotency
data.amountTransaction amount as a number

Pay-Out#

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

Response#

{
  "status": "success",
  "message": "Withdraw request successfully processed",
  "isSuccess": true,
  "data": {
    "success": true,
    "message": "Withdraw request successfully processed",
    "withdraw": {
      "client": "Your account name",
      "brand": "Your account name",
      "userId": "000000000000000000000001",
      "transactionId": "HS932097JV",
      "first_name": "John",
      "last_name": "Doe",
      "email": "merchant@example.com",
      "phone": "07700900000",
      "userIp": "203.0.113.42",
      "currency": "CAD",
      "siteUrl": "https://your-site.com/operations",
      "amount": "10.00",
      "date": "2026-04-30",
      "status": "Pending"
    },
    "transactionId": "64a1f2b3c4d5e6f7a8b9c0d1",
    "merchantReference": "",
    "amount": 10
  }
}
FieldDescription
data.transactionIdMozarto transaction ID - use for status queries and idempotency
data.amountTransaction amount as a number
data.withdraw.transactionIdPayOne internal transaction ID
data.withdraw.statusInitial status - always "Pending" on creation
data.withdraw.siteUrlThe siteUrl from your configuration
data.withdraw.userIpIP address of the request origin

Webhook#

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

Payload example#

{
  "transaction_id": "69f8a54b2beab46cc6a51149",
  "psp_transaction_id": "HS923856HU",
  "user_id": "000000000000000000000001",
  "status": "Declined",
  "transaction_status": "Declined",
  "message": "Declined",
  "amount": "10.00",
  "merchantReference": ""
}
FieldDescription
transaction_idMozarto transaction ID - matches data.transactionId from the Pay-In/Pay-Out response
psp_transaction_idPayOne internal transaction ID - matches the ID embedded in data.redirect_url
user_idThe user ID passed in the original request
statusRaw PayOne status string - do not use for business logic
transaction_statusNormalized Mozarto status - use this for all business logic
messageHuman-readable description of the outcome
amountTransaction amount as a string
merchantReferenceThe merchant reference passed in the original request - empty string if not set

Error codes#

PayOne errors are mapped to normalized Mozarto errorCode values. Use errorCode for programmatic handling rather than parsing the raw data.error string.
Mozarto errorCodePSP raw signalWhen
INVALID_PSP_CREDENTIALSHTTP 404 (no PSP body)API key is missing, wrong, or the PayOne account is not active
INVALID_PSP_CREDENTIALSdata.error contains "Invalid account details"Credentials were accepted by the HTTP layer but rejected by PayOne
INVALID_PSP_CREDENTIALSdata.error contains "Invalid API key"API key format is valid but not recognised by PayOne
PSP_TIMEOUTHTTP 408 or response body contains "timeout"PayOne did not respond in time - safe to retry
PSP_UNAVAILABLEHTTP 5xxPayOne 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
For the full list of errorCode values and retryability guidance, see Errors.
Modified at 2026-06-09 11:01:55
Previous
Neosurf
Next
Trust Payments
Built with