Skip to main content
A merchant initiated transaction (MIT) is a charge submitted by the merchant without the cardholder actively participating in the transaction at the time of payment. Unlike a customer initiated transaction where the customer is present and authorizes the charge, MITs rely on a standing agreement the cardholder previously consented to. Common examples of merchant initiated transactions include recurring payments, installment plans, deferred charges (e.g., hotel minibar), no-show penalties, and scheduled top-ups.
Tesouro currently supports recurring payments only. Support for other MIT types is planned for a future release.
When to Use
  • You need to charge a cardholder on a scheduled, recurring basis (e.g., monthly subscription, weekly service fee).
  • The cardholder is not actively present to authorize the payment.
  • You have a prior customer initiated transaction or account verification on file to reference.
ExampleLast month, Ben subscribed to StreamHQ’s monthly plan. Each subsequent month, StreamHQ submits a merchant initiated recurring transaction to charge Ben’s card on file. Because Ben consented to recurring charges during sign-up, StreamHQ can charge his card each month without requiring him to actively authorize each payment.

Prerequisites

Every authorizeRecurring request must reference a prior transaction from Tesouro’s platform. Before submitting a merchant initiated transaction, you must have on file either: You will need the paymentId and the date of that original transaction to complete the request.

Steps

  1. Call the authorizeRecurring mutation, passing in the required and optional input fields:
Required inputDescription
acceptorIdThe unique, 36 character identifier assigned to the entity providing the goods or services to the cardholder. Other processors may refer to this as the Merchant ID (MID), Outlet ID, or Customer number.
transactionReferenceThe unique transaction identifier created by YOU to distinguish this transaction from another.
channelHow the consumer interacts with the acceptor. Defaults to ECOMMERCE if not provided.
paymentMethodDetailsIncludes the pertinent payment method details for the card being charged. Accepts an acquirer token, a full PAN, or a network token pass-through.
transactionAmountDetailsThe amount of the transaction and its currency.
citReferenceA reference to the paymentId of the original customer initiated transaction or account verification that established the cardholder’s consent.
originalPurchaseDateThe submission date of the original customer initiated transaction or account verification being referenced, as recorded within the partner’s system.
automaticCaptureSpecifies if the authorization should be automatically captured upon approval.

If you instruct to not automatically capture the authorization, keep track of the paymentId in the response, as it will be needed to capture the authorization. If you instructed to automatically capture upon approval, then you are done with the authorization.

CIT reference

Every authorizeRecurring request must include a citReference pointing to a prior customer initiated transaction or account verification processed through Tesouro. This reference is how the card networks verify that the cardholder previously consented to recurring charges. The citReference input accepts two forms depending on where the original transaction was processed:
ScenarioFields to provide
The original CIT or card verification was processed through TesourocitReference.citPaymentId — the paymentId returned in the original transaction response
The original CIT was processed through another processorcitReference.mitPassThrough.citNetworkTransactionId — the network transaction ID from the original processor’s response

Automatic capture

Automatically capturing an authorization upon approval instructs Tesouro to submit a capture request on your behalf without requiring additional information or actions from you. To know if you should automatically capture upon approval, use the following chart:
ScenariosInput
If the final amount to capture will NOT change
from the authorized amount

And all product line items will be shipped
(or rendered) together
automaticCapture:"ON_APPROVAL"
If the final amount to capture may change
from the authorized amount

And some or all of the purchased goods or
services are not immediately available to ship
or render at the time of authorization.
automaticCapture:"NEVER"
If the authorization is not captured or reversed within 10 days, you will be assessed a Misuse of Authorization fee.

Payment transaction reason

When submitting an authorization, accurately specifying the reason for the payment request can:
  • Help qualify the transaction for better interchange rates
  • Ensure proper processing and reporting
  • Comply with relevant financial regulations
If a reason is not provided, it will default to GENERAL_PURCHASE. Supported reasons:
ValueDescription
GENERAL_PURCHASEStandard purchases of goods or services.
DEBT_REPAYMENTThe payment will be used to reduce or eliminate an outstanding debt, such as credit card balances, loans, or other forms of borrowing.
mutation AuthorizeRecurring($input: AuthorizeRecurringInput!) {
  authorizeRecurring(authorizeRecurringInput: $input) {
    authorizationResponse {
      status: __typename
      cardDetails {
        paymentBrand
        last4
      }
      tokenDetails {
        token
      }
      transactionId
      paymentId
    }
    errors {
      ... on Error {
        message
        __typename
      }
    }
  }
}
{
  "data": {
    "authorizeRecurring": {
      "authorizationResponse": {
        "status": "AuthorizationApproval",
        "networkTransactionId": "012345678901234",
        "cardDetails": {
          "paymentBrand": "VISA",
          "last4": "6204"
        },
        "tokenDetails": {
          "token": "ae1d0699-a5f3-4548-aaa8-068b57564118"
        },
        "transactionId": "d8b2f3e4-5c6a-7890-1bcd-ef2345678901",
        "paymentId": "c9a1e2d3-4b5f-6789-0abc-def123456789",
        "systemTraceAuditNumber": "901234",
        "networkResponseDetails": {
          "processorResponseCode": "A0000",
          "networkResponseCode": "00"
        },
        "avsResponseDetails": {
          "networkCode": null
        },
        "errors": null
      }
    }
  }
}