Powering link previews, metadata extraction, screenshots, Markdown conversion, embeds, and URL intelligence workflows at scale.
The native tier matches against the official oEmbed provider registry rather than a hand-maintained allowlist, so provider coverage tracks the spec.
The native tier matches URLs against the official oEmbed provider registry, so anything in the registry resolves natively without us adding it by hand.
Each provider declares URL schemes and we match against them, so a provider that serves several URL shapes (watch pages, short links, embed paths) resolves on all of them.
When a provider answers, you get its own payload and its own iframe HTML. We do not rewrite the embed, so provider features and players behave exactly as documented.
maxwidth and maxheight are appended to the provider request, so the provider itself decides the returned dimensions rather than us scaling its markup.
A deleted video, a rate limit, an HTML error page, or a non-JSON body does not fail your request. Resolution falls through to the hosted card instead.
YouTube, Vimeo, TikTok, X/Twitter, Spotify, SoundCloud, Instagram, Reddit, Figma, CodePen, CodeSandbox, Flickr, GIPHY, SlideShare, Dailymotion, Canva, and Kickstarter are all registry providers.
The spec lets any page advertise an oEmbed endpoint in its head, which covers providers that never registered. We follow those links when the registry has no match.
A link tag in the page head with type="application/json+oembed". This is the mechanism the oEmbed spec defines for providers that are not in the registry.
Only after the native tier finds no registry match. A registry provider is never fetched twice, so discovery costs nothing on the common path.
maxwidth and maxheight are merged into the discovered endpoint URL, preserving any query string the page already put there.
We request the JSON variant only. A page that advertises just the XML endpoint falls through to the hosted card rather than returning an XML payload.
Discovery results come back with source set to discovery, so you can tell a self-hosted provider embed apart from a registry one.
An unreachable or malformed discovery endpoint behaves like no endpoint at all: you get the hosted card instead of an error.
Send a URL and receive embeddable output your application can display, store, or transform into a rich link experience.
Return provider-supported oEmbed data when the URL supports native embeds.
Use embed-ready HTML when available from supported providers like YouTube, Vimeo, and others.
Generate a rich fallback card when a URL does not support native oEmbed.
Use page metadata to provide context around the embedded URL.
Display a visual thumbnail or preview image alongside the embed when available.
Every response includes a source field (native, discovery, or og_frame) so you know which resolver tier produced the embed.
Use normalized URL data to build consistent embed experiences across providers.
Receive structured output that your application can render, save, or pass into other workflows.
oEmbed, Embed, and Link Preview can sound similar. Here is how to know which fits your use case.
The same endpoint, described as a product: send a URL, render the html field.
You are starting fresh and want the overview rather than the spec details.
Generate rich link previews with title, description, image, domain, and metadata.
You need preview card data to render yourself instead of embeddable HTML.
Pass any public URL via path or ?url= query parameter. Optionally set maxwidth and maxheight for layout control.
OpenGraph.io checks native oEmbed providers, then oEmbed discovery links, then generates a hosted fallback card. The source field tells you which tier resolved the embed.
Use the html field to render a native embed or fallback card. Structured errors with code and stage when resolution fails.
Every response includes a source field so you know exactly how the embed was resolved. Broken native providers gracefully degrade to the fallback frame.
source: nativeThe URL matches a known oEmbed provider such as YouTube or Vimeo. The native embed is passed through.
source: discoveryThe page advertises an oEmbed endpoint via a discovery link tag. We fetch and return it.
source: og_frameNo native embed exists. A hosted preview card is generated from the page OpenGraph metadata.
Pass URLs the way that fits your integration. Control sizing. Read structured errors when resolution fails.
Pass the target URL as ?url= instead of a path segment. Easier for demos, migrations, and playground integrations.
Standard oEmbed sizing hints forwarded to native providers and applied to fallback frame dimensions.
Responses include source: native | discovery | og_frame so you can label embeds and debug resolution paths.
Customize fallback card appearance with theme=light|dark|auto and template=default|compact for card vs banner layouts.
Errors return success: false with a code, message, and stage, so a bad URL is distinguishable from a provider outage without parsing strings. See the error handling guide for status codes and retry strategy across all endpoints.
400 · invalid_requestThe URL was missing, undecodable, pointed at an internal address, or was otherwise rejected before any fetch. stage is validation.
422 · oembed_resolution_failedNo native embed, no discovery endpoint, and not enough page metadata to build a card.
502 · frame_generation_failedThe hosted frame service could not produce a card. Retryable.
Start with an API key and generate embed-ready output from URLs without provider-specific setup.
Use native oEmbed when available and fallback cards when it is not. One endpoint covers both.
Implementation details live in the docs so this page stays focused on product fit.
Test real URLs before using embeds in production workflows.
Render useful previews for links submitted by users, editors, customers, or internal teams.
Pair embeds with previews, metadata, screenshots, extraction, and audits when your workflow needs more context.