Response Codes

Understanding Response Codes & Approvals

When integrating with the E-xact Gateway, the most critical step is accurately reading the response to determine if a transaction was approved, declined, or resulted in an error.

🚧

The E-xact gateway does not return boolean values (true or false) for transaction approvals. Depending on your integration method, you will receive integers (1 or 0) or specific strings ("YES", "1").


Quick Reference: The "Source of Truth" Matrix

Because response payloads differ based on how you connect to the gateway, use this table to find the primary approval field for your specific integration.

Integration MethodPayload FormatPrimary Approval FieldValue for Approval
Transaction APIJSONtransaction_approved1 (Integer)
HCO: Silent Post, Relay Response, & AUTO POSTURL-Encoded StringTransaction_Approved"YES" (String)
HCO: POST, GET, & AUTO GETURL-Encoded / Query Stringx_response_code1 (String)

1. API Integrations

For API calls, the gateway uses Integers (1 or 0) to indicate success alongside supplementary text strings.

To confidently confirm an approval in your code, evaluate the following key-value pairs:

  • transaction_approved: 1 (1 = Approved, 0 = Declined)
  • transaction_error: 0 (0 = No Error, 1 = Error)
  • exact_resp_code: "00" (Indicates "Transaction Normal")
📘

Note on Bank Response Codes:

The bank_resp_code variable contains the raw response from the acquiring bank. Do not use this to check for approvals. Because the gateway connects to multiple processors, the approval code varies (e.g., "000", "00", "027"). Always rely on transaction_approved instead.

Example API Approved Response (JSON):

{
    "transaction_error": 0,
    "transaction_approved": 1,
    "exact_resp_code": "00",
    "exact_message": "Transaction Normal",
    "bank_resp_code": "000",
    "bank_message": "Approved"
}

2. Hosted Checkout (HCO): Silent Post, Relay Response, & AUTO POST

If you have configured your HCO Receipt Page Settings to use the Silent Post, Relay Response (server-to-server), or the AUTO POST redirect method, the gateway returns our most comprehensive dataset. It includes both standard Authorize.net emulation fields and proprietary E-xact fields.

To verify an approval using these "full payload" methods, rely on the E-xact specific fields:

  • Transaction_Approved: "YES" (String value "YES")
  • Transaction_Error: "false" (String value "false")

Example String Snippet (Approved):

x_response_code=1&x_response_reason_text=Transaction+has+been+approved&Transaction_Approved=YES&Transaction_Error=false&EXact_Resp_Code=00

3. Hosted Checkout (HCO): POST, GET, & AUTO GET

If your HCO Receipt Page Settings are configured to rely on standard POST, GET, or AUTO GET methods to return the customer to your website, the payload structure is shorter to optimize the browser redirect.

Important Note: These standard redirect payloads return ONLY the Authorize.net emulation fields. The proprietary E-xact fields (like Transaction_Approved=YES) are intentionally omitted from these payloads.

To verify an approval via POST, GET, or AUTO GET, you must rely on the x_ variables:

  • x_response_code: 1 (1 = Approved, 2 = Declined, 3 = Error)
  • x_response_reason_code: 1

Example Standard Redirect Snippet (Approved):

x_response_code=1&x_response_subcode=S&x_response_reason_code=1&x_response_reason_text=Transaction+has+been+approved&x_auth_code=ET127728

Understanding Secondary Codes

While the fields listed above are your primary "Source of Truth" for determining if a transaction is approved, you will also see secondary codes that provide more context—especially useful for logging declines or errors.

  • exact_resp_code (or EXact_Resp_Code): This is the gateway's internal system code. "00" always means the gateway successfully processed the request without technical failure.
  • bank_resp_code (or Bank_Resp_Code): This is the actual code returned by the acquiring bank network. "000" indicates a standard approval. Other codes (e.g., "051") represent specific bank declines like "Insufficient Funds."

E-xact Response Code (exact_resp_code or EXact_Resp_Code)

This is the internal code generated by the gateway. It is consistent regardless of which processor you use.

CodeMeaning
00Transaction Normal
08CVV2/Data Not Verified
12Message Timed-Out at Host
22Invalid Card Number
25Invalid Expiry Date
34Card Volume Exceeded
35Maximum Sale Exceeded
36Below Minimum Sale
38IP Volume Exceeded
44Address not Verified
77Reversal Complete
79Reversal Sent to Bank
93Invalid Authorization Num entered on pre-auth completion

Bank Response Code (bank_resp_code or Bank_Resp_Code)

This field contains the raw response from the processor. Use these only for logging or displaying detailed error messages.

TSYS

TSYS uses standard ISO 8583 2-digit response codes.

  • Success: 00 is the standard approval.
  • Declines: Specific codes indicating the exact reason.
CodeCategoryMeaning
00ApprovedSuccess
51DeclineInsufficient Funds
05DeclineDo Not Honor
54DeclineExpired Card
62DeclineRestricted Card

Chase (Paymentech)

Chase uses a categorizing system where codes are grouped by "Type" of error.

  • Success: 000 is the standard approval.
  • Declines: In the 200 range.
CodeCategoryMeaning
000ApprovedSuccess.
200 - 299DeclineDecline (e.g., 201 = Insufficient Funds).

Moneris

Moneris uses a specific Range-Based system.

  • Success: Any code between 001 and 049.
  • Declines: Any code 050 or higher.
Code RangeCategoryMeaning
001 - 049ApprovedSuccess (e.g., 027 is the common Moneris approval).
050 - 999DeclineDeclined (050 is generic, others are specific).
NULL / EmptyErrorIf empty, check exact_resp_code for gateway errors.

Fiserv (First Data)

Fiserv codes can vary by platform, but they generally use a mix of 2-digit and 3-digit codes.

  • Success: 00 is the standard approval.
  • Declines: Often fall into the 100 or 200 series.
CodeCategoryMeaning
00ApprovedSuccess.
110Soft DeclineInsufficient Funds (common on some platforms).
303ErrorGeneric System Error.
500+ErrorFormatting/System errors.