Live demo

Product URL to OG image, live examples

Three product pages from VitalBuddies, the web shop run by Shotvik's maker, sent to POST /v1/og/from-url, plus one card from a built-in HTML template. No account needed to look.

  • Each card was rendered from the product page's own JSON-LD or Open Graph data, with the built-in default product card. No template, no manual edits.
  • The images on this page are static copies served from shotvik.com. Loading this page sends no request to the API.
  • "Open the live render" is a signed link to api.shotvik.com. It's served from Shotvik's opt-in cache, which keeps a render for up to 30 days, so the price on a live card can be up to 30 days old.
  • The live links run on a separate demo account with a hard monthly quota and a per-network limit. Visitors behind one shared office or mobile network share that limit, so under heavy load a live link can return 429 instead of an image. The copies here keep working.
  • The signature covers every parameter: change the product URL in a link and you get 401 invalid_signature. To render your own pages, create a free account.
Shotvik product card for Jeuk Vrij, rendered from vitalbuddies.com/products/jeuk-vrij
Static copy, rendered 4 October 2026. Data source: JSON-LD.

Jeuk Vrij

Product page: vitalbuddies.com/products/jeuk-vrij

Try it yourself: Open the live render
The same render with your own API key
curl https://api.shotvik.com/v1/og/from-url \
  -H "Authorization: Bearer $SHOTVIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://vitalbuddies.com/products/jeuk-vrij",
    "cache": true,
    "cache_ttl": 2592000
  }' \
  --fail-with-body --output jeuk-vrij.png
Shotvik product card for Soepel Bewegen, rendered from vitalbuddies.com/products/soepel-bewegen
Static copy, rendered 4 October 2026. Data source: JSON-LD.

Soepel Bewegen

Product page: vitalbuddies.com/products/soepel-bewegen

Try it yourself: Open the live render
The same render with your own API key
curl https://api.shotvik.com/v1/og/from-url \
  -H "Authorization: Bearer $SHOTVIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://vitalbuddies.com/products/soepel-bewegen",
    "cache": true,
    "cache_ttl": 2592000
  }' \
  --fail-with-body --output soepel-bewegen.png
Shotvik product card for Omega Glans - 250ml, rendered from vitalbuddies.com/products/omega-glans
Static copy, rendered 4 October 2026. Data source: JSON-LD.

Omega Glans - 250ml

Product page: vitalbuddies.com/products/omega-glans

Try it yourself: Open the live render
The same render with your own API key
curl https://api.shotvik.com/v1/og/from-url \
  -H "Authorization: Bearer $SHOTVIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://vitalbuddies.com/products/omega-glans",
    "cache": true,
    "cache_ttl": 2592000
  }' \
  --fail-with-body --output omega-glans.png
Shotvik basic template card with the title "Social cards from any URL"
Static copy, rendered 4 October 2026. Fixed text, no page fetched.

HTML template to OG image

Built-in basic template with three variables (title, subtitle, site), sent to POST /v1/og. Your own HTML template works the same way.

Try it yourself: Open the live render
The same render with your own API key
curl https://api.shotvik.com/v1/og \
  -H "Authorization: Bearer $SHOTVIK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "basic",
    "vars": {
      "title": "Social cards from any URL",
      "subtitle": "Shotvik",
      "site": "shotvik.com"
    },
    "cache": true,
    "cache_ttl": 2592000
  }' \
  --fail-with-body --output basic-template.png

Render your own product pages

Create a free account and get your API key in the dashboard. Free plan: 100 renders a month.