{"openapi":"3.1.0","info":{"title":"gifs.so API","version":"1.0.0"},"servers":[{"url":"https://gifs.so/api/rest"}],"paths":{"/categories":{"get":{"operationId":"gif-categories","summary":"List reaction categories and their cover GIFs","tags":["GIFs"],"security":[{"apiKey":[]}],"parameters":[{"in":"query","name":"requestId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"count":{"type":"number"},"cover":{"type":"object","properties":{"description":{"type":"string"},"gifUrl":{"type":"string","format":"uri"},"height":{"type":"number"},"id":{"type":"string"},"mp4Url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceUrl":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"thumbnailUrl":{"type":"string","format":"uri"},"title":{"type":"string"},"width":{"type":"number"}},"required":["description","gifUrl","height","id","mp4Url","sourceUrl","tags","thumbnailUrl","title","width"],"additionalProperties":false},"id":{"type":"string"},"name":{"type":"string"}},"required":["count","cover","id","name"],"additionalProperties":false}}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/gifs/{id}":{"get":{"operationId":"gif-get","summary":"Get a GIF and its shareable media URLs","tags":["GIFs"],"security":[{"apiKey":[]}],"parameters":[{"in":"path","name":"id","schema":{"type":"string","minLength":1,"maxLength":100},"required":true},{"in":"query","name":"requestId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string"},"gifUrl":{"type":"string","format":"uri"},"height":{"type":"number"},"id":{"type":"string"},"mp4Url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceUrl":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"thumbnailUrl":{"type":"string","format":"uri"},"title":{"type":"string"},"width":{"type":"number"}},"required":["description","gifUrl","height","id","mp4Url","sourceUrl","tags","thumbnailUrl","title","width"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/gifs":{"get":{"operationId":"gif-search","summary":"Search GIFs by text or reaction category","tags":["GIFs"],"security":[{"apiKey":[]}],"parameters":[{"in":"query","name":"category","schema":{"type":"string","maxLength":100}},{"in":"query","name":"limit","schema":{"default":24,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"offset","schema":{"default":0,"type":"integer","minimum":0,"maximum":10000}},{"in":"query","name":"query","schema":{"default":"","type":"string","maxLength":200}},{"in":"query","name":"requestId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"gifUrl":{"type":"string","format":"uri"},"height":{"type":"number"},"id":{"type":"string"},"mp4Url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"sourceUrl":{"type":"string","format":"uri"},"tags":{"type":"array","items":{"type":"string"}},"thumbnailUrl":{"type":"string","format":"uri"},"title":{"type":"string"},"width":{"type":"number"}},"required":["description","gifUrl","height","id","mp4Url","sourceUrl","tags","thumbnailUrl","title","width"],"additionalProperties":false}},"nextOffset":{"type":["number","null"]},"total":{"type":"number"}},"required":["items","nextOffset","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Invalid input data"},"code":{"type":"string","description":"The error code","example":"BAD_REQUEST"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information","example":{"code":"BAD_REQUEST","message":"Invalid input data","issues":[]}},"error.UNAUTHORIZED":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Authorization not provided"},"code":{"type":"string","description":"The error code","example":"UNAUTHORIZED"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Authorization not provided error (401)","description":"The error information","example":{"code":"UNAUTHORIZED","message":"Authorization not provided","issues":[]}},"error.FORBIDDEN":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Insufficient access"},"code":{"type":"string","description":"The error code","example":"FORBIDDEN"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Insufficient access error (403)","description":"The error information","example":{"code":"FORBIDDEN","message":"Insufficient access","issues":[]}},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Not found"},"code":{"type":"string","description":"The error code","example":"NOT_FOUND"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information","example":{"code":"NOT_FOUND","message":"Not found","issues":[]}},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Internal server error"},"code":{"type":"string","description":"The error code","example":"INTERNAL_SERVER_ERROR"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information","example":{"code":"INTERNAL_SERVER_ERROR","message":"Internal server error","issues":[]}}},"securitySchemes":{"apiKey":{"in":"header","name":"x-api-key","type":"apiKey"}}}}