> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wegive.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Worldpay Payment Transaction Error Codes

> WeGive Help Center article: Worldpay Payment Transaction Error Codes

<Warning>
  **This article previously described the wrong API.** The prior version of this page documented
  Worldpay's legacy Litle & Co / Vantiv eCommerce gateway (XML `<response>`/`<message>` elements,
  `cnpTxnId`, three-digit response codes like `000`/`350`/`555`, SEPA Direct Debit, PayPal/PayPal
  Credit, Account Updater, lodging/hotel MCC rules). **None of that applies to WeGive.** WeGive's
  actual "Worldpay" integration is the **Payrix** processor (Worldpay acquired Payrix, and Payrix's
  own API docs now live under `docs.worldpay.com`), which uses a completely different transaction
  model — a single-digit numeric status plus a separate result-code lookup, not XML response codes.
  If you were looking up a three-digit code like the ones in the old version of this page for an
  actual WeGive transaction, **that code cannot occur in WeGive's system** — it belongs to a gateway
  WeGive doesn't use.
</Warning>

## How WeGive's Payrix integration actually reports transaction status

WeGive polls Payrix for each transaction's status via the PayrixPHP SDK (`app/Processors/Payrix.php`,
confirmed 2026-10-01). There is no XML response/message pair — the two fields that matter are:

### 1. The numeric `status` field

A single-digit numeric status (not the three-digit codes described in the old version of this
article):

| Status | Meaning |
| - | - |
| `0` | Pending |
| `1` | Approved or Declined — disambiguated by a separate `approved` flag (non-zero = approved, `0` = declined) |
| `2` | Failed |
| `3` | Captured |
| `4` | Settled |
| `5` | Returned |

WeGive maps these onto its own transaction statuses roughly as follows:

* **Settled**, or **Captured/Approved on a card transaction** → WeGive marks the transaction **Success**.
* **Failed**, **Returned**, or **Declined** → WeGive marks the transaction **Failed**, and attempts to
  pull a human-readable error message (see below).
* **Pending**, or **Captured/Approved on a non-card (ACH) transaction** → WeGive leaves the transaction
  in its current (still-processing) status, since ACH settlement takes additional time.
* A **refunded** transaction (Payrix reports a non-zero `refunded` amount) is marked **Refunded**
  regardless of the numeric status.

### 2. The `txnResults` result code

When a transaction fails, is returned, or is declined, WeGive makes a second API call
(`getTransactionResults()`) to Payrix's `txnResults` resource, which returns:

* **`code`** — a numeric result code
* **`message`** — a human-readable description (this is what WeGive stores as the transaction's
  error message and what you'll see in the dashboard)
* **`bankCode`** / **`originalCode`** — additional processor-level codes, not currently surfaced
  in the WeGive dashboard

WeGive stores the `message` field directly as the transaction's error text, so **the error message
you see on a failed WeGive transaction is Payrix's own wording** — there's no WeGive-side remapping
or translation layer to introduce discrepancies.

## Where to look up what a specific code means

This article doesn't attempt to reproduce Payrix's full `txnResults` code catalog, since it isn't
vendored into WeGive's codebase and is subject to change on Payrix's end. For the authoritative,
up-to-date list of `txnResults` codes and messages, see Payrix's own API reference:

* [Payrix API docs — Transaction Response structures](https://docs.worldpay.com/api-specification/payrix/partner#/rest/welcome-to-payrix-pro/models/structures/terminal-txns-response)

## What to do with a failed transaction in WeGive

1. Open the transaction in the dashboard and check the **error message** field — this is Payrix's
   `txnResults.message` and is usually enough to understand the decline reason (card declined,
   insufficient funds, invalid account, etc.) without needing the full code reference.
2. If the message isn't clear, or you need the specific numeric `code`/`bankCode` for an escalation
   to Payrix, contact WeGive Support — the full result object isn't currently exposed in the
   dashboard UI.
3. For a donor-facing explanation of a card decline, general categories like "insufficient funds,"
   "card expired," or "do not honor — contact your bank" are safe to communicate without needing
   the exact Payrix code.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.