# Recurring Billing & Customer Info

<figure><img src="/files/OPkpKWNGisTRODxR9jdP" alt=""><figcaption></figcaption></figure>

## <mark style="color:blue;">AddRecurringCreditCard</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=AddRecurringCreditCard`

**Method:**\
Supports both **SOAP POST** and **HTTP POST** (form-encoded)

**Description:**\
Creates a new recurring credit card billing contract by adding a customer profile, a recurring contract, and a payment method in a single API call. This endpoint simplifies recurring billing setup by consolidating multiple setup steps into a single request.

***

### Request Parameters

| Parameter            | Type   | Required | Description                                                      |
| -------------------- | ------ | -------- | ---------------------------------------------------------------- |
| UserName             | string | Yes      | Admin user name for authentication                               |
| Password             | string | Yes      | Admin user password                                              |
| Vendor               | string | Yes      | Merchant identifier (numeric key)                                |
| CustomerID           | string | Yes      | Unique customer identifier provided by the merchant              |
| CustomerName         | string | Yes      | Full name of the customer                                        |
| FirstName            | string | No       | Customer’s first name                                            |
| LastName             | string | No       | Customer’s last name                                             |
| Title                | string | No       | Customer’s title                                                 |
| Department           | string | No       | Customer’s department                                            |
| Street1              | string | No       | Address line 1                                                   |
| Street2              | string | No       | Address line 2                                                   |
| Street3              | string | No       | Address line 3                                                   |
| City                 | string | No       | City                                                             |
| StateID              | string | No       | 2-character U.S. state abbreviation                              |
| Province             | string | No       | Province (used for international addresses)                      |
| Zip                  | string | No       | Postal/ZIP code                                                  |
| CountryID            | string | No       | 3-character country code (default is "USA")                      |
| Email                | string | No       | Email address                                                    |
| Mobile               | string | No       | Mobile phone number                                              |
| DayPhone             | string | No       | Daytime phone number                                             |
| Fax                  | string | No       | Fax number                                                       |
| ContractID           | string | Yes      | Unique contract ID assigned by the merchant                      |
| ContractName         | string | No       | Descriptive name for the billing contract                        |
| BillAmt              | string | Yes      | Billing amount per cycle                                         |
| TaxAmt               | string | No       | Tax amount                                                       |
| TotalAmt             | string | Yes      | Total amount to bill (must equal BillAmt + TaxAmt)               |
| StartDate            | string | Yes      | Contract start date (must be at least one day in the future)     |
| EndDate              | string | No       | Optional end date; omit for indefinite billing                   |
| BillingPeriod        | string | Yes      | One of: DAY, WEEK, MONTH, or YEAR                                |
| BillingInterval      | string | Yes      | Frequency for the selected billing period (e.g., every 2 months) |
| MaxFailures          | string | No       | Number of allowed consecutive failures before suspension         |
| FailureInterval      | string | No       | Days between retry attempts after failure                        |
| EmailCustomer        | string | No       | TRUE/FALSE – send customer email confirmation                    |
| EmailMerchant        | string | No       | TRUE/FALSE – send merchant email confirmation                    |
| EmailCustomerFailure | string | No       | TRUE/FALSE – notify customer on failure                          |
| EmailMerchantFailure | string | No       | TRUE/FALSE – notify merchant on failure                          |
| CcAccountNum         | string | Yes      | Credit card number (digits only)                                 |
| CcExpDate            | string | Yes      | Expiration date (MMYY format)                                    |
| CcNameOnCard         | string | No       | Name as it appears on the card                                   |
| CcStreet             | string | No       | Billing address street line                                      |
| CcZip                | string | No       | Billing ZIP/postal code                                          |
| ExtData              | string | No       | Optional extended data (XML string for custom fields)            |

***

### Notes

* This endpoint is designed for **quick setup** of a full recurring billing profile in one request. It simultaneously creates the customer, the billing contract, and the associated payment method.
* The **StartDate must be at least one day in the future**. Attempts to use today's date will result in a validation error.
* **BillingPeriod** and **BillingInterval** determine the recurrence schedule. For example, `BillingPeriod=MONTH` and `BillingInterval=1` means monthly billing.
* The **CcAccountNum** and **CcExpDate** fields are required for creating the credit card payment method. If you instead want to use a tokenized payment method, a different endpoint should be used.
* If **TotalAmt ≠ BillAmt + TaxAmt**, the request will fail.
* Optional fields such as **EmailCustomer**, **EmailMerchant**, and their failure variants provide control over automated email notifications.
* The **ExtData** field supports gateway- or partner-specific extensions via embedded XML. For most merchants, this can be left blank.

#### SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx HTTP/1.1
Host: secure.ftipgw.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tpisoft.com/Admin/ws/AddRecurringCreditCard"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <AddRecurringCreditCard xmlns="http://www.tpisoft.com/Admin/ws">
      <Username>string</Username>
      <Password>string</Password>
      <Vendor>string</Vendor>
      <CustomerID>string</CustomerID>
      <CustomerName>string</CustomerName>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
      <Title>string</Title>
      <Department>string</Department>
      <Street1>string</Street1>
      <Street2>string</Street2>
      <Street3>string</Street3>
      <City>string</City>
      <StateID>string</StateID>
      <Province>string</Province>
      <Zip>string</Zip>
      <CountryID>string</CountryID>
      <Email>string</Email>
      <DayPhone>string</DayPhone>
      <NightPhone>string</NightPhone>
      <Fax>string</Fax>
      <Mobile>string</Mobile>
      <ContractID>string</ContractID>
      <ContractName>string</ContractName>
      <BillAmt>string</BillAmt>
      <TaxAmt>string</TaxAmt>
      <TotalAmt>string</TotalAmt>
      <StartDate>string</StartDate>
      <EndDate>string</EndDate>
      <BillingPeriod>string</BillingPeriod>
      <BillingInterval>string</BillingInterval>
      <MaxFailures>string</MaxFailures>
      <FailureInterval>string</FailureInterval>
      <EmailCustomer>string</EmailCustomer>
      <EmailMerchant>string</EmailMerchant>
      <EmailCustomerFailure>string</EmailCustomerFailure>
      <EmailMerchantFailure>string</EmailMerchantFailure>
      <CcAccountNum>string</CcAccountNum>
      <CcExpDate>string</CcExpDate>
      <CcNameOnCard>string</CcNameOnCard>
      <CcStreet>string</CcStreet>
      <CcZip>string</CcZip>
      <ExtData>string</ExtData>
    </AddRecurringCreditCard>
  </soap:Body>
</soap:Envelope>
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <AddRecurringCreditCardResponse xmlns="http://www.tpisoft.com/Admin/ws">
      <AddRecurringCreditCardResult>
        <CustomerID>string</CustomerID>
        <ClientSessionID>string</ClientSessionID>
        <CustomerKey>string</CustomerKey>
        <ContractKey>string</ContractKey>
        <CcInfoKey>string</CcInfoKey>
        <CheckInfoKey>string</CheckInfoKey>
        <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
        <error>string</error>
        <Partner>string</Partner>
        <Vendor>string</Vendor>
        <Username>string</Username>
        <Result>string</Result>
        <AuthCode>string</AuthCode>
        <PNRef>string</PNRef>
        <Message>string</Message>
        <Contracts>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
        </Contracts>
        <ContractTransactions>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
        </ContractTransactions>
        <AccountNumber>string</AccountNumber>
      </AddRecurringCreditCardResult>
    </AddRecurringCreditCardResponse>
  </soap:Body>
</soap:Envelope>
```

#### HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx/AddRecurringCreditCard HTTP/1.1
Host: secure.ftipgw.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

Username=string&Password=string&Vendor=string&CustomerID=string&CustomerName=string&FirstName=string&LastName=string&Title=string&Department=string&Street1=string&Street2=string&Street3=string&City=string&StateID=string&Province=string&Zip=string&CountryID=string&Email=string&DayPhone=string&NightPhone=string&Fax=string&Mobile=string&ContractID=string&ContractName=string&BillAmt=string&TaxAmt=string&TotalAmt=string&StartDate=string&EndDate=string&BillingPeriod=string&BillingInterval=string&MaxFailures=string&FailureInterval=string&EmailCustomer=string&EmailMerchant=string&EmailCustomerFailure=string&EmailMerchantFailure=string&CcAccountNum=string&CcExpDate=string&CcNameOnCard=string&CcStreet=string&CcZip=string&ExtData=string
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<RecurringResult xmlns="http://www.tpisoft.com/Admin/ws">
  <CustomerID>string</CustomerID>
  <ClientSessionID>string</ClientSessionID>
  <CustomerKey>string</CustomerKey>
  <ContractKey>string</ContractKey>
  <CcInfoKey>string</CcInfoKey>
  <CheckInfoKey>string</CheckInfoKey>
  <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
  <error>string</error>
  <Partner>string</Partner>
  <Vendor>string</Vendor>
  <Username>string</Username>
  <Result>string</Result>
  <AuthCode>string</AuthCode>
  <PNRef>string</PNRef>
  <Message>string</Message>
  <Contracts>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
  </Contracts>
  <ContractTransactions>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
  </ContractTransactions>
  <AccountNumber>string</AccountNumber>
</RecurringResult>
```

## <mark style="color:blue;">AddRecurringCheck</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=AddRecurringCheck`

**Method:**\
Supports **SOAP POST** and **HTTP POST** (form-encoded)

**Description:**\
Adds a new recurring check-based billing contract by creating a customer profile, a billing contract, and a check payment method in one call. Useful for recurring ACH billing setups.

### Request Parameters

| Parameter            | Type   | Required | Description                                       |
| -------------------- | ------ | -------- | ------------------------------------------------- |
| UserName             | string | Yes      | Admin username                                    |
| Password             | string | Yes      | Admin password                                    |
| Vendor               | string | Yes      | Merchant/Vendor key                               |
| CustomerID           | string | Yes      | Merchant-supplied unique customer ID              |
| CustomerName         | string | Yes      | Full customer name                                |
| FirstName            | string | No       | Customer first name                               |
| LastName             | string | No       | Customer last name                                |
| Title                | string | No       | Title                                             |
| Department           | string | No       | Department                                        |
| Street1              | string | No       | Address line 1                                    |
| Street2              | string | No       | Address line 2                                    |
| Street3              | string | No       | Address line 3                                    |
| City                 | string | No       | City                                              |
| StateID              | string | No       | 2-character state code                            |
| Province             | string | No       | Province (for non-US)                             |
| Zip                  | string | No       | Postal code                                       |
| CountryID            | string | No       | 3-character country code                          |
| Email                | string | No       | Email address                                     |
| DayPhone             | string | No       | Daytime phone                                     |
| Fax                  | string | No       | Fax number                                        |
| Mobile               | string | No       | Mobile phone                                      |
| ContractID           | string | Yes      | Merchant-supplied contract ID                     |
| ContractName         | string | No       | Billing contract name                             |
| BillAmt              | string | Yes      | Billing amount per cycle                          |
| TaxAmt               | string | No       | Tax amount                                        |
| TotalAmt             | string | Yes      | Must equal BillAmt + TaxAmt                       |
| StartDate            | string | Yes      | Contract start date                               |
| EndDate              | string | No       | Optional end date; omit for indefinite schedule   |
| BillingPeriod        | string | Yes      | DAY, WEEK, MONTH, or YEAR                         |
| BillingInterval      | string | Yes      | Frequency for billing period                      |
| MaxFailures          | string | No       | Max retries before suspension                     |
| FailureInterval      | string | No       | Days between failure retries                      |
| EmailCustomer        | string | No       | TRUE/FALSE – notify customer on success           |
| EmailMerchant        | string | No       | TRUE/FALSE – notify merchant on success           |
| EmailCustomerFailure | string | No       | TRUE/FALSE – notify customer on failure           |
| EmailMerchantFailure | string | No       | TRUE/FALSE – notify merchant on failure           |
| CheckType            | string | Yes      | PERSONAL or BUSINESS                              |
| AccountType          | string | Yes      | CHECKING or SAVINGS                               |
| CheckNum             | string | No       | Check number                                      |
| MICR                 | string | No       | MICR line (optional when account info is present) |
| AccountNum           | string | Yes      | Bank account number                               |
| TransitNum           | string | Yes      | Bank routing number                               |
| SS                   | string | No       | SSN of the check holder                           |
| DOB                  | string | No       | Date of birth                                     |
| BranchCity           | string | No       | Bank branch city                                  |
| DL                   | string | No       | Driver’s license number                           |
| StateCode            | string | No       | State code on the license                         |
| NameOnCheck          | string | No       | Name printed on the check                         |
| ExtData              | string | No       | Optional XML string for additional metadata       |

***

### Notes

* Combines creation of a customer, billing contract, and ACH/check payment method into a single request.
* StartDate is required and must be a valid future date.
* Omitting EndDate results in an indefinite billing contract.
* CheckType must be either `PERSONAL` or `BUSINESS`; AccountType must be `CHECKING` or `SAVINGS`.
* TotalAmt must match the sum of BillAmt and TaxAmt, or the request will be rejected.
* MICR input is optional if CheckNum, AccountNum, and TransitNum are provided.
* Notifications can be configured for both customer and merchant on success and failure.
* Response includes RecurringResult with elements such as `CustomerKey`, `ContractKey`, `CheckInfoKey`, `code`, `error`, `AuthCode`, and `PNRef`.

## <mark style="color:blue;">ManageCheckInfo</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=ManageCheckInfo`

**Method:**\
Supports **SOAP POST**, **HTTP POST**, and **HTTP GET** (form-encoded)

**Description:**\
Adds, updates, or deletes stored ACH/check account information for an existing customer. This endpoint is used to manage the customer’s check payment method, particularly in the context of recurring billing.

***

### Request Parameters

| Parameter    | Type   | Required    | Description                                      |
| ------------ | ------ | ----------- | ------------------------------------------------ |
| UserName     | string | Yes         | Admin username                                   |
| Password     | string | Yes         | Admin password                                   |
| TransType    | string | Yes         | ADD, UPDATE, or DELETE                           |
| Vendor       | string | Yes         | Merchant numeric key                             |
| CustomerKey  | string | Yes         | Unique key for the customer                      |
| CheckInfoKey | string | Conditional | Required for UPDATE or DELETE to identify record |
| CheckType    | string | Yes         | PERSONAL or BUSINESS                             |
| AccountType  | string | Yes         | CHECKING or SAVINGS                              |
| CheckNum     | string | No          | Check number                                     |
| MICR         | string | No          | Scanned MICR line data                           |
| AccountNum   | string | Yes         | Bank account number                              |
| TransitNum   | string | Yes         | Bank routing number                              |
| SS           | string | No          | SSN of the check holder                          |
| DOB          | string | No          | Date of birth of the check holder                |
| BranchCity   | string | No          | Bank branch city                                 |
| DL           | string | No          | Driver's license number                          |
| StateCode    | string | No          | State code on the license                        |
| NameOnCheck  | string | No          | Printed name on the check                        |
| Email        | string | No          | Customer email address                           |
| DayPhone     | string | No          | Daytime phone number                             |
| Street1      | string | No          | Address line 1                                   |
| Street2      | string | No          | Address line 2                                   |
| Street3      | string | No          | Address line 3                                   |
| City         | string | No          | Customer city                                    |
| StateID      | string | No          | 2-character state code                           |
| Province     | string | No          | Province (for non-US addresses)                  |
| PostalCode   | string | No          | Postal or ZIP code                               |
| CountryID    | string | No          | 3-character country code (e.g., USA, CAN)        |
| ExtData      | string | No          | Optional metadata via XML                        |

***

### Notes

* **TransType controls the action**:\
  Use `ADD` to create a new check method, `UPDATE` to modify existing check info, and `DELETE` to remove it. `CheckInfoKey` is required for both `UPDATE` and `DELETE`.
* **Dual protocol support**:\
  This endpoint accepts SOAP requests and standard HTTP GET or POST (form-encoded), offering integration flexibility.
* **MICR vs. Account Fields**:\
  You may provide either MICR string or discrete fields like `CheckNum`, `AccountNum`, and `TransitNum`, depending on how your system captures check data.
* **Supplementary identity fields**:\
  Fields like `SS`, `DOB`, `DL`, and `StateCode` support extended identity verification and risk assessment but are optional.
* **Response behavior**:\
  A successful response returns a `RecurringResult` object including `CustomerKey`, `CheckInfoKey`, `Result`, `AuthCode`, `PNRef`, and `Message`. If relevant, it may also include billing contract information or status of the last transaction attempt.

#### SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx HTTP/1.1
Host: secure.ftipgw.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tpisoft.com/Admin/ws/ManageCheckInfo"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageCheckInfo xmlns="http://www.tpisoft.com/Admin/ws">
      <Username>string</Username>
      <Password>string</Password>
      <TransType>string</TransType>
      <Vendor>string</Vendor>
      <CustomerKey>string</CustomerKey>
      <CheckInfoKey>string</CheckInfoKey>
      <CheckType>string</CheckType>
      <AccountType>string</AccountType>
      <CheckNum>string</CheckNum>
      <MICR>string</MICR>
      <AccountNum>string</AccountNum>
      <TransitNum>string</TransitNum>
      <RawMICR>string</RawMICR>
      <SS>string</SS>
      <DOB>string</DOB>
      <BranchCity>string</BranchCity>
      <DL>string</DL>
      <StateCode>string</StateCode>
      <NameOnCheck>string</NameOnCheck>
      <Email>string</Email>
      <DayPhone>string</DayPhone>
      <Street1>string</Street1>
      <Street2>string</Street2>
      <Street3>string</Street3>
      <City>string</City>
      <StateID>string</StateID>
      <Province>string</Province>
      <PostalCode>string</PostalCode>
      <CountryID>string</CountryID>
      <ExtData>string</ExtData>
    </ManageCheckInfo>
  </soap:Body>
</soap:Envelope>
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageCheckInfoResponse xmlns="http://www.tpisoft.com/Admin/ws">
      <ManageCheckInfoResult>
        <CustomerID>string</CustomerID>
        <ClientSessionID>string</ClientSessionID>
        <CustomerKey>string</CustomerKey>
        <ContractKey>string</ContractKey>
        <CcInfoKey>string</CcInfoKey>
        <CheckInfoKey>string</CheckInfoKey>
        <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
        <error>string</error>
        <Partner>string</Partner>
        <Vendor>string</Vendor>
        <Username>string</Username>
        <Result>string</Result>
        <AuthCode>string</AuthCode>
        <PNRef>string</PNRef>
        <Message>string</Message>
        <Contracts>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
        </Contracts>
        <ContractTransactions>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
        </ContractTransactions>
        <AccountNumber>string</AccountNumber>
      </ManageCheckInfoResult>
    </ManageCheckInfoResponse>
  </soap:Body>
</soap:Envelope>
```

#### HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx/ManageCheckInfo HTTP/1.1
Host: secure.ftipgw.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

Username=string&Password=string&TransType=string&Vendor=string&CustomerKey=string&CheckInfoKey=string&CheckType=string&AccountType=string&CheckNum=string&MICR=string&AccountNum=string&TransitNum=string&RawMICR=string&SS=string&DOB=string&BranchCity=string&DL=string&StateCode=string&NameOnCheck=string&Email=string&DayPhone=string&Street1=string&Street2=string&Street3=string&City=string&StateID=string&Province=string&PostalCode=string&CountryID=string&ExtData=string
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<RecurringResult xmlns="http://www.tpisoft.com/Admin/ws">
  <CustomerID>string</CustomerID>
  <ClientSessionID>string</ClientSessionID>
  <CustomerKey>string</CustomerKey>
  <ContractKey>string</ContractKey>
  <CcInfoKey>string</CcInfoKey>
  <CheckInfoKey>string</CheckInfoKey>
  <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
  <error>string</error>
  <Partner>string</Partner>
  <Vendor>string</Vendor>
  <Username>string</Username>
  <Result>string</Result>
  <AuthCode>string</AuthCode>
  <PNRef>string</PNRef>
  <Message>string</Message>
  <Contracts>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
  </Contracts>
  <ContractTransactions>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
  </ContractTransactions>
  <AccountNumber>string</AccountNumber>
</RecurringResult>
```

## <mark style="color:blue;">ManageCreditCardInfo</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=ManageCreditCardInfo`

**Method:**\
Supports **SOAP POST** and **HTTP POST** (form-encoded)

**Description:**\
Adds, updates, or deletes stored credit card information for an existing customer. Commonly used in recurring billing workflows.

***

### Request Parameters

| Parameter    | Type   | Required         | Description                                |
| ------------ | ------ | ---------------- | ------------------------------------------ |
| UserName     | string | Yes              | Admin username                             |
| Password     | string | Yes              | Admin password                             |
| TransType    | string | Yes              | ADD, UPDATE, or DELETE                     |
| Vendor       | string | Yes              | Merchant numeric key                       |
| CustomerKey  | string | Yes              | Unique customer key                        |
| CardInfoKey  | string | Conditional      | Required for UPDATE or DELETE              |
| CcAccountNum | string | Required for ADD | Credit card number                         |
| CcExpDate    | string | Required for ADD | Expiration date (MMYY)                     |
| CcNameOnCard | string | No               | Name as printed on the card                |
| CcStreet     | string | No               | Billing street address                     |
| CcZip        | string | No               | Billing ZIP/postal code                    |
| ExtData      | string | No               | Optional XML-formatted string for metadata |

***

### Notes

* **Action driven by TransType:**\
  Use `ADD` to store a new card, `UPDATE` to change existing card data, and `DELETE` to remove a card. `CardInfoKey` is required for update and delete operations.
* **Flexible update behavior:**\
  When updating a card, `CcAccountNum` and `CcExpDate` are optional. This allows updating address or metadata without resubmitting the card number.
* **Protocol support:**\
  Both SOAP and form-encoded HTTP POST are accepted, depending on the integration environment.
* **Returns a standard RecurringResult:**\
  Responses include keys such as `CustomerKey`, `CardInfoKey`, `Result`, `AuthCode`, `PNRef`, `code`, `error`, and `Message`, offering status and processing outcomes.

#### SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx HTTP/1.1
Host: secure.ftipgw.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tpisoft.com/Admin/ws/ManageCreditCardInfo"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageCreditCardInfo xmlns="http://www.tpisoft.com/Admin/ws">
      <Username>string</Username>
      <Password>string</Password>
      <TransType>string</TransType>
      <Vendor>string</Vendor>
      <CustomerKey>string</CustomerKey>
      <CardInfoKey>string</CardInfoKey>
      <CcAccountNum>string</CcAccountNum>
      <CcExpDate>string</CcExpDate>
      <CcNameOnCard>string</CcNameOnCard>
      <CcStreet>string</CcStreet>
      <CcZip>string</CcZip>
      <ExtData>string</ExtData>
    </ManageCreditCardInfo>
  </soap:Body>
</soap:Envelope>
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageCreditCardInfoResponse xmlns="http://www.tpisoft.com/Admin/ws">
      <ManageCreditCardInfoResult>
        <CustomerID>string</CustomerID>
        <ClientSessionID>string</ClientSessionID>
        <CustomerKey>string</CustomerKey>
        <ContractKey>string</ContractKey>
        <CcInfoKey>string</CcInfoKey>
        <CheckInfoKey>string</CheckInfoKey>
        <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
        <error>string</error>
        <Partner>string</Partner>
        <Vendor>string</Vendor>
        <Username>string</Username>
        <Result>string</Result>
        <AuthCode>string</AuthCode>
        <PNRef>string</PNRef>
        <Message>string</Message>
        <Contracts>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
        </Contracts>
        <ContractTransactions>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
        </ContractTransactions>
        <AccountNumber>string</AccountNumber>
      </ManageCreditCardInfoResult>
    </ManageCreditCardInfoResponse>
  </soap:Body>
</soap:Envelope>
```

#### HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx/ManageCreditCardInfo HTTP/1.1
Host: secure.ftipgw.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

Username=string&Password=string&TransType=string&Vendor=string&CustomerKey=string&CardInfoKey=string&CcAccountNum=string&CcExpDate=string&CcNameOnCard=string&CcStreet=string&CcZip=string&ExtData=string
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<RecurringResult xmlns="http://www.tpisoft.com/Admin/ws">
  <CustomerID>string</CustomerID>
  <ClientSessionID>string</ClientSessionID>
  <CustomerKey>string</CustomerKey>
  <ContractKey>string</ContractKey>
  <CcInfoKey>string</CcInfoKey>
  <CheckInfoKey>string</CheckInfoKey>
  <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
  <error>string</error>
  <Partner>string</Partner>
  <Vendor>string</Vendor>
  <Username>string</Username>
  <Result>string</Result>
  <AuthCode>string</AuthCode>
  <PNRef>string</PNRef>
  <Message>string</Message>
  <Contracts>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
  </Contracts>
  <ContractTransactions>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
  </ContractTransactions>
  <AccountNumber>string</AccountNumber>
</RecurringResult>
```

## <mark style="color:blue;">ManageContract</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=ManageContract`

**Method:**\
Supports **SOAP POST** and **HTTP POST** (form-encoded)

**Description:**\
Adds, updates, suspends, resumes, or deletes an existing billing contract associated with a customer. This endpoint allows direct control over the recurring billing schedule and status of an individual contract.

***

### Request Parameters

| Parameter            | Type   | Required                | Description                                              |
| -------------------- | ------ | ----------------------- | -------------------------------------------------------- |
| UserName             | string | Yes                     | Admin username                                           |
| Password             | string | Yes                     | Admin password                                           |
| TransType            | string | Yes                     | ADD, UPDATE, SUSPEND, RESUME, DELETE                     |
| Vendor               | string | Yes                     | Merchant numeric key                                     |
| CustomerKey          | string | Yes                     | Unique key for the customer                              |
| ContractKey          | string | Conditional             | Required for all types except ADD                        |
| ContractID           | string | Required for ADD        | Merchant-supplied unique contract ID                     |
| ContractName         | string | No                      | Optional contract name                                   |
| BillAmt              | string | Required for ADD/UPDATE | Amount to be charged per cycle                           |
| TaxAmt               | string | No                      | Tax amount to be included                                |
| TotalAmt             | string | Required for ADD/UPDATE | Must equal BillAmt + TaxAmt                              |
| StartDate            | string | Required for ADD        | Start date for recurring billing                         |
| EndDate              | string | No                      | Optional end date; omit for indefinite billing           |
| BillingPeriod        | string | Required for ADD        | DAY, WEEK, MONTH, or YEAR                                |
| BillingInterval      | string | Required for ADD        | Frequency multiplier for billing period                  |
| MaxFailures          | string | No                      | Number of allowed consecutive failures before suspension |
| FailureInterval      | string | No                      | Number of days between retry attempts                    |
| EmailCustomer        | string | No                      | TRUE/FALSE – Notify customer on successful creation      |
| EmailMerchant        | string | No                      | TRUE/FALSE – Notify merchant on successful creation      |
| EmailCustomerFailure | string | No                      | TRUE/FALSE – Notify customer on failure                  |
| EmailMerchantFailure | string | No                      | TRUE/FALSE – Notify merchant on failure                  |
| ExtData              | string | No                      | Optional XML-formatted string for metadata               |

***

### Notes

* **TransType defines the contract operation:**\
  Use `ADD` to create a new billing contract, `UPDATE` to modify an existing one, and `SUSPEND`, `RESUME`, or `DELETE` to manage its active state. `ContractKey` is required for all actions except `ADD`.
* **Billing logic:**\
  `TotalAmt` must always equal the sum of `BillAmt` and `TaxAmt`. Incorrect totals will result in validation errors.
* **StartDate and BillingInterval required on ADD:**\
  These define the recurrence structure and are mandatory when creating a new contract.
* **Notifications optional:**\
  Email fields let you control which parties receive automated messages about success or failure events related to the contract.
* **ExtData flexibility:**\
  Can be used to pass additional metadata or custom fields into the platform, depending on merchant configuration.
* **Typical usage:**
  * `ADD`: when creating a recurring billing plan
  * `UPDATE`: to change amount or schedule
  * `SUSPEND`: temporarily stop billing
  * `RESUME`: restart billing after suspension
  * `DELETE`: remove the contract entirely

#### SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx HTTP/1.1
Host: secure.ftipgw.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tpisoft.com/Admin/ws/ManageContract"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageContract xmlns="http://www.tpisoft.com/Admin/ws">
      <Username>string</Username>
      <Password>string</Password>
      <TransType>string</TransType>
      <Vendor>string</Vendor>
      <CustomerKey>string</CustomerKey>
      <ContractKey>string</ContractKey>
      <PaymentInfoKey>string</PaymentInfoKey>
      <PaymentType>string</PaymentType>
      <CustomerID>string</CustomerID>
      <CustomerName>string</CustomerName>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
      <Title>string</Title>
      <Department>string</Department>
      <Street1>string</Street1>
      <Street2>string</Street2>
      <Street3>string</Street3>
      <City>string</City>
      <StateID>string</StateID>
      <Province>string</Province>
      <Zip>string</Zip>
      <CountryID>string</CountryID>
      <Email>string</Email>
      <DayPhone>string</DayPhone>
      <NightPhone>string</NightPhone>
      <Fax>string</Fax>
      <Mobile>string</Mobile>
      <ContractID>string</ContractID>
      <ContractName>string</ContractName>
      <BillAmt>string</BillAmt>
      <TaxAmt>string</TaxAmt>
      <TotalAmt>string</TotalAmt>
      <StartDate>string</StartDate>
      <EndDate>string</EndDate>
      <NextBillDt>string</NextBillDt>
      <BillingPeriod>string</BillingPeriod>
      <BillingInterval>string</BillingInterval>
      <MaxFailures>string</MaxFailures>
      <FailureInterval>string</FailureInterval>
      <EmailCustomer>string</EmailCustomer>
      <EmailMerchant>string</EmailMerchant>
      <EmailCustomerFailure>string</EmailCustomerFailure>
      <EmailMerchantFailure>string</EmailMerchantFailure>
      <Status>string</Status>
      <ExtData>string</ExtData>
    </ManageContract>
  </soap:Body>
</soap:Envelope>
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageContractResponse xmlns="http://www.tpisoft.com/Admin/ws">
      <ManageContractResult>
        <CustomerID>string</CustomerID>
        <ClientSessionID>string</ClientSessionID>
        <CustomerKey>string</CustomerKey>
        <ContractKey>string</ContractKey>
        <CcInfoKey>string</CcInfoKey>
        <CheckInfoKey>string</CheckInfoKey>
        <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
        <error>string</error>
        <Partner>string</Partner>
        <Vendor>string</Vendor>
        <Username>string</Username>
        <Result>string</Result>
        <AuthCode>string</AuthCode>
        <PNRef>string</PNRef>
        <Message>string</Message>
        <Contracts>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
        </Contracts>
        <ContractTransactions>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
        </ContractTransactions>
        <AccountNumber>string</AccountNumber>
      </ManageContractResult>
    </ManageContractResponse>
  </soap:Body>
</soap:Envelope>
```

#### HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx/ManageContract HTTP/1.1
Host: secure.ftipgw.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

Username=string&Password=string&TransType=string&Vendor=string&CustomerKey=string&ContractKey=string&PaymentInfoKey=string&PaymentType=string&CustomerID=string&CustomerName=string&FirstName=string&LastName=string&Title=string&Department=string&Street1=string&Street2=string&Street3=string&City=string&StateID=string&Province=string&Zip=string&CountryID=string&Email=string&DayPhone=string&NightPhone=string&Fax=string&Mobile=string&ContractID=string&ContractName=string&BillAmt=string&TaxAmt=string&TotalAmt=string&StartDate=string&EndDate=string&NextBillDt=string&BillingPeriod=string&BillingInterval=string&MaxFailures=string&FailureInterval=string&EmailCustomer=string&EmailMerchant=string&EmailCustomerFailure=string&EmailMerchantFailure=string&Status=string&ExtData=string
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<RecurringResult xmlns="http://www.tpisoft.com/Admin/ws">
  <CustomerID>string</CustomerID>
  <ClientSessionID>string</ClientSessionID>
  <CustomerKey>string</CustomerKey>
  <ContractKey>string</ContractKey>
  <CcInfoKey>string</CcInfoKey>
  <CheckInfoKey>string</CheckInfoKey>
  <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
  <error>string</error>
  <Partner>string</Partner>
  <Vendor>string</Vendor>
  <Username>string</Username>
  <Result>string</Result>
  <AuthCode>string</AuthCode>
  <PNRef>string</PNRef>
  <Message>string</Message>
  <Contracts>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
  </Contracts>
  <ContractTransactions>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
  </ContractTransactions>
  <AccountNumber>string</AccountNumber>
</RecurringResult>
```

## <mark style="color:blue;">ManageCustomer</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=ManageCustomer`

**Method:**\
Supports **SOAP POST** and **HTTP POST** (form-encoded)

**Description:**\
Adds, updates, or deletes a customer profile within the recurring billing system. This profile is used to associate payment methods and recurring billing contracts.

***

### Request Parameters

| Parameter    | Type   | Required         | Description                                  |
| ------------ | ------ | ---------------- | -------------------------------------------- |
| UserName     | string | Yes              | Admin username                               |
| Password     | string | Yes              | Admin password                               |
| TransType    | string | Yes              | ADD, UPDATE, or DELETE                       |
| Vendor       | string | Yes              | Merchant numeric key                         |
| CustomerKey  | string | Conditional      | Required for UPDATE or DELETE                |
| CustomerID   | string | Required for ADD | Unique merchant-supplied customer identifier |
| CustomerName | string | Yes              | Full name of the customer                    |
| FirstName    | string | No               | First name                                   |
| LastName     | string | No               | Last name                                    |
| Title        | string | No               | Title (e.g., Mr., Dr.)                       |
| Department   | string | No               | Department or division                       |
| Street1      | string | No               | Address line 1                               |
| Street2      | string | No               | Address line 2                               |
| Street3      | string | No               | Address line 3                               |
| City         | string | No               | City                                         |
| StateID      | string | No               | 2-character state code                       |
| Province     | string | No               | Province (for non-US addresses)              |
| PostalCode   | string | No               | ZIP or postal code                           |
| CountryID    | string | No               | 3-character country code (e.g., USA, CAN)    |
| Email        | string | No               | Email address                                |
| DayPhone     | string | No               | Daytime phone number                         |
| Fax          | string | No               | Fax number                                   |
| Mobile       | string | No               | Mobile phone number                          |
| ExtData      | string | No               | Optional XML string for custom metadata      |

***

### Notes

* **TransType controls the operation:**\
  Use `ADD` to create a new customer, `UPDATE` to modify an existing one, and `DELETE` to remove the customer profile. `CustomerKey` is required for both `UPDATE` and `DELETE`.
* **CustomerID vs. CustomerKey:**\
  `CustomerID` is the merchant-defined external identifier, while `CustomerKey` is the system-generated internal key returned by the platform after creation.
* **Minimal required fields for creation:**\
  `CustomerID`, `CustomerName`, `UserName`, `Password`, and `Vendor` must be supplied at minimum to create a valid customer record.
* **Flexible structure for address data:**\
  Street and location fields are optional but recommended to enable risk scoring, reporting, or downstream integrations.
* **Use with other endpoints:**\
  A customer must exist before you can attach recurring contracts or payment methods (such as via `AddRecurringCreditCard`, `AddRecurringCheck`, or `ManageContract`).
* **ExtData usage:**\
  The `ExtData` field supports merchant-defined XML key-value pairs and can be used to store custom tags, external system IDs, or control flags.

#### SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx HTTP/1.1
Host: secure.ftipgw.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tpisoft.com/Admin/ws/ManageCustomer"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageCustomer xmlns="http://www.tpisoft.com/Admin/ws">
      <Username>string</Username>
      <Password>string</Password>
      <TransType>string</TransType>
      <Vendor>string</Vendor>
      <CustomerKey>string</CustomerKey>
      <CustomerID>string</CustomerID>
      <CustomerName>string</CustomerName>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
      <Title>string</Title>
      <Department>string</Department>
      <Street1>string</Street1>
      <Street2>string</Street2>
      <Street3>string</Street3>
      <City>string</City>
      <StateID>string</StateID>
      <Province>string</Province>
      <Zip>string</Zip>
      <CountryID>string</CountryID>
      <Email>string</Email>
      <DayPhone>string</DayPhone>
      <NightPhone>string</NightPhone>
      <Fax>string</Fax>
      <Mobile>string</Mobile>
      <Status>string</Status>
      <ExtData>string</ExtData>
    </ManageCustomer>
  </soap:Body>
</soap:Envelope>
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageCustomerResponse xmlns="http://www.tpisoft.com/Admin/ws">
      <ManageCustomerResult>
        <CustomerID>string</CustomerID>
        <ClientSessionID>string</ClientSessionID>
        <CustomerKey>string</CustomerKey>
        <ContractKey>string</ContractKey>
        <CcInfoKey>string</CcInfoKey>
        <CheckInfoKey>string</CheckInfoKey>
        <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
        <error>string</error>
        <Partner>string</Partner>
        <Vendor>string</Vendor>
        <Username>string</Username>
        <Result>string</Result>
        <AuthCode>string</AuthCode>
        <PNRef>string</PNRef>
        <Message>string</Message>
        <Contracts>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
        </Contracts>
        <ContractTransactions>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
        </ContractTransactions>
        <AccountNumber>string</AccountNumber>
      </ManageCustomerResult>
    </ManageCustomerResponse>
  </soap:Body>
</soap:Envelope>
```

#### HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx/ManageCustomer HTTP/1.1
Host: secure.ftipgw.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

Username=string&Password=string&TransType=string&Vendor=string&CustomerKey=string&CustomerID=string&CustomerName=string&FirstName=string&LastName=string&Title=string&Department=string&Street1=string&Street2=string&Street3=string&City=string&StateID=string&Province=string&Zip=string&CountryID=string&Email=string&DayPhone=string&NightPhone=string&Fax=string&Mobile=string&Status=string&ExtData=string
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<RecurringResult xmlns="http://www.tpisoft.com/Admin/ws">
  <CustomerID>string</CustomerID>
  <ClientSessionID>string</ClientSessionID>
  <CustomerKey>string</CustomerKey>
  <ContractKey>string</ContractKey>
  <CcInfoKey>string</CcInfoKey>
  <CheckInfoKey>string</CheckInfoKey>
  <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
  <error>string</error>
  <Partner>string</Partner>
  <Vendor>string</Vendor>
  <Username>string</Username>
  <Result>string</Result>
  <AuthCode>string</AuthCode>
  <PNRef>string</PNRef>
  <Message>string</Message>
  <Contracts>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
  </Contracts>
  <ContractTransactions>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
  </ContractTransactions>
  <AccountNumber>string</AccountNumber>
</RecurringResult>
```

## <mark style="color:blue;">ManageContractAddDaysToNextBillDt</mark>

**Endpoint URL:**\
`https://secure.ftipgw.com/admin/ws/recurring.asmx?op=ManageContractAddDaysToNextBillDt`

**Method:**\
Supports **SOAP POST** and **HTTP POST** (form-encoded)

**Description:**\
Adds a specified number of days to the next scheduled billing date of an existing recurring contract. This is typically used to delay the next payment without modifying the billing interval or period.

***

### Request Parameters

| Parameter   | Type   | Required | Description                                      |
| ----------- | ------ | -------- | ------------------------------------------------ |
| UserName    | string | Yes      | Admin username                                   |
| Password    | string | Yes      | Admin password                                   |
| Vendor      | string | Yes      | Merchant numeric key                             |
| CustomerKey | string | Yes      | Unique identifier for the customer               |
| ContractKey | string | Yes      | Unique identifier for the contract to be updated |
| AddDays     | string | Yes      | Number of days to add to the next billing date   |
| ExtData     | string | No       | Optional XML-formatted metadata                  |

***

### Notes

* **Purpose:**\
  This endpoint is used to delay the upcoming scheduled billing date of a recurring contract, without changing the recurring frequency or start/end dates.
* **AddDays logic:**\
  The number provided in `AddDays` will be **added to the contract’s current next billing date**. For example, if the next billing date is July 5 and `AddDays` is set to `10`, the new next billing date will be July 15.
* **Non-destructive to billing cycle:**\
  This does **not permanently alter** the contract’s recurrence settings. After the next billing event, the contract resumes its regular billing interval.
* **Common use cases:**
  * To offer a grace period or deferral for a specific customer.
  * To realign a billing date with a customer’s preference or payroll cycle.
  * To compensate for prior billing failures or service issues.
* **No date input required:**\
  You only supply the number of days — the platform handles the date calculation internally based on the current contract schedule.
* **ExtData support:**\
  Optional field for tagging or logging additional context related to the update, such as administrative reason codes.

#### SOAP 1.1

The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx HTTP/1.1
Host: secure.ftipgw.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.tpisoft.com/Admin/ws/ManageContractAddDaysToNextBillDt"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageContractAddDaysToNextBillDt xmlns="http://www.tpisoft.com/Admin/ws">
      <Username>string</Username>
      <Password>string</Password>
      <Vendor>string</Vendor>
      <CustomerKey>string</CustomerKey>
      <ContractKey>string</ContractKey>
      <NumOfDays>string</NumOfDays>
      <ExtData>string</ExtData>
    </ManageContractAddDaysToNextBillDt>
  </soap:Body>
</soap:Envelope>
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ManageContractAddDaysToNextBillDtResponse xmlns="http://www.tpisoft.com/Admin/ws">
      <ManageContractAddDaysToNextBillDtResult>
        <CustomerID>string</CustomerID>
        <ClientSessionID>string</ClientSessionID>
        <CustomerKey>string</CustomerKey>
        <ContractKey>string</ContractKey>
        <CcInfoKey>string</CcInfoKey>
        <CheckInfoKey>string</CheckInfoKey>
        <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
        <error>string</error>
        <Partner>string</Partner>
        <Vendor>string</Vendor>
        <Username>string</Username>
        <Result>string</Result>
        <AuthCode>string</AuthCode>
        <PNRef>string</PNRef>
        <Message>string</Message>
        <Contracts>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
          <ContractInfo>
            <Contract_Key>string</Contract_Key>
            <Next_Bill_Date>string</Next_Bill_Date>
          </ContractInfo>
        </Contracts>
        <ContractTransactions>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
          <LastContractTrans>
            <PaymentPref>string</PaymentPref>
            <Contract_Key>string</Contract_Key>
            <Transaction_Date>string</Transaction_Date>
            <Transaction_Amount>string</Transaction_Amount>
            <Convenience_Fee>string</Convenience_Fee>
            <PNRef>string</PNRef>
            <ResultCode>string</ResultCode>
            <ResponseMessage>string</ResponseMessage>
            <AuthCode>string</AuthCode>
          </LastContractTrans>
        </ContractTransactions>
        <AccountNumber>string</AccountNumber>
      </ManageContractAddDaysToNextBillDtResult>
    </ManageContractAddDaysToNextBillDtResponse>
  </soap:Body>
</soap:Envelope>
```

#### HTTP POST

The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values.

```
POST /admin/ws/recurring.asmx/ManageContractAddDaysToNextBillDt HTTP/1.1
Host: secure.ftipgw.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length

Username=string&Password=string&Vendor=string&CustomerKey=string&ContractKey=string&NumOfDays=string&ExtData=string
```

```
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<RecurringResult xmlns="http://www.tpisoft.com/Admin/ws">
  <CustomerID>string</CustomerID>
  <ClientSessionID>string</ClientSessionID>
  <CustomerKey>string</CustomerKey>
  <ContractKey>string</ContractKey>
  <CcInfoKey>string</CcInfoKey>
  <CheckInfoKey>string</CheckInfoKey>
  <code>OK or Unknown_Error or Access_Denied or Invalid_Login or Invalid_User_Status or Invalid_User or User_Not_Found or Username_Already_In_Use or Username_Has_Invalid_Characters or Not_Enough_Privilege or Invalid_PartnerID or Invalid_VendorID or Invalid_Argument or Invalid_Record or Transaction_Type_Not_Supported_By_Host or Internal_Error or Invalid_ProcessorID or Processor_Not_Found or InValidPassword</code>
  <error>string</error>
  <Partner>string</Partner>
  <Vendor>string</Vendor>
  <Username>string</Username>
  <Result>string</Result>
  <AuthCode>string</AuthCode>
  <PNRef>string</PNRef>
  <Message>string</Message>
  <Contracts>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
    <ContractInfo>
      <Contract_Key>string</Contract_Key>
      <Next_Bill_Date>string</Next_Bill_Date>
    </ContractInfo>
  </Contracts>
  <ContractTransactions>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
    <LastContractTrans>
      <PaymentPref>string</PaymentPref>
      <Contract_Key>string</Contract_Key>
      <Transaction_Date>string</Transaction_Date>
      <Transaction_Amount>string</Transaction_Amount>
      <Convenience_Fee>string</Convenience_Fee>
      <PNRef>string</PNRef>
      <ResultCode>string</ResultCode>
      <ResponseMessage>string</ResponseMessage>
      <AuthCode>string</AuthCode>
    </LastContractTrans>
  </ContractTransactions>
  <AccountNumber>string</AccountNumber>
</RecurringResult>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.frontstream.com/argofire/recurring-billing-and-customer-info.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
