Template gallery / quote-card

quote-card

1080x1080 social quote card. Renders on the Satori fast path: flexbox subset, inline styles, bundled Inter, no network assets. The author avatar is drawn from initials rather than fetched.

satori default PNG 11 top-level fields 1 unit

Rendered preview of the quote-card template
Rendered by Galley from the example payload below, at 1080px wide .

Fields

The full JSON Schema is below. Required fields are marked; anything missing comes back as a 422 naming the path, the expected type and a value that would be accepted.

Field Type Required Description
quote string required The pull quote. Around 160 characters fits at the default size; drop quote_size for longer text.
quote_size number optional Quote font size in px.
eyebrow string optional
source string optional Where the quote came from.
handle string optional
background string optional Base background colour.
background_2 string optional Second stop of the background gradient.
accent string optional
text_color string optional
muted_color string optional
author object { name, title, initials } required

Default render options

Applied unless you override them. Options are part of the cache key.

width 1080
height 1080

Example payload

This exact object renders the preview above. It is also what the API echoes back in a validation error, so an agent can repair a payload without a round trip to the docs.

example.jsonjson
{
  "quote": "The agent found the service, signed itself up, and shipped the integration before anyone on our team opened a browser.",
  "eyebrow": "From the field",
  "source": "Platform Engineering review, Q3 2026",
  "handle": "@galleyrender",
  "background": "#0b0f14",
  "background_2": "#132029",
  "accent": "#2dd4bf",
  "author": {
    "name": "Lena Ortiz",
    "title": "Director of Infrastructure, Acme Robotics",
    "initials": "LO"
  }
}

Render it

With an API keyshell
curl -sS https://api.galleyrender.com/v1/render \
  -H "Authorization: Bearer $GALLEY_API_KEY" \
  -H 'content-type: application/json' \
  -d '{
  "template": "quote-card@1",
  "format": "png",
  "data": {
    "quote": "The agent found the service, signed itself up, and shipped the integration before anyone on our team opened a browser.",
    "eyebrow": "From the field",
    "source": "Platform Engineering review, Q3 2026",
    "handle": "@galleyrender",
    "background": "#0b0f14",
    "background_2": "#132029",
    "accent": "#2dd4bf",
    "author": {
      "name": "Lena Ortiz",
      "title": "Director of Infrastructure, Acme Robotics",
      "initials": "LO"
    }
  }
}'
With no API key, over MCPshell
# No API key. The first call mints a 50-render trial.
curl -sS https://mcp.galleyrender.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "render",
      "arguments": {
        "template": "quote-card",
        "format": "png",
        "data": {"quote":"The agent found the service, signed itself up, and shipped the integration before anyone on our team opened a browser.","eyebrow":"From the field","source":"Platform Engineering review, Q3 2026","handle":"@galleyrender","background":"#0b0f14","background_2":"#132029","accent":"#2dd4bf","author":{"name":"Lena Ortiz","title":"Director of Infrastructure, Acme Robotics","initials":"LO"}}
      }
    }
  }'

Pin the version — quote-card@1 — in anything you ship. Publishing a new version never changes an old one. Render endpoint reference →

Try a free tool

Renders the example payload on the production service. No account, no key.

JSON Schema

schema.json (11 top-level properties)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Social quote card",
  "description": "1080x1080 card for the Satori fast path. Render with format png and engine satori; the same markup also renders through Chromium if you need a PDF.",
  "type": "object",
  "required": [
    "quote",
    "author"
  ],
  "additionalProperties": true,
  "properties": {
    "quote": {
      "type": "string",
      "description": "The pull quote. Around 160 characters fits at the default size; drop quote_size for longer text.",
      "examples": [
        "The agent found the service, signed itself up, and shipped the integration before anyone on our team opened a browser."
      ]
    },
    "quote_size": {
      "type": "number",
      "minimum": 24,
      "maximum": 96,
      "default": 58,
      "description": "Quote font size in px.",
      "examples": [
        58
      ]
    },
    "eyebrow": {
      "type": "string",
      "default": "Quote of the week",
      "examples": [
        "From the field"
      ]
    },
    "source": {
      "type": "string",
      "description": "Where the quote came from.",
      "examples": [
        "Uneed case study, 2026"
      ]
    },
    "handle": {
      "type": "string",
      "examples": [
        "@galleyrender"
      ]
    },
    "background": {
      "type": "string",
      "description": "Base background colour.",
      "examples": [
        "#0b0f14"
      ]
    },
    "background_2": {
      "type": "string",
      "description": "Second stop of the background gradient.",
      "examples": [
        "#132029"
      ]
    },
    "accent": {
      "type": "string",
      "examples": [
        "#2dd4bf"
      ]
    },
    "text_color": {
      "type": "string",
      "examples": [
        "#f4f6f8"
      ]
    },
    "muted_color": {
      "type": "string",
      "examples": [
        "#8b97a6"
      ]
    },
    "author": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "examples": [
            "Lena Ortiz"
          ]
        },
        "title": {
          "type": "string",
          "examples": [
            "Director of Infrastructure, Acme Robotics"
          ]
        },
        "initials": {
          "type": "string",
          "maxLength": 3,
          "description": "Drawn in the avatar circle. Satori cannot fetch images, so there is no avatar URL.",
          "examples": [
            "LO"
          ]
        }
      }
    }
  }
}