Get List of Payment Cards V2
The GET /api/paymentCards/v2 endpoint returns a list of all payment cards linked to the authenticated customer's account. Each card entry includes masked card number details, expiration information, card type, current status, and associated financial accounts. This endpoint supports both business and personal customer profiles.
Endpoint
GET /api/paymentCards/v2
Authentication
Bearer token required. Obtain via:
POST https://api.banking.netevia.dev/api/auth/v2
Include in header: Authorization: Bearer {token}
Token lifetime: 10 minutes. Refresh via POST /api/auth/refresh.
When to use
Use this endpoint to display a customer's full card portfolio in a dashboard or card management screen. It is the primary way to retrieve card identifiers (id) needed for subsequent card operations such as freezing, updating, or retrieving sensitive card details. It is also useful for checking card status before authorizing a transaction.
Response
200 OK
The response is a cursor-based paginated structure. The top-level object contains an accountholder node with profile information and a nested paymentCards connection holding the list of cards.
Top-level response (bank.client.graph.edge_accountholder)
| Field | Type | Description |
|---|---|---|
| cursor | string | Pagination cursor for this edge |
| node | object | Account holder object containing profile and card data |
Account holder node (bankingapi.models.paymentcards.accountholder)
| Field | Type | Description |
|---|---|---|
| typename | string | Internal type identifier for the account holder |
| name | object | Personal name object (givenName, familyName, title, suffix, middleName) |
| businessProfile | object | Business profile containing name.legalBusinessName and name.doingBusinessAsName; present for business customers |
| primaryAuthorizedPerson | object | Name object for the primary authorized person on the account |
| paymentCards | object | Paginated connection containing the list of payment cards |
Payment cards connection (bank.client.graph.connection_paymentcardresponse)
| Field | Type | Description |
|---|---|---|
| pageInfo.startCursor | string | Cursor pointing to the first item on this page |
| pageInfo.endCursor | string | Cursor pointing to the last item on this page |
| pageInfo.hasNextPage | boolean | true if additional pages of cards are available |
| pageInfo.hasPreviousPage | boolean | true if a previous page of cards exists |
| edges | array | Array of card edge objects, each containing cursor and node |
Payment card node (bankingapi.models.paymentcards.paymentcardresponse)
| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier for the payment card; use in card-specific endpoints |
| bin | string | Bank Identification Number (first 6 digits of card) |
| last4 | string | Last four digits of the card number |
| status | string | Current card status (e.g., ACTIVE, INACTIVE, SUSPENDED, CLOSED) |
| formFactor | string | Physical form of the card (e.g., PHYSICAL, VIRTUAL) |
| expirationDate | string | Full expiration date string |
| expirationMonth | string | Two-digit expiration month (e.g., "09") |
| expirationYear | string | Four-digit expiration year (e.g., "2027") |
| network | string | Card network (e.g., VISA, MASTERCARD) |
| cardType | integer | Numeric card type code: 0=Unknown, 1=Physical, 2=Virtual, 3=Burner, 4=Other |
| cardholder | string | Name of the cardholder as it appears on the card |
| financialAccounts | array | List of linked financial accounts; each item contains id and name |
| subProfile | string | Authorized user (subProfile) identifier if the card is assigned to an authorized user; null for primary |
| department | string | Department label associated with the card (business customers) |
{
"cursor": "Y3Vyc29yMQ==",
"node": {
"typename": "PersonAccountHolder",
"name": {
"givenName": "Jane",
"familyName": "Smith",
"title": null,
"suffix": null,
"middleName": null
},
"businessProfile": {
"name": {
"legalBusinessName": "Acme Corp LLC",
"doingBusinessAsName": "Acme Corp"
}
},
"primaryAuthorizedPerson": {
"name": {
"givenName": "Jane",
"familyName": "Smith",
"title": null,
"suffix": null,
"middleName": null
}
},
"paymentCards": {
"pageInfo": {
"startCursor": "Y2FyZEN1cnNvcjE=",
"endCursor": "Y2FyZEN1cnNvcjM=",
"hasNextPage": false,
"hasPreviousPage": false
},
"edges": [
{
"cursor": "Y2FyZEN1cnNvcjE=",
"node": {
"id": "card_01HXYZ1234ABCDEF567890",
"bin": "411111",
"last4": "4242",
"status": "ACTIVE",
"formFactor": "VIRTUAL",
"expirationDate": "09/2027",
"expirationMonth": "09",
"expirationYear": "2027",
"network": "VISA",
"cardType": 2,
"cardholder": "JANE SMITH",
"financialAccounts": [
{
"id": "fa_01HXYZ9876UVWXYZ012345",
"name": "Business Checking"
}
],
"subProfile": null,
"department": "Operations"
}
},
{
"cursor": "Y2FyZEN1cnNvcjI=",
"node": {
"id": "card_01HXYZ5678GHIJKL901234",
"bin": "411111",
"last4": "8888",
"status": "ACTIVE",
"formFactor": "PHYSICAL",
"expirationDate": "03/2026",
"expirationMonth": "03",
"expirationYear": "2026",
"network": "VISA",
"cardType": 1,
"cardholder": "JANE SMITH",
"financialAccounts": [
{
"id": "fa_01HXYZ9876UVWXYZ012345",
"name": "Business Checking"
}
],
"subProfile": null,
"department": null
}
}
]
}
}
}Error Codes
| Code | When it happens |
|---|---|
| 401 | Token missing, expired, or invalid |
| 403 | Insufficient permissions to access card data for this account |
| 404 | No account found for the authenticated token |
| 500 | Internal server error |
Common Mistakes
- Forgetting to paginate: if
pageInfo.hasNextPageistrue, additional cards exist beyond the current page. UsepageInfo.endCursoras a cursor parameter in follow-up requests to retrieve them. - Treating
cardTypeas a string: thecardTypefield is an integer enum (0–4), not a string label. Map values in your client code:1=Physical,2=Virtual,3=Burner. - Assuming all fields are populated: most fields are nullable. Always perform null checks before displaying values such as
subProfile,department, orbusinessProfile. - Using
bin+last4as a card identifier: use theidfield exclusively when referencing a card in other API calls. - Confusing
formFactorwithcardType:formFactoris a descriptive string label whilecardTypeis the authoritative numeric enum used in filtering and card management operations.
Related Endpoints
POST /api/paymentCards/v2— Create a new payment card (Physical, Virtual, or Burner)GET /api/paymentCards/v2/{cardId}— Retrieve details for a single payment card by IDPUT /api/paymentCards/v2/{cardId}— Update payment card settings or statusPOST /api/paymentCards/v2/{cardId}/freeze— Freeze an active payment cardPOST /api/paymentCards/v2/{cardId}/unfreeze— Unfreeze a suspended payment card
Example
curl -X GET https://api.banking.netevia.dev/api/paymentCards/v2 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json"