PaySecure Pinless Web Services 2023:07:03:07

<back to all web services

AchReverseRequest

The following routes are available for this service:
POST/ACHReverse
import 'package:servicestack/servicestack.dart';

class RequestorCredentials implements IConvertible
{
    // @Required()
    String? MerchantId;

    // @Required()
    String? UserName;

    // @Required()
    String? Password;

    // @Required()
    String? Version;

    RequestorCredentials({this.MerchantId,this.UserName,this.Password,this.Version});
    RequestorCredentials.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        MerchantId = json['MerchantId'];
        UserName = json['UserName'];
        Password = json['Password'];
        Version = json['Version'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'MerchantId': MerchantId,
        'UserName': UserName,
        'Password': Password,
        'Version': Version
    };

    getTypeName() => "RequestorCredentials";
    TypeContext? context = _ctx;
}

enum OriginalDataType
{
    TransactionId,
    ReferenceKey,
    ExternalId,
    InternalTransactionId,
}

class OriginalTransaction implements IConvertible
{
    OriginalDataType? OriginalIdentifierType;
    String? OriginalDataIdentifier;

    OriginalTransaction({this.OriginalIdentifierType,this.OriginalDataIdentifier});
    OriginalTransaction.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        OriginalIdentifierType = JsonConverters.fromJson(json['OriginalIdentifierType'],'OriginalDataType',context!);
        OriginalDataIdentifier = json['OriginalDataIdentifier'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'OriginalIdentifierType': JsonConverters.toJson(OriginalIdentifierType,'OriginalDataType',context!),
        'OriginalDataIdentifier': OriginalDataIdentifier
    };

    getTypeName() => "OriginalTransaction";
    TypeContext? context = _ctx;
}

class MerchantDataElements implements IConvertible
{
    int? RefundSettlementTypeDetails;
    bool? SendRecurringPOSEntryModeFeature;
    bool? UseOrgPOSCode;

    MerchantDataElements({this.RefundSettlementTypeDetails,this.SendRecurringPOSEntryModeFeature,this.UseOrgPOSCode});
    MerchantDataElements.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RefundSettlementTypeDetails = json['RefundSettlementTypeDetails'];
        SendRecurringPOSEntryModeFeature = json['SendRecurringPOSEntryModeFeature'];
        UseOrgPOSCode = json['UseOrgPOSCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RefundSettlementTypeDetails': RefundSettlementTypeDetails,
        'SendRecurringPOSEntryModeFeature': SendRecurringPOSEntryModeFeature,
        'UseOrgPOSCode': UseOrgPOSCode
    };

    getTypeName() => "MerchantDataElements";
    TypeContext? context = _ctx;
}

abstract class MerchantDescriptorBase
{
    MerchantDataElements? DataElements;

    MerchantDescriptorBase({this.DataElements});
    MerchantDescriptorBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DataElements = JsonConverters.fromJson(json['DataElements'],'MerchantDataElements',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DataElements': JsonConverters.toJson(DataElements,'MerchantDataElements',context!)
    };

    getTypeName() => "MerchantDescriptorBase";
    TypeContext? context = _ctx;
}

class MerchantDescriptor extends MerchantDescriptorBase implements IConvertible
{
    String? Name;
    String? Address;
    String? City;
    String? State;
    String? Zip;
    String? Country;
    String? CustomerServiceNumber;
    String? MCC;
    String? FNSnum;
    String? Email;

    MerchantDescriptor({this.Name,this.Address,this.City,this.State,this.Zip,this.Country,this.CustomerServiceNumber,this.MCC,this.FNSnum,this.Email});
    MerchantDescriptor.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Address = json['Address'];
        City = json['City'];
        State = json['State'];
        Zip = json['Zip'];
        Country = json['Country'];
        CustomerServiceNumber = json['CustomerServiceNumber'];
        MCC = json['MCC'];
        FNSnum = json['FNSnum'];
        Email = json['Email'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Address': Address,
        'City': City,
        'State': State,
        'Zip': Zip,
        'Country': Country,
        'CustomerServiceNumber': CustomerServiceNumber,
        'MCC': MCC,
        'FNSnum': FNSnum,
        'Email': Email
    });

    getTypeName() => "MerchantDescriptor";
    TypeContext? context = _ctx;
}

// @DataContract
class ACHExtendedData implements IConvertible
{
    // @DataMember
    int? CashbackAmount;

    // @DataMember
    String? ConnectPaySubScriberId;

    // @DataMember
    String? OrganizationId;

    // @DataMember
    String? DeviceFingerPrint;

    // @DataMember
    String? MerchantSessionId;

    // @DataMember
    String? CurrencyCode;

    // @DataMember
    String? PaymentType;

    // @DataMember
    bool? VerifyCustomer;

    // @DataMember
    String? CustomerExternalId;

    // @DataMember
    String? Description;

    // @DataMember
    String? CustomerName;

    // @DataMember
    String? AddressLine1;

    // @DataMember
    String? AddressLine2;

    // @DataMember
    String? City;

    // @DataMember
    String? State;

    // @DataMember
    String? Zip;

    // @DataMember
    String? Country;

    // @DataMember
    String? Email;

    // @DataMember
    String? TelephoneNumber;

    // @DataMember
    String? ReturnUrl;

    // @DataMember
    String? CancelUrl;

    // @DataMember
    String? EstablishData;

    // @DataMember
    String? RedirectUrl;

    // @DataMember
    int? RetryAttemptCount;

    // @DataMember
    String? SignatureHashVersion;

    // @DataMember
    DateTime? DeadlineHashDate;

    ACHExtendedData({this.CashbackAmount,this.ConnectPaySubScriberId,this.OrganizationId,this.DeviceFingerPrint,this.MerchantSessionId,this.CurrencyCode,this.PaymentType,this.VerifyCustomer,this.CustomerExternalId,this.Description,this.CustomerName,this.AddressLine1,this.AddressLine2,this.City,this.State,this.Zip,this.Country,this.Email,this.TelephoneNumber,this.ReturnUrl,this.CancelUrl,this.EstablishData,this.RedirectUrl,this.RetryAttemptCount,this.SignatureHashVersion,this.DeadlineHashDate});
    ACHExtendedData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CashbackAmount = json['CashbackAmount'];
        ConnectPaySubScriberId = json['ConnectPaySubScriberId'];
        OrganizationId = json['OrganizationId'];
        DeviceFingerPrint = json['DeviceFingerPrint'];
        MerchantSessionId = json['MerchantSessionId'];
        CurrencyCode = json['CurrencyCode'];
        PaymentType = json['PaymentType'];
        VerifyCustomer = json['VerifyCustomer'];
        CustomerExternalId = json['CustomerExternalId'];
        Description = json['Description'];
        CustomerName = json['CustomerName'];
        AddressLine1 = json['AddressLine1'];
        AddressLine2 = json['AddressLine2'];
        City = json['City'];
        State = json['State'];
        Zip = json['Zip'];
        Country = json['Country'];
        Email = json['Email'];
        TelephoneNumber = json['TelephoneNumber'];
        ReturnUrl = json['ReturnUrl'];
        CancelUrl = json['CancelUrl'];
        EstablishData = json['EstablishData'];
        RedirectUrl = json['RedirectUrl'];
        RetryAttemptCount = json['RetryAttemptCount'];
        SignatureHashVersion = json['SignatureHashVersion'];
        DeadlineHashDate = JsonConverters.fromJson(json['DeadlineHashDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CashbackAmount': CashbackAmount,
        'ConnectPaySubScriberId': ConnectPaySubScriberId,
        'OrganizationId': OrganizationId,
        'DeviceFingerPrint': DeviceFingerPrint,
        'MerchantSessionId': MerchantSessionId,
        'CurrencyCode': CurrencyCode,
        'PaymentType': PaymentType,
        'VerifyCustomer': VerifyCustomer,
        'CustomerExternalId': CustomerExternalId,
        'Description': Description,
        'CustomerName': CustomerName,
        'AddressLine1': AddressLine1,
        'AddressLine2': AddressLine2,
        'City': City,
        'State': State,
        'Zip': Zip,
        'Country': Country,
        'Email': Email,
        'TelephoneNumber': TelephoneNumber,
        'ReturnUrl': ReturnUrl,
        'CancelUrl': CancelUrl,
        'EstablishData': EstablishData,
        'RedirectUrl': RedirectUrl,
        'RetryAttemptCount': RetryAttemptCount,
        'SignatureHashVersion': SignatureHashVersion,
        'DeadlineHashDate': JsonConverters.toJson(DeadlineHashDate,'DateTime',context!)
    };

    getTypeName() => "ACHExtendedData";
    TypeContext? context = _ctx;
}

// @DataContract
class AchReverseRequest implements IConvertible
{
    // @DataMember
    RequestorCredentials? Credentials;

    // @DataMember
    OriginalTransaction? OriginalData;

    // @DataMember
    String? ReferenceKey;

    // @DataMember
    MerchantDescriptor? MerchantDetails;

    // @DataMember
    String? Custom1;

    // @DataMember
    String? Custom2;

    // @DataMember
    String? Custom3;

    // @DataMember
    String? Custom4;

    // @DataMember
    String? Custom5;

    // @DataMember
    String? SignatureHash;

    // @DataMember
    ACHExtendedData? ExtendedData;

    AchReverseRequest({this.Credentials,this.OriginalData,this.ReferenceKey,this.MerchantDetails,this.Custom1,this.Custom2,this.Custom3,this.Custom4,this.Custom5,this.SignatureHash,this.ExtendedData});
    AchReverseRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Credentials = JsonConverters.fromJson(json['Credentials'],'RequestorCredentials',context!);
        OriginalData = JsonConverters.fromJson(json['OriginalData'],'OriginalTransaction',context!);
        ReferenceKey = json['ReferenceKey'];
        MerchantDetails = JsonConverters.fromJson(json['MerchantDetails'],'MerchantDescriptor',context!);
        Custom1 = json['Custom1'];
        Custom2 = json['Custom2'];
        Custom3 = json['Custom3'];
        Custom4 = json['Custom4'];
        Custom5 = json['Custom5'];
        SignatureHash = json['SignatureHash'];
        ExtendedData = JsonConverters.fromJson(json['ExtendedData'],'ACHExtendedData',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Credentials': JsonConverters.toJson(Credentials,'RequestorCredentials',context!),
        'OriginalData': JsonConverters.toJson(OriginalData,'OriginalTransaction',context!),
        'ReferenceKey': ReferenceKey,
        'MerchantDetails': JsonConverters.toJson(MerchantDetails,'MerchantDescriptor',context!),
        'Custom1': Custom1,
        'Custom2': Custom2,
        'Custom3': Custom3,
        'Custom4': Custom4,
        'Custom5': Custom5,
        'SignatureHash': SignatureHash,
        'ExtendedData': JsonConverters.toJson(ExtendedData,'ACHExtendedData',context!)
    };

    getTypeName() => "AchReverseRequest";
    TypeContext? context = _ctx;
}

// @DataContract
class InOutTimes implements IConvertible
{
    InOutTimes();
    InOutTimes.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "InOutTimes";
    TypeContext? context = _ctx;
}

// @DataContract
class RequestTimestamps implements IConvertible
{
    // @DataMember(EmitDefaultValue=false)
    InOutTimes? AppLayer;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? ParentLookup;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? RetryLookup;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? GetCardData;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? CardTokenize;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? CardEncrypt;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? DBInsert;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? BackendProcess;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? DBUpdate;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? ParentUpdate;

    // @DataMember(EmitDefaultValue=false)
    InOutTimes? Network;

    RequestTimestamps({this.AppLayer,this.ParentLookup,this.RetryLookup,this.GetCardData,this.CardTokenize,this.CardEncrypt,this.DBInsert,this.BackendProcess,this.DBUpdate,this.ParentUpdate,this.Network});
    RequestTimestamps.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AppLayer = JsonConverters.fromJson(json['AppLayer'],'InOutTimes',context!);
        ParentLookup = JsonConverters.fromJson(json['ParentLookup'],'InOutTimes',context!);
        RetryLookup = JsonConverters.fromJson(json['RetryLookup'],'InOutTimes',context!);
        GetCardData = JsonConverters.fromJson(json['GetCardData'],'InOutTimes',context!);
        CardTokenize = JsonConverters.fromJson(json['CardTokenize'],'InOutTimes',context!);
        CardEncrypt = JsonConverters.fromJson(json['CardEncrypt'],'InOutTimes',context!);
        DBInsert = JsonConverters.fromJson(json['DBInsert'],'InOutTimes',context!);
        BackendProcess = JsonConverters.fromJson(json['BackendProcess'],'InOutTimes',context!);
        DBUpdate = JsonConverters.fromJson(json['DBUpdate'],'InOutTimes',context!);
        ParentUpdate = JsonConverters.fromJson(json['ParentUpdate'],'InOutTimes',context!);
        Network = JsonConverters.fromJson(json['Network'],'InOutTimes',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AppLayer': JsonConverters.toJson(AppLayer,'InOutTimes',context!),
        'ParentLookup': JsonConverters.toJson(ParentLookup,'InOutTimes',context!),
        'RetryLookup': JsonConverters.toJson(RetryLookup,'InOutTimes',context!),
        'GetCardData': JsonConverters.toJson(GetCardData,'InOutTimes',context!),
        'CardTokenize': JsonConverters.toJson(CardTokenize,'InOutTimes',context!),
        'CardEncrypt': JsonConverters.toJson(CardEncrypt,'InOutTimes',context!),
        'DBInsert': JsonConverters.toJson(DBInsert,'InOutTimes',context!),
        'BackendProcess': JsonConverters.toJson(BackendProcess,'InOutTimes',context!),
        'DBUpdate': JsonConverters.toJson(DBUpdate,'InOutTimes',context!),
        'ParentUpdate': JsonConverters.toJson(ParentUpdate,'InOutTimes',context!),
        'Network': JsonConverters.toJson(Network,'InOutTimes',context!)
    };

    getTypeName() => "RequestTimestamps";
    TypeContext? context = _ctx;
}

// @DataContract
class PaysecureResponseInternal implements IConvertible
{
    // @DataMember(EmitDefaultValue=false)
    RequestTimestamps? Timestamps;

    PaysecureResponseInternal({this.Timestamps});
    PaysecureResponseInternal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Timestamps = JsonConverters.fromJson(json['Timestamps'],'RequestTimestamps',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Timestamps': JsonConverters.toJson(Timestamps,'RequestTimestamps',context!)
    };

    getTypeName() => "PaysecureResponseInternal";
    TypeContext? context = _ctx;
}

// @DataContract
class ACHExtendedDataResponse implements IConvertible
{
    // @DataMember(EmitDefaultValue=false)
    String? NetworkResponseCode;

    // @DataMember(EmitDefaultValue=false)
    String? NetworkErrorCode;

    // @DataMember(EmitDefaultValue=false)
    String? DeclineReferenceCode;

    // @DataMember(EmitDefaultValue=false)
    String? NetworkTransactionId;

    ACHExtendedDataResponse({this.NetworkResponseCode,this.NetworkErrorCode,this.DeclineReferenceCode,this.NetworkTransactionId});
    ACHExtendedDataResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        NetworkResponseCode = json['NetworkResponseCode'];
        NetworkErrorCode = json['NetworkErrorCode'];
        DeclineReferenceCode = json['DeclineReferenceCode'];
        NetworkTransactionId = json['NetworkTransactionId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'NetworkResponseCode': NetworkResponseCode,
        'NetworkErrorCode': NetworkErrorCode,
        'DeclineReferenceCode': DeclineReferenceCode,
        'NetworkTransactionId': NetworkTransactionId
    };

    getTypeName() => "ACHExtendedDataResponse";
    TypeContext? context = _ctx;
}

// @DataContract
class AchPaysecureVersion extends PaysecureResponseInternal implements IConvertible
{
    // @DataMember(EmitDefaultValue=false)
    String? LocalDateTime;

    // @DataMember(EmitDefaultValue=false)
    ACHExtendedDataResponse? ExtendedData;

    AchPaysecureVersion({this.LocalDateTime,this.ExtendedData});
    AchPaysecureVersion.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        LocalDateTime = json['LocalDateTime'];
        ExtendedData = JsonConverters.fromJson(json['ExtendedData'],'ACHExtendedDataResponse',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'LocalDateTime': LocalDateTime,
        'ExtendedData': JsonConverters.toJson(ExtendedData,'ACHExtendedDataResponse',context!)
    });

    getTypeName() => "AchPaysecureVersion";
    TypeContext? context = _ctx;
}

// @DataContract
class AchProviderResponse implements IConvertible
{
    // @DataMember
    String? NetworkResponseCode;

    // @DataMember
    int? TransactionStatusCode;

    AchProviderResponse({this.NetworkResponseCode,this.TransactionStatusCode});
    AchProviderResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        NetworkResponseCode = json['NetworkResponseCode'];
        TransactionStatusCode = json['TransactionStatusCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'NetworkResponseCode': NetworkResponseCode,
        'TransactionStatusCode': TransactionStatusCode
    };

    getTypeName() => "AchProviderResponse";
    TypeContext? context = _ctx;
}

// @DataContract
class AchReverse extends AchPaysecureVersion implements IConvertible
{
    // @DataMember
    String? TranId;

    // @DataMember
    String? ResponseCode;

    // @DataMember
    String? ErrorMessage;

    // @DataMember
    String? ErrorCode;

    // @DataMember(EmitDefaultValue=false)
    AchProviderResponse? AchProviderDetails;

    AchReverse({this.TranId,this.ResponseCode,this.ErrorMessage,this.ErrorCode,this.AchProviderDetails});
    AchReverse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        TranId = json['TranId'];
        ResponseCode = json['ResponseCode'];
        ErrorMessage = json['ErrorMessage'];
        ErrorCode = json['ErrorCode'];
        AchProviderDetails = JsonConverters.fromJson(json['AchProviderDetails'],'AchProviderResponse',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'TranId': TranId,
        'ResponseCode': ResponseCode,
        'ErrorMessage': ErrorMessage,
        'ErrorCode': ErrorCode,
        'AchProviderDetails': JsonConverters.toJson(AchProviderDetails,'AchProviderResponse',context!)
    });

    getTypeName() => "AchReverse";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'api.paysecure.acculynk.net', types: <String, TypeInfo> {
    'RequestorCredentials': TypeInfo(TypeOf.Class, create:() => RequestorCredentials()),
    'OriginalDataType': TypeInfo(TypeOf.Enum, enumValues:OriginalDataType.values),
    'OriginalTransaction': TypeInfo(TypeOf.Class, create:() => OriginalTransaction()),
    'MerchantDataElements': TypeInfo(TypeOf.Class, create:() => MerchantDataElements()),
    'MerchantDescriptorBase': TypeInfo(TypeOf.AbstractClass),
    'MerchantDescriptor': TypeInfo(TypeOf.Class, create:() => MerchantDescriptor()),
    'ACHExtendedData': TypeInfo(TypeOf.Class, create:() => ACHExtendedData()),
    'AchReverseRequest': TypeInfo(TypeOf.Class, create:() => AchReverseRequest()),
    'InOutTimes': TypeInfo(TypeOf.Class, create:() => InOutTimes()),
    'RequestTimestamps': TypeInfo(TypeOf.Class, create:() => RequestTimestamps()),
    'PaysecureResponseInternal': TypeInfo(TypeOf.Class, create:() => PaysecureResponseInternal()),
    'ACHExtendedDataResponse': TypeInfo(TypeOf.Class, create:() => ACHExtendedDataResponse()),
    'AchPaysecureVersion': TypeInfo(TypeOf.Class, create:() => AchPaysecureVersion()),
    'AchProviderResponse': TypeInfo(TypeOf.Class, create:() => AchProviderResponse()),
    'AchReverse': TypeInfo(TypeOf.Class, create:() => AchReverse()),
});

Dart AchReverseRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /ACHReverse HTTP/1.1 
Host: api.paysecure.acculynk.net 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<AchReverseRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
  <Credentials>
    <MerchantId>String</MerchantId>
    <Password>String</Password>
    <UserName>String</UserName>
    <Version>String</Version>
  </Credentials>
  <Custom1>String</Custom1>
  <Custom2>String</Custom2>
  <Custom3>String</Custom3>
  <Custom4>String</Custom4>
  <Custom5>String</Custom5>
  <ExtendedData>
    <AddressLine1>String</AddressLine1>
    <AddressLine2>String</AddressLine2>
    <CancelUrl>String</CancelUrl>
    <CashbackAmount>0</CashbackAmount>
    <City>String</City>
    <ConnectPaySubScriberId>String</ConnectPaySubScriberId>
    <Country>String</Country>
    <CurrencyCode>String</CurrencyCode>
    <CustomerExternalId>String</CustomerExternalId>
    <CustomerName>String</CustomerName>
    <DeadlineHashDate>0001-01-01T00:00:00</DeadlineHashDate>
    <Description>String</Description>
    <DeviceFingerPrint>String</DeviceFingerPrint>
    <Email>String</Email>
    <EstablishData>String</EstablishData>
    <MerchantSessionId>String</MerchantSessionId>
    <OrganizationId>String</OrganizationId>
    <PaymentType>String</PaymentType>
    <RedirectUrl>String</RedirectUrl>
    <RetryAttemptCount>0</RetryAttemptCount>
    <ReturnUrl>String</ReturnUrl>
    <SignatureHashVersion>String</SignatureHashVersion>
    <State>String</State>
    <TelephoneNumber>String</TelephoneNumber>
    <VerifyCustomer>false</VerifyCustomer>
    <Zip>String</Zip>
  </ExtendedData>
  <MerchantDetails>
    <DataElements>
      <RefundSettlementTypeDetails>0</RefundSettlementTypeDetails>
      <SendRecurringPOSEntryModeFeature>false</SendRecurringPOSEntryModeFeature>
      <UseOrgPOSCode>false</UseOrgPOSCode>
    </DataElements>
    <Address>String</Address>
    <City>String</City>
    <Country>String</Country>
    <CustomerServiceNumber>String</CustomerServiceNumber>
    <Email>String</Email>
    <FNSnum>String</FNSnum>
    <MCC>String</MCC>
    <Name>String</Name>
    <State>String</State>
    <Zip>String</Zip>
  </MerchantDetails>
  <OriginalData>
    <OriginalDataIdentifier>String</OriginalDataIdentifier>
    <OriginalIdentifierType>TransactionId</OriginalIdentifierType>
  </OriginalData>
  <ReferenceKey>String</ReferenceKey>
  <SignatureHash>String</SignatureHash>
</AchReverseRequest>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<AchReverse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
  <Timestamps>
    <AppLayer>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </AppLayer>
    <BackendProcess>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </BackendProcess>
    <CardEncrypt>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </CardEncrypt>
    <CardTokenize>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </CardTokenize>
    <DBInsert>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </DBInsert>
    <DBUpdate>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </DBUpdate>
    <GetCardData>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </GetCardData>
    <Network>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </Network>
    <ParentLookup>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </ParentLookup>
    <ParentUpdate>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </ParentUpdate>
    <RetryLookup>
      <InTime>0001-01-01T00:00:00</InTime>
      <OutTime>0001-01-01T00:00:00</OutTime>
    </RetryLookup>
  </Timestamps>
  <ExtendedData>
    <DeclineReferenceCode>String</DeclineReferenceCode>
    <NetworkErrorCode>String</NetworkErrorCode>
    <NetworkResponseCode>String</NetworkResponseCode>
    <NetworkTransactionId>String</NetworkTransactionId>
  </ExtendedData>
  <LocalDateTime>String</LocalDateTime>
  <AchProviderDetails>
    <NetworkResponseCode>String</NetworkResponseCode>
    <TransactionStatusCode>0</TransactionStatusCode>
  </AchProviderDetails>
  <ErrorCode>String</ErrorCode>
  <ErrorMessage>String</ErrorMessage>
  <ResponseCode>String</ResponseCode>
  <TranId>String</TranId>
</AchReverse>