---
title: "List OAuth-capable connector types"
method: GET
path: "/oauth/registry"
tags: ["OAuth Configuration"]
---

# List OAuth-capable connector types

`GET /oauth/registry`

## Request

- Base URL: `https://app.pipeshub.com/api/v1`
- URL: `https://app.pipeshub.com/api/v1/oauth/registry`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `/api/v1/oauth2/authorize`
    - Client credentials
    - Token URL: `/api/v1/oauth2/token` scopes: `connector:read`

List the connector and toolset types that support OAuth, from the OAuth registry.<br><br>
Each entry carries the provider URLs, the scopes requested, and the `authFields`
to collect when creating an OAuth configuration for that type.<br><br>
Any authenticated user can call this; it is not limited to admins.

## Query parameters

- `page` integer
- `limit` integer
- `search` string

## Response `200`

OAuth connector types retrieved

- object
  - `success` boolean, required
  - `connectors` OAuthRegistryEntry[], required
    - `name` string, required
    - `type` string, required: The `connectorType` to use in the OAuth app and connector routes
    - `appGroup` string, required
    - `authType` string, required: Always OAUTH
    - `appDescription` string, required
    - `appCategories` string[], required
    - `iconPath` string, required
    - `oauthScopes` object, required: Provider scopes requested for each way the connector is used
      - `personalSync` string[], required
      - `teamSync` string[], required
      - `agent` string[], required
    - `redirectUri` string, required: Path the provider redirects back to; PipesHub's public origin is prefixed to it
    - `authorizeUrl` string, required
    - `tokenUrl` string, required
    - `additionalParams` object: Extra query parameters sent on the authorize URL; present for some types only
    - `tokenAccessType` string: Dropbox and Salesforce only
    - `authFields` object[], required: The fields an admin fills in when registering the OAuth app
      - `name` string, required
      - `displayName` string, required
      - `placeholder` string, required
      - `description` string, required
      - `fieldType` 'TEXT' | 'PASSWORD' | 'URL' | 'SELECT', required
      - `required` boolean, required
      - `usage` 'CONFIGURE' | 'BOTH', required
      - `defaultValue` string, required
      - `validation` object, required
        - `minLength` integer
        - `maxLength` integer
      - `isSecret` boolean, required
      - `options` string[]: Present on SELECT fields
    - `documentationLinks` object[], required
      - `title` string, required
      - `url` string, required
      - `type` string, required: For example setup, docs or pipeshub (the casing varies)
  - `pagination` OAuthRegistryPagination, required: Pagination block of `GET /oauth/registry` and `GET /oauth/{connectorType}`
    - `page` integer: Current page number
    - `limit` integer: Items per page
    - `search` string, nullable: The search term that was applied, or null
    - `totalCount` integer: Number of items that match
    - `totalPages` integer
    - `hasPrev` boolean
    - `hasNext` boolean
    - `prevPage` integer, nullable: Previous page number, or null on the first page
    - `nextPage` integer, nullable: Next page number, or null on the last page

## Other responses

- `400`: Invalid request: a parameter or the body failed validation Also returned, before authentication, when a query value, or any string in a JSON or form-encoded body, looks like markup to the app-wide XSS filter: an HTML tag, a script tag, `<iframe`, `<object`, `<embed` or `<svg` tag, a word starting with `on` followed by `=` (meant for inline event handlers such as `onerror=`, it also catches plain text such as `one=1`), a `javascript:` or `data:text/html` URL, an encoded script tag (`&lt;script`, `%3cscript`), or any string longer than 100,000 characters (`HTTP_BAD_REQUEST`, "HTML tags, scripts, and XSS content are not allowed in ...", naming the field or query parameter; a string over 100,000 characters is refused as too long instead). A JSON body that does not parse is refused the same way, also before authentication (`HTTP_BAD_REQUEST`, "The request body is not valid JSON.").
- `401`: Missing or invalid credentials
- `403`: Forbidden — one of: - the OAuth token lacks the `connector:read` scope - the token lacks `connector:read`
- `500`: The registry could not be read. A JSON body larger than 10 MB, or a form-encoded body larger than 100 KB or with more than 1000 fields, is answered `413` by the app-wide body parsers instead, also before authentication.

## Changes

- **2026-10-28** `dbb5e203b445`: 6 breaking, 1 info
  - the response property `pagination/hasNext` became optional for the status `200`
  - the response property `pagination/hasPrev` became optional for the status `200`
  - the response property `pagination/limit` became optional for the status `200`
  - the response property `pagination/page` became optional for the status `200`
  - …3 more
- **2026-10-15** `a44792e4f0e6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/pipeshub-ai/apis/pipeshub-api/changes/oauth/registry/get.md)

---

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