Nano Banana 2 Lite Standard
Generate or edit a 1K image from text and up to 14 reference images. Billed by the tokens each render uses.
- Billed by tokens: input, text and thinking output, and image output tokens at per-1M-token rates. The per-image prices below are estimates at the image tokens listed for each
resolution. - Asynchronous only: create a task with
POST /v1/images/tasks, then pollGET /v1/tasks/{task_id}. The render runs on BeatAPI’s side, so a long render never holds your connection open. The synchronousPOST /v1/images/generationsis not available for this model. - One image per task. To get several images, create several tasks.
- Text to image, or edit and combine up to 14 reference images given as public HTTPS links.
- A failed task costs nothing: the reservation is returned in full.
This is nano-banana-2-lite sold by tokens. The model and the request are the same: fields, resolutions, aspect ratios and reference images. nano-banana-2-lite charges one flat price per image; nano-banana-2-lite-std charges for the tokens each render actually uses. Pricing.
Opens this model in the API Explorer. Enter your BeatAPI API key to create a task: the call is real and is billed to your own balance.
Model IDs
The fixed-price model and this one take the same request; only the way the price is counted differs. The values below come straight from the gateway contract.
Endpoint and authentication
POST https://api.beatapi.io/v1/images/tasks
Authorization
string
Required
Your BeatAPI API key, sent as Bearer <BEATAPI_API_KEY>. Create keys in the Dashboard. Keep keys on your server; never ship them in a browser or mobile app.
Send the body as JSON with Content-Type: application/json. Idempotency-Key is optional: send a unique value (at most 255 characters) per logical request and reuse it only to retry that exact body. Within 24 hours a retry with the same key and body returns the first response again with Idempotent-Replayed: true; the same key with a different body returns 409 idempotency_conflict. Responses other than 2xx are not stored, so a retry after a 400 or 402 runs again.
How a request works
Create the task
POST the parameters below to the endpoint. A 201 means the task was accepted and its price reserved from your balance; the work runs in the background. Save data.id.
Wait for it to finish
Call GET /v1/tasks/{task_id} and wait data.poll_after_seconds between calls (5 s for images, 8 s for videos) until status is succeeded or failed. Or register a webhook for task.succeeded and task.failed; keep polling as the fallback, because a task stopped by the processing timeout sends no event.
Save the result
On succeeded, download every data.output.media[].url and store the files you need; BeatAPI does not promise how long result URLs stay available. On failed, read data.error_code and data.error_message: the reserved amount was returned to your balance, and data.retryable says whether sending the same request again can succeed.
Input modes
Request parameters
model
string
Required
The model to run.
Value: nano-banana-2-lite-std
If the value is wrong
- Missing:
"model" is required - Unknown model ID:
"model" nano-banana-9 is not catalogued - A video model sent to this endpoint:
"model" seedance-2.5 is served by POST /v1/videos/tasks, not this endpoint
prompt
string
Required
What to draw, or what to change in the reference images. Plain language works best: subject, style, lighting, composition, and any text that must appear in the image.
Length: 1–5000 characters
- Length is counted in characters (a CJK character counts as one).
- When you send
images, say which image does what, for example “Use the first image for the product and the second for the background”.
If the value is wrong
- Missing:
"prompt" is required - Empty or longer than the limit:
"prompt" has an unsupported length - Not a string:
"prompt" must be a string
images
string[]
Optional
Reference images to edit or combine. Sending this field switches the request from text-to-image to image editing.
Items: 1–14
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must return the image file itself (PNG, JPEG or WebP) over public HTTPS, at most 50 MB. The gateway downloads the first bytes of every link before creating the task.
- Links to web pages, login walls, expired signed URLs or hotlink-protected hosts are refused, because they do not return an image.
- Positions in error messages are 0-based:
images[0]is the first link.
If the value is wrong
- More than the maximum:
"images" accepts at most 14 items - An empty array:
"images" requires at least 1 item - Not an https:// link:
"images[0]" must be a public HTTPS URL - A private or unsafe address:
"images[0]" must be a publicly reachable HTTPS image URL - The host answers with a 4xx error:
"images[0]" could not be downloaded: the URL returned HTTP 404 - The link returns something other than PNG, JPEG or WebP:
"images[0]" is not a PNG, JPEG or WebP image: the URL returned text/html - Larger than 50 MB:
"images[2]" is 63.4 MB; images must be 50 MB or smaller
Example
aspect_ratio
string
OptionalDefault: 1:1
Shape of the image as width:height.
Allowed values: 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9, auto
Default: 1:1
autoleaves the shape to the model. Withimagesit normally follows the reference, but this is not guaranteed on every route; name the ratio if the shape matters.1:4,4:1,1:8and8:1are extra-tall and extra-wide banners; Nano Banana Pro and Nano Banana do not accept them.
When you edit an image, auto usually keeps the shape of the reference. If you leave the field out, the default 1:1 is used and the result is square.
If the value is wrong
- A value not in the list:
"aspect_ratio" must be one of: [1:1 1:4 1:8 2:3 3:2 3:4 4:1 4:3 4:5 5:4 8:1 9:16 16:9 21:9 auto]
resolution
string
OptionalDefault: 1K
Size class of the image. This model has one class, 1K; the exact pixel size depends on aspect_ratio and is decided by the model.
Value: 1K
Default: 1K
- This model renders 1K only. The field is accepted so that the request shape of the other Nano Banana models works unchanged, but
2Kand4Kare refused rather than billed and delivered as 1K. - Use the capital K:
1kis refused.
If the value is wrong
- A value not in the list:
"resolution" must be one of: [1K]
output_format
string
OptionalDefault: png
File type of the result.
Allowed values: png, jpeg
Default: png
- If the model returns the other of the two types, BeatAPI converts the image before storing it, so the file normally has the format you asked for; if a conversion fails, the file is stored as delivered. Transparent areas become white in a JPEG. An image too large to convert (above 64 megapixels) is stored as delivered.
output.media[].mime_typealways states the stored type. - Write
jpeg, notjpg(only Nano Banana Pro usesjpg).
If the value is wrong
- A value not in the list (for example
jpgorwebp):"output_format" must be one of: [png jpeg]
The gateway also checks these combinations before creating the task:
- billed per token at the listed rates for the tokens each render uses (input, text and thinking output, image output); the listed per-image prices are estimates at each resolution’s listed image tokens
- this is the official version, billed per token; nano-banana-2-lite is the same model at a fixed price per image
Input media limits
The gateway reads every input before the task is created and refuses one outside these limits with a 400 bad_request that names the input. Nothing is charged.
- Reference images: PNG, JPEG or WebP, recognised from the file content rather than the file name or
Content-Type; at most 50 MB each (decimal megabytes; checked when the host states the size); 1 to 14 links. GIF, HEIC and SVG are refused. - No pixel or aspect-ratio limit is checked for this model.
- If a host does not answer in time, the link is not refused at create; a link that still cannot be fetched later fails the task with
bad_request, and the task is refunded. - Have a local file? Upload it with
POST /v1/filesand pass the returneddata.url.
Submit, then poll
This model runs only as a task. POST /v1/images/tasks answers at once with the task ID in data.id; then call GET /v1/tasks/{task_id} every data.poll_after_seconds until data.status is succeeded or failed. The render runs on BeatAPI’s side, so a long render never holds your connection open or runs into your client’s timeout. The synchronous POST /v1/images/generations is not available for this model.
Through the Capabilities API it is the same task: start it with POST /v1/capabilities/run, then send the status call with the returned task ID until it is succeeded or failed.
Billed by tokens, compared with the fixed price
Fields this model does not accept
The image endpoint knows a few fields that other image models use. Sending one of them here is refused instead of being ignored, so you never pay for a setting that had no effect:
quality,seed,background,size,enhance_prompt→field "quality" is not supported by model nano-banana-2-lite-std(with the field you sent).- Any other unknown field, such as
n→unknown field: n. There is non: one task makes one image.
Request examples
Text to image
A 1K landscape image from a prompt.
Edit one image
Change the background and keep the product. auto usually keeps the shape of the reference.
Combine several images
Name each reference in the prompt by its position.
1K JPEG poster
A tall poster delivered as JPEG.
Responses
Create a task (201)
The task object. output is null until the task succeeds. Fields marked “while running” disappear once the task finishes.
Finished task
GET /v1/tasks/{task_id} returns HTTP 200 with status: "succeeded" and the result in data.output.
Output fields
Failed task
A failed task is still HTTP 200 on GET /v1/tasks/{task_id}: the failure is in the body. The reservation is returned in full, so nothing is charged.
Complete example
Create a task, wait for it with the server’s polling hint, and print the result URLs. Set BEATAPI_API_KEY in your environment and install requests.
Billing
- Billed by tokens at the per-1M-token rates in the table below: input (the prompt and the reference images in
images), text and thinking output, and image output. The model counts the tokens; theresolutionand the reference images change the count. - The per-image prices are estimates at the image-output tokens listed for one render of each
resolution, without reference images; reference images and thinking add to them. - When the task is created, the estimate for its tier is reserved from your balance, and from the key’s quota if it has one. When it succeeds, the charge is settled to the tokens the render actually used, so the final
data.usagecan differ from the reservation. A request refused before a task exists costs nothing. - A failed task is refunded in full.
- The fixed-price
nano-banana-2-liteis the same model at one flat price per image, whatever the render used.
Current list prices, the same as on Pricing. An account with a negotiated discount pays less; data.usage on the task always shows the amount actually charged.
Common errors
HTTP errors at a glance
Errors before a task exists arrive as a non-2xx response, and nothing is charged. Branch on error.code or error.retryable; message names the problem. The full list and retry policy are on Errors.
Authentication
Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.
Headers
Send the body as JSON with Content-Type: application/json. Idempotency-Key is optional: send a unique value (at most 255 characters) per logical request and reuse it only to retry that exact body. Within 24 hours a retry with the same key and body returns the first response again with Idempotent-Replayed: true; the same key with a different body returns 409 idempotency_conflict. Responses other than 2xx are not stored, so a retry after a 400 or 402 runs again.
Request
The model to run.
Value: nano-banana-2-lite-std
If the value is wrong
- Missing:
"model" is required - Unknown model ID:
"model" nano-banana-9 is not catalogued - A video model sent to this endpoint:
"model" seedance-2.5 is served by POST /v1/videos/tasks, not this endpoint
What to draw, or what to change in the reference images. Plain language works best: subject, style, lighting, composition, and any text that must appear in the image.
Length: 1–5000 characters
- Length is counted in characters (a CJK character counts as one).
- When you send
images, say which image does what, for example “Use the first image for the product and the second for the background”.
If the value is wrong
- Missing:
"prompt" is required - Empty or longer than the limit:
"prompt" has an unsupported length - Not a string:
"prompt" must be a string
Shape of the image as width:height.
Allowed values: 1:1, 1:4, 1:8, 2:3, 3:2, 3:4, 4:1, 4:3, 4:5, 5:4, 8:1, 9:16, 16:9, 21:9, auto
Default: 1:1
autoleaves the shape to the model. Withimagesit normally follows the reference, but this is not guaranteed on every route; name the ratio if the shape matters.1:4,4:1,1:8and8:1are extra-tall and extra-wide banners; Nano Banana Pro and Nano Banana do not accept them.
Notes: When you edit an image, auto usually keeps the shape of the reference. If you leave the field out, the default 1:1 is used and the result is square.
If the value is wrong
- A value not in the list:
"aspect_ratio" must be one of: [1:1 1:4 1:8 2:3 3:2 3:4 4:1 4:3 4:5 5:4 8:1 9:16 16:9 21:9 auto]
Reference images to edit or combine. Sending this field switches the request from text-to-image to image editing.
Items: 1–14
Each item is a public https:// URL. For a local file, upload it first with POST /v1/files and pass the returned data.url.
- Each link must return the image file itself (PNG, JPEG or WebP) over public HTTPS, at most 50 MB. The gateway downloads the first bytes of every link before creating the task.
- Links to web pages, login walls, expired signed URLs or hotlink-protected hosts are refused, because they do not return an image.
- Positions in error messages are 0-based:
images[0]is the first link.
If the value is wrong
- More than the maximum:
"images" accepts at most 14 items - An empty array:
"images" requires at least 1 item - Not an https:// link:
"images[0]" must be a public HTTPS URL - A private or unsafe address:
"images[0]" must be a publicly reachable HTTPS image URL - The host answers with a 4xx error:
"images[0]" could not be downloaded: the URL returned HTTP 404 - The link returns something other than PNG, JPEG or WebP:
"images[0]" is not a PNG, JPEG or WebP image: the URL returned text/html - Larger than 50 MB:
"images[2]" is 63.4 MB; images must be 50 MB or smaller
Example
"images": [
"https://cdn.beatapi.io/samples/smart-bottle.png",
"https://cdn.beatapi.io/samples/neon-singer.png"
]
File type of the result.
Allowed values: png, jpeg
Default: png
- If the model returns the other of the two types, BeatAPI converts the image before storing it, so the file normally has the format you asked for; if a conversion fails, the file is stored as delivered. Transparent areas become white in a JPEG. An image too large to convert (above 64 megapixels) is stored as delivered.
output.media[].mime_typealways states the stored type. - Write
jpeg, notjpg(only Nano Banana Pro usesjpg).
If the value is wrong
- A value not in the list (for example
jpgorwebp):"output_format" must be one of: [png jpeg]
Size class of the image. This model has one class, 1K; the exact pixel size depends on aspect_ratio and is decided by the model.
Value: 1K
Default: 1K
- This model renders 1K only. The field is accepted so that the request shape of the other Nano Banana models works unchanged, but
2Kand4Kare refused rather than billed and delivered as 1K. - Use the capital K:
1kis refused.
If the value is wrong
- A value not in the list:
"resolution" must be one of: [1K]
Response
The task object. output is null until the task succeeds. Fields marked “while running” disappear once the task finishes.

