Signed GET URLs · Templates · 24 h cache · Free plan Signed URLs · Templates · 24 h cache

The og:image tag that renders itself.

Rendra turns a signed URL into a 1200×630 social card. Pick a template, pass title and description as query parameters, sign them with your API key — crawlers get a PNG, cached for a day, billed once. A signed URL becomes a 1200×630 social card. Pick a template, pass title and description, sign with your API key. Crawlers get a PNG, cached for a day, billed once.

50 renders a month free. No card. Sign in with Google or a magic link. 50 renders a month free. No card.

GET /i/og_standard Sample data
Ship faster Beautiful social cards from one URL rendra.alphabros.eu
200 OK · image/png · X-Cached: false1200×630
// the URL in your <meta property="og:image">
https://rendra.alphabros.eu/i/og_standard
  ?title=Ship+faster
  &description=Beautiful+social+cards+from+one+URL
  &expires=1788393600
  &sig=<key id>.<hmac-sha256 of the sorted query>
// sign it once, server-side (Node)
const digest = createHmac("sha256", RENDRA_API_KEY)
  .update(`${path}?${query}`)
  .digest("hex");
query.set("sig", `${RENDRA_API_KEY_ID}.${digest}`);
Next.jsAstroAny server that can HMAC@rendra/client on npm
1 URLThe whole integration. No SDK required, no build step.
24 hPublic, immutable cache on every response. Cache hits are free.
4096 pxMaximum width and height. PNG or JPEG, any size in between.
50 / moRenders on the free plan. An email address is all you need.

Built for the one place you can't send a header.

Social crawlers fetch og:image with a plain GET. Rendra makes that GET safe, cheap and repeatable.

Signed, expiring URLs

Every query parameter is HMAC-SHA256 signed with your key, and every URL carries an expiry. Nobody can spend your credits by editing the title.

Templates, not pixels

Two templates today: og_standard for evergreen cards and announcement for launches. Custom templates are on the Pro roadmap.

Cached, billed once

Identical renders come back from cache with X-Cached: true and cost nothing. Responses stay public and immutable for up to 24 hours.

Passwordless dashboard

Sign in with Google or a magic link. Create named API keys, revoke one without touching the others, and watch usage against your monthly quota.

Every render on record

Your generation history lives in the dashboard and behind /api/v1/dashboard/history, so you can see what shipped and when.

Coming soon

AI image generation

POST a prompt, then poll for the image. It runs on a provider chain with automatic failover. In preview now, not yet part of the plans below.

Three requests, no dashboard required.

Everything below is in the OpenAPI spec at /openapi.yaml.

1

Create a key

One public call with your email creates the account and returns the key and its id. Or sign in and create named keys in the dashboard.

$ curl -X POST \
  https://rendra.alphabros.eu/api/v1/users \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}'

201 Created
{ "id": "…", "email": "you@example.com",
  "api_key": "rendra_…", "plan": "free" }
2

Build the URL

Sort the query, sign path plus query with HMAC-SHA256 using your key, and append sig as key id, a dot, then the hex digest.

const path = "/i/og_standard";
const query = new URLSearchParams({
  title: "Ship faster",
  description: "Beautiful social cards…",
  expires: String(Math.floor(Date.now() / 1000) + 3600),
});
query.sort();
// sig = keyId + "." + hmac(path+"?"+query)
3

Get the image

Put the URL in your og:image tag. Crawlers get the PNG; a bad or expired signature gets a 403, an exhausted quota a 402.

GET /i/og_standard?title=…&expires=…&sig=…

200 OK
Content-Type: image/png
Cache-Control: public, max-age=86400, immutable
X-Cached: false

403 { "error": "Invalid or expired signature" }
402 { "error": "Credit limit exceeded" }

Rendering server-side instead? POST /api/v1/render with the same template, data, width, height and format fields and your API key.

Simple, transparent pricing

One render is one credit. Credits reset monthly. Cache hits are never counted.

Free €0 /month

Hobby projects, testing, small blogs.

  • 50 renders / month
  • Standard render speed
  • All templates
  • API access
  • Community support
Get your free API key

Extra credits: €0.50 per 10. Unused credits don't roll over. 30-day money-back guarantee.

Your next deploy can ship with real social cards.

50 renders a month, free. Sign the first URL in the time it takes to read the spec.

Get your free API key