Mail Order / Telephone Order (MOTO)

This guide explains how to submit card-not-present Mail Order and Telephone Order transactions through the Payments REST API.

When to use MOTO

Use a MOTO origin only when a merchant employee receives payment details remotely, for example by telephone or from a mail-order form, and enters the payment on the customer's behalf.

Do not classify the following as MOTO:

  • a customer entering card details on a website or mobile application; use ECOM;
  • a face-to-face payment made with a physical terminal; use the relevant card-present flow;
  • a transaction relabeled as MOTO only to avoid customer authentication requirements.

MOTO is a card-not-present transaction. Its availability, accepted card brands, currencies, limits, and card-verification requirements depend on the merchant's onboarding and acquiring agreement.

Supported transaction origins

Set transactionOrigin explicitly on every MOTO primary transaction.

ValueUse
MOTOCombined Mail Order or Telephone Order classification. Use this when the merchant setup does not distinguish the two channels.
MAILThe order was received by mail.
PHONEThe order was received by telephone.

If transactionOrigin is omitted, the request is treated as e-commerce rather than MOTO.

Endpoint

POST {baseUrl}/payments

Use the base URL supplied for the target certification or production environment.

Card sale request

Use PaymentCardSaleTransaction for a sale with card details. The request must contain an explicit MOTO origin.

Do not use PaymentTerminalSaleTransaction for MOTO. That request type is for card-present terminal transactions and accepts RETAIL origin only.

{
  "requestType": "PaymentCardSaleTransaction",
  "transactionAmount": {
    "total": 49.90,
    "currency": "EUR"
  },
  "transactionOrigin": "MOTO",
  "merchantTransactionId": "MOTO-20260826-0001",
  "order": {
    "orderId": "ORDER-20260826-0001",
    "billing": {
      "name": "Example Cardholder",
      "address": {
        "address1": "1 Example Street",
        "city": "Frankfurt",
        "postalCode": "60311",
        "country": "DE"
      }
    }
  },
  "paymentMethod": {
    "paymentCard": {
      "number": "<card-number>",
      "expiryDate": {
        "month": "12",
        "year": "28"
      },
      "securityCode": "<card-security-code>"
    }
  }
}

To distinguish the order channel, replace MOTO with MAIL or PHONE as agreed during onboarding. Do not change the request type.

Request fields

JSON pathPresenceDescription
requestTypeMandatoryUse PaymentCardSaleTransaction for a card sale.
transactionAmount.totalMandatoryTotal transaction amount as a JSON number.
transactionAmount.currencyMandatoryThree-character alphabetic or numeric ISO 4217 currency code.
transactionOriginMandatory for MOTOUse MOTO, MAIL, or PHONE. Omitting it causes the request to be treated as e-commerce.
paymentMethod.paymentCard.numberMandatory for a plain-card requestPayment card number. Handle and transmit it only in accordance with PCI DSS requirements.
paymentMethod.paymentCard.expiryDate.monthMandatory for a normal card paymentTwo-digit month from 01 to 12.
paymentMethod.paymentCard.expiryDate.yearMandatory for a normal card paymentTwo-digit year.
paymentMethod.paymentCard.securityCodeConditionalThree- or four-character card security code. Send it only when collected and permitted for the transaction. Never store it after authorization.
merchantTransactionIdOptional, recommendedMerchant reference of up to 40 characters for reconciliation.
order.orderIdOptional, recommendedMerchant order reference. The gateway generates one when it is omitted.
order.billing.address.address1Conditional, recommended for AVSCardholder billing street supplied for Address Verification Service (AVS). AVS availability depends on the acquirer, issuer, card scheme, and merchant setup.
order.billing.address.postalCodeConditional, recommended for AVSCardholder billing postal code supplied for AVS.
order.billing.address.countryConditionalBilling country in an accepted ISO 3166-1 format. Supply it when required by the route or onboarding rules.
storeIdConditionalOutlet identifier for applications authorized to submit transactions for multiple stores.

If encrypted-card submission is enabled for the integration, send paymentMethod.paymentCardEncrypted instead of paymentMethod.paymentCard. Do not send both representations.

Token-based MOTO sale

When the merchant is authorized to reuse a previously created payment token, use PaymentTokenSaleTransaction and keep the MOTO origin explicit.

{
  "requestType": "PaymentTokenSaleTransaction",
  "transactionAmount": {
    "total": 49.90,
    "currency": "EUR"
  },
  "transactionOrigin": "PHONE",
  "merchantTransactionId": "MOTO-20260826-0002",
  "order": {
    "orderId": "ORDER-20260826-0002"
  },
  "paymentMethod": {
    "paymentToken": {
      "value": "<payment-token>"
    }
  }
}

The token must be valid for the submitting store or an authorized related store. Supply tokenOriginStoreId, an updated expiry date, card function, or security code only when required for the token type and merchant setup.

Preauthorization

For a preauthorisation, use PaymentCardPreAuthTransaction or PaymentTokenPreAuthTransaction with the same explicit transactionOrigin.

{
  "requestType": "PaymentCardPreAuthTransaction",
  "transactionAmount": {
    "total": 49.90,
    "currency": "EUR"
  },
  "transactionOrigin": "MAIL",
  "merchantTransactionId": "MOTO-20260826-0003",
  "order": {
    "orderId": "ORDER-20260826-0003"
  },
  "paymentMethod": {
    "paymentCard": {
      "number": "<card-number>",
      "expiryDate": {
        "month": "12",
        "year": "28"
      },
      "securityCode": "<card-security-code>"
    }
  }
}

A successful preauthorization reserves funds; it does not complete the purchase. Submit a linked PostAuthTransaction to capture it, or a linked void when the authorization should be released. Preauthorization and completion must be enabled for the merchant.

Transaction response

The fields returned depend on the request type, payment method, acquiring route, and data supplied by the issuer. Fields that are not available can be omitted. The following approved card-sale response is illustrative.

{
  "type": "transactionResponse",
  "clientRequestId": "b58ab2d7-a421-4d37-a4c0-8c93f024bb2a",
  "apiTraceId": "<api-trace-id>",
  "ipgTransactionId": "<ipg-transaction-id>",
  "orderId": "ORDER-20260826-0001",
  "merchantTransactionId": "MOTO-20260826-0001",
  "transactionType": "SALE",
  "transactionOrigin": "MOTO",
  "transactionTime": 1787731200,
  "transactionAmount": {
    "total": 49.90,
    "currency": "EUR"
  },
  "transactionResult": "APPROVED",
  "transactionState": "CAPTURED",
  "approvedAmount": {
    "total": 49.90,
    "currency": "EUR"
  },
  "approvalCode": "<gateway-approval-code>",
  "schemeTransactionId": "<scheme-transaction-id>",
  "processor": {
    "referenceNumber": "<processor-reference-number>",
    "responseCode": "00",
    "responseMessage": "APPROVED",
    "authorizationCode": "<authorization-code>",
    "network": "<card-network>",
    "associationResponseCode": "<issuer-response-code>",
    "avsResponse": {
      "streetMatch": "Y",
      "postalCodeMatch": "N"
    },
    "securityCodeResponse": "MATCHED"
  }
}

Fields to retain and evaluate

JSON pathMeaning and merchant handling
transactionResultPrimary operation result. Use this for programmatic decision-making; HTTP 200 alone does not mean that the payment was approved.
transactionStateGateway lifecycle state when returned. An approved sale normally reaches CAPTURED; an approved preauthorization normally reaches AUTHORIZED. Do not treat a non-final state as completed fulfilment.
transactionAmountAmount submitted for the transaction.
approvedAmountAmount actually approved. Compare its amount and currency with the requested values, especially when partial approval is enabled. It can be absent when no amount was approved.
clientRequestIdEcho of the request header. Retain it for idempotency checks and support investigations.
apiTraceIdAPI trace identifier used by support to locate request processing logs.
ipgTransactionIdGateway transaction identifier. Store it for inquiry and linked post-authorization, void, or return operations.
orderId / merchantTransactionIdMerchant-facing reconciliation identifiers. The gateway can generate orderId when it was not supplied.
transactionTimeTransaction time expressed as Unix epoch seconds.
approvalCodeGateway-level approval information. Do not parse message-like content as a stable decision interface.
schemeTransactionId / transactionLinkIdentifierConditional scheme identifiers used for eligible card-on-file or linked transaction flows. Preserve them when returned.
paymentMethodDetails / paymentTokenConditional masked payment-method or token information. Never expect the response to return a full card number or security code.
processor.referenceNumberProcessor reference useful for reconciliation and support.
processor.authorizationCodeAuthorization code returned for an approved authorization when supplied by the processor. This is distinct from the top-level approvalCode.
processor.responseCode / processor.responseMessageProcessor result details. Codes are route-specific and message text can change; do not use the message as the sole decision field.
processor.associationResponseCode / processor.associationResponseMessageRaw issuer or card-scheme response details when provided. Interpret them using the response-code reference for the configured acquiring route.
processor.avsResponseConditional Address Verification Service result. See the AVS section below.
processor.securityCodeResponseConditional normalized result of the card security-code check. See the security-code section below.
processor.cardholderInfoResponseConditional enhanced cardholder-information checks, including postal code, address, name, telephone, and email results. The raw association value is specific to the supporting scheme and route.
schemeResponseCode, merchantAdviceCode, and processor merchant-advice fieldsConditional scheme response and retry/advice information. Interpret them using the configured route's response-code documentation rather than message text.

transactionStatus can appear in older responses, but it is deprecated in the current contract. New integrations should use transactionResult.

Transaction result values

ValueMeaningMerchant action
APPROVEDThe requested operation was approved.For a sale, verify the expected approvedAmount and, when returned, a final transactionState such as CAPTURED before fulfilment.
PARTIALOnly part of the requested amount was approved.Continue only if partial approval was explicitly enabled and the merchant flow can collect the remaining amount; otherwise do not fulfil as fully paid.
WAITINGProcessing has not reached a final result.Keep the order pending and use transaction inquiry rather than assuming success or failure.
CREATEDA transaction record was created but the financial outcome is not final.Keep the order pending and continue the required flow or inquiry.
DECLINEDThe transaction was declined.Do not fulfil. Present a neutral customer message and retain the response identifiers.
FAILEDProcessing failed.Do not fulfil. Record the error and trace identifiers and investigate or retry only according to the integration policy.
FRAUDThe transaction was rejected by fraud controls.Do not fulfil and follow the merchant's fraud-handling policy.

Address Verification Service response

For eligible card transaction responses, processor.avsResponse compares the supplied billing street and postal code with issuer-held data. Include order.billing.address.address1 and order.billing.address.postalCode when AVS is required. Sending the address does not guarantee that AVS will be performed: support and behavior depend on the issuer, scheme, processor, region, and merchant configuration.

Field or valueMeaning
streetMatch: YThe street matched.
streetMatch: NThe street did not match.
postalCodeMatch: YThe postal code matched.
postalCodeMatch: NThe postal code did not match.
NO_INPUT_DATAThe corresponding value was not available as input for the check.
NOT_CHECKEDThe corresponding value was not checked. This is not a successful match.
associationAvsResponseRaw issuer or scheme AVS code. Its values are route-specific; use the developer portal or acquirer response-code reference for the configured route.

The whole avsResponse object, an individual normalized field, or the raw association code can be absent when no value is returned. Treat absence as unknown, not as a match. AVS is a risk signal rather than the payment decision: an APPROVED payment can contain a mismatch, and a match does not by itself mean that the payment was approved. Apply the merchant's agreed fraud policy separately from transactionResult.

Card security-code response

processor.securityCodeResponse is also conditional. The API never returns the submitted security code itself.

ValueMeaning
MATCHEDThe security code matched.
NOT_MATCHEDThe security code did not match.
NOT_PROCESSEDA result was not processed.
NOT_PRESENTNo security code was present for the check.
NOT_CERTIFIEDThe issuer or route was not certified for the check.
NOT_CHECKEDThe security code was not checked.

An omitted securityCodeResponse means that no normalized result was returned. Do not interpret omission, NOT_PROCESSED, NOT_PRESENT, NOT_CERTIFIED, or NOT_CHECKED as MATCHED. As with AVS, the security-code response is a verification signal and does not replace transactionResult.

3-D Secure and MOTO

Setting transactionOrigin to MOTO, MAIL, or PHONE identifies the transaction channel. It does not initiate 3-D Secure.

Genuine MOTO transactions are normally treated differently from customer-initiated e-commerce transactions under authentication rules.
The exact regulatory and acquiring treatment depends on the market and merchant agreement. Do not classify an e-commerce payment as MOTO to bypass 3-D Secure or Strong Customer Authentication.


Did this page help you?
Want a quick overview?