Getting Started

What MakeOG does

MakeOG generates Open Graph images for any public URL. Paste a URL and get a brand-accurate 1200×630 WebP in under 10 seconds — extracted from the page's own colors, fonts, and logo. No templates. No Figma.

Pro and Team plans add API access, letting you automate OG image generation for every page of a site from your own build pipeline or CMS.

Quick start

No account required for the first 10 images per month.

  1. Go to makeog.com
  2. Paste any public URL into the input field
  3. Click Generate and wait ~8 seconds
  4. Download the WebP and add it to your <head>

For API access, sign up for a Pro or Team plan, then generate an API key from your dashboard.

API Reference

Authentication

All API requests must include your API key as a bearer token in the Authorization header.

Request header
Authorization: Bearer mog_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API keys are generated from your dashboard. Each key is shown once at creation — store it securely. Keys can be revoked at any time.

Base URL

Base URL
https://makeog.com/api

POST /generate-og

POST/api/generate-og

Generates an Open Graph image for the given URL. If an og:image already exists on the page, returns its URL instead (unless force is true).

Request body

urlstringRequired. The full URL of the page to generate an image for. Must start with https://.
forcebooleanOptional. If true, generates a new image even when the page already has an og:image. Defaults to false.
formatstringOptional. One of og, twitter, linkedin, facebook. Defaults to og (1200×630).

Example request

cURL
curl -X POST https://makeog.com/api/generate-og \
  -H "Authorization: Bearer mog_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/blog/my-post",
    "force": false,
    "format": "og"
  }'

Response — existing og:image found

When the page already has an og:image and force is not set, the response has status: "existing".

Response — 200 OK
{
  "status": "existing",
  "ogImageUrl": "https://example.com/og-image.png"
}

Response — image generated

When a new image is generated, the response includes the base64-encoded WebP along with metadata.

Response — 200 OK
{
  "status": "generated",
  "imageBase64": "/9j/4AAQSkZJRgABAQAA...",
  "mimeType": "image/webp",
  "svgSource": "<svg xmlns=\"http://www.w3.org/2000/svg\" ...",
  "summary": "Stripe — payments infrastructure for the internet",
  "altText": "Stripe open graph image: blue background with Stripe wordmark",
  "dimensions": {
    "width": 1200,
    "height": 630
  }
}

Error responses

StatusWhen
400Missing or invalid url field
401Missing or invalid API key
422URL points to a file (PDF, PNG, etc.) rather than an HTML page
429Rate limit exceeded for your plan
500Generation failed — the page may be inaccessible or return no content

Rate limits

Generation limits reset on the first day of each calendar month. Limits apply per user account (authenticated requests) or per IP address (anonymous requests).

PlanGenerations / monthAPI access
Anonymous (no account)10No
Free10No
Pro — $19/mo500Yes
Team — $49/mo2,000Yes

When you exceed your limit, the API returns a 429 Too Many Requests response with a JSON body: {"error": "Monthly generation limit reached. Upgrade to continue."}

Output formats

All formats are returned as WebP at quality 85. The format parameter controls the output dimensions.

Format valueDimensionsRecommended use
og1200 × 630Default. Works on all platforms. Use this unless you have a specific need.
twitter1200 × 628Twitter / X large card (twitter:card: summary_large_image)
linkedin1200 × 627LinkedIn article and post shares
facebook1200 × 630Facebook link previews (same as OG)

The response always includes the actual dimensions used in dimensions.width and dimensions.height so you can confirm what was generated.