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-images-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: 3.2.0
info:
title: Eden AI API V3 Images API
version: 3.0.0
servers:
- url: https://api.edenai.run
description: Production server
tags:
- name: Images
paths:
/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.
Accepts either ``application/json`` (gpt-image-style ``images: [{file_id|image_url}]``)
or ``multipart/form-data`` (OpenAI SDK classic shape: ``image[]`` UploadFile,
optional ``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'
components:
schemas:
Capabilities:
properties:
input_modalities:
items:
type: string
type: array
title: Input Modalities
output_modalities:
items:
type: string
type: array
title: Output Modalities
supports_reasoning:
type: boolean
title: Supports Reasoning
default: false
supports_web_search:
type: boolean
title: Supports Web Search
default: false
supports_tool_choice:
type: boolean
title: Supports Tool Choice
default: false
supports_computer_use:
type: boolean
title: Supports Computer Use
default: false
supports_prompt_caching:
type: boolean
title: Supports Prompt Caching
default: false
supports_response_schema:
type: boolean
title: Supports Response Schema
default: false
supports_system_messages:
type: boolean
title: Supports System Messages
default: false
supports_function_calling:
type: boolean
title: Supports Function Calling
default: false
supports_native_streaming:
type: boolean
title: Supports Native Streaming
default: false
supports_assistant_prefill:
type: boolean
title: Supports Assistant Prefill
default: false
supports_embedding_image_input:
type: boolean
title: Supports Embedding Image Input
default: false
supports_parallel_function_calling:
type: boolean
title: Supports Parallel Function Calling
default: false
additionalProperties: true
type: object
title: Capabilities
description: 'Model capability flags. Unknown flags are preserved so consumers keep working when
new capabilities are introduced without a coordinated release.'
ListModelsResponse:
properties:
object:
type: string
const: list
title: Object
description: Object type
default: list
data:
items:
$ref: '#/components/schemas/ModelObject'
type: array
title: Data
description: List of models
type: object
required:
- data
title: ListModelsResponse
description: List models response.
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
ImageGenerationBody:
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.
quality:
anyOf:
- type: string
- type: 'null'
title: Quality
description: Provider-specific quality string (e.g. 'low', 'medium', 'high', 'standard', 'hd', 'auto'). Accepted values depend on the model.
response_format:
anyOf:
- type: string
- type: 'null'
title: Response Format
description: Legacy DALL-E parameter. Ignored by gpt-image-* and forwarded to the provider for any model that still honors it.
additionalProperties: true
type: object
required:
- model
- prompt
title: ImageGenerationBody
description: OpenAI-compatible ``POST /v1/images/generations`` request body.
ProviderRoutingPreferences:
properties:
sort:
anyOf:
- type: string
enum:
- cost
- speed
- latency
- exact
- type: 'null'
title: Sort
description: What to optimise for when several providers serve the requested model. 'cost' (default) picks the cheapest for this request's shape; 'speed' the highest tokens/second; 'latency' the fastest to first token; 'exact' the most reliable at producing well-formed tool calls / structured output. Health is always a filter first — no mode will route you to a failing provider. Can also be written as a model suffix, e.g. 'gpt-5.5:speed'.
sticky:
anyOf:
- type: boolean
- type: 'null'
title: Sticky
description: Keep a conversation on the provider holding its prompt cache. On by default, and only ever active for models whose providers discount cache reads. Set false to route every request independently on price instead. Naming an explicit `sort` also takes priority over cache affinity.
allow_fallbacks:
type: boolean
title: Allow Fallbacks
description: 'Whether other providers of the same model may be tried when the chosen one fails. Set false to pin the request to the single best provider: it then fails rather than silently moving to another seller. useful when a cache-warm prompt would cold-miss elsewhere. This governs PROVIDERS of the requested model only; models you list in `fallbacks` are your own choice and are always kept.'
default: true
quality_cost:
anyOf:
- type: integer
maximum: 10.0
minimum: 0.0
- type: 'null'
title: Quality Cost
description: 'Only with model=''@edenai'': how far to trade answer quality for cost when the platform chooses the MODEL. 0 asks for the best model for the request, 10 for the cheapest model that can still handle it, values in between blend the two; omit it to leave the choice to the platform (quality first). This is the one `routing` field that steers the model rather than the provider — `sort` never changes which model is chosen.'
allowed_providers:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Allowed Providers
description: Restrict routing to these providers, e.g. ['openai', 'anthropic']. Only providers that serve the requested model are considered, so an entry that does not sell it is simply inert. If none of them do, the request fails rather than falling back to a provider you excluded. Case-insensitive. Applies to routed providers only. a concrete 'provider/model' you named in `fallbacks` is your own choice and is kept.
type: object
title: ProviderRoutingPreferences
description: 'How to choose between SELLERS of one model — and, with ``@edenai``, how far to trade
quality for cost when the platform chooses the model.
The seller fields are only meaningful when `model` is a canonical name (`gpt-5.5`) rather than a concrete
`provider/model` — with a concrete id there is nothing to choose between. For choosing the
MODEL itself see ``router_candidates`` and ``model="@edenai"``, which is a different router;
``quality_cost`` below is the one field here that speaks to it.'
ModelWithEndpoints:
properties:
id:
type: string
title: Id
description: The routable model name, with no provider prefix (e.g. 'gpt-oss-120b'). Send this as `model` to let Eden AI choose which provider serves it.
object:
type: string
const: model
title: Object
description: Object type
default: model
created:
type: integer
title: Created
description: Unix timestamp of the newest endpoint serving this model
default: 0
owned_by:
type: string
title: Owned By
description: Who authored the model, independent of who sells it
default: ''
mode:
anyOf:
- type: string
- type: 'null'
title: Mode
description: 'What the model does: ''chat'', ''embedding'', ''stt'', ''tts'' or ''image_generation''. Lets a caller tell an LLM from a voice.'
endpoints:
items:
$ref: '#/components/schemas/ModelObject'
type: array
title: Endpoints
description: Every provider endpoint serving this model, each with its own pricing, context length, capabilities and regions.
endpoint_count:
type: integer
title: Endpoint Count
description: How many provider endpoints serve this model
readOnly: true
type: object
required:
- id
- endpoints
- endpoint_count
title: ModelWithEndpoints
description: 'One routable model name and the provider endpoints behind it.
Deliberately carries NO pricing, context window or capability of its own. Those vary between
the sellers of one model — `gpt-oss-120b` spans a 9.5x input-price range, two context lengths
and six distinct capability sets across ten sellers — so a value here would be wrong for most
of the group. Each endpoint keeps its own, unchanged.
``endpoints`` entries are the same :class:`ModelObject` the flat listing returns, field for
field, which is what makes this view a pure regrouping: a caller reading
``data[].endpoints[]`` sees exactly what it reads from ``data[]`` today.'
ImageResponse:
properties:
cost:
anyOf:
- type: number
- type: 'null'
title: Cost
provider:
anyOf:
- type: string
- type: 'null'
title: Provider
created:
anyOf:
- type: integer
- type: 'null'
title: Created
data:
items:
$ref: '#/components/schemas/ImageDataItem'
type: array
title: Data
usage:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Usage
additionalProperties: true
type: object
title: ImageResponse
description: 'OpenAI-compatible image response + Eden ``cost`` / ``provider`` fields.
Shared by ``POST /v3/images/generations`` and ``POST /v3/images/edits`` —
the wire shape is identical.'
RegionObject:
properties:
code:
type: string
title: Code
description: Region code (e.g., 'us-east-1')
name:
type: string
title: Name
description: Region display name
type: object
required:
- code
- name
title: RegionObject
description: Region where a model is available.
ImageRef:
properties:
file_id:
anyOf:
- type: string
- type: 'null'
title: File Id
image_url:
anyOf:
- type: string
- type: 'null'
title: Image Url
additionalProperties: false
type: object
title: ImageRef
description: 'One entry in ``images[]`` (or the ``mask`` value).
Exactly one of ``file_id`` or ``image_url`` must be set.'
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
ImageDataItem:
properties:
url:
anyOf:
- type: string
- type: 'null'
title: Url
b64_json:
anyOf:
- type: string
- type: 'null'
title: B64 Json
revised_prompt:
anyOf:
- type: string
- type: 'null'
title: Revised Prompt
additionalProperties: true
type: object
title: ImageDataItem
description: 'Single image entry inside the OpenAI-shaped ``data: [...]`` array.
Providers return either ``url`` (most non-OpenAI providers) or
``b64_json`` (gpt-image-*); ``revised_prompt`` is OpenAI-specific.'
ModelObject:
properties:
id:
type: string
title: Id
description: Model identifier (e.g., 'openai/gpt-4')
object:
type: string
const: model
title: Object
description: Object type
default: model
created:
type: integer
title: Created
description: Unix timestamp of model creation/release
owned_by:
type: string
title: Owned By
description: Provider/organization that owns the model
model_name:
type: string
title: Model Name
description: Model name without provider prefix
context_length:
anyOf:
- type: integer
- type: 'null'
title: Context Length
description: Maximum context length in tokens
description:
anyOf:
- type: string
- type: 'null'
title: Description
description: Model description
source:
anyOf:
- type: string
- type: 'null'
title: Source
description: Model source URL
capabilities:
$ref: '#/components/schemas/Capabilities'
description: Model capabilities
pricing:
additionalProperties: true
type: object
title: Pricing
description: Pricing information after any applicable discounts have been applied
list_pricing:
additionalProperties: true
type: object
title: List Pricing
description: Provider list pricing, before any discounts are applied
discount:
anyOf:
- type: number
- type: 'null'
title: Discount
description: Discount applied to the model (0-1 range)
regions:
items:
$ref: '#/components/schemas/RegionObject'
type: array
title: Regions
description: Regions where this model is available
alias_of:
anyOf:
- type: string
- type: 'null'
title: Alias Of
description: 'Set when this entry is an alias (e.g. ''gemini-pro-latest''): the real model_id it currently resolves to. None for concrete models.'
type: object
required:
- id
- created
- owned_by
- model_name
title: ModelObject
description: Extended model object with full metadata.
ListModelsWithEndpointsResponse:
properties:
object:
type: string
const: list
title: Object
description: Object type
default: list
data:
items:
$ref: '#/components/schemas/ModelWithEndpoints'
type: array
title: Data
description: List of routable models
type: object
required:
- data
title: ListModelsWithEndpointsResponse
description: '`?view=models` response: routable names, each with its provider endpoints.
Named for the public vocabulary rather than the internal one: Pydantic class names become
OpenAPI schema titles and generated SDK classes, and a caller never needs the word
"canonical" -- to them these are simply models, and the rows behind them endpoints.'
securitySchemes:
AuthBearer:
type: http
scheme: bearer