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

url string Required. The full URL of the page to generate an image for. Must start with https://.
force boolean Optional. If true, generates a new image even when the page already has an og:image. Defaults to false.
format string Optional. 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

Status When
400 Missing or invalid url field
401 Missing or invalid API key
422 URL points to a file (PDF, PNG, etc.) rather than an HTML page
429 Rate limit exceeded for your plan
500 Generation 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).

Plan Generations / month API access
Anonymous (no account) 10 No
Free 10 No
Pro — $19/mo 500 Yes
Team — $49/mo 2,000 Yes

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 value Dimensions Recommended use
og 1200 × 630 Default. Works on all platforms. Use this unless you have a specific need.
twitter 1200 × 628 Twitter / X large card (twitter:card: summary_large_image)
linkedin 1200 × 627 LinkedIn article and post shares
facebook 1200 × 630 Facebook 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.