---
title: "Render an image"
method: POST
path: "/v1/images"
tags: ["Images"]
---

# Render an image

`POST /v1/images`

## Request

- Base URL: `https://app.getshareglow.com`
- URL: `https://app.getshareglow.com/v1/images`
- Auth: HTTP bearer

Renders a template with your values and returns its permanent URL. Paid plans get an HMAC-signed URL; Free gets an unsigned, watermarked URL. Only a real render (not a cache hit) counts against the monthly image cap.

## Request body

- object
  - `templateId` string, required
  - `params` object: Template variable values; `size` picks a platform variant.
  - `exp` integer: Optional expiry as a Unix timestamp in seconds (paid plans only). The signed image URL answers 410 Gone after it. Omit it for a URL that never expires.

## Response `200`

Rendered image

- object
  - `url` string, uri, required
  - `cached` boolean, required
  - `exp` integer: Echoes the expiry when one was requested.

## Other responses

- `400`: Validation failed (`bad_request`, `invalid_url`, ...).
- `401`: Missing, unknown or revoked API key.
- `402`: A plan cap or feature gate blocked the call (`plan_limit_exceeded`; `details` names the resource and limit).
- `403`: The API key is valid but lacks the scope this endpoint needs (images, templates, scan, links, monitors or ai).
- `413`: The JSON body is over 1 MB (`payload_too_large`).
- `429`: Daily call limit reached. Retry after the `Retry-After` seconds.

---

[API](https://skmtc.dev/getshareglow/apis/shareglow-api.md) · [All operations](https://skmtc.dev/getshareglow/apis/shareglow-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getshareglow/apis/shareglow-api/revisions/3ea838c40d3c?raw)
