> ## Documentation Index
> Fetch the complete documentation index at: https://docs.primevault.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Blockchain Contacts

> Retrieve a paginated list of contacts, optionally filtered by name, status, or external ID.

**GET** `/api/external/contacts/?limit={limit}&cursor={cursor}&{filters}`

## Query parameters

<ParamField query="limit" type="number">
  Requested page size. SDK default: 20.
</ParamField>

<ParamField query="cursor" type="string | null">
  Cursor for the next page.
</ParamField>

<ParamField query="Filters" type="Record<string, string>">
  Contact filters, for example `name`, `status`, or `externalId` when supported.
</ParamField>

## Response

Returns a page of [Contact](/api-basics/data-models#contact) objects. See [Cursor response](/api-basics/filtering-and-pagination#cursor-response).

<ResponseField name="results" type="Contact[]">
  Contacts on this page. Each item is a [Contact](/api-basics/data-models#contact).

  <Expandable title="Properties">
    <ResponseField name="id" type="string">
      Contact ID.
    </ResponseField>

    <ResponseField name="orgId" type="string">
      Organization that owns the contact.
    </ResponseField>

    <ResponseField name="subOrgId" type="string">
      [Sub-org](/sub-orgs/overview) that owns the contact, if any.
    </ResponseField>

    <ResponseField name="name" type="string">
      Contact display name.
    </ResponseField>

    <ResponseField name="blockChain" type="string">
      Chain of the address.
    </ResponseField>

    <ResponseField name="address" type="string">
      Blockchain address.
    </ResponseField>

    <ResponseField name="status" type="ContactStatus">
      `PENDING`, `APPROVED`, or `DECLINED`. A new contact stays `PENDING` until it's [approved](/approvals/overview). See [ContactStatus](/api-basics/data-models#contactstatus).
    </ResponseField>

    <ResponseField name="isSmartContractAddress" type="boolean">
      Whether the address is a smart contract.
    </ResponseField>

    <ResponseField name="tags" type="string[]">
      Searchable contact tags.
    </ResponseField>

    <ResponseField name="createdById" type="string">
      User or API user that created the contact.
    </ResponseField>

    <ResponseField name="isSanctioned" type="boolean">
      Whether the address is flagged by sanctions screening.
    </ResponseField>

    <ResponseField name="externalId" type="string">
      Your own reference, if you set one.
    </ResponseField>

    <ResponseField name="assetList" type="string[]">
      Assets permitted for the contact.
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      Creation timestamp (ISO 8601).
    </ResponseField>

    <ResponseField name="updatedAt" type="string">
      Last update timestamp (ISO 8601).
    </ResponseField>

    <ResponseField name="isDeleted" type="boolean">
      Whether the contact is deleted.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="nextCursor" type="string | null">
  Cursor for the next page. `null` on the last page.
</ResponseField>

<ResponseField name="hasNext" type="boolean">
  Whether another page exists.
</ResponseField>

<RequestExample dropdown>
  ```json Request example theme={null}
  {
  "query": {
    "limit": 20,
    "cursor": null,
    "status": "PENDING"
  }
  }
  ```

  ```bash cURL theme={null}
  # Sample only. Generate a new signed token for each request
  # (see Authentication). Tokens expire after 120 seconds.
  curl --request GET \
    --url "https://api.primevault.com/api/external/contacts/?limit=20&status=PENDING" \
    --header "Authorization: Bearer <signed JWT>" \
    --header "Api-Key: <API key>" \
    --header "Accept: application/json"
  ```

  ```typescript JavaScript SDK theme={null}
  getContacts(
    params?: Record<string, string>,
    limit?: number,
    cursor?: string | null,
  ): Promise<ContactListResponse>

  const firstPage = await apiClient.getContacts(
    { status: "PENDING" },
    20,
    null,
  );
  ```
</RequestExample>

<ResponseExample dropdown>
  ```json Response example theme={null}
  {
    "results": [
      {
        "id": "contact_123",
        "orgId": "org_456",
        "subOrgId": "sub_org_123",
        "name": "Operations Wallet",
        "blockChain": "ETHEREUM",
        "address": "0xAbC1234567890abcdef1234567890abcdef1234",
        "status": "PENDING",
        "tags": [
          "vendor",
          "priority"
        ],
        "createdById": "api_user_123",
        "externalId": "vendor-1001",
        "assetList": [
          "USDC",
          "ETH"
        ],
        "createdAt": "2026-08-04T10:30:00Z",
        "updatedAt": "2026-08-04T10:30:00Z",
        "isDeleted": false
      }
    ],
    "nextCursor": "eyJpZCI6ImNvbnRhY3RfMTIzIn0=",
    "hasNext": true
  }
  ```

  ```typescript JavaScript SDK theme={null}
  interface ContactListResponse {
    results: Contact[];
    nextCursor?: string | null;
    hasNext?: boolean;
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.