Recurring Billing & Customer Info

AddRecurringCreditCard

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>

AddRecurringCheck

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.

ManageCheckInfo

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>

ManageCreditCardInfo

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>

ManageContract

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>

ManageCustomer

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>

ManageContractAddDaysToNextBillDt

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>

Last updated