{ "openapi": "3.0.0", "info": { "title": "SAM API Documentation", "description": "===============================
[공통 에러 응답 포맷]
400: 필수 파라미터 누락
401: 인증 실패
403: 권한 없음
404: 존재하지 않는 URI 또는 데이터
405: 허용되지 않는 메서드
500: 서버 에러

모든 에러 응답 예시:
{
  "success": false,
  "message": "에러 메시지",
  "data": null
}
===============================", "contact": { "email": "shine1324@gmail.com" }, "version": "1.0.0" }, "servers": [ { "url": "https://api.5130.co.kr", "description": "SAM관리시스템 API 서버" } ], "paths": { "/api/v1/debug-apikey": { "get": { "tags": [ "API Key 인증" ], "summary": "API Key 인증 확인", "operationId": "8d05f26a859e82207ba533ab88682ddf", "responses": { "200": { "description": "API Key 인증 성공" }, "401": { "description": "인증 실패" } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/api/v1/login": { "post": { "tags": [ "Auth" ], "summary": "회원 토큰 정보확인", "operationId": "3878a009ac5aef1ebe0e72b7716e24ac", "requestBody": { "required": true, "content": { "application/json": { "schema": { "required": [ "user_id", "user_pwd" ], "properties": { "user_id": { "type": "string", "example": "test" }, "user_pwd": { "type": "string", "example": "testpass" } }, "type": "object" } } } }, "responses": { "200": { "description": "로그인 성공", "content": { "application/json": { "schema": { "properties": { "message": { "type": "string" }, "user_token": { "type": "string" } }, "type": "object" } } } }, "401": { "description": "로그인 실패" } }, "security": [ { "ApiKeyAuth": [] } ] } }, "/api/v1/logout": { "post": { "tags": [ "Auth" ], "summary": "로그아웃 (Access 및 Token 무효화)", "operationId": "39200ed8c17c34aa7af9a24f064e13a4", "responses": { "200": { "description": "로그아웃 성공" }, "401": { "description": "인증 실패" } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/api/v1/member/index": { "get": { "tags": [ "Member" ], "summary": "회원 목록 조회", "description": "회원 목록을 페이징 형태로 반환합니다.", "operationId": "9243d8df1b20c9552b21389ce84415ea", "parameters": [ { "name": "page", "in": "query", "description": "페이지 번호 (기본값: 1)", "required": false, "schema": { "type": "integer", "example": 1 } }, { "name": "size", "in": "query", "description": "페이지당 항목 수 (기본값: 20)", "required": false, "schema": { "type": "integer", "example": 20 } } ], "responses": { "200": { "description": "회원 목록 조회 성공", "content": { "application/json": { "schema": { "properties": { "success": { "type": "boolean", "example": true }, "message": { "type": "string", "example": "회원목록 조회 성공" }, "data": { "properties": { "current_page": { "type": "integer", "example": 1 }, "data": { "type": "array", "items": { "properties": { "id": { "type": "integer", "example": 1 }, "user_id": { "type": "string", "example": "hamss" }, "phone": { "type": "string", "example": "010-4820-9104" }, "options": { "type": "string", "example": null, "nullable": true }, "name": { "type": "string", "example": "권혁성" }, "email": { "type": "string", "example": "shine1324@gmail.com" }, "email_verified_at": { "type": "string", "format": "date-time", "example": null, "nullable": true }, "last_login_at": { "type": "string", "format": "date-time", "example": null, "nullable": true }, "current_team_id": { "type": "integer", "example": null, "nullable": true }, "profile_photo_path": { "type": "string", "example": null, "nullable": true }, "created_at": { "type": "string", "format": "date-time", "example": "2025-07-16 18:28:41" }, "updated_at": { "type": "string", "format": "date-time", "example": "2025-07-25 23:13:06" }, "deleted_at": { "type": "string", "format": "date-time", "example": null, "nullable": true } }, "type": "object" } }, "first_page_url": { "type": "string", "example": "http://api.sam.kr/api/v1/member/index?page=1" }, "from": { "type": "integer", "example": 1 }, "last_page": { "type": "integer", "example": 1 }, "last_page_url": { "type": "string", "example": "http://api.sam.kr/api/v1/member/index?page=1" }, "links": { "type": "array", "items": { "properties": { "url": { "type": "string", "example": null, "nullable": true }, "label": { "type": "string", "example": "« Previous" }, "active": { "type": "boolean", "example": false } }, "type": "object" } }, "next_page_url": { "type": "string", "example": null, "nullable": true }, "path": { "type": "string", "example": "http://api.sam.kr/api/v1/member/index" }, "per_page": { "type": "integer", "example": 20 }, "prev_page_url": { "type": "string", "example": null, "nullable": true }, "to": { "type": "integer", "example": 3 }, "total": { "type": "integer", "example": 3 } }, "type": "object" } }, "type": "object" } } } } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/api/v1/member/show/{user_no}": { "get": { "tags": [ "Member" ], "summary": "회원 상세조회", "description": "user_no 기준으로 회원 상세 정보를 조회합니다.", "operationId": "b4c822915531828ea5f3a50d5112ef26", "parameters": [ { "name": "user_no", "in": "path", "description": "회원 번호 (USER_NO)", "required": true, "schema": { "type": "integer", "example": 1 } } ], "responses": { "200": { "description": "회원 상세조회 성공", "content": { "application/json": { "schema": { "properties": { "success": { "type": "boolean", "example": true }, "message": { "type": "string", "example": "회원 상세조회 성공" }, "data": { "properties": { "id": { "type": "integer", "example": 1 }, "user_id": { "type": "string", "example": "hamss" }, "phone": { "type": "string", "example": "010-4820-9104" }, "options": { "type": "string", "example": null, "nullable": true }, "name": { "type": "string", "example": "권혁성" }, "email": { "type": "string", "example": "shine1324@gmail.com" }, "email_verified_at": { "type": "string", "format": "date-time", "example": null, "nullable": true }, "last_login_at": { "type": "string", "format": "date-time", "example": null, "nullable": true }, "current_team_id": { "type": "integer", "example": null, "nullable": true }, "profile_photo_path": { "type": "string", "example": null, "nullable": true }, "created_at": { "type": "string", "format": "date-time", "example": "2025-07-16 18:28:41" }, "updated_at": { "type": "string", "format": "date-time", "example": "2025-07-25 23:13:06" }, "deleted_at": { "type": "string", "format": "date-time", "example": null, "nullable": true } }, "type": "object" } }, "type": "object" } } } }, "401": { "description": "인증 실패" }, "404": { "description": "회원 정보 없음" } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/api/v1/member/me": { "get": { "tags": [ "Member" ], "summary": "내 정보 조회", "description": "내정보와 테넌트 정보를 전달 합니다.", "operationId": "0c641be8a4e4ab5e1c2db29989b219ce", "responses": { "200": { "description": "나의 정보 조회 성공", "content": { "application/json": { "schema": { "properties": { "success": { "type": "boolean", "example": true }, "message": { "type": "string", "example": "나의 정보 조회 성공" }, "data": { "properties": { "user": { "properties": { "id": { "type": "integer", "example": 3 }, "user_id": { "type": "string", "example": "test" }, "phone": { "type": "string", "example": "010-1234-5678" }, "options": { "type": "string", "example": null, "nullable": true }, "name": { "type": "string", "example": "테스트" }, "email": { "type": "string", "example": "test@5130.co.kr" }, "email_verified_at": { "type": "string", "format": "date-time", "example": null, "nullable": true }, "last_login_at": { "type": "string", "format": "date-time", "example": null, "nullable": true }, "current_team_id": { "type": "integer", "example": null, "nullable": true }, "profile_photo_path": { "type": "string", "example": null, "nullable": true }, "created_at": { "type": "string", "format": "date-time", "example": "2025-07-17 13:19:37" }, "updated_at": { "type": "string", "format": "date-time", "example": "2025-07-26 15:51:14" }, "deleted_at": { "type": "string", "format": "date-time", "example": null, "nullable": true } }, "type": "object" }, "tenant": { "properties": { "id": { "type": "integer", "example": 1 }, "company_name": { "type": "string", "example": "(주)경동기업" }, "code": { "type": "string", "example": "KDCOM" }, "email": { "type": "string", "example": "kd5130@naver.com" }, "phone": { "type": "string", "example": "01083935130" }, "address": { "type": "string", "example": "경기도 김포시 통진읍 옹정로 45-22" }, "business_num": { "type": "string", "example": "1398700333" }, "corp_reg_no": { "type": "string", "example": null, "nullable": true }, "ceo_name": { "type": "string", "example": "이경호" }, "homepage": { "type": "string", "example": null, "nullable": true }, "fax": { "type": "string", "example": null, "nullable": true }, "logo": { "type": "string", "example": null, "nullable": true }, "admin_memo": { "type": "string", "example": null, "nullable": true }, "options": { "type": "string", "example": null, "nullable": true } }, "type": "object" } }, "type": "object" } }, "type": "object" } } } }, "401": { "description": "인증 실패 (헤더 누락, 유효하지 않은 토큰/키 등)" } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } }, "/api/v1/product/category": { "get": { "tags": [ "Product" ], "summary": "제품 카테고리 목록 조회", "description": "제품 카테고리(최상위, parent_id=null) 리스트를 반환합니다.", "operationId": "ae018aa8eec41762f28513ae1aecebfc", "responses": { "200": { "description": "카테고리 목록 조회 성공", "content": { "application/json": { "schema": { "properties": { "status": { "type": "string", "example": "success" }, "message": { "type": "string", "example": "get 성공" }, "data": { "type": "array", "items": { "properties": { "id": { "type": "integer", "example": 4 }, "code_group": { "type": "string", "example": "category" }, "code": { "type": "string", "example": "BP" }, "name": { "type": "string", "example": "절곡판" }, "parent_id": { "type": "integer", "example": null }, "attributes": { "type": "string", "example": "[{...}]" }, "description": { "type": "string", "example": "절곡판" }, "is_active": { "type": "integer", "example": 1 }, "sort_order": { "type": "integer", "example": 10 }, "created_at": { "type": "string", "format": "date-time", "example": "2025-07-23T09:00:00Z" }, "updated_at": { "type": "string", "format": "date-time", "example": "2025-07-23T09:00:00Z" } }, "type": "object" } } }, "type": "object" } } } }, "401": { "description": "인증 실패" }, "500": { "description": "서버 에러" } }, "security": [ { "ApiKeyAuth": [] }, { "BearerAuth": [] } ] } } }, "components": { "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "X-API-KEY", "description": "API Key 인증: X-API-KEY: {API_KEY}" }, "BearerAuth": { "type": "http", "bearerFormat": "JWT", "scheme": "bearer" } } }, "tags": [ { "name": "API Key 인증", "description": "API Key 인증" }, { "name": "Auth", "description": "Auth" }, { "name": "Member", "description": "Member" }, { "name": "Product", "description": "Product" } ] }