Dedalus Labs V1 API
The V1 API from Dedalus Labs — 12 operation(s) for v1.
The V1 API from Dedalus Labs — 12 operation(s) for v1.
openapi: 3.1.0
info:
title: Dedalus Audio 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:
ChatCompletionRequestMessageContentPartRefusal:
properties:
type:
type: string
const: refusal
title: Type
description: The type of the content part.
x-order: 0
refusal:
type: string
title: Refusal
description: The refusal message generated by the model.
x-order: 1
type: object
required:
- type
- refusal
title: ChatCompletionRequestMessageContentPartRefusal
description: 'Schema for ChatCompletionRequestMessageContentPartRefusal.
Fields:
- type (required): Literal["refusal"]
- refusal (required): str'
Credential:
properties:
connection_name:
type: string
title: Connection Name
description: Connection name. Must match a connection in MCPServer.connections.
values:
additionalProperties:
anyOf:
- type: string
- type: integer
- type: boolean
type: object
title: Values
description: Credential values. Keys are credential field names, values are the secrets.
additionalProperties: false
type: object
required:
- connection_name
- values
title: Credential
description: 'Credential for MCP server authentication.
Passed at endpoint level (e.g., chat.completions.create) and matched
to MCP servers by connection name. Wire format matches dedalus_mcp.Credential.to_dict().'
ChatCompletionResponseMessage:
properties:
content:
anyOf:
- type: string
- type: 'null'
title: Content
description: The contents of the message.
x-order: 0
refusal:
anyOf:
- type: string
- type: 'null'
title: Refusal
description: The refusal message generated by the model.
x-order: 1
tool_calls:
items:
oneOf:
- $ref: '#/components/schemas/ChatCompletionMessageToolCall'
- $ref: '#/components/schemas/ChatCompletionMessageCustomToolCall'
discriminator:
propertyName: type
mapping:
custom: '#/components/schemas/ChatCompletionMessageCustomToolCall'
function: '#/components/schemas/ChatCompletionMessageToolCall'
type: array
title: Tool Calls
description: The tool calls generated by the model, such as function calls.
x-order: 2
annotations:
items:
properties:
type:
type: string
const: url_citation
title: Type
description: The type of the URL citation. Always `url_citation`.
x-order: 0
url_citation:
properties:
end_index:
type: integer
title: End Index
description: The index of the last character of the URL citation in the message.
x-order: 0
start_index:
type: integer
title: Start Index
description: The index of the first character of the URL citation in the message.
x-order: 1
url:
type: string
title: Url
description: The URL of the web resource.
x-order: 2
title:
type: string
title: Title
description: The title of the web resource.
x-order: 3
type: object
required:
- end_index
- start_index
- url
- title
description: 'A URL citation when using web search.
Fields:
- end_index (required): int
- start_index (required): int
- url (required): str
- title (required): str'
type: object
required:
- type
- url_citation
description: 'A URL citation when using web search.
Fields:
- type (required): Literal["url_citation"]
- url_citation (required): UrlCitation'
type: array
title: Annotations
description: 'Annotations for the message, when applicable, as when using the
[web search tool](/docs/guides/tools-web-search?api-mode=chat).'
x-order: 3
role:
type: string
const: assistant
title: Role
description: The role of the author of this message.
x-order: 4
function_call:
properties:
arguments:
type: string
title: Arguments
description: The arguments to call the function with, as generated by the model in JSON format. Note that the model does not always generate valid JSON, and may hallucinate parameters not defined by your function schema. Validate the arguments in your code before calling your function.
x-order: 0
name:
type: string
title: Name
description: The name of the function to call.
x-order: 1
type: object
required:
- arguments
- name
description: 'Deprecated and replaced by `tool_calls`. The name and arguments of a function that should be called, as generated by the model.
Fields:
- arguments (required): str
- name (required): str'
audio:
anyOf:
- properties:
id:
type: string
title: Id
description: Unique identifier for this audio response.
x-order: 0
expires_at:
type: integer
title: Expires At
description: 'The Unix timestamp (in seconds) for when this audio response will
no longer be accessible on the server for use in multi-turn
conversations.'
x-order: 1
data:
type: string
title: Data
description: 'Base64 encoded audio bytes generated by the model, in the format
specified in the request.'
x-order: 2
transcript:
type: string
title: Transcript
description: Transcript of the audio generated by the model.
x-order: 3
type: object
required:
- id
- expires_at
- data
- transcript
description: 'If the audio output modality is requested, this object contains data
about the audio response from the model. [Learn more](/docs/guides/audio).
Fields:
- id (required): str
- expires_at (required): int
- data (required): str
- transcript (required): str'
- type: 'null'
description: 'If the audio output modality is requested, this object contains data
about the audio response from the model. [Learn more](/docs/guides/audio).'
x-order: 6
type: object
required:
- content
- refusal
- role
title: ChatCompletionResponseMessage
description: 'A chat completion message generated by the model.
Fields:
- content (required): str | None
- refusal (required): str | None
- tool_calls (optional): ChatCompletionMessageToolCalls
- annotations (optional): list[AnnotationsItem]
- role (required): Literal["assistant"]
- function_call (optional): ChatCompletionResponseMessageFunctionCall
- audio (optional): ChatCompletionResponseMessageAudio | None'
EmbeddingRequest:
properties:
input:
anyOf:
- type: string
- items:
type: string
type: array
maxItems: 2048
minItems: 1
title: EmbeddingRequestInputArray
- items:
type: integer
type: array
maxItems: 2048
minItems: 1
title: EmbeddingRequestInputArray
- items:
items:
type: integer
type: array
minItems: 1
title: EmbeddingRequestInputItemArray
type: array
maxItems: 2048
minItems: 1
title: EmbeddingRequestInputArray
title: Input
description: Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for all embedding models), cannot be an empty string, and any array must be 2048 dimensions or less. [Example Python code](https://cookbook.openai.com/examples/how_to_count_tokens_with_tiktoken) for counting tokens. In addition to the per-input token limit, all embedding models enforce a maximum of 300,000 tokens summed across all inputs in a single request.
x-order: 0
model:
anyOf:
- type: string
- type: string
enum:
- text-embedding-ada-002
- text-embedding-3-small
- text-embedding-3-large
title: Model
description: ID of the model to use. You can use the [List models](/docs/api-reference/models/list) API to see all of your available models, or see our [Model overview](/docs/models) for descriptions of them.
x-order: 1
encoding_format:
type: string
enum:
- float
- base64
title: Encoding Format
description: The format to return the embeddings in. Can be either `float` or [`base64`](https://pypi.org/project/pybase64/).
default: float
x-order: 2
dimensions:
type: integer
minimum: 1
title: Dimensions
description: The number of dimensions the resulting output embeddings should have. Only supported in `text-embedding-3` and later models.
x-order: 3
user:
type: string
title: User
description: A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. [Learn more](/docs/guides/safety-best-practices#end-user-ids).
x-order: 4
type: object
required:
- input
- model
title: EmbeddingRequest
description: 'Schema for EmbeddingRequest.
Fields:
- input (required): str | Annotated[list[str], MinLen(1), MaxLen(2048), ArrayTitle("EmbeddingRequestInputArray")] | Annotated[list[int], MinLen(1), MaxLen(2048), ArrayTitle("EmbeddingRequestInputArray")] | Annotated[list[Annotated[list[int], MinLen(1), ArrayTitle("EmbeddingRequestInputItemArray")]],
# --- 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