---
title: "List OAuth apps that currently hold access on this account. One row per client with a usable token. An expired access token is included while its refresh token can still be used. Requires key_read. An inbox-scoped key is 403 permission_denied. Token hashes and client secrets are not returned. A sub-account sees only its own grants."
method: GET
path: "/api/v1/oauth/grants"
tags: ["Auth"]
---

# List OAuth apps that currently hold access on this account. One row per client with a usable token. An expired access token is included while its refresh token can still be used. Requires key_read. An inbox-scoped key is 403 permission_denied. Token hashes and client secrets are not returned. A sub-account sees only its own grants.

`GET /api/v1/oauth/grants`

## Request

- Base URL: `https://cooperemail.com`
- URL: `https://cooperemail.com/api/v1/oauth/grants`
- Auth: HTTP bearer

## Response `200`

Connected apps, newest last_refreshed_at first

- object
  - `object` 'list', required
  - `data` OAuthGrant[], required
    - `object` 'oauth_grant', required
    - `id` string, required: The OAuth client id.
    - `client_id` string, required
    - `client_name` string, required: Name from the client registration. Empty when that row is missing.
    - `redirect_hosts` string[], required: Hostnames from the client's redirect URIs. No paths, queries, or ports.
    - `scope` string, required
    - `resource` string, nullable, required
    - `connected_at` string, date-time, required
    - `last_refreshed_at` string, date-time, required
    - `active_tokens` integer, required

---

[API](https://skmtc.dev/cooperemail/apis/cooper-email-api.md) · [All operations](https://skmtc.dev/cooperemail/apis/cooper-email-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cooperemail/apis/cooper-email-api/revisions/6d800a7b3e33?raw)
