Skip to main content
Vindicia Knowledgebase




The migrate method allows you to enter Transactions processed outside of Vindicia Subscribe into the Vindicia Subscribe database. Transactions imported to Vindicia Subscribe using this method are stored in the database. Those that are entered with a status of failed will be processed by Vindicia Subscribe according to your defined retry schedule.

Transactions entered using this method may be searched and analyzed, both through the Vindicia Subscribe UI, and using the Transaction.fetchDeltaSince method.

After migration, these Transactions will be processed and treated as if they originated with Vindicia Subscribe, allowing you to use this method to import historic billing information for your customers.

When you call this method to import a batch of Transactions, Vindicia queues the data, and then processes it in the order received, before adding it to the database. Lag time exists between the time you migrate a transaction, and the time it appears in the Vindicia Subscribe database and UI. The lag varies according to your transaction volume, and that of other merchants currently in the queue.

Vindicia recommends small batches for this call. If your migrated Transaction volume is high, call Transaction.migrate more often to reduce the amount of data sent in one call. (The optimal batch size depends on the total amount of data being sent.) To minimize timeouts, consider adjusting the timeout setting in the client library and the batch size for the call.

Transaction.migrate supports the following payment processors:

  • Chase Paymentech
  • Merchant e-Solutions
  • Litle & Co.
  • PayPal

Transaction.migrate supports the following payment methods:

  • Credit Card
  • PayPal


srd: sparse response description, a SOAP string (which must be a JSON object), in which you specify the elements you want returned.This parameter enables the calling system to constrain a method call to return only components you specify. This gives you greater control over returned content, and improves response time within the Vindicia platform by reducing the processing needed for the call.

Some fields are required, either practically or in the WSDL, and will be returned regardless of the srd. A null srd returns the complete response.

migrationTransactions: an array of migrationTransaction objects to import to Vindicia Subscribe.

Note While this method uses the same migrationTransaction subobject as the AutoBill.migrate method, the two methods require that different data members be populated. 

Do not populate the following migrationTransaction data members for the Transaction.migrate call:

  • autoBillCycle
  • billingPlanCycle
  • merchantBillingPlanId

Do not populate the following migrationTransactionItem data member for the Transaction.migrate call:

  • merchantAutoBillItemId


return: an object of type Return that indicates the success or failure of the call.

response: an array of TransactionValidationResponse objects.


When you migrate a batch of Transactions, a return code of 200 means that Vindicia Subscribe has received your data and queued it for processing. During this process, if Vindicia Subscribe discovers problems with the data that prevent it from being added to the Vindicia Subscribe database, Vindicia Subscribe attempts to correct the data. If the attempt fails, Vindicia Subscribe will ask you to correct the errors and might request that you report the data again.

The Return object also contains an attribute called soapId. For the migrate call to succeed, you must log the value of soapId. If, for some reason, the migrated Transactions do not make it into the Vindicia Subscribe database, provide the soapId value to Vindicia Subscribe to facilitate tracking of your batch in the Vindicia Subscribe system.

In addition to those listed in Standard Return Codes, this call returns:

Return Code

Return String



One of the following:

  • Unable to save transactions: error-description.
    This code is returned if an error occurs in the processing of a transaction and it is the only transaction in the batch.
  • One or more Transaction migrations failed.
  • Error descriptions provided in TransactionValidationResponse (contained in the response array of the return).
  • Invalid field(s) for non-recurring Transaction Migration: (invalid fields)
    • Invalid MigrationTransaction fields(when calling Transaction.migrate): autoBillCycle, merchantBillingPlanId, billingPlanCycle, billingDate, retryNumber.
    • Invalid MigrationTransactionItem fields (when calling Transaction.migrate): servicePeriodStartDate, servicePeriodEndDate, merchantAutoBillItemId.
  • Unable to prepare transaction for migration: error.
    (Details provided in common AutoBill.migrate/Transaction.migrate messages.)
  • MigrationTransaction not provided.
  • Invalid paymentProcessor: paymentProcessor.
  • MigrationTransaction must include at least one statusLog record.
  • Failed to convert salesTaxAddress.
  • Attempt to migrate Transaction which already exists.
  • Unsupported Payment Type: paymentType.
  • Failed to prepare auth_response for Migrated Transactions.
  • Unable to determine currency for migrated Transaction.
  • Calculated Transaction amount (XXX.XX) does not match input amount (YYY.YY) on migrated Transaction.


//To migrate a Transaction that has been processed via an external system
//Create the customer account objects

my $address = new Address();
$address->setAddr1('11235 Fibonacci St.');
$address->setCity('San Mateo');
$address->setName('Forest Chump');
$address->setPhone('(650) 555-1212x42');

my $creditCard = new CreditCard();

my $paymentMethod = new PaymentMethod();
$paymentMethod->setAccountHolderName('Forest Chump');

my $account = new Account();
$account->setName('Forest Chump');

//Create the Transaction objects

$taxItemA = new MigrationTaxItem();
$taxItemA->setName('SALES TAX');

$taxItemB = new MigrationTaxItem();
$taxItemB->setName('CA DISTRICT SALES TAX');

$txItem = new MigrationTransactionItem();
$txItem->setMigrationTaxItems(array($taxItemA, $taxItemB));
$txItem->setName('ONE TIME CHARGE');

// This should be the Avalara tax code associated with this product

$creditCardStatusA = new CreditCardStatus();
$statusLogA = new TransactionStatus();

$creditCardStatusB = new CreditCardStatus();
$statusLogB = new TransactionStatus();

$statusLogC = new TransactionStatus();

$migrationTransaction = new MigrationTransaction();
$migrationTransaction->setStatusLog(array($statusLogA, $statusLogB, $statusLogC));

//Migrate Transaction into Vindicia Subscribe

$response = $transaction->migrate(array($migrationTransaction));
if($response['returnCode'] == 200)

//Transaction(s) migrated successfully


//One or more Transaction migrations failed.
//Rummage through the TransactionValidationResponse objects
//in the $response to determine the source of the problem(s)


For Users

Learn More
For Users

Vindicia Subscribe Features

Learn More
Vindicia Subscribe Features
Back to Top