Skip to content
GoogleChecking

nano-banana-2/text-to-image

nano-banana-2-text-to-image-economy

text to imageOutput: ImageInput: text
Loading price…
Official list price · Not verified

Endpoint

All models share one asynchronous job API. This model is selected by its slug.

Submit
POST https://api.hermes-ai.net/api/v1/jobs

{
  "model": "nano-banana-2-text-to-image-economy",
  "input": {
    "prompt": "A lighthouse on a rocky coast at sunrise, soft light",
    "resolution": "1k"
  }
}

Then poll GET /api/v1/jobs/{id} until the status is terminal.

Authentication

Send an API key with the jobs:create scope to submit and jobs:read to poll.

HeaderValueNotes
AuthorizationBearer <API key>Or send the key in x-api-key.
Content-Typeapplication/json
Idempotency-Key<unique string ≤128>Required. Reuse it only to retry the identical request.

Request body

FieldTypeRequiredNotes
modelstringrequiredModel slug from the catalog.
inputobjectrequiredFields from the model's input schema.
expectedPriceMicrosintegeroptionalPrice you showed the user. A mismatch returns 409 PRICE_CHANGED before any charge.

input fields

Unknown fields are rejected with INVALID_MODEL_INPUT.

FieldTypeRequiredDefaultAllowed values and constraints
prompt
stringrequired—
aspectRatio
stringoptional"9:16"

One of: "1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3", "5:4", "4:5", "21:9", "1:4", "4:1", "1:8", "8:1"

resolution
stringrequired"1k"

One of: "1k", "2k", "4k"

Response

202 for a new task, 200 when an Idempotency-Key replay matches. GET /api/v1/jobs/{id} returns the same shape without replayed.

FieldTypeNotes
idstringHermes AI task ID. Use it to poll.
modelstringModel slug.
statusstringSee task statuses.
errorCodestring | nullSet when a task fails or needs review.
priceMicrosintegerQuote fixed at admission, USD micro-units.
currency"USD"
createdAt / updatedAtstringISO 8601 timestamps.
assets[]array{ id, type, url?, text? }. url is a same-origin /api/v1/results/<uuid> link.
replayedbooleanSubmit only. true when an idempotent retry matched.

Task statuses

StatusTerminalMeaning
queuednoAccepted and waiting for a worker.
submittingnoBeing sent to the model provider.
runningnoThe model is generating.
succeededyesFinished. Results are in assets.
failedyesFinished without a result. The hold is released.
reconciliation_requiredyesThe result is being verified. Keep the task ID and do not resubmit automatically.

Errors

Every error body is { code, error }. Handle by code.

HTTPCodeMeaning and action
401AUTH_REQUIREDMissing or invalid API key or session.
403INSUFFICIENT_SCOPEThe API key lacks the scope this endpoint needs.
403PERMISSION_DENIEDThis credential cannot perform the operation.
429API_KEY_RATE_LIMITEDThe API key's rate limit was reached. Honor Retry-After.
429API_KEY_USAGE_EXCEEDEDThe API key reached its usage limit. Create a new key.
400INVALID_REQUESTThe body is not a JSON object or a required value is missing.
400INVALID_IDEMPOTENCY_KEYIdempotency-Key must be 1–128 printable ASCII characters.
400INVALID_MODEL_INPUTinput does not match the model schema (unknown field, missing required field, or invalid value).
400 / 413INPUT_TOO_LARGEThe request body is larger than 256 KB. Upload media first and send a media reference.
404REQUEST_NOT_FOUNDNo chat request with this ID belongs to your account.
404MODEL_NOT_FOUNDNo model has this slug.
404JOB_NOT_FOUNDNo task with this ID belongs to your account.
409IDEMPOTENCY_CONFLICTThis Idempotency-Key was used with different input. Use a new key for a new request.
409PRICE_CHANGEDThe price differs from expectedPriceMicros. Fetch the price and confirm again.
409MODEL_PRICE_UNAVAILABLENo price is configured for this model yet, so it cannot run.
409PAYMENT_REVIEW_REQUIREDA refund left an uncovered balance. Contact support or cover the balance before submitting tasks.
409INSUFFICIENT_CREDITSAvailable credits do not cover the task price.
429RATE_LIMITEDToo many task submissions per minute. Retry later.
429CONCURRENCY_LIMITEDToo many unfinished tasks. Wait for one to finish.
503EXECUTION_UNAVAILABLEExecution is not configured for this model right now.
429UPSTREAM_RATE_LIMITEDThe model provider is rate limiting chat requests. Retry with backoff; nothing was charged.
502UPSTREAM_ERRORThe model provider failed the chat request. Nothing was charged; retry later.
503PLATFORM_BUDGET_EXCEEDEDThis model is temporarily unavailable. Try again later.
503EXECUTION_TEMPORARILY_UNAVAILABLEExecution is temporarily unavailable. Retry with the same Idempotency-Key.
503AUTH_UNAVAILABLEAuthentication is temporarily unavailable. Retry later.
503API_UNAVAILABLEThe API is temporarily unavailable. Retry later.

Full API guide · OpenAPI 3.1