# Image

> One rendition of a card face, with the rights holder named.

Source: https://pokemontcgapi.com/docs/objects/image

Returned inside a card when you ask for `include=images`. Today a card carries a single row: the `FRONT` face at `NORMAL` size. The `face` and `size` enums are wider than that because the schema anticipates more renditions, not because more are served.

`width` and `height` are declared and null. They are not measured on ingest, so if you need to reserve layout space you must measure the file yourself or use a fixed aspect ratio — assuming a number here would give you a layout shift on every card.

`url` points at our mirror when a mirrored copy exists and at the original otherwise. Which of the two you get is a deployment setting, not a property of the row: the upstream URL is never deleted, so we can stop mirroring without a migration and without breaking a single link.

## Fields

| Field | Type | Null | Description |
| --- | --- | --- | --- |
| `face` | enum | no | `FRONT`, `BACK`, `ART`, `LOGO`, `SYMBOL`. Only `FRONT` is served on cards today. |
| `size` | enum | no | `SMALL`, `NORMAL`, `LARGE`. Only `NORMAL` is served today — there is one rendition per card, not three. |
| `locale` | string | yes | Language of the printing shown. Null for language-neutral art and for rows where the printing language was not recorded. |
| `url` | string | no | Fetchable URL. Cacheable: the rendition is part of the path, so the bytes behind a given URL do not change. |
| `image_source` | string | yes | Who owns or hosts the original. Credit it. |
| `width` | integer | yes | Pixels. Reserved; still empty after the 2026-09-03 enrichment, because no source we hold carries it. |
| `height` | integer | yes | Pixels. Reserved; still empty after the 2026-09-03 enrichment, because no source we hold carries it. |

## Example

`image.json`

```json
{
  "face": "FRONT",
  "size": "NORMAL",
  "locale": null,
  "url": "https://media.rarebit.app/cards/BASE/4-normal.webp",
  "image_source": "rarebit-media",
  "width": null,
  "height": null
}
```
