사용자 API

회원가입 API

회원가입을 수행합니다.

POST /api/users HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 88
Host: api.megacgv.com

{"name":"tester","email":"b@c.com","password":"rawPassword","phoneNumber":"01013572468"}
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: bb68e21c-fccf-4cbe-a5e7-6bd49cd15b48
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":201,"message":"성공"}
Path Type Description

name

String

이름

email

String

이메일

password

String

비밀번호

phoneNumber

String

휴대폰 번호

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


회원탈퇴 API

현재 로그인한 사용자를 탈퇴 처리합니다.

DELETE /api/users/me HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0MyIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0NjgwMTgsImlhdCI6MTc2NjQ2NjIxOH0.anU1wDrMgel1z3KJyOqE_EaBVabXA3yukStlpQ1KlpE
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: d5bafe98-26f8-4953-bce6-6d3476f9ede4
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


비밀번호 변경 API

현재 비밀번호를 검증 후 새로운 비밀번호로 변경합니다.

PATCH /api/users/me/password HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0NiIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0NjgwMTksImlhdCI6MTc2NjQ2NjIxOX0.LkMaKHFnZpHiIt_oVcjxgevQQK8oa4Zr7aUZ4XQDOmc
Content-Length: 61
Host: api.megacgv.com

{"currentPassword":"rawPassword","newPassword":"newPassword"}
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 7c51b583-8767-465d-af3d-d8dd6a2da7eb
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

currentPassword

String

현재 비밀번호

newPassword

String

새로운 비밀번호

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


휴대폰 번호 변경 API

사용자의 휴대폰 번호를 수정합니다.

PATCH /api/users/me/phone-number HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0MSIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0NjgwMTgsImlhdCI6MTc2NjQ2NjIxOH0.CpOfPOv-XJn3r8xzdDNEFpyhoAcyJfxk_V0_SVzE2rA
Content-Length: 29
Host: api.megacgv.com

{"phoneNumber":"01098765432"}
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 91c05222-6176-42b0-89f3-c8dc9f1884b2
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

phoneNumber

String

휴대폰 번호

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


회원정보 조회 API

로그인한 사용자의 프로필 정보를 조회합니다.

GET /api/users/me HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI0MiIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0NjgwMTgsImlhdCI6MTc2NjQ2NjIxOH0.26FaxsgkDqNa25cJWAA3C6aD_jqXDIdNblPuCHXNlGI
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: aa3aba7a-bbe3-43b6-a923-ac7b18b5e3b5
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 102

{"status":200,"message":"성공","data":{"name":"user","email":"a@b.com","phoneNumber":"01012345678"}}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.name

String

이름

data.email

String

이메일

data.phoneNumber

String

휴대폰 번호


인증 API

로그인 API

이메일과 비밀번호를 사용하여 로그인합니다. 성공 시 Access Token과 Refresh Token이 발급됩니다.

POST /api/auth/login HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 44
Host: api.megacgv.com

{"email":"a@b.com","password":"rawPassword"}
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: e728c2ab-d3ba-44f8-908b-6c4b7e7ee70f
Set-Cookie: refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2OTc1MSwiaWF0IjoxNzY2NDY2MTUxfQ.-Mxsk2SDf9Cjf64fgOAHfMYMxCmTzikiqssSJ2gOSsg; Path=/api/auth/refresh; Max-Age=1209600; Expires=Tue, 06 Jan 2026 05:02:32 GMT; Secure; HttpOnly
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 451

{"status":200,"message":"성공","data":{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2Nzk1MSwiaWF0IjoxNzY2NDY2MTUxfQ.AqPKgpn1ZpqhYyo2HRwkr6h7Ge16HE6KkdppchkFqvc","refreshToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2OTc1MSwiaWF0IjoxNzY2NDY2MTUxfQ.-Mxsk2SDf9Cjf64fgOAHfMYMxCmTzikiqssSJ2gOSsg"}}
Path Type Description

email

String

사용자 이메일

password

String

비밀번호

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.accessToken

String

JWT Access Token

data.refreshToken

String

Refresh Token


로그아웃 API

Access Token을 사용하여 로그아웃합니다. 서버는 Refresh Token 쿠키를 삭제합니다.

POST /api/auth/logout HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2Nzk1MywiaWF0IjoxNzY2NDY2MTUzfQ.PDJz_GRuY8Lf82c_i18uDxUAQHNx_s3GqPF3a_UZt0Q
Host: api.megacgv.com
Content-Type: application/x-www-form-urlencoded
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 942a3758-ccf0-4383-a81f-2836b6a5f207
Set-Cookie: refreshToken=; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


토큰 재발급 API

만료된 Access Token 대신 Refresh Token을 사용하여 새 Access Token을 발급받습니다.

POST /api/auth/refresh HTTP/1.1
Host: api.megacgv.com
Cookie: refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2OTc1MywiaWF0IjoxNzY2NDY2MTUzfQ.CZx60CBJ4-BjuZ3Aq9jVojSDTHHxvbzu7Xro0mX2y9I
Content-Type: application/x-www-form-urlencoded
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 6a6dd48c-bc91-444a-9ad6-8fc6dc20d8e6
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 266

{"status":200,"message":"성공","data":{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2Nzk1MywiaWF0IjoxNzY2NDY2MTUzfQ.1dijB3M-Gh59qTlXojdLPIB8gETOHWWaiJ0ss5xFeZc","refreshToken":null}}
Name Description

refreshToken

JWT Refresh Token

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.accessToken

String

새로운 JWT Access Token

data.refreshToken

Null

JWT Refresh Token


영화 API

영화 등록 API (관리자 전용)

영화를 등록합니다.

POST /api/admin/movies HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyMCIsInJvbGUiOiJBRE1JTiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiY0BkLmNvbSIsImV4cCI6MTc2NjQ2Nzk2NSwiaWF0IjoxNzY2NDY2MTY1fQ.Zgz-icdemdthMH-L9HfzLJqlfc0_Bkf7sBHI0PZTFgk
Content-Length: 153
Host: api.megacgv.com

{"title":"인터스텔라","duration":150,"description":"인터스텔라 설명","posterUrl":"poster.png","types":["THREE_D","TWO_D"],"genreIds":[2,3,1]}
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 9bd42997-bb14-4347-823d-2757d1fa5dfe
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":201,"message":"성공"}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

title

String

영화 제목

duration

Number

상영 시간 (분 단위)

description

String

영화 설명

posterUrl

String

영화 포스터 URL

types[]

Array

상영 타입 목록 (TWO_D, THREE_D)

genreIds[]

Array

영화 장르 ID 목록

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


영화 삭제 API (관리자 전용)

영화를 삭제합니다.

PATCH /api/admin/movies/8 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxNCIsInJvbGUiOiJBRE1JTiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiY0BkLmNvbSIsImV4cCI6MTc2NjQ2Nzk2MywiaWF0IjoxNzY2NDY2MTYzfQ.lZt_1eMkcqlNe8I7YGLcmJ2i4iuJ3-vqBz6pIe97J5Y
Host: api.megacgv.com
Content-Type: application/x-www-form-urlencoded
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 022b7871-c78f-4af2-a333-15a21bed987f
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 1. /api/admin/movies/{movieId}
Parameter Description

movieId

조회할 영화의 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


영화 목록 조회 API (관리자 전용)

키워드로 영화 목록을 조회합니다.

GET /api/admin/movies?keyword=%ED%98%B9%EC%84%B1&page=0&size=10 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI4Iiwicm9sZSI6IkFETUlOIiwibmFtZSI6ImFkbWluIiwiZW1haWwiOiJjQGQuY29tIiwiZXhwIjoxNzY2NDY3OTYxLCJpYXQiOjE3NjY0NjYxNjF9.2KEwFMcS4U9FYn5a7k0ryvvKQBEECrPU-QBhR94FB_E
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: ae7f6c8d-e969-4258-929f-5df4f482f878
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 244

{"status":200,"message":"성공","data":{"content":[{"id":2,"title":"혹성탈출","genres":["DRAMA","ACTION"],"types":["TWO_D","THREE_D"],"posterUrl":"poster.png"}],"pageInfo":{"page":0,"size":10,"totalElements":1,"totalPages":1,"last":true}}}
Parameter Description

keyword

조회할 영화 제목

page

페이지 번호(기본 0)

size

한 페이지 크기 (기본 10)

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지

data.content[].id

Number

영화 ID

data.content[].title

String

영화 제목

data.content[].genres[]

Array

장르 목록

data.content[].types[]

Array

상영 타입 목록

data.content[].posterUrl

String

포스터 이미지 경로

data.pageInfo.page

Number

현재 페이지 번호

data.pageInfo.size

Number

페이지 크기

data.pageInfo.totalElements

Number

총 검색 결과 수

data.pageInfo.totalPages

Number

총 페이지 수

data.pageInfo.last

Boolean

마지막 페이지 여부


영화 상세 정보 조회 API (관리자 전용)

영화의 상세 정보를 조회합니다.

GET /api/admin/movies/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2Iiwicm9sZSI6IkFETUlOIiwibmFtZSI6ImFkbWluIiwiZW1haWwiOiJjQGQuY29tIiwiZXhwIjoxNzY2NDY3OTYwLCJpYXQiOjE3NjY0NjYxNjB9.nq59hCzaQdIjxP_qgMUxgwl-qqJI98N8ASVWeNQvaQ8
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 99761e58-c0a2-4edc-9072-ce06cf4f13b2
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 186

{"status":200,"message":"성공","data":{"title":"혹성탈출","duration":150,"description":"test-description","posterUrl":"poster.png","genres":["DRAMA","ACTION"],"types":["3D","2D"]}}
Table 2. /api/admin/movies/{movieId}
Parameter Description

movieId

조회할 영화의 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.title

String

영화 제목

data.duration

Number

상영 시간 (분 단위)

data.description

String

영화 설명

data.posterUrl

String

영화 포스터 URL

data.genres[]

Array

영화 장르 목록(액션, 드라마 등)

data.types[]

Array

상영 타입 목록 (2D, 3D 등)


영화 상세 정보 조회 API

영화의 상세 정보를 조회합니다.

GET /api/movies/10 HTTP/1.1
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: b63a6307-4af1-46f1-9355-3f414626d9f8
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 186

{"status":200,"message":"성공","data":{"title":"혹성탈출","duration":150,"description":"test-description","posterUrl":"poster.png","genres":["DRAMA","ACTION"],"types":["3D","2D"]}}
Table 3. /api/movies/{movieId}
Parameter Description

movieId

조회할 영화의 ID

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.title

String

영화 제목

data.duration

Number

상영 시간 (분 단위)

data.description

String

영화 설명

data.posterUrl

String

영화 포스터 URL

data.genres[]

Array

영화 장르 목록(액션, 드라마 등)

data.types[]

Array

상영 타입 목록 (2D, 3D 등)


상영관 API

상영관 목록 조회 API

상영관 목록을 조회합니다.

GET /api/theaters HTTP/1.1
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: db4fca6f-ba0f-4716-833f-12f2e0f2b45c
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 571

{"status":200,"message":"성공","data":{"theaterInfoList":[{"theaterId":1,"theaterName":"1관","theaterType":"2D관","totalSeat":50,"seatCount":{"일반":40,"프리미엄":7,"방":3}},{"theaterId":2,"theaterName":"2관","theaterType":"4DX관","totalSeat":50,"seatCount":{"일반":40,"프리미엄":7,"방":3}},{"theaterId":3,"theaterName":"3관","theaterType":"IMAX관","totalSeat":30,"seatCount":{"일반":20,"프리미엄":5,"방":5}},{"theaterId":4,"theaterName":"4관","theaterType":"SCREEN X관","totalSeat":20,"seatCount":{"일반":10,"프리미엄":5,"방":5}}]}}
Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.theaterInfoList[].theaterId

Number

상영관 ID

data.theaterInfoList[].theaterName

String

상영관 이름

data.theaterInfoList[].theaterType

String

상영관 타입

data.theaterInfoList[].totalSeat

Number

전체 좌석 수

data.theaterInfoList[].seatCount

Object

좌석 타입별 좌석 수 (key: 좌석 타입, value: 좌석 개수)


상영 API

상영 회차 등록 가능 시간 조회 API (관리자 전용)

상영 회차 등록 시간을 조회합니다.

GET /api/admin/screenings?movieId=52&theaterId=1&date=2026-11-11 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzNiIsInJvbGUiOiJBRE1JTiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiY0BkLmNvbSIsImV4cCI6MTc2NjQ2Nzk5OSwiaWF0IjoxNzY2NDY2MTk5fQ.B7zlpV3AkKJ3sII_cwMVRwJlRbUE77K5XvnIswLHRKQ
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 6ccfec0d-b06c-49fc-859a-7455c39fb5e6
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 588

{"status":200,"message":"성공","data":{"availableTime":["2026-11-11T05:00:00","2026-11-11T05:10:00","2026-11-11T13:40:00","2026-11-11T13:50:00","2026-11-11T14:00:00","2026-11-11T14:10:00","2026-11-11T14:20:00","2026-11-11T14:30:00","2026-11-11T14:40:00","2026-11-11T14:50:00","2026-11-11T15:00:00","2026-11-11T15:10:00","2026-11-11T15:20:00","2026-11-11T15:30:00","2026-11-11T15:40:00","2026-11-11T15:50:00","2026-11-11T16:00:00","2026-11-11T16:10:00","2026-11-11T16:20:00","2026-11-11T16:30:00","2026-11-11T16:40:00","2026-11-11T16:50:00","2026-11-11T17:00:00","2026-11-11T17:10:00"]}}
Name Description

Authorization

JWT Access Token (Bearer)

Parameter Description

movieId

영화 식별자 ID

theaterId

상영관 식별자 ID

date

조회할 날짜

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.availableTime[]

Array

상영 등록 가능한 시간들


상영 회차 등록 API (관리자 전용)

상영 회차를 등록합니다.

POST /api/admin/screenings HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzMCIsInJvbGUiOiJBRE1JTiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiY0BkLmNvbSIsImV4cCI6MTc2NjQ2Nzk5NywiaWF0IjoxNzY2NDY2MTk3fQ.89NhiQm5eqZKTJuAQIZ2BTtzheMdS8OrXE3j65ygX4s
Content-Length: 82
Host: api.megacgv.com

{"movieId":44,"movieType":"TWO_D","theaterId":1,"startTime":"2026-11-11T14:20:00"}
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: df327d52-67a1-4cd5-a9a7-bd1d9286dcaa
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":201,"message":"성공"}
Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

movieId

Number

영화 식별자 ID

movieType

String

영화 타입(2D, 3D)

theaterId

Number

상영관 식별자 ID

startTime

String

상영 시작 시간

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


특정 영화 상영 회차 조회 API (관리자 전용)

특정 영화의 모든 상영 회차를 조회합니다.

GET /api/admin/screenings/31 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyMiIsInJvbGUiOiJBRE1JTiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiY0BkLmNvbSIsImV4cCI6MTc2NjQ2Nzk5NSwiaWF0IjoxNzY2NDY2MTk1fQ.SQNoRDBjSkerd1L-nWfiLPDk7DVhsb1TaCOi73n_vQQ
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: e1c17e49-3363-4459-bea1-45ac10557cb7
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 413

{"status":200,"message":"성공","data":{"movieScreeningInfos":[{"screeningId":41,"theaterId":1,"theaterName":"1관","remainSeat":50,"startTime":"2026-11-11T08:00:00","endTime":"2026-11-11T10:30:00","sequence":1,"status":"상영 예정"},{"screeningId":42,"theaterId":1,"theaterName":"1관","remainSeat":0,"startTime":"2026-11-11T11:00:00","endTime":"2026-11-11T13:30:00","sequence":2,"status":"상영 예정"}]}}
Table 4. /api/admin/screenings/{movieId}
Parameter Description

movieId

조회할 영화의 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지

data.movieScreeningInfos[].screeningId

Number

상영 식별자 ID

data.movieScreeningInfos[].theaterId

Number

상영관 식별자 ID

data.movieScreeningInfos[].theaterName

String

상영관 이름

data.movieScreeningInfos[].remainSeat

Number

남은 좌석 수

data.movieScreeningInfos[].startTime

String

영화 시작 시간

data.movieScreeningInfos[].endTime

String

영화 종료 시간

data.movieScreeningInfos[].sequence

Number

영화 상영 회차

data.movieScreeningInfos[].status

String

상영 상태


특정 상영회차 취소 API (관리자 전용)

특정 상영 회차를 취소합니다.

DELETE /api/admin/screenings/1 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyIiwicm9sZSI6IkFETUlOIiwibmFtZSI6ImFkbWluIiwiZW1haWwiOiJjQGQuY29tIiwiZXhwIjoxNzY2NDY3OTg5LCJpYXQiOjE3NjY0NjYxODl9.gLdwcBthArjlvOoomZXESVdBtC2gDr7GLn8jKlHDl0w
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 0820e4a7-b1f3-4969-8f48-e81b19a9a2ae
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 5. /api/admin/screenings/{screeningId}
Parameter Description

screeningId

상영회차 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지


상영 예정인 영화 목록 조회 API

해당 날짜에 상영 예정인 영화 목록을 조회합니다.

GET /api/screenings/movies?date=2026-11-11 HTTP/1.1
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 8d593a7f-a1bc-4fea-8ec4-d9a2c97dce99
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 237

{"status":200,"message":"성공","data":{"movieInfos":[{"movieId":70,"title":"괴물","posterUrl":"poster.png"},{"movieId":71,"title":"인터스텔라","posterUrl":"poster.png"},{"movieId":72,"title":"킹콩","posterUrl":"poster.png"}]}}
Parameter Description

date

조회할 날짜

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지

data.movieInfos[].movieId

Number

영화 ID

data.movieInfos[].title

String

영화 제목

data.movieInfos[].posterUrl

String

영화 포스터 URL


특정 영화 상영 회차 조회 API

해당 날짜에 상영 예정인 영화의 상영 회차를 조회합니다.

GET /api/screenings/64?date=2026-11-11 HTTP/1.1
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 25dfc0f7-b44f-400a-afb5-ca911c33d877
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 453

{"status":200,"message":"성공","data":{"movieInfoList":[{"screeningId":86,"theaterId":1,"theaterName":"1관","remainSeatCount":50,"startTime":"2026-11-11T08:00:00","endTime":"2026-11-11T10:30:00","sequence":1,"status":"상영 예정","reservable":true},{"screeningId":87,"theaterId":1,"theaterName":"1관","remainSeatCount":0,"startTime":"2026-11-11T11:00:00","endTime":"2026-11-11T13:30:00","sequence":2,"status":"상영 예정","reservable":true}]}}
Table 6. /api/screenings/{movieId}
Parameter Description

movieId

조회할 영화의 ID

Parameter Description

date

조회할 날짜

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지

data.movieInfoList[].screeningId

Number

상영 식별자 ID

data.movieInfoList[].theaterId

Number

상영관 식별자 ID

data.movieInfoList[].theaterName

String

상영관 이름

data.movieInfoList[].remainSeatCount

Number

남은 좌석 수

data.movieInfoList[].startTime

String

영화 시작 시간

data.movieInfoList[].endTime

String

영화 종료 시간

data.movieInfoList[].sequence

Number

영화 상영 회차

data.movieInfoList[].status

String

상영 상태

data.movieInfoList[].reservable

Boolean

예약 가능 여부


좌석 현황 조회 API

해당 상영회차의 좌석 현황을 조회합니다.

GET /api/screenings/78/seats HTTP/1.1
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 36e05364-165f-4adf-a87f-48f4bd3adf9b
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 5513

{"status":200,"message":"성공","data":{"screeningId":78,"screeningSeatInfos":[{"screeningSeatId":1030,"rowLabel":"A","colNumber":1,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1034,"rowLabel":"A","colNumber":2,"seatType":"일반","status":"HOLD","price":1000},{"screeningSeatId":1038,"rowLabel":"A","colNumber":3,"seatType":"일반","status":"RESERVED","price":1000},{"screeningSeatId":1042,"rowLabel":"A","colNumber":4,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1046,"rowLabel":"A","colNumber":5,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1050,"rowLabel":"A","colNumber":6,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1004,"rowLabel":"A","colNumber":7,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1008,"rowLabel":"A","colNumber":8,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1012,"rowLabel":"A","colNumber":9,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1016,"rowLabel":"A","colNumber":10,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1029,"rowLabel":"B","colNumber":1,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1033,"rowLabel":"B","colNumber":2,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1037,"rowLabel":"B","colNumber":3,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1041,"rowLabel":"B","colNumber":4,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1045,"rowLabel":"B","colNumber":5,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1049,"rowLabel":"B","colNumber":6,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1003,"rowLabel":"B","colNumber":7,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1007,"rowLabel":"B","colNumber":8,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1011,"rowLabel":"B","colNumber":9,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1015,"rowLabel":"B","colNumber":10,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1028,"rowLabel":"C","colNumber":1,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1032,"rowLabel":"C","colNumber":2,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1036,"rowLabel":"C","colNumber":3,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1040,"rowLabel":"C","colNumber":4,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1044,"rowLabel":"C","colNumber":5,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1048,"rowLabel":"C","colNumber":6,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1002,"rowLabel":"C","colNumber":7,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1006,"rowLabel":"C","colNumber":8,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1010,"rowLabel":"C","colNumber":9,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1014,"rowLabel":"C","colNumber":10,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1027,"rowLabel":"D","colNumber":1,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1031,"rowLabel":"D","colNumber":2,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1035,"rowLabel":"D","colNumber":3,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1039,"rowLabel":"D","colNumber":4,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1043,"rowLabel":"D","colNumber":5,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1047,"rowLabel":"D","colNumber":6,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1001,"rowLabel":"D","colNumber":7,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1005,"rowLabel":"D","colNumber":8,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1009,"rowLabel":"D","colNumber":9,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1013,"rowLabel":"D","colNumber":10,"seatType":"일반","status":"AVAILABLE","price":1000},{"screeningSeatId":1017,"rowLabel":"E","colNumber":1,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1018,"rowLabel":"E","colNumber":2,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1019,"rowLabel":"E","colNumber":3,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1020,"rowLabel":"E","colNumber":4,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1021,"rowLabel":"E","colNumber":5,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1022,"rowLabel":"E","colNumber":6,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1023,"rowLabel":"E","colNumber":7,"seatType":"프리미엄","status":"AVAILABLE","price":1300},{"screeningSeatId":1024,"rowLabel":"F","colNumber":1,"seatType":"방","status":"AVAILABLE","price":1500},{"screeningSeatId":1025,"rowLabel":"F","colNumber":2,"seatType":"방","status":"AVAILABLE","price":1500},{"screeningSeatId":1026,"rowLabel":"F","colNumber":3,"seatType":"방","status":"AVAILABLE","price":1500}]}}
Table 7. /api/screenings/{screeningId}/seats
Parameter Description

screeningId

조회할 상영회차의 식별자 ID

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지

data.screeningId

Number

상영회차 식별자 ID

data.screeningSeatInfos[].screeningSeatId

Number

상영회차별 좌석 식별자 ID

data.screeningSeatInfos[].rowLabel

String

data.screeningSeatInfos[].colNumber

Number

data.screeningSeatInfos[].seatType

String

좌석 종류

data.screeningSeatInfos[].status

String

좌석 상태

data.screeningSeatInfos[].price

Number

좌석의 가격


좌석 API

특정 좌석 수리 상태 변경 API (관리자 전용)

특정 좌석에 대해서 수리 상태로 변경합니다.

PATCH /api/admin/screenings/seats/312/fix HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxNCIsInJvbGUiOiJBRE1JTiIsIm5hbWUiOiJhZG1pbiIsImVtYWlsIjoiY0BkLmNvbSIsImV4cCI6MTc2NjQ2Nzk5MywiaWF0IjoxNzY2NDY2MTkzfQ.xtCXYPfgCZm3WLKnXoeJ8LmhImroV-a4pQOJDKMrvgc
Host: api.megacgv.com
Content-Type: application/x-www-form-urlencoded
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: fb4197f6-6700-4175-ab4b-af593d9831eb
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 8. /api/admin/screenings/seats/{screeningSeatId}/fix
Parameter Description

screeningSeatId

상영회차별 좌석 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지


특정 좌석 정상 상태 변경 API (관리자 전용)

특정 좌석에 대해서 예약 가능 상태로 변경합니다.

PATCH /api/admin/screenings/seats/193/restore HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI4Iiwicm9sZSI6IkFETUlOIiwibmFtZSI6ImFkbWluIiwiZW1haWwiOiJjQGQuY29tIiwiZXhwIjoxNzY2NDY3OTkxLCJpYXQiOjE3NjY0NjYxOTF9.3XsV8FIo3ApSGVGhomaPzIDgeOR5yWoCxJA8fJN2uuw
Host: api.megacgv.com
Content-Type: application/x-www-form-urlencoded
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: cc50c90d-e21f-499e-b744-8cc5d890f1ed
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 9. /api/admin/screenings/seats/{screeningSeatId}/restore
Parameter Description

screeningSeatId

상영회차별 좌석 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

HTTP 응답 코드

message

String

응답 메시지


특정 좌석 홀드

특정 좌석을 설정한 시간만큼 점유합니다.

POST /api/screenings/104/seats/hold HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzOSIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0NjgwMTAsImlhdCI6MTc2NjQ2NjIxMH0.-8_wWOa5RB9B-xvE5OxjkUJl0gCGG01iCCdZMk6DrZM
Content-Length: 37
Host: api.megacgv.com

{"screeningSeatIds":[1436,1432,1428]}
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 564a2e69-5a2c-434f-9076-1c5f11d9175d
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 10. /api/screenings/{screeningId}/seats/hold
Parameter Description

screeningId

상영 회차 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

screeningSeatIds

Array

상영회차별 좌석 식별자 IDs

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


특정 좌석 홀드 취소

점유된 특정 좌석을 홀드 취소합니다.

DELETE /api/screenings/102/seats/hold HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIzNyIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0NjgwMDksImlhdCI6MTc2NjQ2NjIwOX0.yFQ1RA9FNBcIZuH2Rdjl14wuxUbleL9MHL-YTYLe9V8
Content-Length: 37
Host: api.megacgv.com

{"screeningSeatIds":[1346,1342,1338]}
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 01004cb3-ef89-4049-a2f8-70e0423627e7
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 11. /api/screenings/{screeningId}/seats/hold
Parameter Description

screeningId

상영 회차 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

screeningSeatIds

Array

상영회차별 좌석 식별자 IDs

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


예약 API

영화 예약

영화 예약을 진행합니다.

POST /api/reservations/1 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwicm9sZSI6IlVTRVIiLCJuYW1lIjoidXNlciIsImVtYWlsIjoiYUBiLmNvbSIsImV4cCI6MTc2NjQ2Nzk4MSwiaWF0IjoxNzY2NDY2MTgxfQ.O6e714DIxza_zRE7vceluDvAqbEuoz5UMPLaSIVAx9w
Content-Length: 26
Host: api.megacgv.com

{"screeningSeatIds":[8,4]}
HTTP/1.1 201 Created
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: a7bc6639-87d8-4ba9-a9a8-da9acf50cd34
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 140

{"status":201,"message":"성공","data":{"reservationGroupId":1,"paymentId":"megacgv-20251223140302249-1-MQ3I6SX94Z","expectedAmount":2000}}
Table 12. /api/reservations/{screeningId}
Parameter Description

screeningId

상영 회차 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

screeningSeatIds

Array

상영회차별 좌석 식별자 IDs

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.reservationGroupId

Number

예약 식별자 ID

data.paymentId

String

서비스 내 거래 고유번호

data.expectedAmount

Number

결제 예상 금액


영화 예약 목록 조회

영화 예약 목록을 조회합니다.

GET /api/reservations HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyNiIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0Njc5NzksImlhdCI6MTc2NjQ2NjE3OX0.qbKxxHovOk_LivRSlJLLBW2hx19hlT5AqQ3NEjNM3Sk
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 70a7fd03-13f8-4069-bdc8-eaad811b4f03
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 769

{"status":200,"message":"성공","data":{"content":[{"reservationGroupId":5,"title":"괴물","movieType":"2D","startTime":"2026-11-11T08:00:00","theaterName":"1관","theaterType":"2D관","seats":[{"seatNumber":"A1","seatType":"일반"},{"seatNumber":"A2","seatType":"일반"}],"reservationStatus":"결제 대기","totalPrice":2000,"posterUrl":"poster.png","updatedAt":"2025-12-23T14:03:00"},{"reservationGroupId":6,"title":"괴물","movieType":"2D","startTime":"2026-11-11T08:00:00","theaterName":"1관","theaterType":"2D관","seats":[{"seatNumber":"A3","seatType":"일반"}],"reservationStatus":"결제 완료","totalPrice":1000,"posterUrl":"poster.png","updatedAt":"2025-12-23T14:03:00"}],"pageInfo":{"page":0,"size":10,"totalElements":2,"totalPages":1,"last":true}}}
Name Description

Authorization

JWT Access Token (Bearer)

Parameter Description

page

페이지 번호(기본 0)

size

한 페이지 크기(기본 10)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.content[].reservationGroupId

Number

예약-그룹 식별자 ID

data.content[].title

String

영화 제목

data.content[].movieType

String

영화 타입(2D, 3D)

data.content[].startTime

String

시작 시간

data.content[].theaterName

String

상영관 이름

data.content[].theaterType

String

상영관 타입(4DX, IMAX 등)

data.content[].seats[].seatNumber

String

좌석 번호

data.content[].seats[].seatType

String

좌석 타입(NORMAL, PREMIUM, ROOM)

data.content[].reservationStatus

String

예약 상태

data.content[].totalPrice

Number

총 가격

data.content[].posterUrl

String

포스터 이미지 URL

data.content[].updatedAt

String

예약 상태 변경 시간

data.pageInfo.page

Number

현재 페이지 번호

data.pageInfo.size

Number

페이지 크기

data.pageInfo.totalElements

Number

총 검색 결과 수

data.pageInfo.totalPages

Number

총 페이지 수

data.pageInfo.last

Boolean

마지막 페이지 여부


영화 예약 취소

영화 예약을 취소합니다.

DELETE /api/reservations/3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyMyIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0Njc5NzgsImlhdCI6MTc2NjQ2NjE3OH0.XmZCj4UwSuzDjNzwi2y3Dhh6_RWFMz45wnAASlI55Ls
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: f88dca1a-7f66-472c-9487-efbaf56a63f7
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 33

{"status":200,"message":"성공"}
Table 13. /api/reservations/{reservationGroupId}
Parameter Description

reservationGroupId

예약-그룹 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지


영화 예약 상세 조회

영화 예약 내역을 상세 조회합니다.

GET /api/reservations/2 HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIyMiIsInJvbGUiOiJVU0VSIiwibmFtZSI6InVzZXIiLCJlbWFpbCI6ImFAYi5jb20iLCJleHAiOjE3NjY0Njc5NzYsImlhdCI6MTc2NjQ2NjE3Nn0.M6sjYFEbE2KIAHIOaZH_YsSoKmy9uOTAP5q30UULinA
Host: api.megacgv.com
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
X-Request-ID: 8616bde7-d598-4c2d-9c6a-b48e1f6be26b
Content-Type: application/json
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Content-Length: 701

{"status":200,"message":"성공","data":{"movieId":12,"title":"괴물","movieType":"2D","posterUrl":"poster.png","duration":150,"screeningId":2,"startTime":"2026-11-11T08:00:00","endTime":"2026-11-11T10:30:00","theaterId":1,"theaterName":"1관","theaterType":"2D관","seatInfos":[{"seatNumber":"A1","seatType":"일반"},{"seatNumber":"A2","seatType":"일반"}],"reservationGroupId":2,"reservationStatus":"결제 완료","reservationCreatedAt":"2025-12-23T14:02:57","reservationCancelledAt":null,"paymentStatus":"결제 완료","paymentMethod":"pay-method","paymentAmount":2000.00,"refundAmount":null,"paymentId":"payment-id","buyerName":"user","buyerPhoneNumber":"01012345678","buyerEmail":"a@b.com"}}
Table 14. /api/reservations/{reservationGroupId}
Parameter Description

reservationGroupId

예약-그룹 식별자 ID

Name Description

Authorization

JWT Access Token (Bearer)

Path Type Description

status

Number

응답 코드

message

String

응답 메시지

data.movieId

Number

영화 식별자 ID

data.title

String

영화 제목

data.movieType

String

영화 타입(2D, 3D)

data.posterUrl

String

영화 이미지 URL

data.duration

Number

러닝타임

data.screeningId

Number

상영 회차 식별자 ID

data.startTime

String

상영 시작 시간

data.endTime

String

상영 종료 시간

data.theaterId

Number

상영관 식별자 ID

data.theaterName

String

상영관 이름

data.theaterType

String

상영관 타입(4DX, IMAX 등)

data.seatInfos[].seatNumber

String

좌석 번호

data.seatInfos[].seatType

String

좌석 타입(NORMAL, PREMIUM, ROOM)

data.reservationGroupId

Number

예약-그룹 식별자 ID

data.reservationStatus

String

예약 상태

data.reservationCreatedAt

String

예약 생성 시각

data.reservationCancelledAt

Null

예약 취소 시각

data.paymentStatus

String

결제 상태

data.paymentMethod

String

결제 방법

data.paymentAmount

Number

결제 금액

data.refundAmount

Null

환불 금액

data.paymentId

String

거래 고유번호

data.buyerName

String

결제자 이름

data.buyerPhoneNumber

String

결제자 휴대폰 번호

data.buyerEmail

String

결제자 이메일