Poolside Chat Completions API

OpenAI-compatible chat completions endpoint (POST /openai/v1/chat/completions) serving Poolside's Laguna models, including streaming responses. The base URL is not a shared public host - it is configured per customer deployment, per Poolside's own documentation ("The base URL is configured per deployment: https://").

OpenAPI Specification

poolside-ai-openapi.json Raw ↑
{
  "components": {
    "schemas": {
      "ChatCompletion": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/ChatCompletion.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "choices": {
            "description": "A list of chat completions from the model.",
            "items": {
              "$ref": "#/components/schemas/ChatCompletionChoice"
            },
            "minItems": 1,
            "type": "array"
          },
          "created": {
            "description": "The Unix timestamp (in seconds) when the completion was created.",
            "format": "int64",
            "type": "integer"
          },
          "model": {
            "description": "The model used for the chat completion.",
            "type": "string"
          },
          "object": {
            "description": "The object type 'chat.completion' or ''chat.completion.chunk'",
            "type": "string"
          },
          "usage": {
            "$ref": "#/components/schemas/CompletionUsage",
            "description": "Usage statistics for the chat completion."
          }
        },
        "required": [
          "model",
          "created",
          "object",
          "choices"
        ],
        "type": "object"
      },
      "ChatCompletionChoice": {
        "additionalProperties": true,
        "properties": {
          "delta": {
            "$ref": "#/components/schemas/ChatCompletionMessage",
            "description": "The chat completion message when streaming."
          },
          "finish_reason": {
            "description": "The reason the model stopped generating tokens. 'stop' the model hit a stop point, 'length' the maximum number of tokens was reached, 'content_filter' content was avoided due to filtering.",
            "type": "string"
          },
          "index": {
            "description": "The index of the choice in the list of choices.",
            "format": "int64",
            "type": "integer"
          },
          "message": {
            "$ref": "#/components/schemas/ChatCompletionMessage",
            "description": "The chat completion message when not streaming."
          }
        },
        "required": [
          "index",
          "finish_reason"
        ],
        "type": "object"
      },
      "ChatCompletionMessage": {
        "additionalProperties": true,
        "properties": {
          "content": {
            "description": "The text content of the message. Can be either a string or an array of content parts."
          },
          "role": {
            "description": "The role of the author of this message.",
            "enum": [
              "user",
              "assistant",
              "system",
              "tool"
            ],
            "type": "string"
          },
          "tool_call_id": {
            "description": "Identifies the tool call this message relates to, used for 'tool' role messages",
            "type": "string"
          },
          "tool_calls": {
            "items": {
              "$ref": "#/components/schemas/ToolCall"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "Completion": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/Completion.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "choices": {
            "description": "The list of completion choices.",
            "items": {
              "$ref": "#/components/schemas/CompletionChoice"
            },
            "type": "array"
          },
          "created": {
            "description": "The Unix timestamp (in seconds) of when the completion was created.",
            "format": "int64",
            "type": "integer"
          },
          "model": {
            "description": "The model used for the completion.",
            "type": "string"
          },
          "object": {
            "description": "The object type, which is always 'text_completion'.",
            "type": "string"
          },
          "usage": {
            "$ref": "#/components/schemas/CompletionUsage",
            "description": "Usage statistics for the completion request."
          }
        },
        "required": [
          "object",
          "created",
          "model",
          "choices"
        ],
        "type": "object"
      },
      "CompletionChoice": {
        "additionalProperties": true,
        "properties": {
          "finish_reason": {
            "description": "The reason the model stopped generating tokens.",
            "type": "string"
          },
          "index": {
            "description": "The index of the choice in the list of choices.",
            "format": "int64",
            "type": "integer"
          },
          "text": {
            "description": "The generated text.",
            "type": "string"
          }
        },
        "required": [
          "text",
          "index",
          "finish_reason"
        ],
        "type": "object"
      },
      "CompletionUsage": {
        "additionalProperties": true,
        "properties": {
          "completion_tokens": {
            "description": "Number of tokens in the completion.",
            "format": "int64",
            "type": "integer"
          },
          "prompt_tokens": {
            "description": "Number of tokens in the prompt.",
            "format": "int64",
            "type": "integer"
          },
          "total_tokens": {
            "description": "Total number of tokens used in the request 'prompt + completion'.",
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "completion_tokens",
          "prompt_tokens",
          "total_tokens"
        ],
        "type": "object"
      },
      "CreateChatCompletionBody": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/CreateChatCompletionBody.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "model": {
            "description": "The model to use for the completion.",
            "type": "string"
          },
          "stream": {
            "description": "If true, the response will be streamed as a series of events instead of a single JSON object.",
            "type": "boolean"
          },
          "stream_options": {
            "$ref": "#/components/schemas/StreamOptions",
            "description": "Options for streaming response. Only set this when you set stream: true."
          }
        },
        "required": [
          "model"
        ],
        "type": "object"
      },
      "CreateCompletionBody": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/CreateCompletionBody.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "cache_control": {
            "additionalProperties": {},
            "description": "Anthropic-style prompt-cache marker, forwarded verbatim to the upstream provider.",
            "type": "object"
          },
          "include_stop_str_in_output": {
            "description": "Whether to include the stop strings in output text. Defaults to false.",
            "type": "boolean"
          },
          "max_completion_tokens": {
            "description": "The maximum number of tokens to generate in the completion.",
            "format": "int64",
            "type": "integer"
          },
          "max_tokens": {
            "description": "The maximum number of tokens to generate in the completion.",
            "format": "int64",
            "type": "integer"
          },
          "min_p": {
            "description": "Sets a minimum probability threshold relative to the most likely token.",
            "format": "double",
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          },
          "model": {
            "description": "The model to use for the completion.",
            "type": "string"
          },
          "prompt": {
            "description": "The prompt to generate completions for.",
            "type": "string"
          },
          "return_tokens_as_token_ids": {
            "description": "Whether to return the generated tokens as token IDs instead of text. Defaults to false.",
            "type": "boolean"
          },
          "seed": {
            "description": "If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed.",
            "format": "int64",
            "type": "integer"
          },
          "skip_special_tokens": {
            "description": "Whether to skip special tokens in the output.",
            "type": "boolean"
          },
          "stop": {
            "description": "An array of sequences where the API will stop generating further tokens.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "stream": {
            "description": "If true, the response will be streamed as a series of events instead of a single JSON object.",
            "type": "boolean"
          },
          "stream_options": {
            "$ref": "#/components/schemas/StreamOptions",
            "description": "Options for streaming response. Only set this when you set stream: true."
          },
          "temperature": {
            "description": "What sampling temperature to use, between 0 and 2.",
            "format": "double",
            "maximum": 2,
            "minimum": 0,
            "type": "number"
          },
          "top_k": {
            "description": "Limits the model to consider only the top K most likely tokens at each step.",
            "format": "int64",
            "type": "integer"
          },
          "top_p": {
            "description": "An alternative to sampling with temperature, called nucleus sampling.",
            "exclusiveMinimum": 0,
            "format": "double",
            "maximum": 1,
            "type": "number"
          }
        },
        "required": [
          "prompt",
          "model"
        ],
        "type": "object"
      },
      "ErrorDetail": {
        "additionalProperties": true,
        "properties": {
          "location": {
            "description": "Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'",
            "type": "string"
          },
          "message": {
            "description": "Error message text",
            "type": "string"
          },
          "value": {
            "description": "The value at the given location"
          }
        },
        "type": "object"
      },
      "ErrorModel": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/ErrorModel.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "detail": {
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "examples": [
              "Property foo is required but is missing."
            ],
            "type": "string"
          },
          "errors": {
            "description": "Optional list of individual error details",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            },
            "type": "array"
          },
          "instance": {
            "description": "A URI reference that identifies the specific occurrence of the problem.",
            "examples": [
              "https://example.com/error-log/abc123"
            ],
            "format": "uri",
            "type": "string"
          },
          "status": {
            "description": "HTTP status code",
            "examples": [
              400
            ],
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
            "examples": [
              "Bad Request"
            ],
            "type": "string"
          },
          "type": {
            "default": "about:blank",
            "description": "A URI reference to human-readable documentation for the error.",
            "examples": [
              "https://example.com/errors/example"
            ],
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "FunctionCall": {
        "additionalProperties": true,
        "properties": {
          "arguments": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "arguments"
        ],
        "type": "object"
      },
      "Model": {
        "additionalProperties": true,
        "properties": {
          "created": {
            "description": "The Unix timestamp (in seconds) when the model was created.",
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "description": "The model identifier.",
            "type": "string"
          },
          "object": {
            "enum": [
              "model"
            ],
            "type": "string"
          },
          "owned_by": {
            "enum": [
              "system"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "created",
          "owned_by",
          "object"
        ],
        "type": "object"
      },
      "PageListModel": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/PageListModel.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "data": {
            "items": {
              "$ref": "#/components/schemas/Model"
            },
            "type": "array"
          },
          "object": {
            "type": "string"
          }
        },
        "required": [
          "data",
          "object"
        ],
        "type": "object"
      },
      "StreamOptions": {
        "additionalProperties": true,
        "properties": {
          "include_usage": {
            "description": "Whether to include usage statistics in the stream response.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "ToolCall": {
        "additionalProperties": true,
        "properties": {
          "function": {
            "$ref": "#/components/schemas/FunctionCall"
          },
          "id": {
            "description": "The ID of the tool call.",
            "type": "string"
          },
          "type": {
            "enum": [
              "function"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "function"
        ],
        "type": "object"
      },
      "V1PromptModelError": {
        "additionalProperties": true,
        "properties": {
          "$schema": {
            "description": "A URL to the JSON Schema for this object.",
            "examples": [
              "https://example.com/openai/schemas/V1PromptModelError.json"
            ],
            "format": "uri",
            "readOnly": true,
            "type": "string"
          },
          "code": {
            "enum": [
              "max-tokens-exceeded",
              "model-not-found"
            ],
            "type": "string"
          },
          "detail": {
            "description": "A human-readable explanation specific to this occurrence of the problem.",
            "examples": [
              "Property foo is required but is missing."
            ],
            "type": "string"
          },
          "errors": {
            "description": "Optional list of individual error details",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            },
            "type": "array"
          },
          "instance": {
            "description": "A URI reference that identifies the specific occurrence of the problem.",
            "examples": [
              "https://example.com/error-log/abc123"
            ],
            "format": "uri",
            "type": "string"
          },
          "status": {
            "description": "HTTP status code",
            "examples": [
              400
            ],
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "description": "A short, human-readable summary of the problem type. This value should not change between occurrences of the error.",
            "examples": [
              "Bad Request"
            ],
            "type": "string"
          },
          "type": {
            "default": "about:blank",
            "description": "A URI reference to human-readable documentation for the error.",
            "examples": [
              "https://example.com/errors/example"
            ],
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "title": "OpenAI Compatible API",
    "version": "1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/openai/v1/chat/completions": {
      "post": {
        "description": "Generates a response based on a list of messages sent by the user to the model. The list of messages may include system messages, user messages, and assistant messages.<br/><br/>This endpoint allows other tools in the developer ecosystem to leverage poolside as a drop-in replacement for other models.",
        "operationId": "create-chat-completion",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateChatCompletionBody"
              }
            },
            "application/octet-stream": {
              "schema": {
                "contentMediaType": "application/octet-stream",
                "format": "binary",
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatCompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-Sent Events stream.",
                  "items": {
                    "properties": {
                      "data": {
                        "$ref": "#/components/schemas/ChatCompletion"
                      }
                    },
                    "required": [
                      "data"
                    ],
                    "type": "object"
                  },
                  "title": "Server Sent Events",
                  "type": "array"
                }
              }
            },
            "description": "Successful response - JSON when stream=false, SSE when stream=true"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1PromptModelError"
                }
              }
            },
            "description": "Bad Request"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create chat completion",
        "tags": [
          "chat"
        ]
      }
    },
    "/openai/v1/completions": {
      "post": {
        "deprecated": true,
        "description": "Get a completion along with the probabilities of alternative tokens at each position. This endpoint is not recommended for new use cases and is maintained for legacy compatibility only.<br/><br/>Use <i>/chat/completions</i> instead for the best and newest models.",
        "operationId": "create-completion",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateCompletionBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Completion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-Sent Events stream.",
                  "items": {
                    "properties": {
                      "data": {
                        "$ref": "#/components/schemas/Completion"
                      }
                    },
                    "required": [
                      "data"
                    ],
                    "type": "object"
                  },
                  "title": "Server Sent Events",
                  "type": "array"
                }
              }
            },
            "description": "Successful response - JSON when stream=false, SSE when stream=true"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/V1PromptModelError"
                }
              }
            },
            "description": "Bad Request"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "Create completion",
        "tags": [
          "chat"
        ]
      }
    },
    "/openai/v1/models": {
      "get": {
        "operationId": "list-models",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageListModel"
                }
              }
            },
            "description": "OK"
          },
          "default": {
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            },
            "description": "Error"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "summary": "List models",
        "tags": [
          "models"
        ]
      }
    }
  }
}