List AI models
Sample request
curl -H "x-api-key: $ABYSSALE_API_KEY" "https://api.abyssale.com/ai-models"
# {"operations":[{"operation":"images_remove_background","default_model":"bria-rmbg-2-0","models":[…]},
# {"operation":"images_text_to_image","default_model":"nano-banana-2","models":[…]},
# {"operation":"images_upscale","default_model":"topaz-precision","models":[…]}]}
curl -H "x-api-key: $ABYSSALE_API_KEY" \
"https://api.abyssale.com/ai-models?operation=images_remove_background"
# {"operation":"images_remove_background","default_model":"bria-rmbg-2-0","models":[…]}
curl -H "x-api-key: $ABYSSALE_API_KEY" \
"https://api.abyssale.com/ai-models?operation=images_text_to_image"
# {"operation":"images_text_to_image","default_model":"nano-banana-2","models":[{"id":"nano-banana-2", …,
# "aspect_ratios":{"allowed":["1:1","16:9",…],"default":"1:1"},"qualities":{"allowed":["0.5K",…],"default":"0.5K"}}, …]}
curl -H "x-api-key: $ABYSSALE_API_KEY" \
"https://api.abyssale.com/ai-models?operation=images_upscale"
# {"operation":"images_upscale","default_model":"topaz-precision","models":[{"id":"topaz-precision", …,
# "upscale_factors":{"allowed":["1","2","3","4"],"default":"2"}}, …]}Example 200 response
{
"operation": "images_remove_background",
"default_model": "bria-rmbg-2-0",
"models": [
{
"id": "birefnet",
"name": "BiRefNet",
"is_default": false
},
{
"id": "bria-rmbg-2-0",
"name": "BRIA RMBG 2.0",
"is_default": true
},
{
"id": "pixelcut",
"name": "Pixelcut",
"is_default": false
}
]
}Example 400 error response
{
"id": "invalid_payload",
"message": "Invalid JSON"
}The AI models the workspace can use for each AI action, and the one used when the request names none — so you can offer a choice, or pass model knowingly. Without operation, every action is listed, each with its own default_model and models ({"operations": [...]}); with operation, that action alone. Models disabled in the workspace settings are left out; default_model is resolved exactly as the action resolves it, and is null when every model is disabled.
Behaviour, limits and caveats
For images_text_to_image, each model also lists the aspect_ratios and qualities it accepts, with the default used when the request omits one. They differ from model to model (a ratio such as 16:9 for some, a size such as landscape_16_9 or 1536x1024 for others), and a model that takes no quality has no qualities.
For images_upscale, each model lists the upscale_factors it accepts, with its default.
No prices. A price is the cost of one call with its inputs, not a property of a model. What a job actually cost is on the finished job (credits.ai_credits).
Query parameters
operation string
The AI action to list models for. Omit it to list every action. Any other value answers 400 unknown_enum_value. One of "images_remove_background", "images_text_to_image", "images_upscale".
Response 200
The models available to the workspace: for that action with operation, for every action (operations) without.
AiModelListing
operation string always
The AI action the models are listed for.
default_model string | null always
Id of the model used when a request names none; null when every model is disabled.
models array of object always
The models the workspace can use for the action, in a stable order.
Show child attributes
id string always
The id to pass as model.
name string always
Display name.
is_default boolean always
Whether this is default_model.
aspect_ratios AiModelParam
A parameter the model accepts: on images_text_to_image models, aspect_ratios → aspect_ratio and qualities → quality; on images_upscale models, upscale_factors → upscale_factor. Absent when the model does not take the parameter: omit it from the request then.
Show child attributes
allowed array of string always
The values the model accepts, exactly as to pass them.
default string always
The value used when the request omits the parameter.
qualities AiModelParam
A parameter the model accepts: on images_text_to_image models, aspect_ratios → aspect_ratio and qualities → quality; on images_upscale models, upscale_factors → upscale_factor. Absent when the model does not take the parameter: omit it from the request then.
Show child attributes
allowed array of string always
The values the model accepts, exactly as to pass them.
default string always
The value used when the request omits the parameter.
upscale_factors AiModelParam
A parameter the model accepts: on images_text_to_image models, aspect_ratios → aspect_ratio and qualities → quality; on images_upscale models, upscale_factors → upscale_factor. Absent when the model does not take the parameter: omit it from the request then.
Show child attributes
allowed array of string always
The values the model accepts, exactly as to pass them.
default string always
The value used when the request omits the parameter.
max_reference_images integer
How many reference_image_urls the text to image action takes at most with this model. Absent when the model takes no reference images.
version string
The API version that produced this response, named by release date (vYYYY-MM-DD). Pattern ^v\d{4}-\d{2}-\d{2}$.
More about version
The API version that produced this response, named by release date (vYYYY-MM-DD). Stamped as a top-level field on JSON object bodies, success and error alike, so a client can always tell which contract answered. There is no version-selection parameter — a single version is maintained at a time.
Two kinds of body are not stamped. Array bodies (the listings) carry no envelope. And a body that already has a version key of its own is left alone — which in practice means Banner, whose version is the generated file's integer counter. So GET /banners/{bannerId} and the synchronous generate are the two responses that do not tell you which contract answered.
The value changes when a new version is released. Match the vYYYY-MM-DD shape rather than pinning today's literal, or your client breaks on the next release.
object
operations array of AiModelListing always
One listing per AI action of the public API.
Show child attributes
operation string always
The AI action the models are listed for.
default_model string | null always
Id of the model used when a request names none; null when every model is disabled.
models array of object always
The models the workspace can use for the action, in a stable order.
Show child attributes
id string always
The id to pass as model.
name string always
Display name.
is_default boolean always
Whether this is default_model.
aspect_ratios AiModelParam
A parameter the model accepts: on images_text_to_image models, aspect_ratios → aspect_ratio and qualities → quality; on images_upscale models, upscale_factors → upscale_factor. Absent when the model does not take the parameter: omit it from the request then.
qualities AiModelParam
A parameter the model accepts: on images_text_to_image models, aspect_ratios → aspect_ratio and qualities → quality; on images_upscale models, upscale_factors → upscale_factor. Absent when the model does not take the parameter: omit it from the request then.
upscale_factors AiModelParam
A parameter the model accepts: on images_text_to_image models, aspect_ratios → aspect_ratio and qualities → quality; on images_upscale models, upscale_factors → upscale_factor. Absent when the model does not take the parameter: omit it from the request then.
max_reference_images integer
How many reference_image_urls the text to image action takes at most with this model. Absent when the model takes no reference images.
version string
The API version that produced this response, named by release date (vYYYY-MM-DD). Pattern ^v\d{4}-\d{2}-\d{2}$.
More about version
The API version that produced this response, named by release date (vYYYY-MM-DD). Stamped as a top-level field on JSON object bodies, success and error alike, so a client can always tell which contract answered. There is no version-selection parameter — a single version is maintained at a time.
Two kinds of body are not stamped. Array bodies (the listings) carry no envelope. And a body that already has a version key of its own is left alone — which in practice means Banner, whose version is the generated file's integer counter. So GET /banners/{bannerId} and the synchronous generate are the two responses that do not tell you which contract answered.
The value changes when a new version is released. Match the vYYYY-MM-DD shape rather than pinning today's literal, or your client breaks on the next release.
Errors
Every failure uses the shared error envelope — {id, message, errors?}. Branch on id, never on message. See Errors.
| Status | When |
|---|---|
400 | Bad Request — the request body or parameters are invalid. |
401 | Unauthorized — missing or invalid API key. |
429 | Too Many Requests. |
500 | Internal Server Error — an unexpected error occurred on our side. |
