Vendor-Managed Recurring

Manage the recurring deductions from your side

Description:

This feature allows you to fully manage recurring payments independently, without relying on MyFatoorah's recurring model. You have complete control over

  • the frequency of deductions,
  • the timing of each deduction,
  • the number of deductions, and
  • the amounts to be deducted.

Requirements:

You need to have for your account the following features to be able to manage the recurring at your end:

  • Tokenization: This feature enables you to tokenize the card information that the customer entered on his first payment. You will then use the token to make subsequent deductions. For more information, please check the Tokenized Embedded Payment.
  • FastPay OR Bypass3DS:  FastPay enables you to complete the payment without going to the 3DS page when making a payment from a tokenized/saved card that is 3DS verified before. Bypass3DS gives you control on each payment on whether to go to the 3DS page or not.
🚧

FastPay

This feature will not take you to the OTP page if and only if the saved/tokenized card has been 3DS verfied before. For tokenized cards, you can know this from the value of the Is3DSVerified parameter returned in the response of GET /v3/customers.

  • BypassCvv: This feature enables you to make the payment without sending the CVV for the tokenized card from which you will deduct the amount.

Steps:

1. Tokenize the card from the first payment

You will tokenize the card information that the customer enters by following the steps in the Tokenized Embedded Payment Section

{
    "PaymentMode": "COMPLETE_PAYMENT",
    "Order": {
        "Amount": 10
    },
    "SaveCardOptions": {
        "SaveToken": true,
        "ShowSavedCardsInCardView": true,
        "RetrieveSavedTokens": true
    },
    "Customer": {
        "Reference": "#1234"
    },
    "IntegrationUrls": {
        "Redirection": "https://your-website.com/payment-callback"
    }
}
{
    "IsSuccess": true,
    "Message": "Created Successfully!",
    "ValidationErrors": null,
    "Data": {
        "SessionId": "KWT-892bd72a-bb85-4756-b68e-85b46ab8efd6",
        "SessionExpiry": "2025-10-26T16:48:15.9725428Z",
        "EncryptionKey": "4Iy7JAzgjCjdtrhOINSFP5kEp08w/6s1QWdVMhR+IH0=",
        "OperationType": "PAY",
        "Order": {
            "Amount": 10.0,
            "Currency": "KWD",
            "ExternalIdentifier": null
        },
        "Customer": {
            "Reference": "#1234",
            "Cards": []
        }
    }
}

2. Call GET/v3/customers using the same Customer Reference

You need to call the GET /v3/customers API (Get Customers) using the same Customer Reference to get the tokenized cards against a specific reference.

{
    "IsSuccess": true,
    "Message": "Initiated Successfully!",
    "ValidationErrors": null,
    "Data": {
        "Reference": "#1234",
        "Cards": [
            {
                "Is3DSVerified": true,
                "Token": "TKN-0fb06aac-634d-418a-bf78-953202b67b53",
                "Number": "512345xxxxxx0008",
                "Brand": "Master",
                "TokenType": "CARD"
            }
        ]
    }
}

3. Make subsequent payments with the token

Endpoint: POST /v3/payments (Create Payment)

{
    "PaymentMethod": "CARD",
    "Order": {
        "Amount": 10
    },
    "SourceOfFund": {
        "Token": "TKN-0fb06aac-634d-418a-bf78-953202b67b53"
    }
}
{
    "IsSuccess": true,
    "Message": "",
    "ValidationErrors": null,
    "Data": {
        "InvoiceId": "6389662",
        "PaymentId": "07076389662322472373",
        "PaymentURL": "https://demo.MyFatoorah.com/En/KWT/PayInvoice/Result?paymentId=07076389662322472373",
        "PaymentCompleted": true,
        "TransactionDetails": {
            "Invoice": {
                "Id": "6389662",
                "Status": "PAID",
                "Reference": "2025060928",
                "CreationDate": "2025-12-24T16:23:49.5894833Z",
                "ExpirationDate": "2026-06-22T16:23:49.5894833Z",
                "ExternalIdentifier": null,
                "UserDefinedField": "",
                "MetaData": null
            },
            "Transaction": {
                "Id": "104690",
                "Status": "SUCCESS",
                "PaymentMethod": "VISA/MASTER",
                "PaymentId": "07076389662322472373",
                "ReferenceId": "535816104690",
                "TrackId": "24-12-2025_3224723",
                "AuthorizationId": "104690",
                "TransactionDate": "2025-12-24T16:23:50.7016503Z",
                "ECI": "",
                "IP": {
                    "Address": "",
                    "Country": ""
                },
                "Error": {
                    "Code": "",
                    "Message": ""
                },
                "Card": {
                    "NameOnCard": "das",
                    "Number": "512345xxxxxx0008",
                    "Token": "TKN-0fb06aac-634d-418a-bf78-953202b67b53",
                    "PanHash": "b888aa5f23a817883d4d12c74044bab1ae6ee65dc8d6e11515394aba452b273b",
                    "ExpiryMonth": "12",
                    "ExpiryYear": "36",
                    "Brand": "Mastercard",
                    "Issuer": "Test Bank",
                    "IssuerCountry": "KWT",
                    "FundingMethod": "credit"
                }
            },
            "Customer": {
                "Reference": "",
                "Name": "Anonymous",
                "Mobile": "+965",
                "Email": ""
            },
            "Amount": {
                "BaseCurrency": "KWD",
                "ValueInBaseCurrency": "20",
                "ServiceCharge": "0.4",
                "ServiceChargeVAT": "0.06",
                "ReceivableAmount": "19.54",
                "DisplayCurrency": "KWD",
                "ValueInDisplayCurrency": "20",
                "PayCurrency": "KWD",
                "ValueInPayCurrency": "20"
            },
            "Suppliers": []
        }
    }
}
📘

Old Integration (V2)

In case you are using the integration for v2, you can find the documentation here: https://docs.myfatoorah.com/docs/vendor-managed-recurring