Skip to Content
Launching the open-source gateway

Create a custom provider

POSThttps://api.respan.ai/api/providers/

To update an existing provider, use PATCH /api/providers/{provider_id}/.

Servers

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

Authentication

RespanApiKey

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.

HTTP scheme: bearer; format: Respan API key.

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.

Authorization: Bearer $RESPAN_DASHBOARD_JWT

Request body

A request body is required.

application/json

Field Type Requirement Description and constraints
$ object Required body
—
provider_id string Required in parent
Unique provider identifier within your organization.
Example: "my-vllm"
provider_name string Required in parent
Human-readable provider name.
Example: "My vLLM Server"
extra_kwargs object Optional
Provider configuration. Put provider credentials under extra_kwargs.api_key.
Additional properties are allowed
Example: {"api_key":"sk_provider_xxxxx","base_url":"https://vllm.example.com/v1","timeout":60}

OpenAPI request schema

{
  "type": "object",
  "required": [
    "provider_id",
    "provider_name"
  ],
  "properties": {
    "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": "Provider configuration. Put provider credentials under extra_kwargs.api_key.",
      "additionalProperties": true,
      "example": {
        "api_key": "sk_provider_xxxxx",
        "base_url": "https://vllm.example.com/v1",
        "timeout": 60
      }
    }
  }
}

Responses

201

Created provider.

application/json

Field Type Requirement Description and constraints
$ object Body
Additional properties are allowed
id string Required in parent
Provider string ID. Same value as provider_id.
Example: "my-vllm"
provider_id string Required in parent
Unique provider identifier within your organization.
Example: "my-vllm"
provider_name string Required in parent
Human-readable provider name.
Example: "My vLLM Server"
extra_kwargs object Optional
Stored provider configuration. The current backend returns this object, including credentials it contains; handle the response as sensitive.
Additional properties are allowed
Example: {"base_url":"https://vllm.example.com/v1"}
created_at string or null Optional
Format: date-time
updated_at string or null Optional
Format: date-time

OpenAPI response schema

{
  "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
}

400

Bad Request

application/json

Field Type Requirement Description and constraints
$ object Body
—
detail string Optional
—
error string Optional
—

OpenAPI response schema

{
  "type": "object",
  "properties": {
    "detail": {
      "type": "string"
    },
    "error": {
      "type": "string"
    }
  }
}
Example
{ "error": "Invalid request" }

403

The API key is missing, invalid or expired.

application/json

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

OpenAPI response 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." }

OpenAPI source

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

OpenAPI operation

{
  "summary": "Create a custom provider",
  "operationId": "createCustomProvider",
  "tags": [
    "Models"
  ],
  "description": "To update an existing provider, use `PATCH /api/providers/{provider_id}/`.",
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "required": [
            "provider_id",
            "provider_name"
          ],
          "properties": {
            "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": "Provider configuration. Put provider credentials under extra_kwargs.api_key.",
              "additionalProperties": true,
              "example": {
                "api_key": "sk_provider_xxxxx",
                "base_url": "https://vllm.example.com/v1",
                "timeout": 60
              }
            }
          }
        }
      }
    }
  },
  "responses": {
    "201": {
      "description": "Created provider.",
      "content": {
        "application/json": {
          "schema": {
            "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
          }
        }
      }
    },
    "400": {
      "description": "Bad Request",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "detail": {
                "type": "string"
              },
              "error": {
                "type": "string"
              }
            }
          },
          "example": {
            "error": "Invalid request"
          }
        }
      }
    },
    "403": {
      "$ref": "#/components/responses/InvalidApiKey"
    }
  },
  "security": [
    {
      "RespanApiKey": []
    },
    {
      "DashboardJwt": []
    }
  ]
}

OpenAPI path metadata

{}

Referenced OpenAPI components

{
  "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"
      }
    }
  }
}