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)

Emerchantpay

eMerchantPay#

Card payment gateway with 3D Secure v2 support. Processes Visa, Mastercard, and other major card schemes via the Genesis gateway. All pay-ins are submitted as sale3d transactions.
Operations: Pay-In ✓ | Pay-Out - | Webhook ✓
Processing: Synchronous or asynchronous via 3DS v2 - depending on the card issuer's challenge flow, the response may include a redirect URL for the cardholder to complete authentication before the final status is delivered via webhook.
Fields marked with * are required.

Configuration (Mozarto back office)#

FieldDescription
username *Genesis API username
password *Genesis API password
apiKey *Terminal token - determines the processing route (currency, MID, risk profile). EMP issues separate tokens per route.
siteUrlFallback redirect URL for success and failure pages if hppSuccessUrl/hppFailureUrl are not supplied in the request
webhookUrlYour HTTPS endpoint for transaction status updates

Pay-In#

POST /v1/api/mozarto/cashier
Required header: x-user-token: Bearer <user-jwt> must be sent with every Pay-In request. See Authentication.

Request body#

FieldTypeDescription
pspType *stringAlways "EMERCHANTPAY"
type *stringAlways "PAYIN"
baseamount *numberAmount as a decimal (e.g. 100.00)
currency *stringISO 4217 currency code (e.g. "EUR", "USD", "GBP")
firstName *stringCardholder first name
lastName *stringCardholder last name
email *stringCardholder email address
phonestringCardholder phone number
card *objectCard details - see below
card.pan *stringCard number (PAN)
card.cvv *stringCard verification value
card.expMonth *stringExpiry month (2 digits, e.g. "03")
card.expYear *stringExpiry year (4 digits, e.g. "2027")
card.cardHolderName *stringName as it appears on the card
usagestringTransaction description shown on the gateway. Defaults to "Card deposit"
addressobjectBilling address
address.line1stringStreet address
address.line2stringAdditional street address line (apartment, suite, etc.)
address.postalCodestringPostal / ZIP code
address.citystringCity
address.statestringState or region (required for US cards)
countryCodestringISO 3166-1 alpha-2 billing country code (e.g. "DE")
browserobjectBrowser fingerprint for 3DS v2
browser.userAgentstringnavigator.userAgent - falls back to the User-Agent request header
browser.acceptHeaderstringAccept header sent by the browser
browser.languagestringnavigator.language
browser.colorDepthnumberscreen.colorDepth
browser.screenHeightnumberscreen.height
browser.screenWidthnumberscreen.width
browser.timeZoneOffsetnumbernew Date().getTimezoneOffset()
browser.javaEnabledbooleannavigator.javaEnabled()
hppSuccessUrlstringRedirect URL after successful 3DS authentication (overrides siteUrl from config)
hppFailureUrlstringRedirect URL on failure (overrides siteUrl from config)
threeDs2ControlobjectOptional 3DS v2 control overrides: deviceType (default "browser"), challengeWindowSize (default "full_screen"), challengeIndicator (default "preference")
threeDs2PurchaseobjectOptional 3DS v2 purchase overrides: category (default "service")
threeDs2MerchantRiskobjectOptional 3DS v2 merchant-risk overrides: shippingIndicator (default "digital_goods"), deliveryTimeframe (default "electronic"), reorderItemsIndicator (default "first_time"), preOrderPurchaseIndicator (default "merchandise_available")
brandIdstringBrand identifier for multi-brand setups
3DS v2 browser data: EmerchantPay requires browser fingerprinting for 3DS v2. Populate the browser object from the cardholder's browser at checkout. If omitted, Mozarto falls back to request headers where possible, but the issuer may decline the transaction or force a challenge step.
3DS v2 overrides: threeDs2Control, threeDs2Purchase, and threeDs2MerchantRisk are optional. Mozarto emits safe defaults for every field, so only send these objects to override a specific value for your risk profile.

Example request#

{
  "pspType": "EMERCHANTPAY",
  "type": "PAYIN",
  "baseamount": 100.00,
  "currency": "EUR",
  "firstName": "Jane",
  "lastName": "Doe",
  "email": "player@example.com",
  "phone": "+491701234567",
  "card": {
    "pan": "4111111111111111",
    "cvv": "123",
    "expMonth": "12",
    "expYear": "2027",
    "cardHolderName": "JANE DOE"
  },
  "address": {
    "line1": "123 Main St",
    "postalCode": "10115",
    "city": "Berlin"
  },
  "countryCode": "DE",
  "browser": {
    "userAgent": "Mozilla/5.0 ...",
    "acceptHeader": "text/html,application/xhtml+xml",
    "language": "de-DE",
    "colorDepth": 24,
    "screenHeight": 900,
    "screenWidth": 1440,
    "timeZoneOffset": -60,
    "javaEnabled": false
  }
}
Card data security: Never log, store, or transmit raw card data (pan, cvv) outside of TLS-encrypted channels. The Mozarto backend does not persist raw card data - it is transmitted directly to EmerchantPay and discarded.

Response - direct approval#

When the issuer approves without a challenge step:
{
  "status": "success",
  "isSuccess": true,
  "data": {
    "status": "approved",
    "redirect_url": null,
    "threeds_method_url": null,
    "transaction_id": "mozarto-abc123xyz",
    "unique_id": "emp_unique_id_456",
    "transactionId": "64a1f2b3c4d5e6f7a8b9c0d1",
    "merchantReference": "",
    "transaction_status": "APPROVED",
    "amount": 10000
  }
}

Response - 3DS challenge required#

When the issuer requires cardholder authentication, redirect_url is populated:
{
  "status": "success",
  "isSuccess": true,
  "data": {
    "status": "pending_async",
    "redirect_url": "https://3ds.example.com/acs?token=abc",
    "threeds_method_url": null,
    "transaction_id": "mozarto-abc123xyz",
    "unique_id": "emp_unique_id_456",
    "transactionId": "64a1f2b3c4d5e6f7a8b9c0d1",
    "merchantReference": "",
    "transaction_status": "PENDING",
    "amount": 10000
  }
}
Redirect the cardholder to data.redirect_url to complete the 3DS challenge. The final outcome (APPROVED, DECLINED) is delivered via webhook once authentication completes.

Response - 3DS method step#

Some issuers require a browser fingerprint step before the challenge. When data.redirect_url is null but data.threeds_method_url is set, EmerchantPay has returned a pending_async status with a 3DS method URL. Mozarto handles this transparently - data.redirect_url is automatically set to a Mozarto-hosted init page that drives the hidden-iframe fingerprint and then redirects to the challenge or confirmation URL.
FieldDescription
data.transactionIdMozarto transaction ID - use for status queries and idempotency
data.unique_idEmerchantPay internal transaction identifier
data.transaction_idEmerchantPay transaction ID (matches what was sent in the XML request)
data.statusEmerchantPay status: approved, pending, pending_async, declined, error
data.transaction_statusMozarto normalized status: APPROVED, PENDING, FAILED
data.redirect_urlPresent when the cardholder must complete a 3DS challenge - redirect here
data.amountAmount in the smallest currency unit (e.g. cents)

Webhook#

Mozarto calls your webhookUrl when the transaction reaches a final state.
The method field will be EMERCHANTPAY_PAYIN.
3DS async: Transactions that require a challenge step will initially resolve to PENDING. The webhook delivers the final status (APPROVED or DECLINED) once the cardholder completes or abandons the 3DS flow. Implement idempotency on your side. See Webhook Setup.

Error codes#

EmerchantPay transport failures are mapped to normalized Mozarto errorCode values. Use errorCode for programmatic handling rather than parsing raw XML error strings.
Mozarto errorCodePSP raw signalWhen
PSP_NOT_CONFIGUREDMissing credentials in Mozarto back officeusername, password, or apiKey (terminal token) not set for this company
INVALID_PSP_CREDENTIALSHTTP 401 / 403, or body contains "Authentication failed", "authentication_error", "Invalid credentials", or "Unauthorized"Genesis API credentials or terminal token are wrong or expired
PSP_TIMEOUTHTTP 408, or response body contains "timeout"EmerchantPay did not respond in time - safe to retry
PSP_UNAVAILABLEHTTP 5xxGenesis gateway error - safe to retry with backoff
PSP_RATE_LIMITEDHTTP 429Too many requests - retry after a delay
UNKNOWN_PSP_ERRORAny other HTTP error or XML-level rejectionFallback - check data for the raw Genesis XML response and contact support if it persists
Business rejections (HTTP 200): EmerchantPay may return HTTP 200 with data.status set to "declined" or "error" when the transaction is rejected at the card scheme or risk layer (e.g. insufficient funds, card blocked, 3DS failure). These are not transport errors and do not produce an errorCode response - the full parsed XML data is returned so you can display the appropriate message to the cardholder.
For the full list of errorCode values and retryability guidance, see Errors.
Modified at 2026-06-08 13:46:54
Previous
Worldpay
Next
Redirect Flow APIs - overview
Built with