Fiserv APEX XP2

Category: Core Connectors

Market: US

Overview

The Fiserv APEX XP2 connector exposes a REST API (/apex/v1/...) that translates inbound JSON requests from Data Core into SOAP operations against APEX XP2 Member, Financial, and Lending services.

The connector provides:

  • Member and individual operations (lookup, retrieval, updates, membership management)
  • Account operations (creation, update, history summary, overdraft protection)
  • ACH operations (allocations, payees, pending transactions)
  • Card operations (assign, update, lookup)
  • Alerts and stops management
  • System details retrieval
  • Financial transaction submission with multiple transaction unit types

The connector handles SOAP routing and WS-Security authentication using Vault-provided configuration.

Vault Configuration

Key Description
memberServicesUrl Base URL for the APEX Member SOAP service endpoint.
financialServicesUrl Base URL for the APEX Financial SOAP service endpoint.
lendingServicesUrl Base URL for the APEX Lending SOAP service endpoint.
securityConfig WS-Security credentials for SOAP UsernameToken authentication.

Example Vault Configuration

Copy
{
                "memberServicesUrl": "https://<host>/<member-path>",
                "financialServicesUrl": "https://<host>/<financial-path>",
                "lendingServicesUrl": "https://<host>/<lending-path>",
                "securityConfig": {
                "licenseKey": "string",
                "creditUnionId": "string",
                "operatorId": "string",
                "password": "string",
                "workstation": "string"
                }
        }

The SOAP username is built as: licenseKey.creditUnionId.operatorId.workstation.

Member Services

Member services allow you to look up and manage individuals and memberships, create and update accounts, manage overdraft protection, issue and update plastic cards, manage ACH payees and allocations, and create alerts and stops.

Individuals and Membership

Endpoint Method Description
/apex/v1/individuals/lookup POST Search individuals.
/apex/v1/individuals/{individualId} GET Retrieve individual details, optionally for an effective date.
/apex/v1/individuals POST Update individual details.
/apex/v1/individuals/{individualId}/members GET List memberships by individual.
/apex/v1/members/{memberId} GET Retrieve membership details.
/apex/v1/members/{memberId}/individual GET Retrieve primary individual for a member.
/apex/v1/members POST Create member (assign membership and apply ownership details).
/apex/v1/members/{memberId} PUT Full update of member details.
/apex/v1/members/{memberId} PATCH Partial member update.

Individual Lookup

POST /apex/v1/individuals/lookup

Copy
{
  "lookupFields": {}
}

Sample response:

Copy
{
  "individualLookupData1": {
    "individualId": 281528,
    "individualType": "Individual"
  },
  "totalRecords": 1
}

Get Individual

GET /apex/v1/individuals/{individualId}

Parameter Type Required Description
individualId integer Yes APEX individual identifier (path parameter)
effectiveDate string (yyyy-MM-dd) No Effective date for historical snapshot (query parameter)

Sample response:

Copy
{
  "individualDetail5": {
    "individualId": 281528,
    "lastName": "Smith",
    "firstName": "John"
  }
}

Create Member

POST /apex/v1/members

Copy
{
  "assignMembership": {
    "primaryIndividualId": 12345
  },
  "overrideData": {}
}

Sample response:

Copy
{
  "transactionResult": {},
  "errorMessage": null
}

Update Member

PUT /apex/v1/members/{memberId}

Copy
{
  "memberId": 13245
}

PATCH /apex/v1/members/{memberId} (partial update)

Copy
{
  "memberId": 13245,
  "affiliation": "Primary",
  "pin": "1234"
}

Validation: The memberId in the URL must match the memberId in the request body.

Accounts and Overdraft Protection

Endpoint Method Description
/apex/v1/accounts POST Create account records.
/apex/v1/accounts/{accountId} PUT Update account details.
/apex/v1/members/{memberId}/accounts/{accountId} GET Retrieve account details for a member.
/apex/v1/members/{memberId}/accounts/{accountId}/history/summary POST Return account history summary for a period.
/apex/v1/members/{memberId}/accounts/{accountId}/odp POST Add or update overdraft protection.
/apex/v1/members/{memberId}/accounts/{accountId}/odp DELETE Remove overdraft protection entries.
/apex/v1/members/{memberId}/accounts/{accountId}/odp GET List overdraft protection settings.

Create Account

POST /apex/v1/accounts

Copy
{
  "effectiveDate": "2026-06-16T00:00:00Z",
  "accountCreationDetail3": [{}],
  "overrideData": {}
}

Sample response:

Copy
{
  "transactionResult": {},
  "accountDetail3": {
    "accountId": 54321,
    "accountType": "CHECKING"
  }
}

Update Account

PUT /apex/v1/accounts/{accountId}

Copy
{
  "accountId": 54321,
  "memberId": 67890
}

Validation: The accountId in the URL must match the accountId in the request body.

Account History Summary

POST /apex/v1/members/{memberId}/accounts/{accountId}/history/summary

Copy
{
  "individualId": 16,
  "fromDate": "2024-01-01T00:00:00Z",
  "toDate": "2024-12-31T00:00:00Z",
  "pageNumber": 1,
  "itemCount": 10,
  "order": "Ascending | Descending"
}

Validation:

  • fromDate and toDate are required.
  • pageNumber must be at least 1.
  • itemCount must be between 1 and 100.

Overdraft Protection

POST /apex/v1/members/{memberId}/accounts/{accountId}/odp

Copy
{
  "odpSourceUpdate": [],
  "overdraftDrainMethodType": "DRAIN_IN_ORDER",
  "overrideData": {}
}

DELETE /apex/v1/members/{memberId}/accounts/{accountId}/odp

Copy
{
  "odpSourceUpdate": [],
  "overrideData": {}
}

Cards

Endpoint Method Description
/apex/v1/members/{memberId}/cards POST Assign a plastic card to a member.
/apex/v1/members/{memberId}/cards/update POST Update card details.
/apex/v1/members/{memberId}/cards/lookup GET Look up cards by member, with optional BIN/customer filters.

Assign Card

POST /apex/v1/members/{memberId}/cards

Copy
{
  "cardBin": "string",
  "binExtension": "string",
  "cardCust": "string",
  "plasticFamilyClass": "CREDIT | DEBIT",
  "purchaseAccount": 1,
  "creditDebitDetail": {},
  "cardHolder1": {},
  "cardDetail": {},
  "overrideData": {}
}

Validation: plasticFamilyClass and purchaseAccount are required.

Update Card

POST /apex/v1/members/{memberId}/cards/update

Copy
{
  "cardBin": "string",
  "cardCust": "string",
  "purchaseAccount": 1,
  "cardDetail": {},
  "cardHolder": {},
  "atmAccess": [],
  "debitCardPeriodicFees": {},
  "overrideData": {}
}

Validation: purchaseAccount is required.

Lookup Cards

GET /apex/v1/members/{memberId}/cards/lookup

Parameter Type Required Description
cardBin string (max 9) No Card BIN filter
cardCust string (max 13) No Card customer filter

ACH

Endpoint Method Description
/apex/v1/ach/allocation POST Add ACH allocation details.
/apex/v1/ach/payees POST Add ACH payee.
/apex/v1/ach/payees/{payeeNumber} GET Retrieve payee by number.
/apex/v1/ach/payees GET Retrieve all payees.
/apex/v1/members/{memberId}/ach/pending-transactions GET Retrieve ACH pending transactions for a member.

Add Allocation

POST /apex/v1/ach/allocation

Copy
{
  "allocationData": {}
}

Sample response:

Copy
{
  "memberNumber": 1234
}

Add Payee

POST /apex/v1/ach/payees

Copy
{
  "payeeData": {}
}

Sample response:

Copy
{
  "payeeNumber": 123
}

Get Pending Transactions

GET /apex/v1/members/{memberId}/ach/pending-transactions

Parameter Type Required Description
pageNumber integer (0-10) Yes Result page index
itemCount integer (0-10) Yes Page size

Validation: pageNumber and itemCount must not exceed 10.

Alerts

Endpoint Method Description
/apex/v1/alerts GET Retrieve stops/alerts by alert type and target.
/apex/v1/alerts POST Create or update an alert.
/apex/v1/alerts DELETE Remove an alert.

Get Alerts

GET /apex/v1/alerts

Parameter Type Required Description
alertType string Yes One of: None, Membership, Individual, Business, Account, Loan, RP
accountId short No Account identifier
memberId long No Membership identifier
individualId long No Individual identifier

Validation: memberId and individualId are mutually exclusive. Providing both returns a 400 error.

Create/Delete Alert

POST / DELETE /apex/v1/alerts

Copy
{
  "stopAlertType": "Membership",
  "memberId": 67890
}

System Details

Exposes a single endpoint that routes to the selected APEX SOAP service and returns system metadata.

GET /apex/v1/system-details

Parameter Type Required Description
service string Yes One of: Member, Financial, Lending

Financial Services

Submit financial transactions containing one or more transaction units (deposits, withdrawals, fees, loan operations, GL transactions, payroll groups).

POST /apex/v1/financial/transaction

Copy
{
  "effectiveDate": "2026-06-16T00:00:00Z",
  "printReceipt": false,
  "forcePost": false,
  "isTotalFeeRequired": false,
  "customerName": "string",
  "postInSuppliedOrder": false,
  "timeStamp": "string",
  "transactionUnits": [
    {
      "accountDeposit": {},
      "accountFee": {},
      "accountFeeReversal": {},
      "accountWithdrawal": {},
      "fundsDisbursed": {},
      "fundsReceived": {},
      "loanAddon": {},
      "loanPayment": {},
      "loanPayoff": {},
      "couplet": {},
      "merchandiseReturn": {},
      "merchandiseSell": {},
      "miscellaneousFee": {},
      "generalLedger": {},
      "externalMortgagePayment": {},
      "loanAdjustment": {},
      "payrollGroup": {}
    }
  ],
  "overrideData": {}
}

Sample response:

Copy
{
  "totalFee": 1234
}

Error Handling

Errors follow the platform-standard problem JSON format. The connector handles request validation errors locally. The Data Core platform classifies transport, timeout, and dependency failures.

Error Response Format

Copy
{
  "status": 502,
  "title": "Bad Gateway",
  "detail": "Dependency failure",
  "code": "Server",
  "instance": "/apex/v1/members/67890",
  "timestamp": "2026-06-17T09:10:00Z",
  "dependency": {
    "status": 500,
    "title": "Server was unable to process request.",
    "detail": "..."
  }
}
  • code carries the upstream SOAP fault code when present (for example, Server); otherwise it contains the mapped HTTP status.
  • dependency is present only for upstream/transport failures, not for client validation or 500 errors.

HTTP Status Codes

Status Meaning Triggered By
200 Success Successful call; body contains the mapped SOAP response DTO.
400 Bad Request (validation) Invalid or missing fields, malformed JSON, bean-validation failure.
400 Bad Request (business) Connector checks such as URL/body ID mismatch or mutually exclusive query parameters.
403 Forbidden Access denied.
4xx Passthrough Upstream returned a 4xx (preserved as-is). Upstream 401/403 are remapped to 502.
500 Internal Server Error Unexpected runtime error not otherwise classified.
502 Bad Gateway Upstream 5xx (other than 503/504), upstream 401/403, SOAP system faults.
503 Service Unavailable Connection refused, DNS failure, no route to host, TLS/SSL failure.
504 Gateway Timeout Connect/read/request timeout reaching the upstream SOAP endpoint.

Dependency Status Mapping

Upstream Status Returned Status
401, 403 502
Other 4xx Same status (passthrough)
503 503
504 504
Other 5xx 502

Connector-Level Validation

The following scenarios return a 400 Bad Request:

  • Path/body identity mismatch: PUT /apex/v1/members/{memberId}, PATCH /apex/v1/members/{memberId}, and PUT /apex/v1/accounts/{accountId} require the ID in the URL to match the ID in the request body.
  • Invalid effective date format: The effectiveDate parameter must follow yyyy-MM-dd format.
  • Mutually exclusive query parameters: On /apex/v1/alerts, providing both memberId and individualId returns an error.
  • Out-of-range constrained fields: ACH paging limits and account-history constraints.