Ideogram Design API

The design API from Ideogram — 1 operation(s) for design.

GitHub OpenAPI
Business capability
Generative Media AE-110.20

Operations 1

POST /v2/design/layerize/ideogram-3 Layerize text with Ideogram 3.0 #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ideogram:ideogram-design-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ideogram-design-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ideogram API v2 Design API
  version: 1.0.0
servers:
- url: https://api.ideogram.ai
  description: https://api.ideogram.ai
tags:
- name: design
paths:
  /v2/design/layerize/ideogram-3:
    post:
      operationId: design_post_layerize_design_ideogram_v3
      summary: Layerize text with Ideogram 3.0
      description: 'Turn a flat image into an editable design: detected text is returned as

        positioned text blocks with matched fonts, sizes, and colors, alongside

        a text-free base image. Upload the image as `image` using

        `multipart/form-data`. Returns results directly by default; set `async`

        or supply a `webhook_url` to get a `generation_id` and poll

        `GET /v2/generations/{generation_id}`.'
      tags:
      - design
      parameters:
      - name: dry_run
        in: query
        description: 'When true, the request is validated and priced but not run: nothing is

          generated, stored, or billed, and no safety review is performed. The

          response is a `PriceQuote` object instead of the usual response for this

          endpoint. Send exactly the request you would send to generate, so the

          quote reflects the same options.

          '
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: The layerized design (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LayerizeDesignIdeogramV3Response'
        '400':
          description: Invalid input provided.
          content:
            application/json:
              schema:
                description: Any type
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                description: Any type
        '402':
          description: Insufficient credits or quota.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerationErrorResponse'
        '403':
          description: Not authorized to layerize images.
          content:
            application/json:
              schema:
                description: Any type
        '404':
          description: The source image was not found.
          content:
            application/json:
              schema:
                description: Any type
        '429':
          description: Too many requests.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenerationErrorResponse'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                description: Any type
        '503':
          description: The endpoint is temporarily unavailable.
          content:
            application/json:
              schema:
                description: Any type
      requestBody:
        description: A request to layerize the text in one image. Send it as `multipart/form-data` with the source `image`.
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                image:
                  type: string
                  format: binary
                  description: The source image to layerize (max 50MB). Common image formats such as JPEG, PNG, and WEBP are supported. Multipart requests only.
                prompt:
                  type:
                  - string
                  - 'null'
                  maxLength: 10000
                  description: A description of the image, used to guide text detection. When omitted, detection runs on the image alone.
                seed:
                  type: integer
                  minimum: 0
                  maximum: 2147483647
                  description: Random seed. Set for reproducible generation.
                font_candidate_files:
                  type: array
                  items:
                    type: string
                    format: binary
                  description: Candidate font files to make available for text style matching. Supported formats .ttf, .otf, .woff, .woff2 (max 5MB each, maximum 5 files). Multipart requests only.
                async:
                  type: boolean
                  default: false
                  description: When false (the default), the request waits until layerization is complete and returns the result in `data`. When true, the request returns as soon as it is accepted; poll `GET /v2/generations/{generation_id}` with the returned `generation_id` for the result.
                webhook_url:
                  type: string
                  format: uri
                  maxLength: 2048
                  description: 'HTTPS URL that Ideogram delivers the generated result to. Ideogram sends a

                    JSON POST to this URL once all images for the request have finished

                    generating. The body mirrors the synchronous generate response:

                    `request_id`, `created`, and a `data` array

                    containing every generated image (`url`, `prompt`, `resolution`, `seed`,

                    `is_image_safe`). Each delivery is signed with Ed25519 and verifiable

                    against the public keys at `https://api.ideogram.ai/v1/.well-known/jwks.json`. Must be HTTPS;

                    private and loopback hosts and the cloud metadata service are rejected.

                    '
              required:
              - image
      security:
      - ApiKeyAuth: []
components:
  schemas:
    GenerationErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: A message describing why the generation request was rejected.
        reject_reason:
          $ref: '#/components/schemas/GenerationRejectReason'
        max_inflight_requests:
          type: integer
          minimum: 1
          description: 'How many generations the account may have in progress at once on

            the queue this request resolved to. Present when `reject_reason`

            is `inflight_limit`.

            '
        task_completion_speed:
          $ref: '#/components/schemas/GenerationErrorResponseTaskCompletionSpeed'
          description: 'The queue this request resolved to. Present when `reject_reason`

            is `inflight_limit`.

            '
      required:
      - error
      - reject_reason
      description: A generation request rejected by an account or usage limit.
      title: GenerationErrorResponse
    LayerizeDesignIdeogramV3Response:
      type: object
      properties:
        generation_id:
          type: string
          description: 'URL-safe base64 ID of the generation. Use it to poll

            `GET /v2/generations/{generation_id}`.

            '
        data:
          type: array
          items:
            $ref: '#/components/schemas/LayerizedImageObject'
          description: The layerized design. Present only for synchronous requests (`async` omitted or false).
        seed:
          type: integer
          minimum: 0
          maximum: 2147483647
          description: Random seed. Set for reproducible generation.
      required:
      - generation_id
      - seed
      description: 'Response returned by `POST /v2/design/layerize/ideogram-3`.

        Synchronous requests (the default) include the layerized design in

        `data`. Asynchronous requests omit `data`; poll

        `GET /v2/generations/{generation_id}` with the returned

        `generation_id`. `seed` is the seed that was used, including when you

        did not set one.

        '
      title: LayerizeDesignIdeogramV3Response
    DetectedTextBlockAlignment:
      type: string
      enum:
      - left
      - center
      - right
      description: Detected text alignment.
      title: DetectedTextBlockAlignment
    LayerizedImageObject:
      type: object
      properties:
        url:
          type:
          - string
          - 'null'
          format: uri
          description: The direct link to the design image with its text intact. Empty when the image did not pass safety checks.
        base_image_url:
          type:
          - string
          - 'null'
          format: uri
          description: The direct link to the base image with all detected text removed. Empty when the image did not pass safety checks.
        resolution:
          type: string
          description: The resolution of the design, formatted as "WIDTHxHEIGHT".
        is_image_safe:
          type: boolean
          description: Whether the image passed safety checks. If false, the image links are empty.
        seed:
          type: integer
          minimum: 0
          maximum: 2147483647
          description: Random seed. Set for reproducible generation.
        text_blocks:
          type: array
          items:
            $ref: '#/components/schemas/DetectedTextBlock'
          description: Flat list of detected text regions in the design.
      required:
      - resolution
      - is_image_safe
      - seed
      - text_blocks
      description: 'One layerized design. Image links are available for a limited period

        of time; if you would like to keep an image, you must download it.

        '
      title: LayerizedImageObject
    GenerationRejectReason:
      type: string
      enum:
      - insufficient_funds
      - subscription_required
      - daily_limit
      - priority_credit_required
      - inflight_limit
      - feature_limit
      description: The account or usage limit that rejected a generation request.
      title: GenerationRejectReason
    GenerationErrorResponseTaskCompletionSpeed:
      type: string
      enum:
      - fast
      - slow
      description: 'The queue this request resolved to. Present when `reject_reason`

        is `inflight_limit`.

        '
      title: GenerationErrorResponseTaskCompletionSpeed
    DetectedTextBlockFormattingItems:
      type: string
      enum:
      - bold
      - italic
      - underline
      - strikethrough
      - all_caps
      - small_caps
      - superscript
      - subscript
      title: DetectedTextBlockFormattingItems
    DetectedTextBlockRole:
      type: string
      enum:
      - heading
      - subheading
      - body
      - caption
      description: Inferred typographic role of this text block.
      title: DetectedTextBlockRole
    DetectedTextBlock:
      type: object
      properties:
        x:
          type: integer
          description: X coordinate in pixels from the top-left corner.
        y:
          type: integer
          description: Y coordinate in pixels from the top-left corner.
        width:
          type: integer
          description: Width of the text region in pixels.
        height:
          type: integer
          description: Height of the text region in pixels.
        text:
          type: string
          description: The detected text content. Line breaks are represented as \n.
        alignment:
          $ref: '#/components/schemas/DetectedTextBlockAlignment'
          description: Detected text alignment.
        angle:
          type: string
          title: float
          description: Rotation angle in degrees (clockwise). Defaults to 0.
          default: 0
        font_name:
          type:
          - string
          - 'null'
          description: Best-matching font name from the font library.
        font_alternatives:
          type:
          - array
          - 'null'
          items:
            type: string
          description: Alternative font matches, ranked by similarity.
        font_size:
          type:
          - integer
          - 'null'
          description: Detected font size in points.
        line_height:
          type:
          - string
          - 'null'
          title: float
          description: Line height multiplier (e.g., 1.2).
        color:
          type:
          - string
          - 'null'
          pattern: ^#[0-9A-Fa-f]{6}$
          description: Detected text color in hex format.
        formatting:
          type: array
          items:
            $ref: '#/components/schemas/DetectedTextBlockFormattingItems'
          description: Detected text formatting effects.
        role:
          oneOf:
          - $ref: '#/components/schemas/DetectedTextBlockRole'
          - type: 'null'
          description: Inferred typographic role of this text block.
      required:
      - x
      - y
      - width
      - height
      - text
      - alignment
      - formatting
      description: A single detected text region with its position, content, font information, and styling.
      title: DetectedTextBlock
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Api-Key
      description: API key for access control. Use in the header with the name \"Api-Key\"