# Filtering Connected Accounts by Custom Metadata

When you use [List Connected Accounts](https://docs.seam.co/latest/api/connected_accounts/list), you can filter the list by one or more custom metadata pairs. Include the `custom_metadata_has` parameter with a JSON string that specifies the desired key:value pairs.

{% hint style="info" %}
If the [Connect Webview](/latest/core-concepts/connect-webviews.md) associated with a connected account contains custom metadata, Seam transfers this custom metadata to the connected account. However, you can also use the [Update Connected Account](https://docs.seam.co/latest/api/connected_accounts/update) method with the optional `custom_metadata` property to [change or add custom metadata for a connected account](/latest/core-concepts/connected-accounts/adding-custom-metadata-to-a-connected-account.md).
{% endhint %}

{% tabs %}
{% tab title="JavaScript" %}
**Request:**

```javascript
const connected_accounts = await seam.connectedAccounts.list({
  custom_metadata_has: {
    "internal_account_id": "user-1"
  }
});

console.log(connected_accounts);
```

**Response:**

```json
[
  {
    connected_account_id: 'c993818b-bf3c-4836-bef4-9a76d89bf1d3',
    created_at: '2024-01-05T07:20:07.692Z',
    user_identifier: { username: 'jane' },
    account_type: 'visionline',
    account_type_display_name: 'Visionline',
    errors: [],
    warnings: [],
    custom_metadata: { internal_account_id: 'user-1' },
    automatically_manage_new_devices: true
  },
  ...
]
```

{% endtab %}

{% tab title="cURL" %}
**Request:**

```bash
curl -X 'POST' \
  'https://connect.getseam.com/connected_accounts/list' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ${API_KEY}' \
  -H 'Content-Type: application/json' \
  -d '{
  "custom_metadata_has": {
    "internal_account_id": "user-1"
  },
}'
```

**Response:**

```json
{
  "connected_accounts": [
    {
      "connected_account_id": "c993818b-bf3c-4836-bef4-9a76d89bf1d3",
      "created_at": "2024-01-05T07:20:07.692Z",
      "user_identifier": {
        "username": "jane"
      },
      "account_type": "visionline",
      "account_type_display_name": "Visionline",
      "errors": [],
      "warnings": [],
      "custom_metadata": {
        "internal_account_id": "user-1"
      },
      "automatically_manage_new_devices": true
    },
    ...
  ],
  "ok": true
}
```

{% endtab %}

{% tab title="Python" %}
**Request:**

```python
connected_accounts = seam.connected_accounts.list(
  custom_metadata_has = {
    "internal_account_id": "user-1"
  }
)

pprint(connected_accounts)
```

**Response:**

```
[ConnectedAccount(connected_account_id='c993818b-bf3c-4836-bef4-9a76d89bf1d3',
                  created_at='2024-01-05T07:20:07.692Z',
                  user_identifier={'username': 'jane'},
                  account_type='visionline',
                  errors=[],
                  custom_metadata={"internal_account_id": "user-1"}),
...]
```

{% endtab %}

{% tab title="Ruby" %}
**Request:**

```ruby
connected_accounts = client.connected_accounts.list(
  custom_metadata_has: {
    "internal_account_id": "user-1"
  }
)

puts connected_accounts.inspect
```

**Response:**

```
[<Seam::ConnectedAccount:0x004d8
  connected_account_id="c993818b-bf3c-4836-bef4-9a76d89bf1d3"
  created_at=2024-01-05 07:20:07.692 UTC
  user_identifier={"username"=>"jane"}
  account_type="visionline"
  errors=[]
  warnings=[]
  custom_metadata={"internal_account_id"=>"user-1"}>, ...]
```

{% endtab %}

{% tab title="PHP" %}
**Request:**

```php
$accounts = $seam->connected_accounts->list(
  custom_metadata_has: array('internal_account_id' => 'user-1')
);

echo json_encode($accounts);
```

**Response:**

{% code overflow="wrap" %}

```json
[{"connected_account_id":"c993818b-bf3c-4836-bef4-9a76d89bf1d3","account_type":"visionline","user_identifier":{"username":"jane", "email":null,"phone":null},"errors":[],"warnings":[],"created_at":"2024-01-05T07:20:07.692Z","custom_metadata":{"internal_account_id":"user-1"},"automatically_manage_new_devices":true},...]
```

{% endcode %}
{% endtab %}

{% tab title="C#" %}
**Request:**

```csharp
var customMetadata = new Dictionary<string, string>()
{
  {"internal_account_id", "user-1"}
};

var connectedAccounts = seam.ConnectedAccounts.List(
  customMetadataHas: customMetadata
);

foreach (var connectedAccount in connectedAccounts)
{
  Console.WriteLine(connectedAccount);
}
```

**Response:**

```json
{
  "connected_account_id": "c993818b-bf3c-4836-bef4-9a76d89bf1d3",
  "created_at": "2024-01-05T07:20:07.692Z",
  "user_identifier": {
    "username": "jane"
  },
  "account_type": "visionline",
  "account_type_display_name": "Visionline",
  "errors": [],
  "warnings": [],
  "custom_metadata": {
    "internal_account_id": "user-1"
  },
  "automatically_manage_new_devices": true
}
...
```

{% endtab %}
{% endtabs %}


---

# 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.seam.co/latest/core-concepts/connected-accounts/filtering-connected-accounts-by-custom-metadata.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.
