Skip to content

Nano Banana 2.1

IMAGEgoogle-nano-banana-2-1

Nano Banana 2.1 is a text-to-image and image editing model from Google, built for fast, high-quality generation and natural-language editing. It generates 1K, 2K, or 4K images from a text prompt, and supports prompt-guided edits and multi-image compositing from up to 8 reference images, with optional thinking and web search.

POST
/v2/workspaces/{workspace_id}/base-models/google-nano-banana-2-1/inferences
curl --request POST \
--url https://api.app.layer.ai/api/v2/workspaces/:workspace_id/base-models/google-nano-banana-2-1/inferences \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"prompt": "a knight standing in a snowy forest",
"aspect_ratio": "SQUARE_1K",
"transparency": false,
"guidance_file_init_image": [
{
"url": "<file_url>"
}
],
"guidance_file_reference_image": [
{
"url": "<file_url>"
}
]
}'
workspace_id
required
Workspace Id

Id of the workspace that owns the resource.

string format: uuid

Id of the workspace that owns the resource.

session_name
Session Name

Organize this run under a named session. A new session is created if none matches.

string
nullable

Organize this run under a named session. A new session is created if none matches.

Idempotency-Key
string
<= 255 characters

Opaque key making this request safe to retry. The first request with a given key executes; a later request with the same key returns that first response with Idempotent-Replayed: true instead of executing again. The key covers the method, path, query, and body it was first used with; reusing it for a different request is rejected with 422. Replayable for 24 hours.

Media typeapplication/json
Nano Banana 2.1
object
prompt
required
Prompt

Describe what to generate, or the change to make.

string
aspect_ratio
Aspect ratio

The shape and size of the output.

string
default: SQUARE_1K
Allowed values: LANDSCAPE_8_1_1K LANDSCAPE_4_1_1K LANDSCAPE_21_9_1K LANDSCAPE_16_9_1K LANDSCAPE_3_2_1K LANDSCAPE_5_4_1K LANDSCAPE_4_3_1K SQUARE_1K PORTRAIT_4_5_1K PORTRAIT_3_4_1K PORTRAIT_2_3_1K PORTRAIT_9_16_1K PORTRAIT_1_4_1K PORTRAIT_1_8_1K LANDSCAPE_8_1_2K LANDSCAPE_4_1_2K LANDSCAPE_21_9_2K LANDSCAPE_16_9_2K LANDSCAPE_3_2_2K LANDSCAPE_5_4_2K LANDSCAPE_4_3_2K SQUARE_2K PORTRAIT_4_5_2K PORTRAIT_3_4_2K PORTRAIT_2_3_2K PORTRAIT_9_16_2K PORTRAIT_1_4_2K PORTRAIT_1_8_2K LANDSCAPE_4_1_4K LANDSCAPE_21_9_4K LANDSCAPE_16_9_4K LANDSCAPE_3_2_4K LANDSCAPE_5_4_4K LANDSCAPE_4_3_4K SQUARE_4K PORTRAIT_4_5_4K PORTRAIT_3_4_4K PORTRAIT_2_3_4K PORTRAIT_9_16_4K PORTRAIT_1_4_4K
thinking_level
Thinking

How much the model reasons about the prompt before generating. More is slower.

Advanced field.

string
default: OFF
Allowed values: OFF MINIMAL HIGH
use_web_search
Web search

Let the model look things up on the web to get real subjects and facts right.

Advanced field.

boolean
seed
Seed

The starting point for the model’s randomness. The same seed and settings give the same result.

Advanced field.

integer
nullable
transparency
Transparent background

Output the subject alone, with no backdrop behind it.

boolean
guidance_file_init_image
Source image

The image to modify

Array<object>
InferenceFormFileRef

A single guidance/reference file supplied to a reference_image_list field.

The slot’s guidance type is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object
url
required
Url
string
weight
Weight
number
nullable
guidance_file_reference_image
Reference image

Guides the edit

Array<object>
InferenceFormFileRef

A single guidance/reference file supplied to a reference_image_list field.

The slot’s guidance type is fixed by the field it’s attached to; the caller supplies the file URL and, where the model supports per-file weighting, a weight.

object
url
required
Url
string
weight
Weight
number
nullable
prompt_language
Prompt language

The language the prompt is written in, so it reaches the model as you meant it.

Advanced field.

string
nullable
Example
{
"prompt": "a knight standing in a snowy forest",
"aspect_ratio": "SQUARE_1K",
"transparency": false,
"guidance_file_init_image": [
{
"url": "<file_url>"
}
],
"guidance_file_reference_image": [
{
"url": "<file_url>"
}
]
}

Successful Response

Media typeapplication/json
ExecuteForgeOutput
object
inference_id
required
Inference Id

Unique identifier for this forge run.

string format: uuid
status
required
InferenceStatus

Current status: IN_PROGRESS.

string
Allowed values: in_progress complete failed cancelled deleted
estimated_price_creative_units
Estimated Price Creative Units

Estimated price in Creative Units.

number
nullable
poll_interval_seconds
required
Poll Interval Seconds

Suggested polling interval in seconds.

integer
created_at
required
Created At

Timestamp of when the run was created.

string format: date-time
session_id
Session Id

Session ID the run was added to, if a session was specified.

string format: uuid
nullable
normalized_parameters
Any of:
NormalizedInferenceParameters

Inference parameters after model-specific normalization.

These reflect the actual values used for generation, including model defaults applied for any parameters not explicitly set.

object
width
Width

Resolved output width in pixels.

integer
nullable
height
Height

Resolved output height in pixels.

integer
nullable
batch_size
Batch Size

Number of outputs to generate.

integer
nullable
num_inference_steps
Num Inference Steps

Resolved number of diffusion steps.

integer
nullable
guidance_scale
Guidance Scale

Resolved guidance scale.

number
nullable
duration_seconds
Duration Seconds

Resolved output length in seconds — video duration or audio clip length.

number
nullable
fps
Fps

Resolved FPS.

integer
nullable
Example
{
"status": "in_progress"
}

Unauthenticated — missing or invalid Bearer token.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Forbidden — insufficient permissions, or the access token lacks the scope the operation requires.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Resource not found.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

The request with this Idempotency-Key is still running — retry after the number of seconds in Retry-After.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Invalid input parameters, or an Idempotency-Key reused for a different request.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Rate limited — retry after the number of seconds in Retry-After.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Internal server error.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}