Eden AI API V3

The current Eden AI gateway: OpenAI-compatible chat completions, responses, embeddings, moderations, images and audio, an Anthropic Messages pass-through, the model-routed Universal AI expert-model endpoint (sync and async), collections and persistent file storage. 37 operations in the first-party OpenAPI 3.1.0 served at https://api.edenai.run/v3/docs/openapi.json.

Operations 37

GET /v3/info List Features #
GET /v3/info/{feature} List Subfeatures #
GET /v3/info/{feature}/{subfeature} Get Feature Info #
POST /v3/chat/completions Chat Completions #
POST /v3/responses Create Response #
GET /v3/responses/{response_id} Retrieve Response #
DELETE /v3/responses/{response_id} Delete Response #
POST /v3/moderations Create Moderation #
GET /v3/moderations/models List Moderation Models #
POST /v3/embeddings Create Embeddings #
GET /v3/embeddings/models List Embeddings Models #
POST /v3/v1/messages Create Anthropic Message #
POST /v3/v1/messages/count_tokens Count Anthropic Tokens #
POST /v3/images/generations Image Generations #
POST /v3/images/edits Image Edits #
GET /v3/images/models List Image Models #
POST /v3/audio/transcriptions Audio Transcriptions #
GET /v3/audio/transcriptions/models List Transcription Models #
POST /v3/audio/speech Audio Speech #
GET /v3/audio/speech/models List Speech Models #
GET /v3/models List Models #
POST /v3/universal-ai Universal Ai #
POST /v3/universal-ai/async Create Async Job #
GET /v3/universal-ai/async List Async Jobs #
GET /v3/universal-ai/async/{job_id} Get Async Job #
DELETE /v3/universal-ai/async/{job_id} Delete Async Job #
POST /v3/universal-ai/collections Create Collection #
GET /v3/universal-ai/collections List Collections #
GET /v3/universal-ai/collections/{collection_id} Get Collection #
DELETE /v3/universal-ai/collections/{collection_id} Delete Collection #
POST /v3/universal-ai/collections/{collection_id}/items Add Item #
GET /v3/universal-ai/collections/{collection_id}/items List Items #
DELETE /v3/universal-ai/collections/{collection_id}/items/{item_id} Delete Item #
POST /v3/upload Upload File #
GET /v3/upload List Files #
DELETE /v3/upload Delete All Files #
POST /v3/upload/delete Delete Files By Ids #

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/eden-ai-v3-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

eden-ai-v3-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"Eden AI API V3","version":"3.0.0"},"paths":{"/v3/info":{"get":{"tags":["info"],"summary":"List Features","description":"List all available features and their subfeatures.\n\nReturns features that exist in both the registry (technically supported)\nand database (have available providers).","operationId":"list_features_v3_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturesListResponse"}}}}}}},"/v3/info/{feature}":{"get":{"tags":["info"],"summary":"List Subfeatures","description":"List all subfeatures for a specific feature.\n\nArgs:\n    feature: Feature name (e.g., 'text', 'image', 'ocr', 'translation')\n\nReturns:\n    Feature info with display names and list of subfeatures.","operationId":"list_subfeatures_v3_info__feature__get","parameters":[{"name":"feature","in":"path","required":true,"schema":{"type":"string","title":"Feature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeatureInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/info/{feature}/{subfeature}":{"get":{"tags":["info"],"summary":"Get Feature Info","description":"Get detailed information for a specific feature/subfeature.\n\nArgs:\n    feature: Feature name (e.g., 'text', 'image', 'ocr', 'translation')\n    subfeature: Subfeature name (e.g., 'ai_detection', 'ocr', 'generation')\n    format: Schema output format (simplified or json_schema)\n\nReturns:\n    - Feature and subfeature display names\n    - Input schema\n    - Output schema\n    - Available providers and their models","operationId":"get_feature_info_v3_info__feature___subfeature__get","parameters":[{"name":"feature","in":"path","required":true,"schema":{"type":"string","title":"Feature"}},{"name":"subfeature","in":"path","required":true,"schema":{"type":"string","title":"Subfeature"}},{"name":"format","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SchemaFormat","description":"Schema format: 'simplified' for flat readable format, 'json_schema' for full Pydantic JSON Schema","default":"simplified"},"description":"Schema format: 'simplified' for flat readable format, 'json_schema' for full Pydantic JSON Schema"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubfeatureDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/chat/completions":{"post":{"tags":["Chat"],"summary":"Chat Completions","description":"OpenAI-compatible chat completions endpoint (v3).","operationId":"chat_completions_v3_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LlmCompletionBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/responses":{"post":{"tags":["Responses"],"summary":"Create Response","description":"Create a model response.","operationId":"create_response_v3_responses_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsesBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMResponseObject"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/responses/{response_id}":{"get":{"tags":["Responses"],"summary":"Retrieve Response","description":"Retrieve a stored model response by ID.","operationId":"retrieve_response_v3_responses__response_id__get","security":[{"AuthBearer":[]}],"parameters":[{"name":"response_id","in":"path","required":true,"schema":{"type":"string","title":"Response Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMResponseObject"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Responses"],"summary":"Delete Response","description":"Delete a stored model response by ID.","operationId":"delete_response_v3_responses__response_id__delete","security":[{"AuthBearer":[]}],"parameters":[{"name":"response_id","in":"path","required":true,"schema":{"type":"string","title":"Response Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponseObject"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/moderations":{"post":{"tags":["Moderations"],"summary":"Create Moderation","description":"OpenAI-compatible content moderation endpoint.","operationId":"create_moderation_v3_moderations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModerationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/moderations/models":{"get":{"tags":["Moderations"],"summary":"List Moderation Models","description":"List available moderation models.","operationId":"list_moderation_models_v3_moderations_models_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"enum":["endpoints","models"],"type":"string","description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider.","default":"endpoints","title":"View"},"description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ListModelsResponse"},{"$ref":"#/components/schemas/ListModelsWithEndpointsResponse"}],"title":"Response List Moderation Models V3 Moderations Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/embeddings":{"post":{"tags":["Embeddings"],"summary":"Create Embeddings","description":"OpenAI-compatible embeddings endpoint.","operationId":"create_embeddings_v3_embeddings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingsBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/embeddings/models":{"get":{"tags":["Embeddings"],"summary":"List Embeddings Models","description":"List available embeddings models.","operationId":"list_embeddings_models_v3_embeddings_models_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"enum":["endpoints","models"],"type":"string","description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider.","default":"endpoints","title":"View"},"description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ListModelsResponse"},{"$ref":"#/components/schemas/ListModelsWithEndpointsResponse"}],"title":"Response List Embeddings Models V3 Embeddings Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/v1/messages":{"post":{"tags":["Anthropic Messages"],"summary":"Create Anthropic Message","description":"Anthropic Messages API — native pass-through via litellm.","operationId":"create_anthropic_message_v3_v1_messages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnthropicMessagesBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnthropicMessagesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/v1/messages/count_tokens":{"post":{"tags":["Anthropic Messages"],"summary":"Count Anthropic Tokens","description":"Count input tokens for an Anthropic-format request without running the model.","operationId":"count_anthropic_tokens_v3_v1_messages_count_tokens_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnthropicCountTokensBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnthropicCountTokensResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/images/generations":{"post":{"tags":["Images"],"summary":"Image Generations","description":"OpenAI-compatible image generation endpoint.","operationId":"image_generations_v3_images_generations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageGenerationBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/images/edits":{"post":{"tags":["Images"],"summary":"Image Edits","description":"OpenAI-compatible image-edit endpoint.\n\nAccepts either ``application/json`` (gpt-image-style ``images: [{file_id|image_url}]``)\nor ``multipart/form-data`` (OpenAI SDK classic shape: ``image[]`` UploadFile,\noptional ``mask`` UploadFile, plus text fields). Content-Type drives dispatch.","operationId":"image_edits_v3_images_edits_post","requestBody":{"content":{"application/json":{"schema":{"properties":{"routing":{"anyOf":[{"$ref":"#/components/schemas/ProviderRoutingPreferences"},{"type":"null"}],"description":"How to pick between the providers that serve the requested model. Applies when `model` is a model name with no provider prefix (e.g. 'gpt-5.5'); ignored for a concrete 'provider/model' id, which already names its provider. With model='@edenai' the platform chooses the model too: `quality_cost` steers that choice, and the provider fields apply whenever the chosen model is a provider-less name."},"model":{"type":"string","title":"Model","description":"provider/model, e.g. 'openai/gpt-image-2'"},"prompt":{"type":"string","maxLength":32000,"minLength":1,"title":"Prompt"},"n":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"N"},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size","description":"Provider-specific size string. OpenAI accepts '1024x1024', '1536x1024', '1024x1536', 'auto'. Vertex Imagen accepts square or aspect-ratio strings. Validation is delegated to the provider."},"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User","description":"End-user identifier for abuse tracking."},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Arbitrary metadata attached to the request."},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Extra Headers","description":"Additional HTTP headers forwarded to the provider API. Credential headers (Authorization, x-api-key, ...) are rejected."},"images":{"items":{"$ref":"#/components/schemas/ImageRef"},"type":"array","maxItems":16,"minItems":1,"title":"Images","description":"One or more input images. Each entry references one image via exactly one of `file_id` (an Eden upload id) or `image_url` (https URL or base64 data URL). The first image is the canvas; subsequent images are inpaint references."},"mask":{"anyOf":[{"$ref":"#/components/schemas/ImageRef"},{"type":"null"}],"description":"Optional mask image (PNG with transparent pixels marking the regions to edit). Same shape as an `images[]` entry."}},"additionalProperties":true,"type":"object","required":["model","prompt","images"],"title":"ImageEditJsonBody","description":"OpenAI-compatible ``POST /v1/images/edits`` JSON request body.\n\nReferences:\n- OpenAI's current /v1/images/edits JSON form for gpt-image-* takes\n  ``images: [{file_id | image_url}, ...]`` and an optional ``mask:\n  {file_id | image_url}``.\n- ``image_url`` accepts an https URL or a ``data:image/...;base64,...`` URL."}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageResponse"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/images/models":{"get":{"tags":["Images"],"summary":"List Image Models","description":"List image-generation / image-edit models available in the caller's region.","operationId":"list_image_models_v3_images_models_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"enum":["endpoints","models"],"type":"string","description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider.","default":"endpoints","title":"View"},"description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ListModelsResponse"},{"$ref":"#/components/schemas/ListModelsWithEndpointsResponse"}],"title":"Response List Image Models V3 Images Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/audio/transcriptions":{"post":{"tags":["Audio"],"summary":"Audio Transcriptions","description":"OpenAI-compatible speech-to-text endpoint.\n\nAccepts either ``multipart/form-data`` (OpenAI SDK shape: a ``file`` upload\nplus text fields) or ``application/json`` (``file_id`` / ``file_url`` plus\ntext fields). Content-Type drives dispatch.","operationId":"audio_transcriptions_v3_audio_transcriptions_post","requestBody":{"content":{"application/json":{"schema":{"properties":{"routing":{"anyOf":[{"$ref":"#/components/schemas/ProviderRoutingPreferences"},{"type":"null"}],"description":"How to pick between the providers that serve the requested model. Applies when `model` is a model name with no provider prefix (e.g. 'gpt-5.5'); ignored for a concrete 'provider/model' id, which already names its provider. With model='@edenai' the platform chooses the model too: `quality_cost` steers that choice, and the provider fields apply whenever the chosen model is a provider-less name."},"model":{"type":"string","title":"Model","description":"provider/model, e.g. 'openai/whisper-1'"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"ISO-639-1 language code of the input audio (e.g. 'en'). Omit to let the provider auto-detect where supported."},"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt","description":"Optional text to guide the model's style or continue a prior audio segment's context."},"response_format":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Format","description":"Transcript format: 'json', 'text', 'srt', 'verbose_json', or 'vtt'. Provider support varies; forwarded as-is."},"timestamp_granularities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Timestamp Granularities","description":"Timestamp granularities to populate with 'verbose_json' (['word'] and/or ['segment'])."},"temperature":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Temperature","description":"Sampling temperature between 0 and 1."},"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User","description":"End-user identifier for abuse tracking."},"file_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Id","description":"Id of a file previously uploaded to Eden AI."},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url","description":"An https URL or a base64 data URL pointing at the audio."}},"type":"object","required":["model"],"title":"TranscriptionJsonBody","description":"JSON request body, references the audio by ``file_id`` or ``file_url``.\n\nExactly one of ``file_id`` (an Eden upload id) or ``file_url`` (an https URL\nor a ``data:audio/...;base64,...`` URL) must be set."}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptionResponse"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/audio/transcriptions/models":{"get":{"tags":["Audio"],"summary":"List Transcription Models","description":"List speech-to-text models available in the caller's region.","operationId":"list_transcription_models_v3_audio_transcriptions_models_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"enum":["endpoints","models"],"type":"string","description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider.","default":"endpoints","title":"View"},"description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ListModelsResponse"},{"$ref":"#/components/schemas/ListModelsWithEndpointsResponse"}],"title":"Response List Transcription Models V3 Audio Transcriptions Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/audio/speech":{"post":{"tags":["Audio"],"summary":"Audio Speech","description":"OpenAI-compatible text-to-speech endpoint.\n\nAccepts a JSON body (``model``, ``input``, ``voice`` plus optional\n``response_format`` / ``speed`` / ``instructions``) and returns raw audio\nbytes; ``cost`` and ``provider`` are returned in the ``x-edenai-*`` response\nheaders.","operationId":"audio_speech_v3_audio_speech_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeechBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"audio/mpeg":{"schema":{"type":"string","format":"binary"}},"audio/ogg":{"schema":{"type":"string","format":"binary"}},"audio/aac":{"schema":{"type":"string","format":"binary"}},"audio/flac":{"schema":{"type":"string","format":"binary"}},"audio/wav":{"schema":{"type":"string","format":"binary"}},"audio/pcm":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/audio/speech/models":{"get":{"tags":["Audio"],"summary":"List Speech Models","description":"List text-to-speech models available in the caller's region.","operationId":"list_speech_models_v3_audio_speech_models_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"enum":["endpoints","models"],"type":"string","description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider.","default":"endpoints","title":"View"},"description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ListModelsResponse"},{"$ref":"#/components/schemas/ListModelsWithEndpointsResponse"}],"title":"Response List Speech Models V3 Audio Speech Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/models":{"get":{"tags":["Models"],"summary":"List Models","description":"List available LLM models with extended metadata.\n\nThe default is deliberately today's payload: routing by model name is additive, so a client\nthat has never heard of `view` must keep getting exactly what it got before.","operationId":"list_models_v3_models_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"enum":["endpoints","models"],"type":"string","description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider.","default":"endpoints","title":"View"},"description":"How to group the listing. 'endpoints' (default) is one entry per provider/model id, unchanged. 'models' is one entry per routable model name with its provider endpoints nested underneath — send that name as `model` to let Eden AI choose the provider."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ListModelsResponse"},{"$ref":"#/components/schemas/ListModelsWithEndpointsResponse"}],"title":"Response List Models V3 Models Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/universal-ai":{"post":{"tags":["universal-ai"],"summary":"Universal Ai","description":"Universal AI endpoint for synchronous non-LLM AI features.\n\nModel format: feature/subfeature/provider[/model]\n\nSupported features:\n- text/ai_detection, text/moderation, etc.\n- ocr/ocr, ocr/identity_parser, etc.\n- image/generation, image/background_removal, etc.\n\nFor async features (e.g., audio/speech_to_text_async), use POST /v3/universal-ai/async.\n\nRequest body:\n- model: Model string in format feature/subfeature/provider[/model]\n- input: Feature-specific input parameters\n- fallbacks: Optional list of fallback provider strings (max 3)\n- provider_params: Optional provider-specific parameters\n- show_original_response: Include raw provider response (default: false)\n\nExample:\n```json\n{\n    \"model\": \"text/ai_detection/openai/gpt-4\",\n    \"input\": {\"text\": \"Analyze this text\"}\n}\n```","operationId":"universal_ai_v3_universal_ai_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniversalAIBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniversalAIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"AuthBearer":[]}]}},"/v3/universal-ai/async":{"post":{"tags":["universal-ai","universal-ai"],"summary":"Create Async Job","description":"Create an async job for long-running AI operations.\n\nModel format: feature/subfeature/provider[/model]\n\nSupported async features:\n- audio/speech_to_text_async\n\nRequest body:\n- model: Model string in format feature/subfeature/provider[/model]\n- input: Feature-specific input parameters\n- fallbacks: Optional list of fallback provider strings (max 3)\n- webhook_receiver: Optional URL to receive job completion notification\n- user_webhook_parameters: Optional custom parameters for webhook payload\n\nReturns 202 Accepted with job info for polling.","operationId":"create_async_job_v3_universal_ai_async_post","security":[{"AuthBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniversalAIAsyncBody"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniversalAIAsyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["universal-ai","universal-ai"],"summary":"List Async Jobs","description":"List async jobs for the authenticated user.","operationId":"list_async_jobs_v3_universal_ai_async_get","security":[{"AuthBearer":[]}],"parameters":[{"name":"feature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by feature","title":"Feature"},"description":"Filter by feature"},{"name":"subfeature","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by subfeature","title":"Subfeature"},"description":"Filter by subfeature"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of items per page","default":100,"title":"Limit"},"description":"Maximum number of items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniversalAIAsyncJobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/universal-ai/async/{job_id}":{"get":{"tags":["universal-ai","universal-ai"],"summary":"Get Async Job","description":"Get details for a specific async job.","operationId":"get_async_job_v3_universal_ai_async__job_id__get","security":[{"AuthBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniversalAIAsyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["universal-ai","universal-ai"],"summary":"Delete Async Job","description":"Delete an async job. Users can only delete their own jobs.\n\nA job that is still ``processing`` cannot be deleted (409): it has a charged\nprovider job in flight that must complete — settling or refunding — first;\nhard-deleting it would orphan that charge. Terminal jobs delete normally.","operationId":"delete_async_job_v3_universal_ai_async__job_id__delete","security":[{"AuthBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Async Job V3 Universal Ai Async  Job Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/universal-ai/collections":{"post":{"tags":["collections"],"summary":"Create Collection","description":"Create a collection on a provider.\n\nThe model string is fixed at creation: items added here and\n/v3/universal-ai calls against this collection all run on its provider.\nReturns the collection id to use in item operations and inference calls.","operationId":"create_collection_v3_universal_ai_collections_post","security":[{"AuthBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCollectionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["collections"],"summary":"List Collections","description":"List the user's collections.\n\nServed from the gateway's ownership store, never from a provider scan\n(the provider listing is cross-tenant on shared accounts). Free, and —\nlike the other gateway resource reads — not registered in the request\nhistory.","operationId":"list_collections_v3_universal_ai_collections_get","security":[{"AuthBearer":[]}],"parameters":[{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by 'feature/subfeature' or 'feature/subfeature/provider'","title":"Model"},"description":"Filter by 'feature/subfeature' or 'feature/subfeature/provider'"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of items per page","default":100,"title":"Limit"},"description":"Maximum number of items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListCollectionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v3/universal-ai/collections/{collection_id}":{"get":{"tags":["collections"],"summary":"Get Collection","description":"Get one of the user's collections. Free, gateway-side only, and — like\nthe other gateway resource reads — not registered in the request history.","operationId":"get_collection_v3_universal_ai_collections__collection_id__get","security":[{"AuthBearer":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Collection Id"}}],"responses":{"2

# --- truncated at 32 KB (124 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/eden-ai/refs/heads/main/openapi/_original/eden-ai-v3-openapi.json