# Guides

> Read the recipe before you cook.

Guides are static reference catalogs. They tell you which layer properties exist, which overrides a layer accepts, how to compose a template that looks good, and what the v2 editor document contains. They also tell you what a platform does to an image after you upload it, and what a given kind of image has to achieve. The content never changes between accounts, so you can cache a response and reuse it.

These endpoints read no template and no company data, and they cost no credits. They also stay outside your usage record, so a guide call never appears in `GET /v1/usage`.

## Get the design guide

```http
GET /v1/guides/design
```

Returns design guidance for building a template: canvas presets, the back-to-front layer order, typography and color rules, composition recipes, anti-patterns, and a preflight checklist. Read it before you write a `layers` array.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": {
        "typography": {
            "scale": "On a 1080px canvas: headline 64\u2013120px, subhead 36\u201356px, body 24\u201336px."
        }
    }
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/design \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## Get the layer schema

```http
GET /v1/guides/layers
```

Returns the design-time layer vocabulary: the layer object shape, every property name, the value shape of each property, and a worked example. Use it to build the `layers` array a template write accepts.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": {
        "property_names": [
            "textContent",
            "backgroundType",
            "fontFamily"
        ]
    }
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/layers \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## List variant properties

```http
GET /v1/guides/variant-properties
```

Returns every property you can apply to a layer in `variants`, with its value type, the layer types it applies to, and an example. Pair it with the `available_modifications` of a template layer.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": [
        {
            "property": "text",
            "value_type": "string",
            "applies_to": "text layers",
            "description": "Replace a text layer's content.",
            "example": {
                "layer": "headline",
                "text": "Summer Sale \u2014 40% off"
            }
        }
    ]
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/variant-properties \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## Get the editor document contract

```http
GET /v1/guides/editor-document
```

Returns the versioned v2 editor-document contract: the resource it describes, property constraints, persistence rules, conflict recovery, and a safe workflow. Read it before you change an editor document.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": {
        "contract_version": 2,
        "editor_document_version": 2,
        "resource": "template.editor_document"
    }
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/editor-document \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## List platform guides

```http
GET /v1/guides/platforms
```

Returns one line per platform: the size preset to start from, its dimensions and why that preset is the default. Read it to choose a platform, then read that platform for the full rules. The response also carries `specs_reviewed`, the month the published specs were last checked.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": [
        {
            "platform": "instagram",
            "name": "Instagram",
            "start_here": "instagram_post",
            "dimensions": "1080x1350",
            "why": "A 4:5 portrait post fills the most vertical space the feed will give a single image."
        }
    ]
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/platforms \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## Get one platform guide

```http
GET /v1/guides/platforms/{platform}
```

Returns everything one platform does to an image: how it crops the frame, the directional UI safe zones where it paints its own controls, the accepted formats and size limits, the export width and color profile, its size presets, and its rules and anti-patterns.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `platform` | path | string | Yes | A key from the index route, or a common alias. Maximum 64 characters. Valid keys: instagram, facebook, x, linkedin, threads, pinterest, tiktok, youtube, snapchat, whatsapp, web, ads, print. |

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": {
        "platform": "instagram",
        "name": "Instagram",
        "specs_reviewed": "2026-09",
        "start_here": "instagram_post"
    }
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

**404** — No guide matches the key. The body names every valid key.

```json
{
    "message": "No platform guide matches `myspace`.",
    "available": [
        "instagram",
        "facebook",
        "x",
        "linkedin",
        "threads",
        "pinterest",
        "tiktok",
        "youtube",
        "snapchat",
        "whatsapp",
        "web",
        "ads",
        "print"
    ]
}
```

**422** — The key is longer than 64 characters.

```json
{
    "message": "The platform field must not be greater than 64 characters."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

> An alias is accepted. `/v1/guides/platforms/insta` returns the same guide as `/v1/guides/platforms/instagram`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/platforms/instagram \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## List image purpose guides

```http
GET /v1/guides/purposes
```

Returns one line per purpose: what that kind of image is, when to use it and the size presets that fit it. Read it to choose a purpose, then read that purpose for the full rules.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": [
        {
            "purpose": "link_preview",
            "name": "Link preview / meta tag image",
            "use_when": "You are shipping a page and you want the shared link to look deliberate.",
            "sizes": [
                "open_graph",
                "twitter_card"
            ]
        }
    ]
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/purposes \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```

## Get one image purpose guide

```http
GET /v1/guides/purposes/{purpose}
```

Returns the job one kind of image has to do: the size presets that fit it, the rules and failure modes specific to it, a layer recipe in the Snapsbrew vocabulary, an anti-pattern list and a preflight checklist. The `link_preview` purpose also returns the og: and twitter: meta tags to put in the page head.

- **Auth:** Bearer token
- **Token abilities:** `api_requests`
- **Credits:** Free — no credits consumed.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `purpose` | path | string | Yes | A key from the index route, or a common alias. Maximum 64 characters. Valid keys: link_preview, feed_post, carousel, story, profile_picture, cover, video_thumbnail, ad, product_shot, email_header, article_header, presentation_slide. |

### Responses

**200** — The catalog, trimmed here to one entry.

```json
{
    "data": {
        "purpose": "link_preview",
        "name": "Link preview / meta tag image",
        "layer_recipe": "base fill -> optional photo with a dark scrim -> headline -> supporting line -> logo."
    }
}
```

**401** — Missing or invalid token.

```json
{
    "message": "Unauthenticated."
}
```

**404** — No guide matches the key. The body names every valid key.

```json
{
    "message": "No purpose guide matches `wallpaper`.",
    "available": [
        "link_preview",
        "feed_post",
        "carousel",
        "story",
        "profile_picture",
        "cover",
        "video_thumbnail",
        "ad",
        "product_shot",
        "email_header",
        "article_header",
        "presentation_slide"
    ]
}
```

**422** — The key is longer than 64 characters.

```json
{
    "message": "The purpose field must not be greater than 64 characters."
}
```

> The catalog is the same for every account. Cache the response and refresh it on a new API version.

> A guide call costs no credits and does not appear in `GET /v1/usage`.

> An alias is accepted. `/v1/guides/purposes/og` returns the same guide as `/v1/guides/purposes/link_preview`.

### Examples

*Curl*

```bash
curl https://snapsbrew.com/api/v1/guides/purposes/link_preview \
  -H 'Authorization: Bearer <your-token>' \
  -H 'Accept: application/json'
```
