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

# Image sizes

> Choose the size a Creative Session makes an image at, and see which sizes your destination accepts.

A Creative Session makes each image at one size. When the draft names no size,
that size is 1024×1024. Many destinations need something else: Meta's feed
image must be at least 1080 pixels wide, so a 1024×1024 image does not fit
Meta. This page lists the sizes a session can make, shows how to see which ones
your destination accepts, and explains how to choose one.

## The sizes

| Size | Aspect ratio | Gemini tier |
| - | - | - |
| 1024×1024 | 1:1 (the default) | 1K |
| 1080×1080 | 1:1 | 2K |
| 1910×1000 | 1.91:1 | 2K |
| 1080×1620 | 2:3 | 2K |
| 1620×1080 | 3:2 | 2K |
| 1080×1440 | 3:4 | 2K |
| 1440×1080 | 4:3 | 2K |
| 1080×1350 | 4:5 | 2K |
| 1350×1080 | 5:4 | 2K |
| 1080×1920 | 9:16 | 2K |
| 1920×1080 | 16:9 | 2K |

Every image comes out at exactly the size you ask for, whichever engine makes
it: when an engine works at a nearby ratio, Apostra crops the result to your
size, keeping the part most likely to hold the subject.

A Meta image post picks its own size when the draft names none: 1080×1350
(4:5), or another of Meta's feed ratios when the campaign's placement calls for
it.

## What a size costs

The size does not change what Apostra charges. Images made with the
Scope3-funded engine carry no retail IU charge at any size (see
[Creative generation](https://docs.apostra.com/v2/setup/v3/creative-engines.md)).

The Gemini tier is Gemini's own billing tier: Gemini bills an image up to 1024
pixels on its longer side at its 1K tier, and a larger one at its 2K tier. It
affects your own bill only when your image engine is a Gemini connection that
uses your own key. On any other engine the tier does not apply, and the read
below shows `null` for it. The default is 1024×1024 because every engine makes
that size directly and Gemini makes it at its lower tier.

## See which sizes fit your destination

Read an image Creative Session with `get`:

```json theme={null}
{ "kind": "creative_session", "id": "cs_123", "sourceId": "campaign_456" }
```

The session object carries `imageSizes`. `save_creative_session` returns the
same field whenever it returns the session, including when you save a draft.

```json theme={null}
"imageSizes": {
  "current": { "width": 1024, "height": 1024 },
  "options": [
    { "id": "1024x1024", "aspectRatio": "1:1", "params": { "width": 1024, "height": 1024 }, "providerTier": "1K", "default": true },
    { "id": "1080x1080", "aspectRatio": "1:1", "params": { "width": 1080, "height": 1080 }, "providerTier": "2K" },
    { "id": "1910x1000", "aspectRatio": "1.91:1", "params": { "width": 1910, "height": 1000 }, "providerTier": "2K" }
  ],
  "destinations": [
    {
      "label": "Meta Feed Image Ad",
      "sellerName": "Meta",
      "formatOptionRef": { "scope": "publisher", "publisher_domain": "facebook.com", "format_option_id": "meta_image_feed" },
      "fits": ["1080x1080", "1910x1000", "1080x1350"]
    }
  ]
}
```

The example shows three of the eleven options.

| Field | What it says |
| - | - |
| `current` | The size the draft generates at, as `width` and `height`. A draft that names no size holds the default, so this always has a value. |
| `options[].id` | The size, written `<width>x<height>`. |
| `options[].aspectRatio` | The aspect ratio, in AdCP's `aspect_ratio` format. |
| `options[].params` | The size as AdCP canonical image parameters. Send it unchanged to choose this size. |
| `options[].providerTier` | Gemini's billing tier for this size when the session's engine is Gemini, otherwise `null`. |
| `options[].default` | `true` on the size an image draft gets when it names none. |
| `destinations[].label` | The destination format's name. |
| `destinations[].sellerName` | The seller or platform, when known. |
| `destinations[].formatOptionRef` | The format option, as AdCP's `format_option_ref`. |
| `destinations[].fits` | The ids of the sizes this format accepts. |
| `destinationsTruncated` | `true` when Apostra found more destination formats than the list shows. The list is then partial, so a size that fits every listed format may not fit one left out. Absent otherwise. |

Apostra decides which sizes fit from the format's own declaration: its
accepted sizes, minimum and maximum width and height, and accepted aspect
ratios. The destinations are:

* the format the draft names, such as the Meta image post; or
* for a campaign session that names none, the image formats of the products
  the campaign's media buys use, up to 20, always listed in the same order.

When neither applies, or the formats cannot be read, `destinations` is `null`.
That means Apostra does not know, not that no size fits.

The text the tool returns says the same in one line, for example: "Image sizes:
1080×1080 (1:1), 1910×1000 (1.91:1), 1080×1350 (4:5) fit the destination
format; the current 1024×1024 does not."

## Choose a size

Send an option's `params` as the draft's `request.params` when you save the
draft:

```json theme={null}
{
  "campaignId": "campaign_456",
  "idempotencyKey": "garden-launch-1080",
  "draft": {
    "request": {
      "format_kind": "image",
      "params": { "width": 1080, "height": 1080 },
      "creative_brief": { "prompt": "A garden product photograph." }
    }
  }
}
```

You can send an aspect ratio instead, as `"aspect_ratio": "1:1"` in the
request, and Apostra uses that ratio's size from the table. A saved draft keeps
its size: to make the image at another size, save a new draft.


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