> ## Documentation Index
> Fetch the complete documentation index at: https://evolink.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Nanobanana 2.1 Image Generation

> - Nano Banana 2.1 (gemini-nano-banana-2.1) supports text to image, image to image, image editing, and multi-image composition, with `1K`, `2K`, and `4K` output resolutions
- Asynchronous processing: use the returned task ID to [query the task](/en/api-manual/task-management/get-task-detail)
- Generated image links are valid for 24 hours. Please save the images promptly
- Billing: output images are billed by resolution, input images per image, and web search and image search by the actual number of searches. Prompt text, text output, and reasoning are billed per token. Actual charges are based on the `usage` returned by the task query



## OpenAPI

````yaml en/api-manual/image-series/nanobanana/nanobanana-2.1/nanobanana-2.1-image-generate.json POST /v1/images/generations
openapi: 3.1.0
info:
  title: Nano Banana 2.1 API
  description: >-
    Create image generation tasks using AI models, supporting various models and
    parameter configurations
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.evolink.ai
    description: Production environment
security:
  - bearerAuth: []
tags:
  - name: Image Generation
    description: AI image generation related APIs
paths:
  /v1/images/generations:
    post:
      tags:
        - Image Generation
      summary: Nano Banana 2.1 API
      description: >-
        - Nano Banana 2.1 (gemini-nano-banana-2.1) supports text to image, image
        to image, image editing, and multi-image composition, with `1K`, `2K`,
        and `4K` output resolutions

        - Asynchronous processing: use the returned task ID to [query the
        task](/en/api-manual/task-management/get-task-detail)

        - Generated image links are valid for 24 hours. Please save the images
        promptly

        - Billing: output images are billed by resolution, input images per
        image, and web search and image search by the actual number of searches.
        Prompt text, text output, and reasoning are billed per token. Actual
        charges are based on the `usage` returned by the task query
      operationId: createImageGenerationNanoBanana21
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImageGenerationRequest'
            examples:
              text_to_image:
                summary: Text to Image
                value:
                  model: gemini-nano-banana-2.1
                  prompt: A cat playing on the grass
                  size: '16:9'
                  quality: 2K
              image_edit:
                summary: Image to Image / Image Editing
                value:
                  model: gemini-nano-banana-2.1
                  prompt: >-
                    Replace the cat in the image with a Shiba Inu, keeping the
                    background and lighting unchanged
                  quality: 2K
                  image_urls:
                    - https://example.com/image1.png
              web_search:
                summary: Generate with Web Search
                value:
                  model: gemini-nano-banana-2.1
                  prompt: >-
                    A weather infographic for Tokyo this weekend, in a flat
                    style with clear, readable text
                  size: '16:9'
                  quality: 2K
                  model_params:
                    web_search: true
      responses:
        '200':
          description: Image generation task created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImageGenerationResponse'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: invalid_request
                  message: Invalid request parameters
                  type: invalid_request_error
        '401':
          description: Unauthenticated, invalid or expired token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: unauthorized
                  message: Invalid or expired token
                  type: authentication_error
        '402':
          description: Insufficient quota, recharge required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: insufficient_quota
                  message: Insufficient quota. Please top up your account.
                  type: insufficient_quota
        '403':
          description: Access denied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: model_access_denied
                  message: 'Token does not have access to model: gemini-nano-banana-2.1'
                  type: invalid_request_error
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: rate_limit_exceeded
                  message: Too many requests, please try again later
                  type: rate_limit_error
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: internal_error
                  message: Internal server error
                  type: api_error
components:
  schemas:
    ImageGenerationRequest:
      type: object
      required:
        - model
        - prompt
      properties:
        model:
          type: string
          description: >-
            Image generation model name, official channel, better stability and
            controllability, suitable for commercial scenarios
          example: gemini-nano-banana-2.1
          enum:
            - gemini-nano-banana-2.1
          default: gemini-nano-banana-2.1
        prompt:
          type: string
          description: >-
            Prompt describing the image to generate or how to edit an input
            image, up to `4000` tokens
          example: A cat playing in the grass
        size:
          type: string
          description: Aspect ratio of the generated image, default is `auto`
          enum:
            - auto
            - '1:1'
            - '1:4'
            - '4:1'
            - '1:8'
            - '8:1'
            - '2:3'
            - '3:2'
            - '3:4'
            - '4:3'
            - '4:5'
            - '5:4'
            - '9:16'
            - '16:9'
            - '21:9'
          default: auto
        quality:
          type: string
          description: >-
            Output image resolution, default is `2K`


            **Note:**

            - Prices vary by resolution. Output images are billed at the
            selected resolution. Setting this parameter explicitly is
            recommended
          enum:
            - 1K
            - 2K
            - 4K
          default: 2K
        image_urls:
          type: array
          description: >-
            List of reference image URLs for image to image generation, image
            editing, and multi-image composition


            **Note:**

            - Up to `14` input images per request

            - Image size: no more than `20MB`

            - Supported file formats: `.jpeg`, `.jpg`, `.png`, `.webp`

            - Image URLs must be directly accessible by the server or trigger a
            direct image download when accessed (such URLs typically end in an
            image extension such as `.png` or `.jpg`)

            - Input images are billed per image
          items:
            type: string
            format: uri
          maxItems: 14
          example:
            - https://example.com/image1.png
            - https://example.com/image2.png
        model_params:
          type: object
          description: Model extension parameters
          properties:
            web_search:
              type: boolean
              description: >-
                Whether to enable web search, default is `false`. When enabled,
                the model searches for the latest information on the web before
                generating the image


                **Note:**

                - Billed by the actual number of searches performed by the
                model. A single request may involve multiple searches
              default: false
              example: true
            image_search:
              type: boolean
              description: >-
                Whether to enable image search, default is `false`. When
                enabled, the model retrieves images from the web as visual
                references before generating the image


                **Note:**

                - Billed by the actual number of searches performed by the
                model. A single request may involve multiple searches
              default: false
              example: true
            thinking_level:
              type: string
              description: >-
                Reasoning level controlling how deeply the model reasons before
                generating an image, default is `auto`


                - `auto`: leave unspecified and let the model decide

                - `min`: minimal reasoning, fastest generation

                - `medium`: balanced reasoning

                - `high`: deep reasoning


                **Note:**

                - Reasoning tokens are billed as text output
              enum:
                - auto
                - min
                - medium
                - high
              default: auto
              example: medium
        callback_url:
          type: string
          description: >-
            HTTPS callback address after task completion


            **Callback Timing:**

            - Triggered when task is completed, failed, or cancelled

            - Sent after billing confirmation is completed


            **Security Restrictions:**

            - Only HTTPS protocol is supported

            - Callback to internal IP addresses is prohibited (127.0.0.1,
            10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)

            - URL length must not exceed `2048` characters


            **Callback Mechanism:**

            - Timeout: `10` seconds

            - Maximum `3` retries on failure (retries after `1` second/`2`
            seconds/`4` seconds)

            - Callback response body format is consistent with the task query
            API response format

            - Callback address returning 2xx status code is considered
            successful, other status codes will trigger retry
          format: uri
          example: https://your-domain.com/webhooks/image-task-completed
    ImageGenerationResponse:
      type: object
      properties:
        created:
          type: integer
          description: Task creation timestamp
          example: 1757165031
        id:
          type: string
          description: Task ID
          example: task-unified-1757165031-uyujaw3d
        model:
          type: string
          description: Actual model name used
          example: gemini-nano-banana-2.1
        object:
          type: string
          enum:
            - image.generation.task
          description: Specific task type
        progress:
          type: integer
          description: Task progress percentage (0-100)
          minimum: 0
          maximum: 100
          example: 0
        status:
          type: string
          description: Task status
          enum:
            - pending
            - processing
            - completed
            - failed
          example: pending
        task_info:
          $ref: '#/components/schemas/TaskInfo'
          description: Asynchronous task information
        type:
          type: string
          enum:
            - text
            - image
            - audio
            - video
          description: Task output type
          example: image
        usage:
          $ref: '#/components/schemas/Usage'
          description: Usage and billing information
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code identifier
            message:
              type: string
              description: Error description
            type:
              type: string
              description: Error type
    TaskInfo:
      type: object
      properties:
        can_cancel:
          type: boolean
          description: Whether the task can be cancelled
          example: true
        estimated_time:
          type: integer
          description: Estimated completion time (seconds)
          minimum: 0
          example: 45
    Usage:
      type: object
      description: Usage and billing information
      properties:
        billing_rule:
          type: string
          description: Billing rule
          enum:
            - per_call
            - per_image
            - per_token
            - per_second
          example: per_image
        credits_reserved:
          type: number
          description: Estimated credits consumed
          minimum: 0
          example: 3.0845
        user_group:
          type: string
          description: Billing group the user belongs to
          example: default
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##All APIs require Bearer Token authentication##


        **Get API Key:**


        Visit [API Key Management Page](https://evolink.ai/dashboard/keys) to
        get your API Key


        **Add to request header:**

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.