Error Codes

Applies to: PayPlus REST API v2.1 Last updated: March 2026

This page documents all error codes returned by the PayPlus REST API. Errors are returned as JSON objects in the error field of the response envelope. Use the code field to identify and handle specific error conditions programmatically.

HTTP Status Codes

HTTP StatusMeaningTypical Cause
200 OK Request succeeded Used for synchronous operations that return data (GET requests; synchronous instant payment initiation)
201 Created Resource created successfully ACH payment initiated; webhook registered
202 Accepted Request accepted for asynchronous processing Wire transfer accepted (settlement via webhook); RfP sent; ACH batch submitted
400 Bad Request Invalid request format or parameters Missing required field, invalid field value, malformed JSON, invalid routing number
401 Unauthorized Authentication failed or missing Missing Authorization header, expired access token, invalid API key
403 Forbidden Authenticated but not authorized OAuth scope does not permit the requested operation; API client restricted from the specified rail
404 Not Found Resource not found Payment ID does not exist; return details requested for a payment that has not been returned
409 Conflict Duplicate request conflict Same idempotency key used with different request parameters
422 Unprocessable Entity Business rule validation failed Payment exceeds rail limit, SDA payment above $1M, effective date is not a business day
429 Too Many Requests Rate limit exceeded More than 120 requests per minute from the same API client
500 Internal Server Error PayPlus internal error Unexpected server error. Retry with exponential backoff. If persistent, contact PayPlus support with the requestId.
503 Service Unavailable PayPlus temporarily unavailable System maintenance or overload. Retry after the Retry-After header value (seconds).

Error Response Format

{
  "error": {
    "code": "INVALID_ROUTING_NUMBER",       // Machine-readable error code
    "message": "The routing number '099999999' is not a valid ABA routing number.",
    "field": "beneficiary.routingNumber",       // Field path (for validation errors)
    "details": {}                               // Additional context (not always present)
  },
  "meta": {
    "requestId": "req_9e7c4f2a1b3d",               // Include in support requests
    "timestamp": "2026-03-15T11:05:22Z"
  }
}

For validation errors affecting multiple fields, the response returns an array of errors:

{
  "errors": [
    { "code": "REQUIRED_FIELD_MISSING", "field": "originator.accountNumber", "message": "originator.accountNumber is required." },
    { "code": "INVALID_AMOUNT", "field": "amount", "message": "Amount must be a positive integer (cents). Received: -5000." }
  ],
  "meta": { "requestId": "req_9e7c4f2a1b3d", "timestamp": "2026-03-15T11:05:22Z" }
}

Validation Errors (400)

CodeDescriptionResolution
REQUIRED_FIELD_MISSINGA required field is absent from the request body.Check the field value in the error response. Add the missing field to the request.
INVALID_FIELD_FORMATA field value does not conform to the expected format.Review the field specification in this documentation. Common causes: date not in YYYY-MM-DD format, currency code not ISO 4217.
INVALID_ROUTING_NUMBERThe provided ABA routing transit number is not a valid 9-digit ABA number or is not registered as an active ACH/Fedwire participant.Verify the routing number against the Federal Reserve's E-Payments Routing Directory. Ensure no leading/trailing spaces in the string value.
INVALID_BICThe provided BIC (Bank Identifier Code) is not a valid SWIFT BIC or is not active in the SWIFT BIC directory.Verify the BIC is 8 or 11 characters. Check that the BIC is registered and active in the SWIFT BIC Plus directory.
INVALID_AMOUNTAmount is not a positive integer, is zero, or exceeds the maximum value for the data type.Amount must be a positive integer in cents (USD). Example: $1,500.00 = 150000. Do not send decimal values.
INVALID_SEC_CODEThe provided NACHA SEC code is not recognized or is not enabled for this PayPlus instance.Verify the SEC code is one of the supported values: PPD, CCD, CTX, WEB, TEL, IAT. Contact your PayPlus administrator if the SEC code should be supported but is not enabled.
INVALID_CURRENCYThe currency code is not a valid ISO 4217 three-letter code or is not supported by the target rail.Fedwire only supports USD. SWIFT supports the currencies enabled in your SWIFT connector configuration.
FIELD_TOO_LONGA string field exceeds the maximum allowed length.Truncate the field value. The error message includes the maximum length for the field.
INVALID_DATEA date field is not a valid calendar date, is not a business day, or is outside the allowed date range.Verify the date is a valid business day in YYYY-MM-DD format. ACH effective dates must be today or a future business day. Fedwire does not support future value dates.

Authentication and Authorization Errors (401 / 403)

CodeHTTPDescriptionResolution
MISSING_AUTHORIZATION401No Authorization header or X-API-Key header provided.Add the Authorization header: Authorization: Bearer {access_token} or X-API-Key: {key}.
INVALID_TOKEN401Access token is malformed, expired, or has been revoked.Request a new access token via POST /auth/token.
INVALID_API_KEY401The provided API key is invalid or has been deactivated.Verify the API key is correct and active in the PayPlus Admin Console.
INSUFFICIENT_SCOPE403The access token does not include the required OAuth scope for this operation.Request a new token with the required scope. See the Authentication section for scope definitions.
RAIL_ACCESS_DENIED403This API client is not authorized to initiate payments on the requested rail.Contact your PayPlus administrator to enable the required rail for this API client.
AMOUNT_LIMIT_EXCEEDED403The payment amount exceeds the limit configured for this API client or the originating account.The per-transaction or daily limit for this client has been reached. Contact your PayPlus administrator to review limit configuration.

Payment Business Rule Errors (422)

CodeDescriptionResolution
RAIL_LIMIT_EXCEEDEDPayment amount exceeds the maximum transaction limit for the requested rail.Use a different rail or split into multiple payments. Fedwire has no enforced maximum; RTP limit is $1,000,000; FedNow default limit is $500,000.
INSTANT_RAIL_NOT_AVAILABLENeither RTP nor FedNow is available for the specified receiving bank routing number.Verify the receiving bank's instant payment participation. Route to ACH or Fedwire as an alternative.
SDA_NOT_ELIGIBLEThe payment is not eligible for Same-Day ACH processing.Common causes: amount exceeds $1,000,000 (SDA limit), IAT SEC code (not SDA eligible), submission received after the final SDA window cut-off. Use standard ACH processing.
FEDWIRE_OUTSIDE_HOURSFedwire wire transfer submitted outside Fedwire operating hours (Monday–Friday, 9:00 PM ET prior day to 6:30 PM ET).The payment will be queued and submitted at the next Fedwire opening. No action required β€” the payment will proceed automatically. Subscribe to the payment.submitted webhook to confirm submission.
TRAVEL_RULE_FIELDS_MISSINGPayment meets the BSA Travel Rule threshold ($3,000+) but required originator or beneficiary address fields are missing.Add complete address information (street, city, state, postalCode, country) for both originator and beneficiary.
REVERSAL_WINDOW_EXPIREDACH reversal request submitted more than 5 banking days after the original payment's settlement date.The reversal window has passed. Contact the beneficiary bank directly to arrange a voluntary return.
PAYMENT_NOT_REVERSIBLEReversal requested for a payment that is not in a reversible state (e.g., already returned, rejected, or a debit entry type not eligible for reversal).Review the payment status. Reversal is only available for settled credit entries within the 5-day window.
DUPLICATE_IDEMPOTENCY_KEYThe provided idempotency key was previously used with different request parameters.Generate a new unique idempotency key (UUID v4) for each distinct payment request.

Rail-Specific Return Codes

ACH Return Codes

ACH return codes appear in the returnCode field of returned payments and in the payment.returned webhook event. See the Get Return Details endpoint for full return information.

CodeReasonRepresentable
R01Insufficient FundsYes β€” within 180 days per NACHA rules
R02Account ClosedNo
R03No Account / Unable to Locate AccountNo
R04Invalid Account Number StructureNo
R05Unauthorized Debit to Consumer Account (CCD/CTX) β€” potential regulatory issueNo β€” investigate authorization
R07Authorization Revoked by Consumer (PPD/TEL/WEB)No
R08Payment StoppedNo
R10Customer Advises Not Authorized β€” Reg E disputeNo β€” potential Reg E violation; review
R16Account Frozen β€” regulatory or legal holdNo
R20Non-Transaction Account β€” savings/money market debit limit exceededContact RDFI
R29Corporate Customer Advises Not Authorized (CCD/CTX/PPD)No β€” investigate authorization

Instant Payment Return Codes (RTP / FedNow)

ISO 20022 reason codes returned in the pacs.002 rejection/return message from the Receiving Bank:

CodeReason
AC01Incorrect Account Number β€” account number is invalid
AC04Closed Account Number β€” account no longer exists
AC06Blocked Account β€” account is frozen due to regulatory or court order
AG01Transaction Forbidden β€” transaction type not permitted for this account
AM04Insufficient Funds β€” not used by RTP/FedNow (payment accepted regardless of receiver balance); returned only for settlement account issues
NARRNarrative β€” Receiving Bank returned with a free-text explanation. See returnNarrative field.
RR04Regulatory Reason β€” payment blocked for regulatory compliance by Receiving Bank

Compliance Errors

CodeHTTPDescription
OFAC_MATCH 202 Payment accepted but placed on compliance hold due to OFAC SDN list match. The payment will not be submitted to the network until the hold is resolved by a Compliance Officer. Subscribe to compliance.hold and compliance.released / compliance.rejected webhook events.
OFAC_SCREENING_ERROR 503 OFAC screening engine is unavailable. Payment placed on hold. PayPlus will retry screening automatically when the screening engine recovers. The compliance.hold webhook event will fire; the payment will proceed when cleared.
SANCTIONED_COUNTRY 422 Payment destination country or beneficiary bank country is subject to a comprehensive OFAC sanctions program. Payment cannot be processed. Do not retry β€” contact your Compliance team.
Handling OFAC Holds in Your Integration If your integration uses instant payments for time-sensitive use cases, subscribe to both compliance.hold and compliance.released webhooks. When a payment enters compliance hold, notify the payment initiator that the payment is under review. When the hold is released, the payment proceeds automatically β€” no resubmission required.
← Webhooks Back to Overview β†’