{"openapi":"3.1.0","info":{"title":"MotionVideo public API","version":"1.0.0","description":"Read-only JSON of the gallery catalog, the directories and the public part of every move. No key or sign-in."},"servers":[{"url":"https://motionvideo.xyz"}],"security":[],"externalDocs":{"description":"API reference","url":"https://motionvideo.xyz/docs/api"},"tags":[{"name":"Catalog","description":"The gallery videos and the resource directories."},{"name":"Moves","description":"The motion design moves library."}],"paths":{"/api/catalog":{"get":{"operationId":"get-catalog","summary":"Get the catalog","description":"Every gallery video with its prompt or skill, creator, model, stack, effort, colours and media URLs, plus the videos removed as duplicates.","tags":["Catalog"],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"The motion video catalog.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MotionCatalog"},"example":{"importedAt":"2026-10-24T21:04:06.396Z","videos":[{"slug":"stephanlivera-df17a2","title":"Claude motion designer showreel","date":"2026-09-25","tags":["prompt"],"contentTags":["kinetic-type","shapes","music"],"promptShared":true,"handle":"stephanlivera","prompt":"make a dynamic 15-second motion graphics video that shows what an incredible motion designer you are, like it's your showreel for a résumé. go all out.","avatar":"https://assets.motionvideo.xyz/avatars/stephanlivera-b812a8857d.webp","poster":"https://assets.motionvideo.xyz/motion/stephanlivera-df17a2/poster-f2e1162434.webp","blur":"data:image/webp;base64,UklGRjwAAABXRUJQVlA4IDAAAAAwAQCdASoQAAkAAoBCJZwAA3AA/vhFoHeXAMvl50Xzx1TOS+ixn4fsDcDIAjAsAAA=","preview":"https://assets.motionvideo.xyz/motion/stephanlivera-df17a2/preview-b43ead41b8.mp4","video":"https://assets.motionvideo.xyz/motion/stephanlivera-df17a2/video-5f45198f0d.mp4","width":1920,"height":1080,"tweetUrl":"https://x.com/stephanlivera/status/2103315922098470926","model":"Opus 5.5","effort":"max","creatorName":"Stephan Livera","colors":["0d0d10","ed4938","8b0703"]}],"removed":[{"slug":"rossaxbt-94583b","duplicateOf":"rossaxbt-4e066d","tweetUrl":"https://x.com/rossaxbt/status/2108933141406638456"}]}}}},"304":{"$ref":"#/components/responses/NotModified"}}}},"/api/catalog/directories":{"get":{"operationId":"get-directories","summary":"Get the directories","description":"The tools, skills, extras (articles and resources) and creatives (studios and designers) directories.","tags":["Catalog"],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"The resource directories.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Directories"},"example":{"importedAt":"2026-10-09T09:35:15.947Z","tools":{"entries":[{"id":"osmo","name":"Osmo","description":"Make stories that move","category":"AI","url":"https://osmo.inc/","cover":"https://assets.motionvideo.xyz/directories/tools/osmo-caab90410f.webp","addedAt":"2026-10-10","pricing":"freemium"},{"id":"oil-motion","name":"Oil Motion","description":"Interactive web animations for agents","category":"Skills","url":"https://github.com/oil-oil/oil-motion","cover":"https://assets.motionvideo.xyz/directories/tools/oil-motion-87c4f3901e.webp","stars":2682,"updatedAt":"2026-10-04T14:54:13Z","addedAt":"2026-10-10","renderers":["html"]}]},"studios":{"entries":[{"id":"pixelframe","name":"Pixel Frame","description":"Motion studio for Web3 and SaaS","category":"Studio","url":"https://www.pixelframe.co/","cover":"https://assets.motionvideo.xyz/directories/studios/pixelframe-859e56d981.webp","addedAt":"2026-10-10","specialties":["product-films","brand"]}]}}}}},"304":{"$ref":"#/components/responses/NotModified"}}}},"/api/moves":{"get":{"operationId":"get-moves","summary":"Get the moves","description":"The public part of every move: name, family, summary, explanation, good-for tags, gallery examples and related moves. Prompts are part of Pro and not included.","tags":["Moves"],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Every move, without its prompt.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Moves"},"example":{"moves":[{"slug":"squash-and-stretch","name":"Squash and stretch","family":"timing","aka":["squash & stretch","squash and stretch animation","bouncing ball animation","elastic deformation"],"summary":"An object flattens on impact and lengthens in fast travel while keeping its volume, so it reads as soft, alive and pulled by gravity.","body":"Squash and stretch is the oldest trick for making a shape feel like it has mass. A ball lengthens along its direction of travel when it moves fast, flattens against the floor on contact, then springs back to round. The eye reads the deformation as weight and softness long before it reads the geometry.\n\nThe rule that makes it work is **volume preservation**: if the shape grows 30 percent on one axis, it shrinks on the other so the area stays about the same. `scaleX = 1 / scaleY` is a good starting point.\n\nIt works best on:\n\n- mascots, dots, balls and blobs\n- buttons and chips that get pressed or land\n- playful brands where a little rubber is welcome\n\nCommon mistakes:\n\n- scaling from the center instead of the contact point, so the ball floats above the floor while it squashes\n- stretching on the screen axis instead of along the velocity\n- deforming text, logos or product UI that must stay legible\n- holding the squash too long; two to four frames on contact is plenty","goodFor":["characters","mascots","playful brands","bouncing objects"],"examples":["fanxing321-a52ec8","notdwd-2c76f5"],"related":["anticipation","arc-motion","follow-through"]}]}}}},"304":{"$ref":"#/components/responses/NotModified"}}}}},"components":{"parameters":{"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"description":"The `ETag` of an earlier response. If it is still current, the response is a `304` with no body. Send the value exactly as received (one quoted value): lists, weak `W/` validators and `*` always get a full response.","schema":{"type":"string"}}},"headers":{"ETag":{"description":"Quoted SHA-256 hex digest of the response body. Changes whenever the data does.","schema":{"type":"string"}},"CacheControl":{"description":"Browsers reuse a response for 5 minutes and shared caches for an hour, then may serve it stale for up to a day while they revalidate.","schema":{"type":"string","enum":["public, max-age=300, s-maxage=3600, stale-while-revalidate=86400"]}}},"responses":{"NotModified":{"description":"Not modified: `If-None-Match` matched the current `ETag`. No body; reuse the copy you have.","headers":{"ETag":{"$ref":"#/components/headers/ETag"}}}},"schemas":{"MotionCatalog":{"type":"object","required":["importedAt","videos","removed"],"properties":{"importedAt":{"type":"string","format":"date-time","description":"When the catalog was last imported."},"videos":{"type":"array","description":"Every gallery video, in catalog order.","items":{"$ref":"#/components/schemas/MotionVideo"}},"removed":{"type":"array","description":"Videos removed as duplicates. Their old page URLs redirect to the video they duplicated.","items":{"$ref":"#/components/schemas/RemovedVideo"}}}},"MotionVideo":{"type":"object","required":["slug","title","date","tags","contentTags","promptShared","handle","avatar","poster","preview","video","width","height"],"properties":{"slug":{"type":"string","description":"Stable ID: the creator's handle and a short hash. The video's page is `/videos/{slug}` in English and `/{locale}/videos/{slug}` in other languages, e.g. `/fr/videos/{slug}`."},"title":{"type":"string"},"date":{"type":"string","format":"date","description":"When the creator posted it (YYYY-MM-DD)."},"tags":{"type":"array","description":"What it shares to remake it: a prompt, a skill, or both.","items":{"type":"string","enum":["prompt","skill"]}},"contentTags":{"type":"array","description":"Gallery categories, at least one.","items":{"type":"string","enum":["product-ui","phone","charts","diagrams","kinetic-type","shapes","particles","characters","photos","music","code"]}},"promptShared":{"type":"boolean","description":"Whether the creator shared the prompt."},"handle":{"type":"string","description":"The creator's X handle, without `@`."},"creatorName":{"type":"string","description":"The creator's display name on X, when known."},"avatar":{"type":"string","format":"uri","description":"The creator's avatar (WebP)."},"poster":{"type":"string","format":"uri","description":"Poster image (WebP)."},"blur":{"type":"string","description":"A tiny version of the poster as a `data:` URI, to show while media loads."},"preview":{"type":"string","format":"uri","description":"Small looping preview (MP4)."},"video":{"type":"string","format":"uri","description":"The full video (MP4)."},"width":{"type":"integer","description":"Video width in pixels."},"height":{"type":"integer","description":"Video height in pixels."},"prompt":{"type":"string","description":"The prompt the creator used, when shared."},"skillUrl":{"type":"string","format":"uri","description":"The agent skill the video was made with."},"skillInstall":{"type":"string","description":"The command that installs the skill, e.g. `npx skills add …`."},"tweetUrl":{"type":"string","format":"uri","description":"The source post on X."},"description":{"type":"string"},"model":{"type":"string","enum":["Opus 5.5","Fable 5.5","Gemini 4 Argon","GPT-6 Astra"],"description":"The model it was made with, as the creator reported it."},"stack":{"type":"string","description":"What rendered it, as the creator reported it, e.g. `Remotion` or `HTML + Playwright`."},"effort":{"type":"string","enum":["medium","high","max"],"description":"The reasoning effort the model ran at."},"iterations":{"type":"string","enum":["one-shot","few-rounds","many-rounds"],"description":"How many rounds of feedback it took."},"colors":{"type":"array","description":"Dominant colours as hex without `#`, the largest share of the frame first.","items":{"type":"string","pattern":"^[0-9a-f]{6}$"}}}},"RemovedVideo":{"type":"object","required":["slug","duplicateOf","tweetUrl"],"properties":{"slug":{"type":"string","description":"The removed video's slug."},"duplicateOf":{"type":"string","description":"Slug of the video it duplicated (which may itself be removed later)."},"tweetUrl":{"type":"string","format":"uri"}}},"Directories":{"type":"object","required":["importedAt","tools","studios"],"properties":{"importedAt":{"type":"string","format":"date-time","description":"When the directories were last imported."},"tools":{"type":"object","description":"Tools, plus skills (category `Skills`), web articles (`Articles`) and resources (`Resources`); the site lists the last three under Skills and Extras.","required":["entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/DirectoryEntry"}}}},"studios":{"type":"object","description":"Studios (category `Studio`) and designers (`Designers`), listed on the site as Creatives.","required":["entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/DirectoryEntry"}}}}}},"DirectoryEntry":{"type":"object","required":["id","name","description","category","url","cover","addedAt"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","description":"e.g. `Editor`, `AI`, `Skills`, `Studio`."},"url":{"type":"string","format":"uri"},"cover":{"type":["string","null"],"format":"uri","description":"Cover image (WebP), or `null` without one."},"addedAt":{"type":"string","format":"date","description":"When the entry joined the directory (YYYY-MM-DD)."},"pricing":{"type":"string","enum":["free","freemium","open-source","paid"],"description":"Tools only."},"stars":{"type":"integer","description":"Skills only: GitHub stars."},"updatedAt":{"type":"string","format":"date-time","description":"Skills only: the repository's last push."},"renderers":{"type":"array","description":"Skills only: what renders the video, most central first.","items":{"type":"string","enum":["remotion","hyperframes","html","manim","adobe","blender","video-models","ffmpeg"]}},"specialties":{"type":"array","description":"Studios and designers only: what they're known for, strongest first.","items":{"type":"string","enum":["product-films","explainers","3d","brand","ui-motion"]}},"resourceType":{"type":"string","enum":["library","examples","prompts","directory","archive"],"description":"Resources only."},"publishedAt":{"type":"string","format":"date-time","description":"Articles only: when it was published."}}},"Moves":{"type":"object","required":["moves"],"properties":{"moves":{"type":"array","items":{"$ref":"#/components/schemas/Move"}}}},"Move":{"type":"object","required":["slug","name","family","aka","summary","body","goodFor","examples","related"],"properties":{"slug":{"type":"string","description":"Stable ID. The move's page is `/moves/{family}/{slug}` under a locale."},"name":{"type":"string"},"family":{"type":"string","enum":["timing","type","transitions","ui","vector","generative","camera","texture","data","sound"]},"aka":{"type":"array","description":"Other names people search for.","items":{"type":"string"}},"summary":{"type":"string","description":"One sentence: what it looks like."},"body":{"type":"string","description":"Markdown: how it reads, when it works, common mistakes."},"goodFor":{"type":"array","description":"Short tags, e.g. `logo stings`.","items":{"type":"string"}},"examples":{"type":"array","description":"Slugs of catalog videos that show the move.","items":{"type":"string"}},"related":{"type":"array","description":"Slugs of related moves.","items":{"type":"string"}}}}}}}