---
title: "List Custom Providers"
method: GET
path: "/api/providers/"
tags: ["models"]
---

# List Custom Providers

`GET /api/providers/`

Create and list custom LLM providers for an organization

Supports both internal (JWT) and public (API key) authentication.
- Internal API: Returns all fields
- Public API: Hides internal fields (litellm_provider_id, is_managed, moderation)

Superadmin access:
    Superadmins can access ALL custom providers across all organizations.
    Regular users can only access their own organization's providers.

Endpoint:
    GET/POST /llm_models/custom_providers/
    GET/POST /api/llm-models/custom-providers/

Args (POST):
    - provider_id (Required): Unique identifier for the custom provider
    - provider_name (Required): Human-readable name for the provider
    - litellm_provider_id (Optional): Base provider ID for LiteLLM compatibility (e.g., "openai", "anthropic")
    - moderation (Optional): Moderation setting ("filtered", "unfiltered")
    - extra_kwargs (Optional): Additional provider-specific configuration (all credentials live here)
        * api_key: Provider API key
        * base_url: Custom base URL for the provider's API
        * temperature: Default temperature setting
        * max_tokens: Default max tokens setting
        * timeout: Request timeout in seconds

Returns (POST):
    {
        "id": 123,
        "provider_id": "my-custom-openai",
        "provider_name": "My Custom OpenAI Provider",
        "litellm_provider_id": "openai",
        "moderation": "filtered",
        "extra_kwargs": {
            "api_key": "sk-custom-key-123",
            "base_url": "https://api.my-custom-provider.com/v1",
            "temperature": 0.7,
            "max_tokens": 4096
        },
        "organization": 456,
        "created_at": "2024-01-15T10:30:00Z"
    }

Returns (GET):
    [
        {
            "id": 123,
            "provider_id": "my-custom-openai",
            "provider_name": "My Custom OpenAI Provider",
            "litellm_provider_id": "openai",
            ...
        }
    ]

## Query parameters

- `page` integer
- `page_size` integer

## Headers

- `Authorization` string, required

## Response `200`

- PaginatedPublicCustomProviderListList
  - `count` integer, required
  - `next` string, uri, nullable
  - `previous` string, uri, nullable
  - `total_count` integer
  - `current_filters` FilterParamDictPydantic — Pydantic model for FilterParamDict. A dictionary that maps metric names to their filter parameters. Each key is a metric name (str), and each value can be: - A single MetricFilterParamPydantic (one condition) - A List[MetricFilterParamPydantic] (multiple conditions for same metric) - A FilterBundlePydantic (nested filter bundle with connector) Note: Uses extra="allow" for dynamic metric name fields. The __pydantic_extra__ annotation tells Pydantic what types to expect for extra fields, and generates typed additionalProperties in JSON Schema.
  - `filters_data` PaginatedPublicCustomProviderListListFiltersData
  - `results` PublicCustomProviderList[], required
    - `project` string, nullable
    - `provider_name` string, required
    - `provider_id` string, required
    - `extra_kwargs` unknown
    - `created_at` string, date-time, nullable, required
    - `updated_at` string, date-time, nullable, required
    - `respan_discount_rate` number, double
    - `models_sync_config` unknown
    - `id` string, required

---

[API](https://skmtc.net/keywordsai/apis/api-reference.md) · [All operations](https://skmtc.net/keywordsai/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/keywordsai/api-reference/versions/c26d550029f8/schema)
