---
title: "List custom providers"
description: "List custom providers for the authenticated organization."
---

<a id="playground-button:docs/apis/models/list-custom-providers"></a>

**GET** `https://api.respan.ai/api/providers/`

List custom providers for the authenticated organization.

## Servers

`https://api.respan.ai` — Respan API Server

<a id="request.auth"></a>

## Authentication

<a id="request.auth.Authorization"></a>

### RespanApiKey

Use your Respan API key for Respan API authentication. Enter only the Respan API key value; clients send Authorization: Bearer &lt;RESPAN_API_KEY&gt;. For /api/responses, provider credentials such as Perplexity, OpenAI, or Azure OpenAI go in Settings -&gt; Providers or respan_params.credential_override in the request body, not in this authentication field.

HTTP scheme: `bearer`; format: `Respan API key`.


```http
Authorization: Bearer $RESPAN_API_KEY
```


**Or:**

### DashboardJwt

Use a dashboard JWT only for dashboard-authenticated endpoints. Respan API-key endpoints use the respanApiKey auth field instead.

HTTP scheme: `bearer`; format: `Dashboard JWT`.


```http
Authorization: Bearer $RESPAN_DASHBOARD_JWT
```


<a id="request.query"></a>

## Query parameters


| Parameter | Type | Required | Description and constraints |
| --- | --- | --- | --- |
| <a id="request.query.page"></a>`page` | `integer` | Optional | Default: `1`<br />Minimum: `1` |
| <a id="request.query.page_size"></a>`page_size` | `integer` | Optional | Default: `100`<br />Minimum: `1`<br />Maximum: `1000` |


<a id="response"></a>

## Responses

### 200

Paginated custom providers.

#### application/json


| Field | Type | Requirement | Description and constraints |
| --- | --- | --- | --- |
| `$` | `object` | Body | — |
| <a id="response.body.count"></a>`count` | `integer` | Required in parent | Number of results on this page, not the total. Request pages until `next` is null to get every result. |
| <a id="response.body.next"></a>`next` | `string or null` | Optional | Format: `uri` |
| <a id="response.body.previous"></a>`previous` | `string or null` | Optional | Format: `uri` |
| <a id="response.body.current_filters"></a>`current_filters` | `object` | Optional | Additional properties are allowed |
| <a id="response.body.results"></a>`results` | `array<object>` | Required in parent | — |
| `results[]` | `object` | Array item | Additional properties are allowed |
| `results[].id` | `string` | Required in parent | Provider string ID. Same value as `provider_id`.<br />Example: `"my-vllm"` |
| `results[].provider_id` | `string` | Required in parent | Unique provider identifier within your organization.<br />Example: `"my-vllm"` |
| `results[].provider_name` | `string` | Required in parent | Human-readable provider name.<br />Example: `"My vLLM Server"` |
| `results[].extra_kwargs` | `object` | Optional | Stored provider configuration. The current backend returns this object, including credentials it contains; handle the response as sensitive.<br />Additional properties are allowed<br />Example: `{"base_url":"https://vllm.example.com/v1"}` |
| `results[].created_at` | `string or null` | Optional | Format: `date-time` |
| `results[].updated_at` | `string or null` | Optional | Format: `date-time` |


<details class="api-schema-source">
<summary>OpenAPI response schema</summary>


```json
{
  "type": "object",
  "required": [
    "count",
    "results"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "description": "Number of results on this page, not the total. Request pages until `next` is null to get every result."
    },
    "next": {
      "type": "string",
      "format": "uri",
      "nullable": true
    },
    "previous": {
      "type": "string",
      "format": "uri",
      "nullable": true
    },
    "current_filters": {
      "type": "object",
      "additionalProperties": true
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "provider_id",
          "provider_name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Provider string ID. Same value as `provider_id`.",
            "example": "my-vllm"
          },
          "provider_id": {
            "type": "string",
            "description": "Unique provider identifier within your organization.",
            "example": "my-vllm"
          },
          "provider_name": {
            "type": "string",
            "description": "Human-readable provider name.",
            "example": "My vLLM Server"
          },
          "extra_kwargs": {
            "type": "object",
            "description": "Stored provider configuration. The current backend returns this object, including credentials it contains; handle the response as sensitive.",
            "additionalProperties": true,
            "example": {
              "base_url": "https://vllm.example.com/v1"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": true
      }
    }
  }
}
```

</details>

<a id="response.error"></a>

### 403

The API key is missing, invalid or expired.

#### application/json


| Field | Type | Requirement | Description and constraints |
| --- | --- | --- | --- |
| `$` | `object` | Body | — |
| `detail` | `string` | Required in parent | — |


<details class="api-schema-source">
<summary>OpenAPI response schema</summary>


```json
{
  "type": "object",
  "required": [
    "detail"
  ],
  "properties": {
    "detail": {
      "type": "string"
    }
  }
}
```

</details>

##### Example


```json
{
  "detail": "Your API key is invalid or expired, please check your API key in the platform settings."
}
```


## OpenAPI source

The operation and referenced components below retain the complete OpenAPI definitions, including constraints and examples.

<!-- openapi-operation:start -->
<details class="api-schema-source">
<summary>OpenAPI operation</summary>


```json
{
  "summary": "List custom providers",
  "operationId": "listCustomProviders",
  "tags": [
    "Models"
  ],
  "description": "List custom providers for the authenticated organization.",
  "responses": {
    "200": {
      "description": "Paginated custom providers.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "count",
              "results"
            ],
            "properties": {
              "count": {
                "type": "integer",
                "description": "Number of results on this page, not the total. Request pages until `next` is null to get every result."
              },
              "next": {
                "type": "string",
                "format": "uri",
                "nullable": true
              },
              "previous": {
                "type": "string",
                "format": "uri",
                "nullable": true
              },
              "current_filters": {
                "type": "object",
                "additionalProperties": true
              },
              "results": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "provider_id",
                    "provider_name"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Provider string ID. Same value as `provider_id`.",
                      "example": "my-vllm"
                    },
                    "provider_id": {
                      "type": "string",
                      "description": "Unique provider identifier within your organization.",
                      "example": "my-vllm"
                    },
                    "provider_name": {
                      "type": "string",
                      "description": "Human-readable provider name.",
                      "example": "My vLLM Server"
                    },
                    "extra_kwargs": {
                      "type": "object",
                      "description": "Stored provider configuration. The current backend returns this object, including credentials it contains; handle the response as sensitive.",
                      "additionalProperties": true,
                      "example": {
                        "base_url": "https://vllm.example.com/v1"
                      }
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time",
                      "nullable": true
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "403": {
      "$ref": "#/components/responses/InvalidApiKey"
    }
  },
  "security": [
    {
      "RespanApiKey": []
    },
    {
      "DashboardJwt": []
    }
  ],
  "parameters": [
    {
      "name": "page",
      "in": "query",
      "schema": {
        "type": "integer",
        "minimum": 1,
        "default": 1
      }
    },
    {
      "name": "page_size",
      "in": "query",
      "schema": {
        "type": "integer",
        "minimum": 1,
        "maximum": 1000,
        "default": 100
      }
    }
  ]
}
```

</details>
<!-- openapi-operation:end -->

<!-- openapi-path-item:start -->
<details class="api-schema-source">
<summary>OpenAPI path metadata</summary>


```json
{}
```

</details>
<!-- openapi-path-item:end -->

<!-- openapi-components:start -->
<details class="api-schema-source">
<summary>Referenced OpenAPI components</summary>


```json
{
  "responses": {
    "InvalidApiKey": {
      "description": "The API key is missing, invalid or expired.",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "detail"
            ],
            "properties": {
              "detail": {
                "type": "string"
              }
            }
          },
          "example": {
            "detail": "Your API key is invalid or expired, please check your API key in the platform settings."
          }
        }
      }
    }
  },
  "securitySchemes": {
    "DashboardJwt": {
      "type": "http",
      "scheme": "bearer",
      "bearerFormat": "Dashboard JWT",
      "description": "Use a dashboard JWT only for dashboard-authenticated endpoints. Respan API-key endpoints use the respanApiKey auth field instead.",
      "x-fern-bearer": {
        "name": "dashboardJwt",
        "env": "RESPAN_DASHBOARD_JWT"
      }
    },
    "RespanApiKey": {
      "type": "http",
      "scheme": "bearer",
      "bearerFormat": "Respan API key",
      "description": "Use your Respan API key for Respan API authentication. Enter only the Respan API key value; clients send Authorization: Bearer <RESPAN_API_KEY>. For /api/responses, provider credentials such as Perplexity, OpenAI, or Azure OpenAI go in Settings -> Providers or respan_params.credential_override in the request body, not in this authentication field.",
      "x-fern-bearer": {
        "name": "respanApiKey",
        "env": "RESPAN_API_KEY"
      }
    }
  }
}
```

</details>
<!-- openapi-components:end -->
