Social cards as an API
Your links are showing up naked.
Every time someone shares a page without an og:image, it turns into a grey text row. Paste a URL: get a designed card back in about a second. One meta tag gives every page on your site its own.
No signup. Reads one public page, shows what it looks like today next to what it could.
One tag. Every page gets a card.
- Add the tagPut one
og:imagein your layout, pointing at your site token and the page's own URL. - We read the pageTitle, description, author, date and favicon come from the page itself. The accent colour comes from its
theme-color, or a stable pick per domain. - Cached at the edgeA card renders once, then every crawler gets it from cache. You're only billed for cards that were actually drawn.
<!-- in <head>, once, in your layout --> <meta property="og:image" content="https://cardstock.dev/a/TOKEN.png?url={'{'}canonicalUrl{'}'}"> // or build one explicitly GET /v1/card.png ?tpl=editorial &title=Shipping v2.0 &author=Mara Voss &accent=E4572E
Five templates, five sizes, no stock gradients.
Every card below is rendered by the API right now. Pick a template, or let Cardstock choose one from the page.





tw 1200×600
li 1200×627
sq 1080×1080
story 1080×1920
Built for the part nobody checks until launch day.
One site token, no secrets in HTML
Your token only works for URLs on your own domain, so you can ship it in markup. Need a one-off card? POST /v1/sign returns a signed URL that can't be edited or reused for anything else.
Brand kit
Set your accent, theme, kicker and logo once. Every card, on every page, picks it up with no query-string clutter.
A link checker that tells the truth
Paste any URL and see what X, LinkedIn and Slack will make of it, plus every tag problem, with a score. It's free and stays free.
Never a broken image
Page down, timeout, or over your monthly limit: you still get a clean fallback card, not a missing image on a launch tweet.
Emoji and long titles, handled
Emoji render as real glyphs. Titles are fitted and clamped by length instead of overflowing the edge. Latin scripts today; more on request.
Why not just screenshot the page?
| Cardstock | Screenshot services | Build it yourself | |
|---|---|---|---|
| Looks like | A designed card, readable at thumbnail size | A shrunken web page nobody can read | Whatever you have time for |
| Setup | One meta tag | Per-page URL plumbing | A weekend, then upkeep |
| Fields from the page | Title, author, date, favicon, brand colour | None, it's pixels | You write the parsing |
| Speed | Edge-cached, no headless browser | Seconds per fresh shot | Depends on your host |
Pay for cards drawn. Cache hits are free.
- 5,000 cards / month
- No watermark
- 1 site token
- Brand kit
- Signed URLs
- 40,000 cards / month
- No watermark
- Unlimited site tokens
- Brand kit
- Signed URLs
Card required for the trial. Cancel in two clicks from your account page. Prices in USD.
Fair questions.
Is the free plan really free?
Yes: 100 freshly drawn cards a month per site, with a small watermark in the corner. There's no card on file and no expiry.
Which frameworks does this work with?
Anything that can write a meta tag: Next.js, Astro, Remix, Rails, Laravel, WordPress, Hugo, plain HTML. The docs have copy-paste snippets for the common ones.
What counts as a card?
One freshly drawn image. Repeat requests for the same card, including every crawler that unfurls it, are served from cache and don't count.
What happens if I go over my limit?
Your pages keep working. Over-limit requests get a clean fallback card instead of a broken image, and we don't charge overage.
Does it support non-Latin languages?
Not yet. Latin scripts and emoji render today. If you need CJK, Arabic or Devanagari, tell us and it moves up the list.
How do I cancel?
From your account page, through the billing portal. You keep access until the period ends.