Passer au contenu principal
POST
Edit an image with a prompt (Magic Edit)
Soumets une image source et un prompt décrivant l’édition. L’appel renvoie 202 Accepted avec un id de job ; interroge GET /images/edits/{id} pour le résultat. L’objet image prend exactement un parmi image_id, url, ou base64 + mime_type.

Exemple : édition avec masque à partir d’une URL

Fournis la source par url, ajoute un mask d’inpaint (sa présence sélectionne le mode PRO), et réutilise un modèle style. Le mask est une image encodée en base64 marquant la région à éditer.
Envoie exactement un mode de source dans image. Omets mask pour une édition uniquement textuelle (SIMPLE) ; un mask ne fonctionne que sur nano_banana_pro et gemini. resolution (1K, 2K, 4K) s’applique à nano_banana_pro, nano_banana_2 et nano_banana_2_1 ; omets-le pour gemini et kontext. Les modèles entraînés et color_palette_id ne fonctionnent qu’avec nano_banana_pro — un autre engine nommé renvoie 422. num_images (1–4) vaut 1 par défaut. Voir Engines et credits.

Réponse

Le corps 202 renvoie en écho le engine et la résolution effectifs, pour que tu voies à quoi l’édition tourne et ce qu’elle coûte :
202 Accepted
resolution vaut null sur gemini et kontext. estimated_credits est le montant débité : 5 / 10 / 20 par output en 1K / 2K / 4K sur les engines Nano Banana, 5 fixes par output sur gemini et kontext, × num_images.

Autorisations

Authorization
string
header
requis

Organization API key (Authorization: Bearer samsa_sk_...) or OAuth 2.1 access token (Authorization: Bearer samsa_at_...).

Corps

application/json

POST /images/edits body (ADR §8, §10) — Magic Edit.

Supply a prompt and a source image; optionally a mask (auto-selects PRO mode), trained models you own (including your own private models) or shared within your organization (style_id/object_ids/person_ids/ setting_ids, color_palette_id — only on nano_banana_pro; any other named engine is a 422, never a silent switch), an engine (a public-safe alias of the internal edit model) and a resolution (Nano Banana engines only). The source aspect ratio is kept. num_images defaults to 1.

image
PublicImageEditSource · object
requis

The source image: exactly one of image_id, url, or base64+mime_type.

prompt
string
requis

Text prompt describing the edit. Runs the same validation as the app (rejects empty / malformed / policy-violating prompts with a 422).

Minimum string length: 1
Exemple:

"Replace the sky with a dramatic sunset"

mask
PublicImageEditMask · object | null

Optional inpaint mask. When present, the edit runs in PRO (mask-based) mode — supported only by the nano_banana_pro, gemini engines; any other engine returns 422.

engine
string | null

Edit engine — one of nano_banana_pro (Nano Banana Pro, default), nano_banana_2 (Nano Banana 2), nano_banana_2_1 (Nano Banana 2.1), gemini (Nano Banana), kontext (Flux Kontext). Omit to use the default. Unknown engines return 422. Trained models and a color palette work only with nano_banana_pro (also used when engine is omitted); naming any other engine together with them returns 422 — the engine is never switched silently.

Exemple:

"nano_banana_pro"

style_id

A style model NAME or its UUID id (from list_models), resolved within your visible set — a model you own (including your own private models) or a non-private one shared with your organization. A name matching more than one visible model is rejected — pass the id. Only with nano_banana_pro (another named engine is a 422).

object_ids
(string<uuid> | string)[]

object models to compose in — each a model NAME or its UUID id (from list_models), resolved within your visible set (a model you own, including private, or a non-private one your organization shares). A name matching more than one visible model is rejected — pass the id.

person_ids
(string<uuid> | string)[]

person models to compose in — each a model NAME or its UUID id (from list_models), resolved within your visible set (a model you own, including private, or a non-private one your organization shares). A name matching more than one visible model is rejected — pass the id.

setting_ids
(string<uuid> | string)[]

setting models to compose in — each a model NAME or its UUID id (from list_models), resolved within your visible set (a model you own, including private, or a non-private one your organization shares). A name matching more than one visible model is rejected — pass the id. Maps to internal scenes.

color_palette_id

A color palette NAME or its UUID id, resolved within your visible set — a palette you created (including private ones) or a non-private palette shared with your organization. A name matching more than one visible palette is rejected — pass the id. Only with nano_banana_pro (another named engine is a 422).

resolution
string | null

Output resolution — 1K, 2K, or 4K on nano_banana_pro, nano_banana_2, nano_banana_2_1 (credits scale 1K:1x, 2K:2x, 4K:4x; omitted = 1K). gemini, kontext have a fixed resolution — omit it there (a value returns 422). The response echoes the effective resolution.

Exemple:

"4K"

num_images
integer
défaut:1

Number of edited images to generate (1-4). Defaults to 1; each output is billed.

Plage requise: 1 <= x <= 4
Exemple:

1

output_format
enum<string>
défaut:png

Encoding of the returned images. v1 supports png only.

Options disponibles:
png
Exemple:

"png"

webhook_url
string | null

Optional https webhook notified once on terminal status (signed per the webhook signature scheme; see the webhooks docs).

Exemple:

"https://example.com/webhooks/samsa"

Réponse

Successful Response

202 body for POST /images/edits (ADR §7.1).

id
string<uuid>
requis

The image-edit job id — poll GET /images/edits/{id}.

status
enum<string>
requis

Initial status: always pending at submit.

Options disponibles:
pending,
processing,
completed,
failed,
cancelled
Exemple:

"pending"

estimated_credits
integer
requis

Credits this job is expected to cost — and the amount deducted: 5 x num_images x resolution multiplier on nano_banana_pro, nano_banana_2, nano_banana_2_1 (1K:1x, 2K:2x, 4K:4x), 5 x num_images on gemini, kontext.

Exemple:

20

engine
string
requis

The engine this edit runs on (the requested engine, or nano_banana_pro when omitted). Never switched silently.

Exemple:

"nano_banana_pro"

resolution
string | null
requis

The output resolution this edit runs at (the requested resolution, or the engine default 1K); null for the fixed-resolution engines (gemini, kontext).

Exemple:

"4K"