# Retrieving sources

## Get a source object by identifier

The following [`GET /sources/{id}`](https://app.gitbook.com/s/drE2RCYBuoRpd2TC2sx2/payment-source/source-management#sources-id) request retrieves a source by supplying its unique identifier as a path parameter.

{% hint style="info" %}
This identifier was returned when you used the [DigitalRiver.js](https://docs.digitalriver.com/commerce-api/payments/payments-solutions/digitalriver.js) library to [create the source](https://docs.digitalriver.com/commerce-api/resources/reference/digitalriver-object#creating-sources).
{% endhint %}

{% tabs %}
{% tab title="cURL" %}

```
curl --location --request GET 'https://api.digitalriver.com/sources/e59c8303-139a-4077-bd26-78d20b43d52b' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer '<API_key>' \
```

{% endtab %}
{% endtabs %}

The response returns a Source object if a valid identifier and API key are provided. This sample response returns a Source with a `type` of `creditCard` and a state of `chargeable`.&#x20;

{% hint style="warning" %}
Only the last four digits of credit card numbers are returned by a `GET` Source request.
{% endhint %}

{% tabs %}
{% tab title="JSON" %}

```json
{
    "id": "e59c8303-139a-4077-bd26-78d20b43d52b",
    "createdTime": "2020-06-17T19:54:54Z",
    "type": "creditCard",
    "currency": "USD",
    "amount": 24.89,
    "reusable": true,
    "state": "chargeable",
    "customerId": "517796760336",
    "owner": {
        "firstName": "William",
        "lastName": "Brown",
        "email": "apiTester@digitalriver.com",
        "address": {
            "line1": "10380 Bren Road West",
            "city": "Minnetonka",
            "postalCode": "55343",
            "state": "MN",
            "country": "US"
        }
    },
    "paymentSessionId": "8ff5840f-b0ec-44f2-8e88-647627a0ba0d",
    "clientSecret": "e59c8303-139a-4077-bd26-78d20b43d52b_5e943931-e4e7-4537-8ae4-f7ff991f463c",
    "creditCard": {
        "brand": "MasterCard",
        "expirationMonth": 5,
        "expirationYear": 2025,
        "lastFourDigits": "0008"
    },
    "liveMode": false
}
```

{% endtab %}
{% endtabs %}

## Obtain a shopper's sources

You can retrieve the Sources associated with a Shopper by making a get shopper by ID request and parsing the `sources` array contained in the response if the payment source is attached to the shopper's payment option. All payment sources will be listed when the shopper gets their payment options.

### Step 1: Create your first payment source and option

1. Create your first payment source using the following: \
   `POST https://api.digitalriver.com/payments/sources/`
2. Create your first payment option using the following: \
   `POST https://api.digitalriver.cm/v1/shoppers/me/payment-options/`

{% tabs %}
{% tab title="cURL" %}

```javascript
curl --location --request POST 'https://api.digitalriver.com/v1/shoppers/me/payment-options/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_key>' \
--data-raw '{
  "paymentOption" : {
    "nickName" : "Credit Card",
    "isDefault" : "true",
    "sourceId":"{{sourceId1}}"
  }
}'
```

{% endtab %}
{% endtabs %}

### Step 2: Create your second payment source and option

1. Create your second payment source using the following: \
   `POST https://api.digitalriver.com/payments/sources/`
2. Create your second payment option using the following: \
   `POST https://api.digitalriver.com/v1/shoppers/me/payment-options/`

{% tabs %}
{% tab title="Request body" %}

```javascript
curl --location --request POST 'https://api.digitalriver.com/v1/shoppers/me/payment-options/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_key>' \
--data-raw '{
  "paymentOption" : {
    "nickName" : "PayPal",
    "isDefault" : "true",
    "sourceId":"{{sourceId2}}"
  }
}'
```

{% endtab %}
{% endtabs %}

### Step 3: Get the shopper's payment options

Get the shopper's payment options using: `GET https://api.digitalriver.com/v1/shoppers/me/payment-options/`

{% tabs %}
{% tab title="Response body" %}

```json
curl --location --request POST 'https://api.digitalriver.com/v1/shoppers/me/payment-options/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_key>' \
--data-raw '{
    "paymentOptions": {
        "uri": "https://api.digitalriver.com/v1/shoppers/me/payment-options",
        "paymentOption": [
            {
                "uri": "https://api.digitalriver.com/v1/shoppers/me/payment-options/15578475589",
                "nickName": "Credit Card",
                "isDefault": "false"
            },
            {
                "uri": "https://api.digitalriver.com/v1/shoppers/me/payment-options/15578475689",
                "nickName": "PayPal",
                "isDefault": "true"
            }
        ]
    }
}'
```

{% endtab %}
{% endtabs %}

### Display a customer's sources

You can use the data contained in the `sources` array to display a customer's saved payment methods on your website or app. To do this, parse the response and extract the values in the `creditCard`, `owner`, and `address` hash tables. You can then use these values to present the card's brand name, last four digits, expiration date, and the customer's billing information.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digitalriver.com/commerce-api/payments/sources/retrieving-sources.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
