Dedalus Labs V1 API

The V1 API from Dedalus Labs — 12 operation(s) for v1.

Operations 12

GET /v1/models List Models #
GET /v1/models/{model_id} Retrieve Model #
POST /v1/chat/completions Create Chat Completion #
POST /v1/embeddings Create Embeddings #
POST /v1/responses Create Response #
POST /v1/audio/speech Create Speech #
POST /v1/audio/transcriptions Create Transcription #
POST /v1/audio/translations Create Translation #
POST /v1/images/generations Create Image #
POST /v1/images/edits Edit Image #
POST /v1/images/variations Create Variation #
POST /v1/ocr Process Ocr #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dedaluslabs-v1-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dedaluslabs-v1-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Dedalus V1 API
  description: 'MCP gateway for AI agents. Mix-and-match any model with any tool from our marketplace.


    ## Authentication

    Use Bearer token or X-API-Key header authentication:

    ```

    Authorization: Bearer your-api-key-here

    ```

    ```

    x-api-key: your-api-key-here

    ```


    ## Available Endpoints

    - **GET /v1/models**: list available models

    - **POST /v1/chat/completions**: Chat completions with MCP tools

    - **GET /health**: Service health check'
  version: 0.0.1
servers:
- url: https://api.dedaluslabs.ai
  description: Official Dedalus API
tags:
- name: V1
paths:
  /v1/models:
    get:
      tags:
      - V1
      summary: List Models
      description: "List available models.\n\nRetrieve the complete list of models available to your organization, including\nmodels from OpenAI, Anthropic, Google, xAI, Mistral, Fireworks, and DeepSeek.\n\nReturns:\n    ListModelsResponse: List of available models across all supported providers"
      operationId: list_models_v1_models_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListModelsResponse'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.models.list();'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.models.list()'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Models.List(ctx context.Context)'
  /v1/models/{model_id}:
    get:
      tags:
      - V1
      summary: Retrieve Model
      description: "Retrieve a model.\n\nRetrieve detailed information about a specific model, including its capabilities,\nprovider, and supported features.\n\nArgs:\n    model_id: The ID of the model to retrieve (e.g., 'openai/gpt-4', 'anthropic/claude-3-5-sonnet-20241022')\n    user: Authenticated user obtained from API key validation\n\nReturns:\n    Model: Information about the requested model\n\nRaises:\n    HTTPException:\n        - 401 if authentication fails\n        - 404 if model not found or not accessible with current API key\n        - 500 if internal error occurs\n\nRequires:\n    Valid API key with 'read' scope permission\n\nExample:\n    ```python\n    import dedalus_sdk\n\n    client = dedalus_sdk.Client(api_key=\"your-api-key\")\n    model = client.models.retrieve(\"openai/gpt-4\")\n\n    print(f\"Model: {model.id}\")\n    print(f\"Owner: {model.owned_by}\")\n    ```\n\n    Response:\n    ```json\n    {\n        \"id\": \"openai/gpt-4\",\n        \"object\": \"model\",\n        \"created\": 1687882411,\n        \"owned_by\": \"openai\"\n    }\n    ```"
      operationId: retrieve_model_v1_models__model_id__get
      security:
      - Bearer: []
      parameters:
      - name: model_id
        in: path
        required: true
        schema:
          type: string
          title: Model Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Model'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.models.retrieve(modelID);'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.models.retrieve(model_id)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Models.Get(ctx, modelID string)'
  /v1/chat/completions:
    post:
      tags:
      - V1
      summary: Create Chat Completion
      description: "Create a chat completion.\n\nGenerates a model response for the given conversation and configuration.\nSupports OpenAI-compatible parameters and provider-specific extensions.\n\nHeaders:\n  - Authorization: bearer key for the calling account.\n  - X-Provider / X-Provider-Key: optional headers for using your own provider API key.\n\nBehavior:\n  - If multiple models are supplied, the first one is used, and the agent may hand off to another model.\n  - Tools may be invoked on the server or signaled for the client to run.\n  - Streaming responses emit incremental deltas; non-streaming returns a single object.\n  - Usage metrics are computed when available and returned in the response.\n\nResponses:\n  - 200 OK: JSON completion object with choices, message content, and usage.\n  - 400 Bad Request: validation error.\n  - 401 Unauthorized: authentication failed.\n  - 402 Payment Required or 429 Too Many Requests: quota, balance, or rate limit issue.\n  - 500 Internal Server Error: unexpected failure.\n\nBilling:\n  - Token usage metered by the selected model(s).\n  - Tool calls and MCP sessions may be billed separately.\n  - Streaming is settled after the stream ends via an async task.\n\nExample (non-streaming HTTP):\n  POST /v1/chat/completions\n  Content-Type: application/json\n  Authorization: Bearer <key>\n\n  {\n    \"model\": \"provider/model-name\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]\n  }\n\n  200 OK\n  {\n    \"id\": \"cmpl_123\",\n    \"object\": \"chat.completion\",\n    \"choices\": [\n      {\"index\": 0, \"message\": {\"role\": \"assistant\", \"content\": \"Hi there!\"}, \"finish_reason\": \"stop\"}\n    ],\n    \"usage\": {\"prompt_tokens\": 3, \"completion_tokens\": 4, \"total_tokens\": 7}\n  }\n\nExample (streaming over SSE):\n  POST /v1/chat/completions\n  Accept: text/event-stream\n\n  data: {\"id\":\"cmpl_123\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Hi\"}}]}\n  data: {\"id\":\"cmpl_123\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" there!\"}}]}\n  data: [DONE]"
      operationId: create_chat_completion_v1_chat_completions_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatCompletionRequest'
        required: true
      responses:
        '200':
          description: JSON or SSE stream of ChatCompletionChunk events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ChatCompletion'
            text/event-stream:
              schema:
                $ref: '#/components/schemas/ChatCompletionStreamResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.chat.completions.create({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.chat.completions.create(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Chat.Completions.New(ctx, body githubcomdedaluslabsdedalussdkgo.ChatCompletionNewParams)'
  /v1/embeddings:
    post:
      tags:
      - V1
      summary: Create Embeddings
      description: Create embeddings using the configured provider.
      operationId: create_embeddings_v1_embeddings_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmbeddingRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmbeddingResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.embeddings.create({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.embeddings.create(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Embeddings.New(ctx, body githubcomdedaluslabsdedalussdkgo.EmbeddingNewParams)'
  /v1/responses:
    post:
      tags:
      - V1
      summary: Create Response
      description: 'Create a response using the OpenAI Responses API.


        This endpoint routes directly to OpenAI''s Responses API.

        Only OpenAI models are supported.'
      operationId: create_response_v1_responses_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ResponsesRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponsesResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.responses.create(**params)'
  /v1/audio/speech:
    post:
      tags:
      - V1
      summary: Create Speech
      description: 'Generate speech audio from text.


        Generates audio from the input text using text-to-speech models. Supports multiple

        voices and output formats including mp3, opus, aac, flac, wav, and pcm.


        Returns streaming audio data that can be saved to a file or streamed directly to users.'
      operationId: create_speech_v1_audio_speech_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpeechRequest'
        required: true
      responses:
        '200':
          description: Audio file stream
          content:
            audio/mpeg:
              schema:
                type: string
                format: binary
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.audio.speech.create({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.audio.speech.create(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Audio.Speech.New(ctx, body githubcomdedaluslabsdedalussdkgo.AudioSpeechNewParams)'
  /v1/audio/transcriptions:
    post:
      tags:
      - V1
      summary: Create Transcription
      description: "Transcribe audio into text.\n\nTranscribes audio files using OpenAI's Whisper model. Supports multiple audio formats\nincluding mp3, mp4, mpeg, mpga, m4a, wav, and webm. Maximum file size is 25 MB.\n\nArgs:\n    file: Audio file to transcribe (required)\n    model: Model ID to use (e.g., \"openai/whisper-1\")\n    language: ISO-639-1 language code (e.g., \"en\", \"es\") - improves accuracy\n    prompt: Optional text to guide the model's style\n    response_format: Format of the output (json, text, srt, verbose_json, vtt)\n    temperature: Sampling temperature between 0 and 1\n\nReturns:\n    Transcription object with the transcribed text"
      operationId: create_transcription_v1_audio_transcriptions_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_create_transcription_v1_audio_transcriptions_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/CreateTranscriptionResponseVerboseJson'
                - $ref: '#/components/schemas/CreateTranscriptionResponseJson'
                title: Response Create Transcription V1 Audio Transcriptions Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.audio.transcriptions.create({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.audio.transcriptions.create(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Audio.Transcriptions.New(ctx, body githubcomdedaluslabsdedalussdkgo.AudioTranscriptionNewParams)'
  /v1/audio/translations:
    post:
      tags:
      - V1
      summary: Create Translation
      description: "Translate audio into English.\n\nTranslates audio files in any supported language to English text using OpenAI's\nWhisper model. Supports the same audio formats as transcription. Maximum file size\nis 25 MB.\n\nArgs:\n    file: Audio file to translate (required)\n    model: Model ID to use (e.g., \"openai/whisper-1\")\n    prompt: Optional text to guide the model's style\n    response_format: Format of the output (json, text, srt, verbose_json, vtt)\n    temperature: Sampling temperature between 0 and 1\n\nReturns:\n    Translation object with the English translation"
      operationId: create_translation_v1_audio_translations_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_create_translation_v1_audio_translations_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/CreateTranslationResponseVerboseJson'
                - $ref: '#/components/schemas/CreateTranslationResponseJson'
                title: Response Create Translation V1 Audio Translations Post
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.audio.translations.create({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.audio.translations.create(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Audio.Translations.New(ctx, body githubcomdedaluslabsdedalussdkgo.AudioTranslationNewParams)'
  /v1/images/generations:
    post:
      tags:
      - V1
      summary: Create Image
      description: 'Generate images from text prompts.


        Pure image generation models only (DALL-E, GPT Image).

        For multimodal models like gemini-2.5-flash-image, use /v1/chat/completions.'
      operationId: create_image_v1_images_generations_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImageGenerateRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImagesResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.images.generate({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.images.generate(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Images.Generate(ctx, body githubcomdedaluslabsdedalussdkgo.ImageGenerateParams)'
  /v1/images/edits:
    post:
      tags:
      - V1
      summary: Edit Image
      description: 'Edit images using inpainting.


        Supports dall-e-2 and gpt-image-1. Upload an image and optionally a mask

        to indicate which areas to regenerate based on the prompt.'
      operationId: edit_image_v1_images_edits_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_edit_image_v1_images_edits_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImagesResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.images.edit({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.images.edit(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Images.Edit(ctx, body githubcomdedaluslabsdedalussdkgo.ImageEditParams)'
  /v1/images/variations:
    post:
      tags:
      - V1
      summary: Create Variation
      description: 'Create variations of an image.


        DALL·E 2 only. Upload an image to generate variations.'
      operationId: create_variation_v1_images_variations_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/Body_create_variation_v1_images_variations_post'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImagesResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: typescript
        label: Typescript
        source: 'const client = new Dedalus();


          const result = await client.images.createVariation({ ...params });'
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.images.create_variation(**params)'
      - lang: go
        label: Go
        source: 'client := dedalus.NewClient()


          result, err := client.Images.NewVariation(ctx, body githubcomdedaluslabsdedalussdkgo.ImageNewVariationParams)'
  /v1/ocr:
    post:
      tags:
      - V1
      summary: Process Ocr
      description: 'Process a document through Mistral OCR.


        Extracts text from PDFs and images, returning markdown-formatted content.'
      operationId: process_ocr_v1_ocr_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OCRRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OCRResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - Bearer: []
      x-codeSamples:
      - lang: python
        label: Python
        source: 'client = Dedalus()


          result = client.ocr.process(**params)'
components:
  schemas:
    ResponsePromptParam:
      properties:
        id:
          type: string
          title: Id
          description: Identifier of the stored prompt.
        version:
          anyOf:
          - type: string
          - type: 'null'
          title: Version
          description: Optional version identifier of the stored prompt.
        variables:
          anyOf:
          - $ref: '#/components/schemas/JSONObject'
          - type: 'null'
          description: Variables to substitute into the stored prompt template.
      type: object
      required:
      - id
      title: ResponsePromptParam
      description: Stored prompt template reference (BYOK).
    ToolChoiceNone:
      properties:
        type:
          type: string
          const: none
          title: Type
          x-order: 0
      type: object
      required:
      - type
      title: ToolChoiceNone
      description: 'The model will not be allowed to use tools.


        Fields:

        - type (required): Literal["none"]'
    OCRPage:
      properties:
        index:
          type: integer
          title: Index
        markdown:
          type: string
          title: Markdown
      type: object
      required:
      - index
      - markdown
      title: OCRPage
      description: Single page OCR result.
    MCPToolResult:
      properties:
        tool_name:
          type: string
          title: Tool Name
          description: Name of the MCP tool that was executed.
        server_name:
          type: string
          title: Server Name
          description: Name of the MCP server that handled the tool.
        arguments:
          $ref: '#/components/schemas/JSONObject'
          description: Input arguments passed to the tool.
        result:
          anyOf:
          - $ref: '#/components/schemas/JSONValue'
          - type: 'null'
          description: Structured result from the tool (parsed from structuredContent or content).
        is_error:
          type: boolean
          title: Is Error
          description: Whether the tool execution resulted in an error.
        duration_ms:
          anyOf:
          - type: integer
          - type: 'null'
          title: Duration (ms)
          description: Execution time in milliseconds.
      type: object
      required:
      - tool_name
      - server_name
      - arguments
      - is_error
      title: MCPToolResult
      description: 'Result of a single MCP tool execution.


        Provides visibility into MCP tool calls including the full input arguments

        and structured output, enabling debugging and audit trails.'
    ModelId:
      type: string
      title: ModelId
      description: Model identifier string (e.g., 'openai/gpt-5', 'anthropic/claude-3-5-sonnet').
      x-stainless-variantName: ModelId
    ChatCompletionRequestMessageContentPartFile:
      properties:
        type:
          type: string
          const: file
          title: Type
          description: The type of the content part. Always `file`.
          x-order: 0
        file:
          properties:
            filename:
              type: string
              title: Filename
              description: "The name of the file, used when passing the file to the model as a \nstring."
              x-order: 0
            file_data:
              type: string
              title: File Data
              description: "The base64 encoded file data, used when passing the file to the model \nas a string."
              x-order: 1
            file_id:
              type: string
              title: File Id
              description: The ID of an uploaded file to use as input.
              x-order: 2
          type: object
          description: 'Schema for File.


            Fields:

            - filename (optional): str

            - file_data (optional): str

            - file_id (optional): str'
      type: object
      required:
      - type
      - file
      title: ChatCompletionRequestMessageContentPartFile
      description: 'Learn about [file inputs](/docs/guides/text) for text generation.


        Fields:

        - type (required): Literal["file"]

        - file (required): File'
    CacheControlEphemeral:
      properties:
        ttl:
          type: string
          enum:
          - 5m
          - 1h
          title: Ttl
          description: 'The time-to-live for the cache control breakpoint.


            This may be one the following values:

            - `5m`: 5 minutes

            - `1h`: 1 hour


            Defaults to `5m`.'
          x-order: 0
        type:
          type: string
          const: ephemeral
          title: Type
          x-order: 1
      type: object
      required:
      - type
      title: CacheControlEphemeral
      description: 'Schema for CacheControlEphemeral.


        Fields:

        - ttl (optional): Literal["5m", "1h"]

        - type (required): Literal["ephemeral"]'
    ModelCapabilities:
      properties:
        text:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Text
          description: Supports text generation
        vision:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Vision
          description: Supports image understanding
        image_generation:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Image Generation
          description: Supports image generation
        audio:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Audio
          description: Supports audio processing
        tools:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Tools
          description: Supports function/tool calling
        structured_output:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Structured Output
          description: Supports structured JSON output
        streaming:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Streaming
          description: Supports streaming responses
        thinking:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Thinking
          description: Supports extended thinking/reasoning
        input_token_limit:
          anyOf:
          - type: integer
          - type: 'null'
          title: Input Token Limit
          description: Maximum input tokens
        output_token_limit:
          anyOf:
          - type: integer
          - type: 'null'
          title: Output Token Limit
          description: Maximum output tokens
      type: object
      title: ModelCapabilities
      description: Normalized model capabilities across all providers.
    SafetySetting:
      properties:
        category:
          type: string
          enum:
          - SEXUALLY_EXPLICIT
          - DANGEROUS_CONTENT
          title: Category
          description: The category this setting applies to.
          x-order: 0
        threshold:
          type: string
          enum:
          - BLOCK_UNSET
          - BLOCK_LOW_THRESHOLD
          - BLOCK_HIGH_THRESHOLD
          title: Threshold
          description: The blocking threshold for the category.
          x-order: 1
      type: object
      required:
      - category
      - threshold
      title: SafetySetting
      description: 'Per-category safety setting that pairs a content category with a blocking threshold.


        Fields:

        - category (required): SafetyCategory

        - threshold (required): SafetyThreshold'
    CompletionTokensDetails:
      properties:
        accepted_prediction_tokens:
          type: integer
          title: Accepted Prediction Tokens
          description: 'When using Predicted Outputs, the number of tokens in the

            prediction that appeared in the completion.'
          default: 0
          x-order: 0
        audio_tokens:
          type: integer
          title: Audio Tokens
          description: Audio input tokens generated by the model.
          default: 0
          x-order: 1
        reasoning_tokens:
          type: integer
          title: Reasoning Tokens
          description: Tokens generated by the model for reasoning.
          default: 0
          x-order: 2
        rejected_prediction_tokens:
          type: integer
          title: Rejected Prediction Tokens
          description: 'When using Predicted Outputs, the number of tokens in the

            prediction that did not appear in the completion. However, like

            reasoning tokens, these tokens are still counted in the total

            completion tokens for purposes of billing, output, and context window

            limits.'
          default: 0
          x-order: 3
      type: object
      title: CompletionTokensDetails
      description: 'Breakdown of tokens used in a completion.


        Fields:

        - accepted_prediction_tokens (optional): int

        - audio_tokens (optional): int

        - reasoning_tokens (optional): int

        - rejected_prediction_tokens (optional): int'
      x-ddls-inline: true
    ChatCompletionRequestSystemMessage:
      properties:
        content:
          anyOf:
          - type: string
          - items:
              $ref: '#/components/schemas/ChatCompletionRequestMessageContentPartText'
            type: array
            minItems: 1
            title: ChatCompletionRequestSystemMessageContentArray
          title: Content
          description: The contents of the system message.
          x-order: 0
        role:
          type: string
          const: system
          title: Role
          description: The role of the messages author, in this case `system`.
          x-order: 1
        name:
          type: string
          title: Name
          description: An optional name for the participant. Provides the model information to differentiate between participants of the same role.
          x-order: 2
      type: object
      required:
      - content
      - role
      title: ChatCompletionRequestSystemMessage
      description: 'Developer-provided instructions that the model should follow, regardless of

        messages sent by the user. With o1 models and newer, use `developer` messages

        for this purpose instead.


        Fields:

        - content (required): str | Annotated[list[ChatCompletionRequestSystemMessageContentPart], MinLen(1), ArrayTitle("ChatCompletionRequestSystemMessageContentArray")]

        - role (required): Literal["system"]

        - name (optional): str'
    Model:
      properties:
        id:
          type: string
          title: Id
          description: Unique model identifier with provider prefix (e.g., 'openai/gpt-4')
        provider:
          $ref: '#/components/schemas/Provider'
          description: Provider that hosts this model
        created_at:
          type: string
          format: date-time
          title: Created At
          description: When the model was released (RFC 3339)
        display_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Display Name
          description: Human-readable model name
        description:
          anyOf:
          - type: string
          - type: 'null'
          title: Description
          description: Mod

# --- truncated at 32 KB (193 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dedaluslabs/refs/heads/main/openapi/dedaluslabs-v1-api-openapi.yml