/api/v1 demoExercises all three response shapes (JSON / HTML fragment / web component) against
a single URL. Server-loads via the authenticated path; web-component live-fetch uses /demo/proxy as a stand-in for a consumer's backend proxy.
{
"url": "https://9gag.com/gag/aD2e89K",
"canonical": "http://9gag.com/gag/aD2e89K",
"title": "SSD Math 101.",
"description": "2,892 points • 221 comments",
"siteName": "9GAG",
"siteLogoUrl": "https://storage.mostly.film/myframely/logo/9gag.com/4d2a8550e7bb785ae7a22e6a06eef3281dae66dc.png",
"favicon": "https://9gag.com/favicon.ico",
"images": {
"thumbnail": "https://storage.mostly.film/myframely/previews/85777818-1062-4215-a6ac-8909ead3a48c/fc580f46f104.jpg",
"hero": "https://storage.mostly.film/myframely/previews/85777818-1062-4215-a6ac-8909ead3a48c/7a6bd9f8bb77.jpg",
"origin": "https://images-cdn.9gag.com/photo/aD2e89K_ogimage.jpg"
},
"provider": null,
"fetchedAt": "2026-10-13T15:33:58.771Z"
}<div class="mPreview_card" data-variant="thumbnail"><a class="mPreview_link" href="http://9gag.com/gag/aD2e89K" target="_blank" rel="noopener nofollow"><img class="mPreview_thumb" src="https://storage.mostly.film/myframely/previews/85777818-1062-4215-a6ac-8909ead3a48c/fc580f46f104.jpg" alt="" loading="lazy"><div class="mPreview_body"><h3 class="mPreview_title">SSD Math 101.</h3><p class="mPreview_description">2,892 points • 221 comments</p><div class="mPreview_meta"><img class="mPreview_logo" src="https://storage.mostly.film/myframely/logo/9gag.com/4d2a8550e7bb785ae7a22e6a06eef3281dae66dc.png" alt="" loading="lazy"><span class="mPreview_site">9GAG</span></div></div></a></div>
This component fetches the preview from /demo/proxy on mount, no
pre-serialized attribute. Simulates the pattern a consumer would use if they
proxy the preview call through their own backend.