{"openapi":"3.1.0","info":{"title":"Green Screen Memes API","version":"1.0.0","description":"Search and use the Green Screen Memes library: about 2,000 green screen meme clips and 600 meme templates.\n\n**Auth.** Every request needs your key: `Authorization: Bearer gsm_live_…`. Keep it on your server; for browser or mobile apps, call the API from your backend.\n\n**Media links.** `thumbnailUrl`, `videoUrl` and `previewVideoUrl` are signed for your key and expire after about 6 hours. Use them directly in `<img>`/`<video>` or download them; fetch the item again for fresh links. They support range requests.\n\n**Limits.** Per-minute rate limit and monthly calls and video downloads depend on your plan (`GET /v1/usage`). Going over returns `429` with `rate_limited` or `quota_exceeded`.\n\n**AI agents.** The same key works with the MCP server at `https://api.greenscreenmemes.app/mcp` (Streamable HTTP)."},"servers":[{"url":"https://api.greenscreenmemes.app"}],"security":[{"bearer":[]}],"tags":[{"name":"Green screens"},{"name":"Templates"},{"name":"Collections"},{"name":"Account"}],"paths":{"/v1/memes":{"get":{"tags":["Green screens"],"summary":"List or search green screens","description":"Newest first, or by relevance with `q`. With `updatedSince`, everything added or changed after that time, oldest first, for keeping a local copy in sync.","parameters":[{"name":"q","in":"query","required":false,"description":"Search words; every word must match the name, a tag or the description.","schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"description":"Only items with this tag.","schema":{"type":"string"}},{"name":"color","in":"query","required":false,"description":"Only clips with this background color.","schema":{"type":"string","enum":["green","blue","red","none"]}},{"name":"updatedSince","in":"query","required":false,"description":"ISO 8601 time; only items added or changed after it.","schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1–100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":24}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","total","nextCursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GreenScreen"}},"total":{"type":"integer","description":"Matching items across all pages."},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/memes/{id}":{"get":{"tags":["Green screens"],"summary":"Get a green screen","parameters":[{"name":"id","in":"path","required":true,"description":"The green screen id (URL-encoded).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GreenScreen"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/templates":{"get":{"tags":["Templates"],"summary":"List or search templates","parameters":[{"name":"q","in":"query","required":false,"description":"Search words.","schema":{"type":"string"}},{"name":"tag","in":"query","required":false,"description":"Only items with this tag.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1–100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":24}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","total","nextCursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Template"}},"total":{"type":"integer","description":"Matching items across all pages."},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/templates/{id}":{"get":{"tags":["Templates"],"summary":"Get a template","parameters":[{"name":"id","in":"path","required":true,"description":"The template id (its name, URL-encoded).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Template"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/collections":{"get":{"tags":["Collections"],"summary":"List collections","description":"`trending` plus the curated collections from the Green Screen Memes app.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CollectionSummary"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/collections/{id}":{"get":{"tags":["Collections"],"summary":"Get a collection’s green screens","parameters":[{"name":"id","in":"path","required":true,"description":"A collection id, or `trending`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1–100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":24}},{"name":"cursor","in":"query","required":false,"description":"`nextCursor` from the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"type":"object","required":["data","total","nextCursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GreenScreen"}},"total":{"type":"integer","description":"Matching items across all pages."},"nextCursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}}},{"type":"object","properties":{"id":{"type":"string"},"name":{"$ref":"#/components/schemas/LocalizedName"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/tags":{"get":{"tags":["Collections"],"summary":"Most used tags","parameters":[{"name":"type","in":"query","required":false,"description":"Green screens or templates.","schema":{"type":"string","enum":["memes","templates"],"default":"memes"}},{"name":"limit","in":"query","required":false,"description":"How many tags, 1–500.","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"tag":{"type":"string"},"count":{"type":"integer"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/v1/usage":{"get":{"tags":["Account"],"summary":"This month’s usage","description":"Your plan and how much of this month’s calls and video downloads you have used (months are UTC).","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usage"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your API key, e.g. `gsm_live_…`."}},"schemas":{"GreenScreen":{"type":"object","properties":{"id":{"type":"string"},"type":{"const":"green_screen"},"name":{"type":"string"},"description":{"type":"string","description":"What happens in the clip."},"tags":{"type":"array","items":{"type":"string"}},"chromaKeyColor":{"type":"string","enum":["green","blue","red","none"],"description":"The background color to key out; `none` = use the clip as-is."},"durationSeconds":{"type":["number","null"]},"thumbnailUrl":{"type":["string","null"],"format":"uri","description":"Signed link, expires."},"videoUrl":{"type":["string","null"],"format":"uri","description":"Signed MP4 link, expires. Null for keys without media access."},"createdAt":{"type":["string","null"],"format":"date-time"},"updatedAt":{"type":["string","null"],"format":"date-time"}}},"Template":{"type":"object","properties":{"id":{"type":"string"},"type":{"const":"template"},"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"thumbnailUrl":{"type":"string","format":"uri","description":"Signed link, expires."},"previewVideoUrl":{"type":["string","null"],"format":"uri","description":"Signed MP4 of the finished template, expires."},"createdAt":{"type":["string","null"],"format":"date-time"}}},"CollectionSummary":{"type":"object","properties":{"id":{"type":"string"},"name":{"$ref":"#/components/schemas/LocalizedName"},"count":{"type":"integer"}}},"LocalizedName":{"type":"object","additionalProperties":{"type":"string"},"description":"Name by language code, e.g. { \"en\": \"Trending\" }."},"Usage":{"type":"object","properties":{"month":{"type":"string","example":"2026-10"},"plan":{"type":"string","enum":["sandbox","starter","growth","enterprise","internal"]},"calls":{"$ref":"#/components/schemas/Meter"},"videos":{"$ref":"#/components/schemas/Meter"},"ratePerMinute":{"type":"integer"}}},"Meter":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":["integer","null"],"description":"null = no limit."}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"responses":{"BadRequest":{"description":"A parameter is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"Missing, invalid or revoked key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No such item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"`rate_limited` (wait for `Retry-After` seconds) or `quota_exceeded` (monthly plan used up).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}