/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://medium.com/beloved/happiness-comes-from-being-soft-6450096bfa14",
"canonical": "https://medium.com/beloved/happiness-comes-from-being-soft-6450096bfa14",
"title": "Happiness Comes from Being Soft",
"description": "To love means being open to heartbreak",
"siteName": "Medium",
"siteLogoUrl": "https://storage.mostly.film/myframely/logo/medium.com/69e710a5392c56ae4a38e5928272af106927fd70.png",
"favicon": "https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19",
"images": {
"thumbnail": "https://storage.mostly.film/myframely/previews/774bf770-643d-40f2-a10a-88dfd0c2ca9f/7f67b5a1b9b4.jpg",
"hero": "https://storage.mostly.film/myframely/previews/774bf770-643d-40f2-a10a-88dfd0c2ca9f/9b792bc094cf.jpg",
"origin": "https://miro.medium.com/v2/resize:fit:1200/1*SlaRgk_ibB_IYTh4OoybsQ.jpeg"
},
"provider": null,
"fetchedAt": "2026-10-13T15:37:25.040Z"
}<div class="mPreview_card" data-variant="thumbnail"><a class="mPreview_link" href="https://medium.com/beloved/happiness-comes-from-being-soft-6450096bfa14" target="_blank" rel="noopener nofollow"><img class="mPreview_thumb" src="https://storage.mostly.film/myframely/previews/774bf770-643d-40f2-a10a-88dfd0c2ca9f/7f67b5a1b9b4.jpg" alt="" loading="lazy"><div class="mPreview_body"><h3 class="mPreview_title">Happiness Comes from Being Soft</h3><p class="mPreview_description">To love means being open to heartbreak</p><div class="mPreview_meta"><img class="mPreview_logo" src="https://storage.mostly.film/myframely/logo/medium.com/69e710a5392c56ae4a38e5928272af106927fd70.png" alt="" loading="lazy"><span class="mPreview_site">Medium</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.