> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.vitablehealth.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.vitablehealth.com/_mcp/server.

# List ID Cards

GET https://api.vitablehealth.com/v1/members/{member_id}/id-cards

Lists a member's benefit ID cards — card type (medical, dental, vision, or rx), employer, plan, provider network, claims payer, carrier contact details, and the disclaimers printed on the card. Medical, dental and vision cards come from the member's active digital benefit cards; the rx card from the member's Ventegra pharmacy benefit (omitted when the member has no free-medication coverage), which carries no plan, network, or carrier details. Access is scoped to the authenticated principal, and an organization caller sees only cards from employers in its book; a member not visible to the caller returns a 404.

Reference: https://developer.vitablehealth.com/api/members/list-id-cards

## Authentication

- `Authorization` header (bearer token, required) — API Key or Access Token authentication using Bearer token in Authorization header. API keys use the vit_apk_ prefix, access tokens use the vit_at_ prefix.

## Servers

- `https://api.vitablehealth.com` (Production, default)
- `https://api.uat.vitablehealth.com` (UAT)

## Request

### Path parameters

- `member_id` (string, required) — Unique member identifier (mbr_*)

### Headers

- `X-Vitable-Organization` (string, optional) — Organization to act as for this request (e.g. `org_SGVsbG8gV29ybGQ`). Optional when your credentials reach a single organization. Required when they reach several — omitting it then returns 400 `organization_required`. A malformed value returns 400 `invalid_organization_header`, and naming an organization you do not have access to returns 403 `organization_access_denied`.

## Response

### 200

- `data` (list of DigitalBenefitCard, required) — The member's digital benefit cards.

## Errors

### 400 Bad Request Error

Bad Request - Invalid input or validation error

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 401 Unauthorized Error

Unauthorized - Invalid or missing API key

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 403 Forbidden Error

Forbidden - Insufficient permissions for this resource

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 404 Not Found Error

Resource not found.

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 409 Conflict Error

Conflict - Resource already exists or conflicts with current state

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 429 Too Many Requests Error

Too Many Requests - Rate limit exceeded

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 500 Internal Server Error

Internal Server Error - An unexpected error occurred

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 502 Bad Gateway Error

Bad Gateway - External service error

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

## Types

### DigitalBenefitCard

Wire serializer for :class:`DigitalBenefitCardDTO` (one benefit ID card).

- `card_type` (enum, required) — Kind of card: medical, dental, vision, or rx * `medical` - medical * `dental` - dental * `vision` - vision * `rx` - rx
  - Allowed values: `medical`, `dental`, `vision`, `rx`
- `group_id` (string, required) — Group number printed on the card (the rx group id for an rx card)
- `group_member_id` (string, required) — Member id printed on the card (the Ventegra cardholder id for an rx card)
- `member_name` (string, required) — Name of the member the card is issued to
- `nsa_table` (list of list of string, required) — No Surprises Act cost-sharing table rendered on the card; empty for an rx card
- `employer_name` (string, optional, nullable) — Employer the card's coverage is through; null for an rx card without group info
- `plan_name` (string, optional, nullable) — Benefit plan name on the card; null for a consumer-membership rx card
- `benefit_code` (enum, optional, nullable) — Benefit code backing the card; null for a consumer-membership rx card, which has no enrollment * `EBA` - Eba Mec * `VPC` - Vpc Enhanced * `VPC_CORE` - Vpc Core * `MEC` - Vpc Mec * `MEC2` - Mec2 * `MEC_PLUS` - Mec Plus * `MVP` - Mvp * `MVP2` - Mvp2 * `MVPSL` - Mvpsl * `MVPSL2` - Mvpsl2 * `VD` - Dental * `VV` - Vision * `ICHRA` - Ichra * `ICHRA_PREMIUM_PLUS` - Ichra Premium Plus * `ICHRA_REIMBURSEMENT_ONLY` - Ichra Reimbursement Only
  - Allowed values: `EBA`, `VPC`, `VPC_CORE`, `MEC`, `MEC2`, `MEC_PLUS`, `MVP`, `MVP2`, `MVPSL`, `MVPSL2`, `VD`, `VV`, `ICHRA`, `ICHRA_PREMIUM_PLUS`, `ICHRA_REIMBURSEMENT_ONLY`
- `network` (BenefitPlanNetwork, optional, nullable) — Provider network shown on the card; null for an rx card
- `claims_payer_display_name` (string, optional, nullable) — Claims payer shown on the card
- `carrier_phone` (string, optional, nullable) — Carrier phone number on the card; null for an rx card
- `carrier_website` (string, optional, nullable) — Carrier website on the card; null for an rx card
- `plan_disclaimer` (string, optional, nullable) — Plan-specific disclaimer text; null for an rx card
- `general_disclaimer` (string, optional, nullable) — General disclaimer text; null for an rx card

### BenefitPlanNetwork

- `id` (string, required) — Unique identifier for the network.
- `name` (string, required) — Name of the network
- `logo` (string, required, nullable) — URL of the network's logo, or `null` if none is on file.
- `address` (DetailedAddress, required) — Postal address of the provider network.
- `website` (string, required) — Website of the network
- `phone` (string, required) — General contact phone number for the network.
- `member_phone` (string, required, nullable) — Phone number members should call for support.
- `provider_phone` (string, required, nullable) — Phone number providers should call for claims and eligibility.
- `edi` (string, optional, nullable) — Network's EDI
- `member_website` (string, optional, nullable) — Website for members
- `provider_website` (string, optional, nullable) — Website for providers

### DetailedAddress

- `address_line_1` (string, required)
- `city` (string, required)
- `zipcode` (string, required)
- `state` (enum, required) — * `AL` - AL * `AK` - AK * `AZ` - AZ * `AR` - AR * `CA` - CA * `CO` - CO * `CT` - CT * `DC` - DC * `DE` - DE * `FL` - FL * `GA` - GA * `HI` - HI * `ID` - ID * `IL` - IL * `IN` - IN * `IA` - IA * `KS` - KS * `KY` - KY * `LA` - LA * `ME` - ME * `MD` - MD * `MA` - MA * `MI` - MI * `MN` - MN * `MS` - MS * `MO` - MO * `MT` - MT * `NE` - NE * `NV` - NV * `NH` - NH * `NJ` - NJ * `NM` - NM * `NY` - NY * `NC` - NC * `ND` - ND * `OH` - OH * `OK` - OK * `OR` - OR * `PA` - PA * `RI` - RI * `SC` - SC * `SD` - SD * `TN` - TN * `TX` - TX * `UT` - UT * `VT` - VT * `VA` - VA * `WA` - WA * `WI` - WI * `WV` - WV * `WY` - WY * `PR` - PR * `GU` - GU * `AS` - AS * `VI` - VI * `MP` - MP * `MH` - MH * `PW` - PW * `FM` - FM * `AE` - AE * `AA` - AA * `AP` - AP
  - Allowed values: `AL`, `AK`, `AZ`, `AR`, `CA`, `CO`, `CT`, `DC`, `DE`, `FL`, `GA`, `HI`, `ID`, `IL`, `IN`, `IA`, `KS`, `KY`, `LA`, `ME`, `MD`, `MA`, `MI`, `MN`, `MS`, `MO`, `MT`, `NE`, `NV`, `NH`, `NJ`, `NM`, `NY`, `NC`, `ND`, `OH`, `OK`, `OR`, `PA`, `RI`, `SC`, `SD`, `TN`, `TX`, `UT`, `VT`, `VA`, `WA`, `WI`, `WV`, `WY`, `PR`, `GU`, `AS`, `VI`, `MP`, `MH`, `PW`, `FM`, `AE`, `AA`, `AP`
- `address_line_2` (string, optional, nullable)
- `latitude` (double, optional, nullable)
- `longitude` (double, optional, nullable)
- `county_fips_code` (string, optional, nullable)
- `county_name` (string, optional, nullable)

## Examples

**Response**

```json
{
  "data": [
    {
      "card_type": "medical",
      "group_id": "GRP-000123",
      "group_member_id": "GM-000456",
      "member_name": "Jane Doe",
      "nsa_table": [
        [
          "Primary care",
          "$0"
        ],
        [
          "Specialist",
          "$40"
        ]
      ],
      "employer_name": "Acme Inc.",
      "plan_name": "MEC Plus Standard",
      "benefit_code": "MEC_PLUS",
      "network": {
        "id": "5f1c1f9e-6d4a-4b21-9f77-2d4c8f0a1b33",
        "name": "First Health",
        "logo": "https://assets.vitablehealth.com/networks/first-health.png",
        "address": {
          "address_line_1": "123 Main Street",
          "city": "San Francisco",
          "zipcode": "94102",
          "state": "CA",
          "address_line_2": null
        },
        "website": "https://firsthealth.example.com",
        "phone": "(800) 555-0100",
        "member_phone": "(800) 555-0101",
        "provider_phone": "(800) 555-0102",
        "edi": "87726",
        "member_website": "https://firsthealth.example.com/members",
        "provider_website": "https://firsthealth.example.com/providers"
      },
      "claims_payer_display_name": "Vitable Health",
      "carrier_phone": "(800) 555-0100",
      "carrier_website": "https://vitablehealth.com",
      "plan_disclaimer": "This plan is not major medical insurance.",
      "general_disclaimer": "Possession of this card does not guarantee coverage."
    },
    {
      "card_type": "rx",
      "group_id": "TEST125",
      "group_member_id": "RX-000789",
      "member_name": "Jane Doe",
      "nsa_table": [],
      "employer_name": "Acme Inc.",
      "plan_name": null,
      "benefit_code": null,
      "network": null,
      "claims_payer_display_name": null,
      "carrier_phone": null,
      "carrier_website": null,
      "plan_disclaimer": null,
      "general_disclaimer": null
    }
  ]
}
```

**SDK Code**

```python Member ID Cards
import requests

url = "https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards"

headers = {"Authorization": "Bearer <apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Member ID Cards
const url = 'https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards';
const options = {method: 'GET', headers: {Authorization: 'Bearer <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Member ID Cards
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Member ID Cards
require 'uri'
require 'net/http'

url = URI("https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <apiKey>'

response = http.request(request)
puts response.read_body
```

```java Member ID Cards
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards")
  .header("Authorization", "Bearer <apiKey>")
  .asString();
```

```php Member ID Cards
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards', [
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Member ID Cards
using RestSharp;

var client = new RestClient("https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Member ID Cards
import Foundation

let headers = ["Authorization": "Bearer <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.vitablehealth.com/v1/members/mbr_abc123def456/id-cards")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```