Skip to main content
POST
Generate an image from a text prompt
Image Generation creates images from text prompts using AI diffusion models. The endpoint returns a request_id you can poll via GET /api/v2/jobs/{request_id} or receive via webhooks / WebSockets.
Prerequisite: Consult the Model Selection endpoint to identify a valid model slug, check specific limits and features, and verify LoRA availability. Please omit the LoRA parameter by default during initial testing.
OpenAI SDK users: This endpoint is also available via the OpenAI-compatible surface as POST /v1/images/generations at https://oai.deapi.ai/v1. See OpenAI Compatibility.

Authorizations

Authorization
string
header
required

Sanctum personal access token, sent as Authorization: Bearer <token>. The token is opaque — it carries no claims and no embedded expiry, so do not attempt to decode it. Issue and revoke tokens from your account dashboard.

Headers

Accept
enum<string>
default:application/json
required
Available options:
application/json

Body

application/json

Image generation parameters

Every example in this schema is a working set for the model example shown — they are not defaults and not portable. Sizes, step counts, frame counts and frame rates are all per-model: read info.limits and info.defaults for the model you actually intend to use from GET /api/v2/models. Substituting a different model while keeping these values is the most common source of a 422.

prompt
string
required

The main prompt for image generation

Example:

"A beautiful sunset over mountains"

model
string
required

The model to use for image generation. Available models can be retrieved via the GET /api/v2/models endpoint.

Example:

"Flux1schnell"

width
integer
required

Width of the generated image in pixels. The accepted range is model-specific — read info.limits.min_width/max_width and min_height/max_height for your model from GET /api/v2/models. Some models also publish dimension_multiple or resolution_step: values are snapped DOWN to that grid before validation, so an off-grid size is silently reduced rather than rejected. max_pixels and max_ratio, where present, cap total area and aspect ratio on top of the per-side bounds.

Example:

512

height
integer
required

Height of the generated image in pixels. The accepted range is model-specific — read info.limits.min_width/max_width and min_height/max_height for your model from GET /api/v2/models. Some models also publish dimension_multiple or resolution_step: values are snapped DOWN to that grid before validation, so an off-grid size is silently reduced rather than rejected. max_pixels and max_ratio, where present, cap total area and aspect ratio on top of the per-side bounds.

Example:

512

seed
integer
required

Random seed for generation

Example:

42

negative_prompt
string | null

Elements to avoid in the generated image

Example:

"blur, darkness, noise"

loras
object[]

Array of LoRA models to apply. Accepted only by models that publish a loras array in GET /api/v2/models — a LoRA not listed for the selected model is rejected with a 422. The example below belongs to the model example shown and is not portable to another model.

guidance
number

Guidance scale. Required only when the model declares info.features.supports_guidance; for a model that does not, the value is accepted and ignored. Bounds are info.limits.min_guidance / max_guidance, from GET /api/v2/models.

Example:

7.5

steps
integer

Number of inference steps. Required when the model publishes step bounds: send it if info.limits.min_steps / max_steps or info.defaults.steps is present for your model in GET /api/v2/models, and stay inside that range. Key off those fields rather than info.features.supports_steps, which some models omit while still using steps.

Example:

4

quality
string | null

Quality tier, for models that support one (e.g. gpt-image: low/medium/high/auto). Only the values listed in that model's available options are accepted; ignored for models without a quality tier. Accepted values are model-specific — read info.limits.quality_options for your model from GET /api/v2/models. A model with an empty or absent list does not support a quality tier and ignores the field.

Example:

"medium"

enhance_prompt
boolean
default:false

When true, the prompt is boosted by the inline prompt booster before generation (async pre-step). Requires a prompt-booster guide configured for the model; the boost fee is billed on the job. Rejected with 422 if no guide exists for the model or the account balance cannot cover the boost fee.

Example:

false

webhook_url
string<uri> | null

Optional HTTPS URL to receive webhook notifications for job status changes (processing, completed, failed). Must be HTTPS. Max 2048 characters. A per-request URL is self-contained: it is delivered even when the account has no webhook configuration, or the account webhook is disabled. See the webhooks block at the top level of this document for the event payloads and the headers each delivery carries.

Maximum string length: 2048
Example:

"https://your-server.com/webhooks/deapi"

webhook_secret
string | null

Optional per-request HMAC secret (min. 32 chars) used to sign the webhook callback. Overrides the account-default secret for this job only. If omitted, the account-default secret signs the callback; if no secret exists at all, the callback is still delivered but UNSIGNED (empty X-DeAPI-Signature header). Requires webhook_url to also be set.

Required string length: 32 - 255
Example:

"a1b2c3d4e5f60708091a2b3c4d5e6f7081920a1b2c3d4e5f60708091a2b3c4d5"

Response

ID of the inference request.

data
object
required

Information from success endpoint