---
title: "List a vault's members"
method: GET
path: "/vaults/{id}/members"
tags: ["Contract Intelligence"]
---

# List a vault's members

`GET /vaults/{id}/members`

## Request

- Base URL: `https://app.gc.ai/api/external/v1`
- URL: `https://app.gc.ai/api/external/v1/vaults/{id}/members`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/gc-ai/apis/gc-ai-external-api/docs/vaults/:id/members/get.ts> (a function with typed inputs; its response is checked against the schema)

List the people who hold a role in a vault, oldest grant first, with their role and when they were added.

This is the direct membership list. Someone who can open the vault only through organization-wide visibility is not a member and does not appear here, so a vault that is not access-controlled can be readable by people this list does not name.

Requires the `owner` role in the vault and the organization-level permission to manage vaults.

Requires a user-scoped API key (`u:gcai_...`). A vault is shared with named people, so an organization-scoped key has no identity to resolve vault access with.

## Path parameters

- `id` string, uuid, required: The vault ID

## Query parameters

- `limit` integer: Max items to return (default 100, max 500)
- `offset` integer, nullable: Number of items to skip (default 0)

## Response `200`

Paginated list of vault members

- VaultMemberListResponse
  - `members` VaultMember[], required
    - `user_id` integer, required: GC AI user ID of the member. This is the same identifier `GET /me` reports for the calling user, so a caller can pick their own row out of the list.
    - `email` string, nullable, required: Member email address, or null when the account has none on file.
    - `name` string, nullable, required: Member display name, preferring the name they chose for themselves. Null when the account has no name on file.
    - `role` 'owner' | 'editor' | 'viewer' | 'null', nullable, required: The member's role in this vault: `owner` (manage members and settings), `editor` (add documents and edit extracted data), or `viewer` (read and annotate). Null on the rare stored value GC AI cannot read as a role. Such a grant carries no permissions at all, so remove it and add the person again.
    - `added_at` string, nullable, required: ISO 8601 timestamp when the member was added, or null for grants written before GC AI recorded that.
  - `pagination` Pagination, required
    - `limit` number, required: Page size
    - `offset` number, required: Current offset
    - `has_more` boolean, required: Whether more results exist

## Other responses

- `401`: Missing or malformed API key
- `403`: Contract Intelligence is not enabled for this account. Contact support to request access., or the caller is not a vault owner
- `404`: Vault not found, archived, or access denied
- `422`: Vault access is per-user and requires a user-scoped API key (u:gcai_...).
- `429`: Rate limit exceeded. See [Rate Limits](https://docs.gc.ai/api-reference/concepts/rate-limits) for the tiers, limits, and how to back off.
- `500`: Internal server error
- `503`: Service temporarily unavailable

---

[API](https://skmtc.dev/gc-ai/apis/gc-ai-external-api.md) - [All operations](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gc-ai/apis/gc-ai-external-api/revisions/2bbdfddf7107?raw)
