{"info":{"_postman_id":"6018ceb1-e3c8-4e55-b7c8-0ce5b82ebfd8","name":"CineReserve API","description":"<html><head></head><body><p>A API CineReserve é um backend RESTful escalável e de alto desempenho, projetado para gerenciar as complexidades das operações modernas de cinema. Construído com foco na integridade dos dados e no controle de concorrência, o sistema oferece um portal completo para que os cinéfilos descubram filmes, visualizem a disponibilidade de assentos em tempo real, reservem e comprem assentos disponíveis.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"40491697","collectionId":"6018ceb1-e3c8-4e55-b7c8-0ce5b82ebfd8","publishedId":"2sBXijJXRb","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-03-22T22:17:46.000Z"},"item":[{"name":"Register/Token","item":[{"name":"Register User","id":"e6917472-3eed-438b-9543-fd71becbb1f5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"usuarioteste@gmail.com\",\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/register/","description":"<p>Para que um usuário se registre, é preciso que ele forneça seu email, um username e uma senha. Esses dados passam por uma verificação e possuem algumas regras. Por exemplo: o email tem que ser um email válido, a senha precisa obrigatoriamente ter mais de 8 caracters, dentre eles, no minimo uma letra maiúscula, um número e um caracter especial, para segurança do próprio usuário. Abaixo eu simulo um usuário passando seus dados de forma indevida e como o sistema reage a isso.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","register",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"f544b2ad-20b9-48bf-a386-2fcf5e0e8771","name":"User Register with invalid email","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"usuarioteste\",\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/register/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:01:55 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"42"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"email\": [\n        \"Enter a valid email address.\"\n    ]\n}"},{"id":"a2ac6d8c-70a0-4160-9d9b-d2a1ae371801","name":"User Register password without upper case","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"usuarioteste@gmail.com\",\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/register/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:02:39 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"73"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"password\": [\n        \"A senha precisar conter pelo menos uma letra maiúscula.\"\n    ]\n}"},{"id":"83f1a07a-ac1c-425d-8649-f54cb7fa8a93","name":"User Register password without a special caracter","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"usuarioteste@gmail.com\",\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/register/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:04:21 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"71"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"password\": [\n        \"A senha precisa conter pelo menos um caracter especial\"\n    ]\n}"},{"id":"a175f27c-4301-40cc-b2b5-c2a712b9889f","name":"User Register password without a number","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"usuarioteste@gmail.com\",\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/register/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:05:51 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"74"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"password\": [\n        \"A senha precisar conter pelo menos um caracter numérico.\"\n    ]\n}"},{"id":"b294611b-7572-444c-be77-d015b6ae2dd1","name":"User Register Sucess","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"usuarioteste@gmail.com\",\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/register/"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:07:06 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"61"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"email\": \"usuarioteste@gmail.com\",\n    \"username\": \"usuarioteste1\"\n}"}],"_postman_id":"e6917472-3eed-438b-9543-fd71becbb1f5"},{"name":"Login","id":"e9f4de87-1ee2-4501-bbe2-078c98525ace","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/login/","description":"<p>Após se registrar, o usuário precisa fazer login utilizando seu username e sua senha para ter acesso aos seus tokens (Refresh e Acess). Como dito anteriormente, algumas funções do sistema só estão disponíveis para usuários autenticados.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","login",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"42d6972c-4141-415b-95ea-373cdacc08e9","name":"Login with username wrong","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"usuarioteste\",\r\n    \"password\": \"Usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/login/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:08:52 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"No active account found with the given credentials\"\n}"},{"id":"d4a1a7e1-74df-40f3-8c15-97b4b9547a1a","name":"Login with password wrong","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/login/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:09:20 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"No active account found with the given credentials\"\n}"},{"id":"88aa7bcd-29b8-4044-9e10-727d31fbb3b3","name":"Login Sucess","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"usuarioteste1\",\r\n    \"password\": \"Usuarioteste1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/login/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:09:49 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"489"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc3NDI4MjE4OSwiaWF0IjoxNzc0MTk1Nzg5LCJqdGkiOiJjNmE3ZDU5ODliNWI0OGMzYWNhZjI5MDg2MTZkODk5YyIsInVzZXJfaWQiOiI0In0.h_L5S_FyK_kcoUeypFymiwhTsmnXDWUsDmD8zCqzaZQ\",\n    \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MTk2MDg5LCJpYXQiOjE3NzQxOTU3ODksImp0aSI6IjBjN2YzOThlOGU3ZDQ3OGRhMDgzYzU3ODIxODEwYTMxIiwidXNlcl9pZCI6IjQifQ.4GBqxyBCmX5XnsT1FURwy8hpglzr8iJ5lc2zt1CcVmM\"\n}"},{"id":"4e2b7984-98c6-4347-a2a3-1e67b3a44b62","name":"Admin Login","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"admin\",\r\n    \"password\": \"Adminuser1$\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/login/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:24:43 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"489"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc3NDI4MzA4MywiaWF0IjoxNzc0MTk2NjgzLCJqdGkiOiI5MmU4N2VkMTgwMWE0OTZmYTJhY2ZkYjU5NzliNjc5NiIsInVzZXJfaWQiOiIxIn0._TgCrt6-yOEWLwiO92cUsme4LZ3WT_CRKoVU2djdSL4\",\n    \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MTk2OTgzLCJpYXQiOjE3NzQxOTY2ODMsImp0aSI6ImI0NWNhYzFkZWMzYjQ3Y2U4YTU4ZTBkMGUyZmQ0Zjg1IiwidXNlcl9pZCI6IjEifQ.tp85Lv5GvVL_Rsc0eO486vKqQR_VgCBUr9TILlxGE9w\"\n}"}],"_postman_id":"e9f4de87-1ee2-4501-bbe2-078c98525ace"},{"name":"Refresh Token","id":"35f9a2ed-1d80-4c12-b16a-e4205a7fcd14","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc3NDM4MzYyNSwiaWF0IjoxNzc0Mjk3MjI1LCJqdGkiOiI3OTQwZjJjYWI5MmM0YzA4YjA0MTgxMTc4NWY2ZWFlNSIsInVzZXJfaWQiOiIxIn0.ySkzOuazTdMFdaejvb-ATAyUvmop5X0pk7pFJKZKxlM\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/refresh/","description":"<p>O token de acesso tem um prazo de validade. Quando o token de acesso expira, é preciso passar o Refresh token para que outro token de acesso seja gerado e o usuário tenha autorização para acessar os endpoints.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","refresh",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"46610f75-5075-4069-83ad-a526883cc8ad","name":"Refreshing token with invalid refresh token","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc3NDI4MjE4OSwiaWF0IjoxNzc0MTk1Nzg5LCJqdGkiOiJjNmE3ZDU5ODliNWI0OGMzYWNhZjI5MDg2MTZkODk5YyIsInVzZXJfaWQiOiI0In0.h_L5S_FyK_kcoUeypFymiwhTsmnXDWUsDmD8zCqzaZ\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/refresh/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:11:07 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"54"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Token is invalid\",\n    \"code\": \"token_not_valid\"\n}"},{"id":"2eeb9712-3800-4bbb-8303-55a50b484c38","name":"Refreshing token with refresh - sucess","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"refresh\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTc3NDI4MjE4OSwiaWF0IjoxNzc0MTk1Nzg5LCJqdGkiOiJjNmE3ZDU5ODliNWI0OGMzYWNhZjI5MDg2MTZkODk5YyIsInVzZXJfaWQiOiI0In0.h_L5S_FyK_kcoUeypFymiwhTsmnXDWUsDmD8zCqzaZQ\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/refresh/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:10:38 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"244"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"access\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MTk2MTM4LCJpYXQiOjE3NzQxOTU4MzgsImp0aSI6IjYyN2NkOWFmOTA3NzQ5ZmE4YjY5OTY0YjU5ODIwMzMxIiwidXNlcl9pZCI6IjQifQ.Hqwb1yAUXT-ber_1DJPXF41Ipqe4a6OY8zRdRp3KtXo\"\n}"}],"_postman_id":"35f9a2ed-1d80-4c12-b16a-e4205a7fcd14"},{"name":"Verify token","id":"d6075481-9c16-4b48-8b1d-1ea7002c549a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MjE3NDI4LCJpYXQiOjE3NzQyMTcxMjgsImp0aSI6IjAzZDJmN2Q4ZmJjNTQwNjc5YjRiZGE5ZjQwYTU4Mzg5IiwidXNlcl9pZCI6IjIifQ.5X3pbC_pQ8I-gBr5aeoh_pZD1Z8_aqLq2yBLQPBWkHA\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/verify/","description":"<p>Existe também a possibilidade de verificar se aquele token de acesso ainda está bom, se ele é válido ou se já expirou.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","verify",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"be924330-7cee-4479-baf2-d87b441d36bc","name":"Verifying token with acess token - sucess","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MTk2MTM4LCJpYXQiOjE3NzQxOTU4MzgsImp0aSI6IjYyN2NkOWFmOTA3NzQ5ZmE4YjY5OTY0YjU5ODIwMzMxIiwidXNlcl9pZCI6IjQifQ.Hqwb1yAUXT-ber_1DJPXF41Ipqe4a6OY8zRdRp3KtXo\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/verify/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:11:49 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"2"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{}"},{"id":"9b4d5151-b524-460d-bf9a-50eb2f7550fb","name":"Verifying token with invalid acess token","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MTk2MTM4LCJpYXQiOjE3NzQxOTU4MzgsImp0aSI6IjYyN2NkOWFmOTA3NzQ5ZmE4YjY5OTY0YjU5ODIwMzMxIiwidXNlcl9pZCI6IjQifQ.Hqwb1yAUXT-ber_1DJPXF41Ipqe4a6OY8zRdRp3KtX\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/verify/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:12:52 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"54"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Token is invalid\",\n    \"code\": \"token_not_valid\"\n}"},{"id":"156eff04-4004-4ee9-81b3-40739164fe78","name":"Verifying token expired","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzc0MTk2MTM4LCJpYXQiOjE3NzQxOTU4MzgsImp0aSI6IjYyN2NkOWFmOTA3NzQ5ZmE4YjY5OTY0YjU5ODIwMzMxIiwidXNlcl9pZCI6IjQifQ.Hqwb1yAUXT-ber_1DJPXF41Ipqe4a6OY8zRdRp3KtXo\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/verify/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:18:01 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"54"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Token is expired\",\n    \"code\": \"token_not_valid\"\n}"}],"_postman_id":"d6075481-9c16-4b48-8b1d-1ea7002c549a"}],"id":"93905473-f77d-4503-bca9-53db0afbcacb","description":"<p>Para reservar ou comprar um assento numa sessão do seu filme, é preciso que o usuário se registre e faça login no sistema. Os endpoints GET para os filmes, sessões e assentos não necessariamente precisam de autenticação, mas uma vez que o usuário deseje comprar ou reservar um assento, ele precisa estar autenticado. Com a autenticação JWT também é feito a distinção de poderes de um usuário \"normal\" para um administrador.</p>\n","_postman_id":"93905473-f77d-4503-bca9-53db0afbcacb"},{"name":"Movies","item":[{"name":"Get All Movies","id":"4053ddd0-dece-4063-9241-d481c691c0f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/movies/?page=7","description":"<p>Todos os usuários podem pesquisar os filmes disponíveis no catálogo, cada página apresenta 5 filmes e suas especificações. Passando o número da página como parâmetro na url (?page=numberpage), é capaz de ver os outros filmes disponíveis.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","movies",""],"host":["127","0","0","1"],"query":[{"key":"page","value":"7"}],"variable":[]}},"response":[{"id":"e2d5e4ee-1741-4e8a-bdc5-1a3685288fd7","name":"Get All Movies","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://127.0.0.1:8000/api/movies/?page=7","protocol":"http","host":["127","0","0","1"],"port":"8000","path":["api","movies",""],"query":[{"key":"page","value":"7"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:02:48 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"1821"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"count\": 36,\n    \"next\": \"http://127.0.0.1:8000/api/movies/?page=8\",\n    \"previous\": \"http://127.0.0.1:8000/api/movies/?page=6\",\n    \"results\": [\n        {\n            \"id\": 106,\n            \"title\": \"A certeza de evoluir mais rapidamente\",\n            \"description\": \"Quasi cupiditate esse quisquam earum voluptatem optio. Iure quas labore odio quo nobis odit.\",\n            \"duration_display\": \"84 min\",\n            \"age_rating_display\": {\n                \"code\": \"18\",\n                \"label\": \"Não recomendado para menores de 18 anos\"\n            },\n            \"genre\": \"Ficção Científica\",\n            \"release_date\": \"2019-05-20\"\n        },\n        {\n            \"id\": 107,\n            \"title\": \"O conforto de mudar mais rapidamente\",\n            \"description\": \"Repellat corporis nostrum voluptate. Provident ducimus molestiae cum consequatur reprehenderit ratione. Quis molestias praesentium cupiditate.\",\n            \"duration_display\": \"94 min\",\n            \"age_rating_display\": {\n                \"code\": \"12\",\n                \"label\": \"Não recomendado para menores de 12 anos\"\n            },\n            \"genre\": \"Ficção Científica\",\n            \"release_date\": \"2023-10-04\"\n        },\n        {\n            \"id\": 108,\n            \"title\": \"A segurança de realizar seus sonhos com confiança\",\n            \"description\": \"Aut in vero velit quam neque facere et. Magni optio possimus quasi eaque ullam.\",\n            \"duration_display\": \"128 min\",\n            \"age_rating_display\": {\n                \"code\": \"L\",\n                \"label\": \"Livre\"\n            },\n            \"genre\": \"Documentário\",\n            \"release_date\": \"2019-08-21\"\n        },\n        {\n            \"id\": 109,\n            \"title\": \"A liberdade de inovar de maneira eficaz\",\n            \"description\": \"Eius molestiae quis ab deleniti blanditiis. Minus officia minus nobis.\",\n            \"duration_display\": \"147 min\",\n            \"age_rating_display\": {\n                \"code\": \"12\",\n                \"label\": \"Não recomendado para menores de 12 anos\"\n            },\n            \"genre\": \"Documentário\",\n            \"release_date\": \"2019-08-04\"\n        },\n        {\n            \"id\": 110,\n            \"title\": \"A simplicidade de avançar mais facilmente\",\n            \"description\": \"Recusandae consequuntur illum dicta. Aperiam rem consequuntur. Repudiandae porro in impedit libero quos.\",\n            \"duration_display\": \"145 min\",\n            \"age_rating_display\": {\n                \"code\": \"10\",\n                \"label\": \"Não recomendado para menores de 10 anos\"\n            },\n            \"genre\": \"Aventura\",\n            \"release_date\": \"2026-01-12\"\n        }\n    ]\n}"}],"_postman_id":"4053ddd0-dece-4063-9241-d481c691c0f8"},{"name":"Get Detail Movie","event":[{"listen":"test","script":{"id":"4114f54a-67dc-47af-a7d7-22ff42a7fae5","exec":["// Visualization Script","// Visualization Script","const template = `","<style>","  :root { --border:#e6e6e6; --muted:#666; }","  body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; color:#111; }","  .grid { display:grid; grid-template-columns: 1fr; gap:16px; }","  .card { border:1px solid var(--border); border-radius:8px; padding:14px; }","  .title { font-size:16px; font-weight:600; margin:0 0 10px; }","  .subtitle { font-size:12px; color:var(--muted); margin-top:-6px; margin-bottom:10px; }","  table { width:100%; border-collapse: collapse; }","  th, td { border:1px solid var(--border); padding:8px; vertical-align: top; }","  th { background:#fafafa; text-align:left; font-weight:600; }","  .kv-key { width: 220px; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; font-size: 12px; }","  .empty { color: var(--muted); font-style: italic; }","</style>","","<div class=\"grid\">","  <div class=\"card\">","    <div class=\"title\">Movie</div>","    <div class=\"subtitle\">Key/value fields</div>","    <table>","      <thead>","        <tr>","          <th class=\"kv-key\">Field</th>","          <th>Value</th>","        </tr>","      </thead>","      <tbody>","        {{#each movieFields}}","          <tr>","            <td class=\"kv-key\">{{key}}</td>","            <td>{{value}}</td>","          </tr>","        {{/each}}","      </tbody>","    </table>","  </div>","","  <div class=\"card\">","    <div class=\"title\">Sessions</div>","    <div class=\"subtitle\">Showtimes for this movie</div>","","    {{#if hasSessions}}","      <table>","        <thead>","          <tr>","            <th>id</th>","            <th>date</th>","            <th>showtime</th>","            <th>theater</th>","          </tr>","        </thead>","        <tbody>","          {{#each sessions}}","            <tr>","              <td>{{id}}</td>","              <td>{{date}}</td>","              <td>{{showtime}}</td>","              <td>{{theater}}</td>","            </tr>","          {{/each}}","        </tbody>","      </table>","    {{else}}","      <div class=\"empty\">No sessions available.</div>","    {{/if}}","  </div>","</div>","`;","","function createPayload() {","  let data;","  try {","    data = pm.response.json();","  } catch (e) {","    data = null;","  }","","  const safeString = (v) => {","    if (v === null || v === undefined) return '';","    if (typeof v === 'string') return v;","    if (typeof v === 'number' || typeof v === 'boolean') return String(v);","    try { return JSON.stringify(v); } catch (e) { return String(v); }","  };","","  const movieFields = [];","  if (data && typeof data === 'object') {","    // Add scalar/top-level fields (excluding sessions)","    Object.keys(data).forEach((k) => {","      if (k === 'sessions') return;","      movieFields.push({ key: k, value: safeString(data[k]) });","    });","  }","","  // Prefer a human-friendly display for age_rating_display if present","  const idx = movieFields.findIndex(x => x.key === 'age_rating_display');","  if (idx !== -1) {","    const ar = data && data.age_rating_display;","    const formatted = ar && typeof ar === 'object'","      ? [ar.code, ar.label].filter(Boolean).join(' - ') || safeString(ar)","      : safeString(ar);","    movieFields[idx].value = formatted;","  }","","  const sessionsRaw = (data && Array.isArray(data.sessions)) ? data.sessions : [];","  const sessions = sessionsRaw.map(s => ({","    id: safeString(s && s.id),","    date: safeString(s && s.date),","    showtime: safeString(s && s.showtime),","    theater: safeString(s && s.theater)","  }));","","  return {","    movieFields,","    sessions,","    hasSessions: sessions.length > 0","  };","}","","pm.visualizer.set(template, createPayload());"],"type":"text/javascript","packages":{},"requests":{}}}],"id":"e5366fc0-71e7-447a-90d8-ea844e186d73","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/movies/108/","description":"<p>Nesse caso, uma vez que o usuário se interesse por algum filme específico, ele pode ver as especificações detalhadas desse filme. Passando seu id como parâmetro na url, ele tem acesso as informações do filme e as sessões disponíveis para ele. Abaixo tem alguns exemplos de requisições desse endpoint.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","movies","108",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"4a09f64b-c44e-4c4e-9be2-bbe3fbcd3641","name":"Get Detail Movie - id 108","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:03:33 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"519"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 108,\n    \"title\": \"A segurança de realizar seus sonhos com confiança\",\n    \"description\": \"Aut in vero velit quam neque facere et. Magni optio possimus quasi eaque ullam.\",\n    \"duration_display\": \"128 min\",\n    \"age_rating_display\": {\n        \"code\": \"L\",\n        \"label\": \"Livre\"\n    },\n    \"genre\": \"Documentário\",\n    \"release_date\": \"2019-08-21\",\n    \"sessions\": [\n        {\n            \"id\": 315,\n            \"date\": \"08/03/2026\",\n            \"showtime\": \"14:00\",\n            \"theater\": \"Sala 1\"\n        },\n        {\n            \"id\": 316,\n            \"date\": \"16/03/2026\",\n            \"showtime\": \"22:00\",\n            \"theater\": \"Sala 7\"\n        },\n        {\n            \"id\": 317,\n            \"date\": \"06/03/2026\",\n            \"showtime\": \"16:00\",\n            \"theater\": \"Sala 4\"\n        }\n    ]\n}"},{"id":"ed041938-09c9-4639-a4a4-ad3810866827","name":"Getting the movie after partial update - duration","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:08:19 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"519"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 108,\n    \"title\": \"A segurança de realizar seus sonhos com confiança\",\n    \"description\": \"Aut in vero velit quam neque facere et. Magni optio possimus quasi eaque ullam.\",\n    \"duration_display\": \"130 min\",\n    \"age_rating_display\": {\n        \"code\": \"L\",\n        \"label\": \"Livre\"\n    },\n    \"genre\": \"Documentário\",\n    \"release_date\": \"2019-08-21\",\n    \"sessions\": [\n        {\n            \"id\": 315,\n            \"date\": \"08/03/2026\",\n            \"showtime\": \"14:00\",\n            \"theater\": \"Sala 1\"\n        },\n        {\n            \"id\": 316,\n            \"date\": \"16/03/2026\",\n            \"showtime\": \"22:00\",\n            \"theater\": \"Sala 7\"\n        },\n        {\n            \"id\": 317,\n            \"date\": \"06/03/2026\",\n            \"showtime\": \"16:00\",\n            \"theater\": \"Sala 4\"\n        }\n    ]\n}"},{"id":"39b2ee3f-cfd7-45dd-b0df-0a6ed70f4b60","name":"Getting the movie after update - id 108 - title - [ALT]","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:13:56 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"867"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 108,\n    \"title\": \"O Mundo Depois de Nós [ALT]\",\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\n    \"duration_display\": \"140 min\",\n    \"age_rating_display\": {\n        \"code\": \"16\",\n        \"label\": \"Não recomendado para menores de 16 anos\"\n    },\n    \"genre\": \"Ficção Científica\",\n    \"release_date\": \"2023-11-22\",\n    \"sessions\": [\n        {\n            \"id\": 315,\n            \"date\": \"08/03/2026\",\n            \"showtime\": \"14:00\",\n            \"theater\": \"Sala 1\"\n        },\n        {\n            \"id\": 316,\n            \"date\": \"16/03/2026\",\n            \"showtime\": \"22:00\",\n            \"theater\": \"Sala 7\"\n        },\n        {\n            \"id\": 317,\n            \"date\": \"06/03/2026\",\n            \"showtime\": \"16:00\",\n            \"theater\": \"Sala 4\"\n        }\n    ]\n}"},{"id":"53f5698d-79f2-42c7-947a-94cc4f28d3d7","name":"Getting the movie after delete","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:27:40 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"46"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"No Movie matches the given query.\"\n}"}],"_postman_id":"e5366fc0-71e7-447a-90d8-ea844e186d73"},{"name":"Create new movie","id":"f6cfdc19-cca3-4be4-9ca8-d31bd4214ecf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"O Mundo Depois de Nós\",\r\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\r\n    \"duration\": 140,\r\n    \"age_rating\": \"16\",\r\n    \"genre\": \"Ficção Científica\",\r\n    \"release_date\": \"2023-11-22\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/","description":"<p>O endpoint de criação de filme está disponível somente para usuários com cargo de administrador. Dessa forma, não é qualquer usuário que tem direito a criar um novo filme. A autenticação JWT faz a diferenciação de usuários \"normais\" para aqueles que tem poderes de administradores. Abaixo eu demonstro como o sistema se comporta quando um usuário que não tem permissão tenta criar um novo filme e quando um administrador faz isso.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","movies",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"7ca4b489-b32a-455e-aaef-71b0c1577409","name":"Trying to create a movie without being an admin user","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"O Mundo Depois de Nós\",\r\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\r\n    \"duration\": 140,\r\n    \"age_rating\": \"16\",\r\n    \"genre\": \"Ficção Científica\",\r\n    \"release_date\": \"2023-11-22\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:29:41 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"732d4022-bb1d-419f-a40e-40db15802fbd","name":"Creating new movie being an admin user","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"O Mundo Depois de Nós\",\r\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\r\n    \"duration\": 140,\r\n    \"age_rating\": \"16\",\r\n    \"genre\": \"Ficção Científica\",\r\n    \"release_date\": \"2023-11-22\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:38:36 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"641"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 114,\n    \"title\": \"O Mundo Depois de Nós\",\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\n    \"duration_display\": \"140 min\",\n    \"age_rating_display\": {\n        \"code\": \"16\",\n        \"label\": \"Não recomendado para menores de 16 anos\"\n    },\n    \"genre\": \"Ficção Científica\",\n    \"release_date\": \"2023-11-22\"\n}"}],"_postman_id":"f6cfdc19-cca3-4be4-9ca8-d31bd4214ecf"},{"name":"Update movie","id":"3f971744-5b65-4e50-a132-3a0ed952cff6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"O Mundo Depois de Nós [ALT]\",\r\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\r\n    \"duration\": 140,\r\n    \"age_rating\": \"16\",\r\n    \"genre\": \"Ficção Científica\",\r\n    \"release_date\": \"2023-11-22\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/108/","description":"<p>O endpoint de atualização de um filme segue o mesmo padrão, apenas administradores podem alterar informações sobre um determinado filme. Abaixo exemplifico como o sistema se comporta nos dois casos: Usuário sem permissão e administrador alterando dados do filme.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","movies","108",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"009f1b78-4e71-4e01-9956-4796acd98e9c","name":"Trying to update a movie without being an admin user","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"O Mundo Depois de Nós [ALT]\",\r\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\r\n    \"duration\": 140,\r\n    \"age_rating\": \"16\",\r\n    \"genre\": \"Ficção Científica\",\r\n    \"release_date\": \"2023-11-22\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:11:54 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"0788fe2a-c49a-4a1f-8aad-fc2d6b56f410","name":"Updating a movie being an admin user","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\r\n    \"title\": \"O Mundo Depois de Nós [ALT]\",\r\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\r\n    \"duration\": 140,\r\n    \"age_rating\": \"16\",\r\n    \"genre\": \"Ficção Científica\",\r\n    \"release_date\": \"2023-11-22\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:12:47 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"647"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 108,\n    \"title\": \"O Mundo Depois de Nós [ALT]\",\n    \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\n    \"duration_display\": \"140 min\",\n    \"age_rating_display\": {\n        \"code\": \"16\",\n        \"label\": \"Não recomendado para menores de 16 anos\"\n    },\n    \"genre\": \"Ficção Científica\",\n    \"release_date\": \"2023-11-22\"\n}"}],"_postman_id":"3f971744-5b65-4e50-a132-3a0ed952cff6"},{"name":"Partial Update Movie","id":"fb8d6554-9d9f-4d7b-b6bf-2f3ce8dd5740","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"duration\": 130\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/108/","description":"<p>O endpoint de atualização parcial de um filme segue o mesmo padrão, apenas administradores podem alterar informações sobre um determinado filme. Abaixo exemplifico como o sistema se comporta nos dois casos: Usuário sem permissão e administrador alterando um dado do filme.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","movies","108",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"799ff5eb-50c3-40f2-94d5-4e667cca6f9e","name":"Trying to Partial Update a Movie without bieng an admin user","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"duration\": 130\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:05:56 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"b21a1b96-f506-43a6-8a4f-72c4118f7514","name":"Updating Partialy a Movie being an admin user","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"duration\": 130\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:07:36 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"299"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 108,\n    \"title\": \"A segurança de realizar seus sonhos com confiança\",\n    \"description\": \"Aut in vero velit quam neque facere et. Magni optio possimus quasi eaque ullam.\",\n    \"duration_display\": \"130 min\",\n    \"age_rating_display\": {\n        \"code\": \"L\",\n        \"label\": \"Livre\"\n    },\n    \"genre\": \"Documentário\",\n    \"release_date\": \"2019-08-21\"\n}"}],"_postman_id":"fb8d6554-9d9f-4d7b-b6bf-2f3ce8dd5740"},{"name":"Delete Movie","id":"9ace6039-29c4-41a2-a4a1-de4c1a64c0bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://127.0.0.1:8000/api/movies/108/","description":"<p>No caso de deleção é a mesma coisa, um usuário que não é administrador não tem permissão para excluir nenhum filme do banco de dados. Abaixo exemplifico tentando excluir um filme com a conta de um usuário que não é administrador e um administrador conseguindo finalmente excluir determinado filme.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","movies","108",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"1f94b388-c961-4256-a6b6-936bcbe281cd","name":"Trying to delete a movie without being a admin user","originalRequest":{"method":"DELETE","header":[],"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 17:06:36 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"cd5e0b4a-4e10-45b2-9931-9f70b0302994","name":"Deleting Movie being an admin user","originalRequest":{"method":"DELETE","header":[],"url":"http://127.0.0.1:8000/api/movies/108/"},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:27:14 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"0"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"9ace6039-29c4-41a2-a4a1-de4c1a64c0bd"}],"id":"d272df60-0c54-44c0-b366-e9698faa52ab","description":"<p>Os filmes são o coração do cinema. Os filmes possues atributos como: título, descrição, duração em minutos, classificação indicativa, gênero e data de lançamento. Aqui eu vou mostrar os endpoints disponíveis relacionados aos filmes, como utilizá-los e suas particularidades.</p>\n","_postman_id":"d272df60-0c54-44c0-b366-e9698faa52ab"},{"name":"Session","item":[{"name":"Get All Sessions","id":"98923a00-3baa-468d-af20-1aa536de96b0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/?page=1","description":"<p>Todos os usuários podem pesquisar sessões disponíveis no catálogo, cada página apresenta 5 sessões e suas especificações. Passando o número da página como parâmetro na url (?page=numberpage), é capaz de ver outras sessões disponíveis.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions",""],"host":["127","0","0","1"],"query":[{"key":"page","value":"1"}],"variable":[]}},"response":[{"id":"10f56c0f-ab0a-40a2-9781-eb08e0543dd9","name":"Get All Sessions","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://127.0.0.1:8000/api/sessions/?page=1","protocol":"http","host":["127","0","0","1"],"port":"8000","path":["api","sessions",""],"query":[{"key":"page","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:15:13 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"438"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"count\": 105,\n    \"next\": \"http://127.0.0.1:8000/api/sessions/?page=2\",\n    \"previous\": null,\n    \"results\": [\n        {\n            \"id\": 244,\n            \"date\": \"01/03/2026\",\n            \"showtime\": \"16:00\",\n            \"theater\": \"Sala 7\"\n        },\n        {\n            \"id\": 306,\n            \"date\": \"01/03/2026\",\n            \"showtime\": \"18:00\",\n            \"theater\": \"Sala 3\"\n        },\n        {\n            \"id\": 274,\n            \"date\": \"01/03/2026\",\n            \"showtime\": \"20:00\",\n            \"theater\": \"Sala 3\"\n        },\n        {\n            \"id\": 243,\n            \"date\": \"01/03/2026\",\n            \"showtime\": \"22:00\",\n            \"theater\": \"Sala 2\"\n        },\n        {\n            \"id\": 318,\n            \"date\": \"02/03/2026\",\n            \"showtime\": \"16:00\",\n            \"theater\": \"Sala 3\"\n        }\n    ]\n}"}],"_postman_id":"98923a00-3baa-468d-af20-1aa536de96b0"},{"name":"Getting Detail Session","id":"0ab3137a-dd0f-454d-bb4c-8490b568ad5a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/243/","description":"<p>O usuário consegue acessar uma sessão de seu desejo e ver as especificações detalhadas dela. Passando seu id como parâmetro na url, ele tem acesso as informações da sessão e os assentos disponíveis nela. Abaixo tem alguns exemplos de requisições desse endpoint.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","243",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"5c0497f8-8ecb-4364-901e-1d3d7aa63eca","name":"Get Detail Session - id 243","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/243/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:15:30 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"2965"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 243,\n    \"date\": \"01/03/2026\",\n    \"showtime\": \"22:00\",\n    \"theater\": \"Sala 2\",\n    \"movie\": {\n        \"id\": 84,\n        \"title\": \"O conforto de evoluir naturalmente\",\n        \"description\": \"Ullam perspiciatis repellendus cumque quasi aliquam temporibus eius. Laboriosam incidunt porro asperiores.\",\n        \"duration\": \"102 min\",\n        \"age_rating\": {\n            \"code\": \"12\",\n            \"label\": \"Não recomendado para menores de 12 anos\"\n        },\n        \"genre\": \"Fantasia\",\n        \"release_date\": \"2023-04-05\"\n    },\n    \"seats\": [\n        {\n            \"id\": 6301,\n            \"seat_label\": \"A1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6302,\n            \"seat_label\": \"A2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6303,\n            \"seat_label\": \"A3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6304,\n            \"seat_label\": \"A4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6305,\n            \"seat_label\": \"A5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6306,\n            \"seat_label\": \"A6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6307,\n            \"seat_label\": \"A7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6308,\n            \"seat_label\": \"A8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6309,\n            \"seat_label\": \"A9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6310,\n            \"seat_label\": \"A10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6311,\n            \"seat_label\": \"B1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6312,\n            \"seat_label\": \"B2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6313,\n            \"seat_label\": \"B3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6314,\n            \"seat_label\": \"B4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6315,\n            \"seat_label\": \"B5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6316,\n            \"seat_label\": \"B6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6317,\n            \"seat_label\": \"B7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6318,\n            \"seat_label\": \"B8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6319,\n            \"seat_label\": \"B9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6320,\n            \"seat_label\": \"B10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6321,\n            \"seat_label\": \"C1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6322,\n            \"seat_label\": \"C2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6323,\n            \"seat_label\": \"C3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6324,\n            \"seat_label\": \"C4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6325,\n            \"seat_label\": \"C5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6326,\n            \"seat_label\": \"C6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6327,\n            \"seat_label\": \"C7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6328,\n            \"seat_label\": \"C8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6329,\n            \"seat_label\": \"C9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6330,\n            \"seat_label\": \"C10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6331,\n            \"seat_label\": \"D1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6332,\n            \"seat_label\": \"D2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6333,\n            \"seat_label\": \"D3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6334,\n            \"seat_label\": \"D4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6335,\n            \"seat_label\": \"D5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6336,\n            \"seat_label\": \"D6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6337,\n            \"seat_label\": \"D7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6338,\n            \"seat_label\": \"D8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6339,\n            \"seat_label\": \"D9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6340,\n            \"seat_label\": \"D10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6341,\n            \"seat_label\": \"E1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6342,\n            \"seat_label\": \"E2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6343,\n            \"seat_label\": \"E3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6344,\n            \"seat_label\": \"E4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6345,\n            \"seat_label\": \"E5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6346,\n            \"seat_label\": \"E6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6347,\n            \"seat_label\": \"E7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6348,\n            \"seat_label\": \"E8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6349,\n            \"seat_label\": \"E9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 6350,\n            \"seat_label\": \"E10\",\n            \"status\": \"Available\"\n        }\n    ]\n}"},{"id":"6dfab563-caa0-4b5a-a6f5-90e5f05b4197","name":"Getting Session 327 after updates","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:46:49 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"3333"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 327,\n    \"date\": \"25/03/2026\",\n    \"showtime\": \"17:35\",\n    \"theater\": \"Sala 6\",\n    \"movie\": {\n        \"id\": 114,\n        \"title\": \"O Mundo Depois de Nós\",\n        \"description\": \"Amanda e Clay alugam uma casa de luxo para passar alguns dias tranquilos longe da cidade grande com seus filhos. Mas uma catástrofe misteriosa vira o país de ponta cabeça. G.H. e Ruth batem à sua porta afirmando que são os donos originais da mansão e pedem abrigo no lugar. Desconfiados e em meio ao caos do mundo, os estranhos são obrigados a morar juntos, mas não conseguem confiar uns nos outros.\",\n        \"duration_display\": \"140 min\",\n        \"age_rating_display\": {\n            \"code\": \"16\",\n            \"label\": \"Não recomendado para menores de 16 anos\"\n        },\n        \"genre\": \"Ficção Científica\",\n        \"release_date\": \"2023-11-22\"\n    },\n    \"seats\": [\n        {\n            \"id\": 10501,\n            \"seat_label\": \"A1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10502,\n            \"seat_label\": \"A2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10503,\n            \"seat_label\": \"A3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10504,\n            \"seat_label\": \"A4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10505,\n            \"seat_label\": \"A5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10506,\n            \"seat_label\": \"A6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10507,\n            \"seat_label\": \"A7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10508,\n            \"seat_label\": \"A8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10509,\n            \"seat_label\": \"A9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10510,\n            \"seat_label\": \"A10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10511,\n            \"seat_label\": \"B1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10512,\n            \"seat_label\": \"B2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10513,\n            \"seat_label\": \"B3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10514,\n            \"seat_label\": \"B4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10515,\n            \"seat_label\": \"B5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10516,\n            \"seat_label\": \"B6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10517,\n            \"seat_label\": \"B7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10518,\n            \"seat_label\": \"B8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10519,\n            \"seat_label\": \"B9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10520,\n            \"seat_label\": \"B10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10521,\n            \"seat_label\": \"C1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10522,\n            \"seat_label\": \"C2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10523,\n            \"seat_label\": \"C3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10524,\n            \"seat_label\": \"C4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10525,\n            \"seat_label\": \"C5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10526,\n            \"seat_label\": \"C6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10527,\n            \"seat_label\": \"C7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10528,\n            \"seat_label\": \"C8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10529,\n            \"seat_label\": \"C9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10530,\n            \"seat_label\": \"C10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10531,\n            \"seat_label\": \"D1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10532,\n            \"seat_label\": \"D2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10533,\n            \"seat_label\": \"D3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10534,\n            \"seat_label\": \"D4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10535,\n            \"seat_label\": \"D5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10536,\n            \"seat_label\": \"D6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10537,\n            \"seat_label\": \"D7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10538,\n            \"seat_label\": \"D8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10539,\n            \"seat_label\": \"D9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10540,\n            \"seat_label\": \"D10\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10541,\n            \"seat_label\": \"E1\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10542,\n            \"seat_label\": \"E2\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10543,\n            \"seat_label\": \"E3\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10544,\n            \"seat_label\": \"E4\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10545,\n            \"seat_label\": \"E5\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10546,\n            \"seat_label\": \"E6\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10547,\n            \"seat_label\": \"E7\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10548,\n            \"seat_label\": \"E8\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10549,\n            \"seat_label\": \"E9\",\n            \"status\": \"Available\"\n        },\n        {\n            \"id\": 10550,\n            \"seat_label\": \"E10\",\n            \"status\": \"Available\"\n        }\n    ]\n}"},{"id":"24106684-5073-4cbb-9ec6-9f83340fb3a7","name":"Getting Session 327 after delete","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:48:50 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"48"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"No Session matches the given query.\"\n}"}],"_postman_id":"0ab3137a-dd0f-454d-bb4c-8490b568ad5a"},{"name":"Create new Session","id":"31ade3a8-4aaa-4034-935c-1970699a50d1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"date\": \"2026-03-25\",\r\n    \"showtime\": \"17:40:00\",\r\n    \"theater\": \"Sala 7\",\r\n    \"movie\": 114\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/","description":"<p>O endpoint de criação de sessão está disponível somente para usuários com cargo de administrador. Dessa forma, não é qualquer usuário que tem direito a criar uma nova sessão. Abaixo eu demonstro como o sistema se comporta quando um usuário que não tem permissão tenta criar uma nova sessão e quando um administrador faz isso.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"8dfa2815-3895-4a88-a6b5-5879b68e335b","name":"Trying to create a new session without being an admin user","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"date\": \"2026-03-25\",\r\n    \"showtime\": \"17:40:00\",\r\n    \"theater\": \"Sala 7\",\r\n    \"movie\": 114\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:34:37 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"8720c79b-8b84-4966-bf33-baf07b6fb78f","name":"Creating a new session for movie id 114","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"date\": \"2026-03-25\",\r\n    \"showtime\": \"17:40:00\",\r\n    \"theater\": \"Sala 7\",\r\n    \"movie\": 114\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:39:11 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, POST, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"68"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 327,\n    \"date\": \"25/03/2026\",\n    \"showtime\": \"17:40\",\n    \"theater\": \"Sala 7\"\n}"}],"_postman_id":"31ade3a8-4aaa-4034-935c-1970699a50d1"},{"name":"Update Session","id":"9434ca87-ab22-4530-97f8-6a7474072e46","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"date\": \"2026-03-25\",\r\n    \"showtime\": \"17:55:00\",\r\n    \"theater\": \"Sala 6\",\r\n    \"movie\": 114\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/327/","description":"<p>O endpoint de atualização de uma sessão segue o mesmo padrão, apenas administradores podem alterar informações sobre uma determinada sessão. Abaixo exemplifico como o sistema se comporta nos dois casos: Usuário sem permissão e administrador alterando dados de uma sessão.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","327",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"8544a4f0-cadf-44d2-86af-365a436c995a","name":"Trying to update a session without being an admin user","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"date\": \"2026-03-25\",\r\n    \"showtime\": \"17:55:00\",\r\n    \"theater\": \"Sala 7\",\r\n    \"movie\": 114\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:41:46 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"b1da6955-eb65-47c8-92f1-0d6110f90df3","name":"Updating a session being an admin user","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"date\": \"2026-03-25\",\r\n    \"showtime\": \"17:55:00\",\r\n    \"theater\": \"Sala 6\",\r\n    \"movie\": 114\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:44:39 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"68"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 327,\n    \"date\": \"25/03/2026\",\n    \"showtime\": \"17:55\",\n    \"theater\": \"Sala 6\"\n}"}],"_postman_id":"9434ca87-ab22-4530-97f8-6a7474072e46"},{"name":"Partial Update Session","id":"7d397bfe-4540-46f7-ade4-0d64da65a2f0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"showtime\": \"17:35:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/327/","description":"<p>O endpoint de atualização parcial de uma sessão segue o mesmo padrão, apenas administradores podem alterar informações sobre uma determinada sessão. Abaixo exemplifico como o sistema se comporta nos dois casos: Usuário sem permissão e administrador alterando um dado da sessão.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","327",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"b704749d-5b35-422b-840b-f731fd3f5343","name":"Trying to partial update a session without being an admin user","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"showtime\": \"17:55:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:42:48 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"1d2f1ea2-b8a9-48f6-987a-b6cb94473ab9","name":"Updating partialy a session being an admin user","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"showtime\": \"17:35:00\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:45:27 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"68"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": 327,\n    \"date\": \"25/03/2026\",\n    \"showtime\": \"17:35\",\n    \"theater\": \"Sala 6\"\n}"}],"_postman_id":"7d397bfe-4540-46f7-ade4-0d64da65a2f0"},{"name":"Delete Session","id":"df3b1bc9-8f39-4673-af79-e607e9d34e9c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"http://127.0.0.1:8000/api/sessions/327/","description":"<p>No caso de deleção é a mesma coisa, um usuário que não é administrador não tem permissão para excluir uma sessão do banco de dados. Abaixo exemplifico tentando excluir uma sessão com a conta de um usuário que não é administrador e um administrador conseguindo finalmente excluir determinada sessão.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","327",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"45d03170-5835-42bb-8361-6d89a222a6cf","name":"Trying to delete a session without being an admin user","originalRequest":{"method":"DELETE","header":[],"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"Forbidden","code":403,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:43:48 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"63"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"You do not have permission to perform this action.\"\n}"},{"id":"ccf45b64-0478-4519-90c6-92c1c1201d36","name":"Deleting session 327 being an admin user","originalRequest":{"method":"DELETE","header":[],"url":"http://127.0.0.1:8000/api/sessions/327/"},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 18:48:28 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, PUT, PATCH, DELETE, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"0"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":null}],"_postman_id":"df3b1bc9-8f39-4673-af79-e607e9d34e9c"}],"id":"65c5de72-4cfe-4e16-8767-3e265a7bced2","description":"<p>Cada filme é exibido em algumas sessões. As sessões possuem data, horário e sala. Além disso, cada sessões possue um mapa de assentos, que estão disponíveis para serem reservados ou comprados por usuários. Abaixo tem alguns exemplos de requisições desse endpoint.</p>\n","_postman_id":"65c5de72-4cfe-4e16-8767-3e265a7bced2"},{"name":"Seats","item":[{"name":"Get Session Seats","id":"ba0d0291-1b32-4127-be41-2045ad19febc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/243/seats/","description":"<p>Nesse endpoint é possível ver o mapa de assentos de uma determinada sessão (o id da sessão é passado na url). Os assentos podem estar com seu status como: Disponível, Reservado ou Vendido.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","243","seats",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"766071c3-15ce-4e00-a695-22bc33780f43","name":"Get Session Seats - session id 243","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/243/seats/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:16:23 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"2556"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 6301,\n        \"seat_label\": \"A1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6302,\n        \"seat_label\": \"A2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6303,\n        \"seat_label\": \"A3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6304,\n        \"seat_label\": \"A4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6305,\n        \"seat_label\": \"A5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6306,\n        \"seat_label\": \"A6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6307,\n        \"seat_label\": \"A7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6308,\n        \"seat_label\": \"A8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6309,\n        \"seat_label\": \"A9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6310,\n        \"seat_label\": \"A10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6311,\n        \"seat_label\": \"B1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6312,\n        \"seat_label\": \"B2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6313,\n        \"seat_label\": \"B3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6314,\n        \"seat_label\": \"B4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6315,\n        \"seat_label\": \"B5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6316,\n        \"seat_label\": \"B6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6317,\n        \"seat_label\": \"B7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6318,\n        \"seat_label\": \"B8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6319,\n        \"seat_label\": \"B9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6320,\n        \"seat_label\": \"B10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6321,\n        \"seat_label\": \"C1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6322,\n        \"seat_label\": \"C2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6323,\n        \"seat_label\": \"C3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6324,\n        \"seat_label\": \"C4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6325,\n        \"seat_label\": \"C5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6326,\n        \"seat_label\": \"C6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6327,\n        \"seat_label\": \"C7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6328,\n        \"seat_label\": \"C8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6329,\n        \"seat_label\": \"C9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6330,\n        \"seat_label\": \"C10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6331,\n        \"seat_label\": \"D1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6332,\n        \"seat_label\": \"D2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6333,\n        \"seat_label\": \"D3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6334,\n        \"seat_label\": \"D4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6335,\n        \"seat_label\": \"D5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6336,\n        \"seat_label\": \"D6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6337,\n        \"seat_label\": \"D7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6338,\n        \"seat_label\": \"D8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6339,\n        \"seat_label\": \"D9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6340,\n        \"seat_label\": \"D10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6341,\n        \"seat_label\": \"E1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6342,\n        \"seat_label\": \"E2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6343,\n        \"seat_label\": \"E3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6344,\n        \"seat_label\": \"E4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6345,\n        \"seat_label\": \"E5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6346,\n        \"seat_label\": \"E6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6347,\n        \"seat_label\": \"E7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6348,\n        \"seat_label\": \"E8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6349,\n        \"seat_label\": \"E9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6350,\n        \"seat_label\": \"E10\",\n        \"status\": \"Available\"\n    }\n]"},{"id":"51f9ec5e-40e6-4afd-a904-a1c9f7050eb2","name":"Session seats after reserve and sell","originalRequest":{"method":"GET","header":[],"url":"http://127.0.0.1:8000/api/sessions/243/seats/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:23:09 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"GET, HEAD, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"2550"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": 6301,\n        \"seat_label\": \"A1\",\n        \"status\": \"Reserved\"\n    },\n    {\n        \"id\": 6302,\n        \"seat_label\": \"A2\",\n        \"status\": \"Sold\"\n    },\n    {\n        \"id\": 6303,\n        \"seat_label\": \"A3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6304,\n        \"seat_label\": \"A4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6305,\n        \"seat_label\": \"A5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6306,\n        \"seat_label\": \"A6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6307,\n        \"seat_label\": \"A7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6308,\n        \"seat_label\": \"A8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6309,\n        \"seat_label\": \"A9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6310,\n        \"seat_label\": \"A10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6311,\n        \"seat_label\": \"B1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6312,\n        \"seat_label\": \"B2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6313,\n        \"seat_label\": \"B3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6314,\n        \"seat_label\": \"B4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6315,\n        \"seat_label\": \"B5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6316,\n        \"seat_label\": \"B6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6317,\n        \"seat_label\": \"B7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6318,\n        \"seat_label\": \"B8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6319,\n        \"seat_label\": \"B9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6320,\n        \"seat_label\": \"B10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6321,\n        \"seat_label\": \"C1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6322,\n        \"seat_label\": \"C2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6323,\n        \"seat_label\": \"C3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6324,\n        \"seat_label\": \"C4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6325,\n        \"seat_label\": \"C5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6326,\n        \"seat_label\": \"C6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6327,\n        \"seat_label\": \"C7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6328,\n        \"seat_label\": \"C8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6329,\n        \"seat_label\": \"C9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6330,\n        \"seat_label\": \"C10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6331,\n        \"seat_label\": \"D1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6332,\n        \"seat_label\": \"D2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6333,\n        \"seat_label\": \"D3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6334,\n        \"seat_label\": \"D4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6335,\n        \"seat_label\": \"D5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6336,\n        \"seat_label\": \"D6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6337,\n        \"seat_label\": \"D7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6338,\n        \"seat_label\": \"D8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6339,\n        \"seat_label\": \"D9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6340,\n        \"seat_label\": \"D10\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6341,\n        \"seat_label\": \"E1\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6342,\n        \"seat_label\": \"E2\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6343,\n        \"seat_label\": \"E3\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6344,\n        \"seat_label\": \"E4\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6345,\n        \"seat_label\": \"E5\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6346,\n        \"seat_label\": \"E6\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6347,\n        \"seat_label\": \"E7\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6348,\n        \"seat_label\": \"E8\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6349,\n        \"seat_label\": \"E9\",\n        \"status\": \"Available\"\n    },\n    {\n        \"id\": 6350,\n        \"seat_label\": \"E10\",\n        \"status\": \"Available\"\n    }\n]"}],"_postman_id":"ba0d0291-1b32-4127-be41-2045ad19febc"},{"name":"Reserve Seat","id":"ea346a06-4660-4d78-ac1a-3d4643a8d4aa","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6301\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/reserve/","description":"<p>Caso o usuário se interesse pelo filme e queira garantir seu assento, ele pode reservar um assento disponível, caso o assento já tenha sido reservado ou comprado, ele não conseguirá realizar a operação. O assento fica temporariamente trancado por 10 minutos. Depois de 10 minutos o assento pode ser reservado por outra pessoa. Abaixo exemplifico esse poossíveis cenários.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","243","reserve",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"f9b26623-d55d-45c3-a047-63839fa62c68","name":"Trying to reserve seat without authorization","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6301\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/reserve/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:19:51 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"58"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Authentication credentials were not provided.\"\n}"},{"id":"a844b946-2332-4633-abc8-d05474d665e0","name":"Trying to reserve a seat that has already been reserved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6303\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/reserve/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 20:00:31 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"33"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"This seat is Reserved\"\n}"},{"id":"b955f015-7640-475c-95f3-7b80319ffaae","name":"Trying to reserve a seat that has been already sold","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6302\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/reserve/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 20:19:32 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"29"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"This seat is Sold\"\n}"},{"id":"0c49934c-80d5-486c-819a-fc11a7ec0ab5","name":"Reserving seat - 10 minutes to expire","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6301\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/reserve/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:20:25 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"42"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"Seat reserved for 10 minutes\"\n}"}],"_postman_id":"ea346a06-4660-4d78-ac1a-3d4643a8d4aa"},{"name":"Buy a seat","id":"fe4e3ff1-5d15-46c0-aeb8-94f1b4fe9865","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6302\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/buy/","description":"<p>O usuário também pode comprar um ou mais assentos que estejam disponíveis. Para isso, ele precisa estar autenticado e caso o assento ja tenha sido comprado ou reservado por alguém, ele não conseguirá fazer a compra. Abaixo exemplifico todas essas situações com exemplos.</p>\n","urlObject":{"protocol":"http","port":"8000","path":["api","sessions","243","buy",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[{"id":"f1a89bad-c8c3-49fd-bea2-a67ae166a35b","name":"Trying to buy seat without authorization","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6302\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/buy/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:21:49 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"WWW-Authenticate","value":"Bearer realm=\"api\""},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"58"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"detail\": \"Authentication credentials were not provided.\"\n}"},{"id":"58a40e67-1282-4b22-89b2-50e9916f3468","name":"Trying to buy a seat that has been reserved","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6304\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/buy/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 20:18:43 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"41"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"This seat is already Reserved\"\n}"},{"id":"dec42f76-fbab-4a43-bd39-29d0b6dcd3d7","name":"Buying a seat that has already been purchased","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6302\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/buy/"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 20:13:05 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"37"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"This seat is already Sold\"\n}"},{"id":"f9c58c58-8320-4bd2-9215-84b4705c20f0","name":"Buying a seat","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"seat_id\": 6302\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/sessions/243/buy/"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"Date","value":"Sun, 22 Mar 2026 16:22:38 GMT"},{"key":"Server","value":"WSGIServer/0.2 CPython/3.13.3"},{"key":"Content-Type","value":"application/json"},{"key":"Vary","value":"Accept"},{"key":"Allow","value":"POST, OPTIONS"},{"key":"X-Frame-Options","value":"DENY"},{"key":"Content-Length","value":"99"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Referrer-Policy","value":"same-origin"},{"key":"Cross-Origin-Opener-Policy","value":"same-origin"}],"cookie":[],"responseTime":null,"body":"{\n    \"message\": \"You bought a ticket for: \\\"O conforto de evoluir naturalmente\\\", your seat is: \\\"A2\\\"\"\n}"}],"_postman_id":"fe4e3ff1-5d15-46c0-aeb8-94f1b4fe9865"}],"id":"6b2f41ef-fe0f-4724-a74a-9c4b2503e1c8","description":"<p>Como dito anteriormente, cada sessão possui um mapa de assentos. Eles vão da fileira A a E e do número 1 ao 10. Inicialmente todos os assentos estão disponíveis, mas usuários autenticados podem reservá-los (Quando um assento é reservado ele fica trancado por 10 minutos) ou podem ser comprados. Abaixo vou mostrar como os endpoints relacionados aos assentos funcionam.</p>\n","_postman_id":"6b2f41ef-fe0f-4724-a74a-9c4b2503e1c8"}]}