Guide
유지보수 가이드 + API 문서
리셀솔루션은 주문관리, 주문수집, 송장수집, 상품소싱, 가격/핫딜 추적을 한 화면과 한 API 계약 안에서 운영할 수 있게 만든 운영 도구입니다. 유지보수의 핵심은 화면, 확장프로그램, API, 도메인 로직, 저장소가 어떤 순서로 연결되는지 빠르게 파악하고, 응답 본문만 보고도 정상/오류 여부를 분리하는 것입니다.
프로그램 목적
리셀솔루션은 주문관리, 주문수집, 송장수집, 상품소싱, 가격/핫딜 추적을 한 화면과 한 API 계약 안에서 운영할 수 있게 만든 운영 도구입니다. 유지보수의 핵심은 화면, 확장프로그램, API, 도메인 로직, 저장소가 어떤 순서로 연결되는지 빠르게 파악하고, 응답 본문만 보고도 정상/오류 여부를 분리하는 것입니다.
기능별 목적
Commercial Maintenance Checklist
Every solution and every feature change must satisfy these guide/API documentation requirements before code changes are treated as complete.
- program purpose
- maintenance/code modification rules
- workflow tree
- folder/file tree
- feature tree
- 4-layer architecture
- change history
- feature purpose
- user-facing surface
- frontend/backend/service/DB/extension layers
- CSS/layout/buttons/modals involved
- API endpoints used
- normal 200 business body
- 200 but abnormal examples
- stable error codes
- tests and verification command
- method and path
- auth requirement
- request fields if applicable
- normal root type
- required business fields
- semantic success rule
- abnormal 200 rule
- error.code list
- whether response alone can identify the cause
- HTTP 200 is only transport success. The body must contain the documented business fields to be normal.
- A 200 response containing only detail/message/error without business fields is abnormal unless that exact shape is documented.
- Every app error must include error.code, error.status, and error.type so the operator can classify the cause from the response.
- HTML/Cloudflare/Nginx response is infra/proxy failure, not an application API response.
- Guide API test buttons must validate required fields, not just HTTP status.
Feature Contract Matrix
Use this table before editing a feature. It links purpose, layers, buttons/layout, normal 200 bodies, abnormal 200 cases, and verification.
| Feature | Purpose | Layers | Buttons / layout | Normal 200 | Abnormal 200 | Tests |
|---|---|---|---|---|---|---|
| Auth / Security Baseline | Keep login, token validation, CORS, rate-limit, and invoice validation secure without breaking existing users or extension workflows. | base.html/login.html/localStorage token -> auth.py/dependencies.auth -> users table; utils.py -> invoice_validator.py -> order_rows JSONB | login form, Google login redirect, authenticated API calls, guide API test buttons | /api/auth/login returns token and user; /api/auth/me returns identity/workspace fields; /api/invoice/validate returns valid/errors scoped to current user. | login 200 without token/user, invoice validation checking another user's tracking number, or CORS allowing arbitrary credentialed origins. | test_security_remediation_guardrails.py, test_error_handlers.py, test_guide_page_guardrails.py |
| Order Management | Review/import/edit order rows, match registered products, calculate margin, show blacklist signals, export invoices, and feed extension order input. | orders.html -> order_rows.py/orders.py -> order row services -> order_rows JSONB + extension/order-injector.js | row add/delete, file import, export, release-stop lookup, column settings, spreadsheet table | /api/orders/rows returns total, total_unregistered, rows[].id, rows[].row_index, rows[].data. | rows missing, data not object, total_unregistered scoped incorrectly, patch says success but reload loses value. | test_order_sheet_guardrails.py, test_orders_page_patch_guardrails.py, test_order_queue_guardrails.py |
| Extension Order Input | Show available order-input data on every page when order data exists and run selector workflows without relying on market page recognition for visibility. | orders.html queue bridge -> /api/orders/unordered -> order_rows data -> extension/content/order-injector.js | RS floating button, order count button, order list panel, selector workflow actions | /api/orders/unordered returns an array; non-empty items are sanitized to the order-input contract only: market/id/row_index/ordered_at/recipient_name/recipient_phone/recipient_address_full/delivery_memo/product_name. | newly added rows missing, item lacks recipient data, empty array while valid pending rows exist, or invoice/settlement/tracking columns appear in the extension auto-input payload. | test_order_queue_guardrails.py and manual extension queue check after adding a row. |
| Invoice Collection And Entry | Collect tracking numbers from buy markets, persist carrier/tracking values, and feed seller-site invoice entry. | orders.html -> invoices.py/orders.py -> order_sheet_columns/order_row_records -> extension rs-relay/order-injector | invoice collect button, PlayAuto invoice export, extension invoice entry flow | /api/invoices/uncollected includes buy_market_code/buy_order_number; /api/invoices/unentered includes sell_order_number/sell_market/tracking_number mapped from 주문송장번호. | carrier contains order number, tracking_number contains carrier or the PlayAuto 송장번호 column, saved count reports found count instead of DB saved count. | test_order_sheet_guardrails.py, invoice collector guardrails. |
| Product Sourcing | Store per-user research rows, price history, platform prices, and margin calculator rows with automatic research-to-margin synchronization. | margin_calculator.html -> sourcing.py -> sourcing_workspaces JSONB | research/margin tabs, column settings, add row, clear row, price history modal, graph modal, Excel export | /api/sourcing/workspace returns research_rows, research_column_settings, margin_rows, updated_at. | updated_at missing, arrays missing, save 200 but price history lost, stale tab overwrites newer data. | test_sourcing_page_guardrails.py, test_guide_page_guardrails.py. |
| Blacklist Reports | Let users or the extension submit suspicious buyer/order information and let admins approve or delete pending reports. | orders/extension report UI -> blacklist.py/notifications.py -> blacklist/report records | report, approve, delete, admin notification bell/list | /api/blacklist/report returns ok/id/status=pending; pending list returns only pending reports for admins. | report saved but no admin notification/list entry, approved/deleted reports remain pending, non-admin can review. | blacklist approval/list tests before commercialization freeze. |
| Best Products | Collect ranking products by market and display usable product cards for sourcing/tracking. | best_products.html -> best_products.py -> collectors/image extraction -> best product records | market tabs, filters, add tracking | /api/best-products returns market/rank/title/price/product_url/thumbnail_url; collect returns saved_count by market. | event banner/rocket delivery image stored as product thumbnail, saved_count missing, title/price/url missing. | collector fixture tests for Auction and Coupang thumbnails. |
Feature Change History
Any change that modifies behavior, API body, storage keys, buttons, layout, or extension event handling must be recorded here or in the matching feature document.
기본 유지보수 룰
모든 수정/기능추가는 이 기준을 기본값으로 적용합니다.
전체 워크플로우
폴더 / 파일 트리
기능 트리
주문관리
송장수집/송장입력
상품소싱
구독/마켓 슬롯
블랙리스트 제보
기능별 4레이어 연동 구성
문서/오류코드 보정 계획
현재 코드에서 목적, 요구사항, 응답결과, 오류코드가 부족한 항목은 이 순서로 보정합니다.
베타 테스트용 기능 단위 E2E 체크리스트
상용화 전 실제 운영자가 따라야 하는 API/화면 점검 순서입니다. 각 단계는 200 응답만 보는 것이 아니라 200 안의 필드까지 확인해야 합니다.
인증 / 기본 접속
/login, /guide, /api/auth/me, /api/health
2 steps
주문관리 로드 / 저장
/orders, /api/orders/rows
2 steps
주문자 자동입력 / 송장 자동입력
확장 + /api/orders/unordered + /api/invoices/unentered
2 steps
상품소싱 저장 / 충돌
/sourcing, /api/sourcing/workspace
2 steps
구독 / 사용마켓 / 확장 버전
/subscribe, 확장 팝업, /api/subscribe/status, /api/extension/version
2 steps
API 응답 계약 규칙
응답 본문만 보고도 앱 오류인지, 인프라 오류인지, 정상 200 계약 불일치인지 구분하는 기준입니다.
- 200이어도 최상위 타입(object/array/file)과 문서가 다르면 계약 위반 가능성이 큽니다.
- 200인데 detail/error만 있고 도메인 필드가 없으면 정상 응답이 아니라 잘못된 계약입니다.
- 파일 API는 JSON이 아니라 다운로드 스트림이어야 정상입니다.
{
"detail": "human readable message",
"error": {
"code": "STABLE_ERROR_CODE",
"message": "human readable message",
"status": 400,
"type": "app_error"
},
"errors": [
{
"loc": [
"body",
"field"
],
"msg": "...",
"type": "..."
}
],
"message": "same as detail",
"ok": false
}
- status가 200이 아니고 Content-Type이 application/json이면 앱이 직접 반환한 API 오류입니다.
- error.code, error.status, error.type만으로 1차 분류가 가능해야 합니다.
- detail/message는 화면에 바로 보여줄 운영자 문구입니다.
- errors 배열이 있으면 validation/field 오류입니다.
- 응답이 HTML이고 <!DOCTYPE html>, cloudflare, bad gateway 문구가 있으면 인프라/프록시 오류입니다.
- 이 경우 FastAPI 라우터까지 도달하지 못한 것이므로 app-level error.code를 기대하면 안 됩니다.
읽기 전용 API 테스트
상태코드가 아니라 응답 본문의 필수값까지 검사합니다. 저장/삭제 API는 여기서 실행하지 않습니다.
API 전수 인벤토리
현재 서버에 등록된 모든 /api/* 라우트를 실시간 기준으로 정리한 목록입니다.
CS
2 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/cs/chat | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/cs/feedback | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
가격
5 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/prices/collect | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/prices/{product_id}/compare | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/prices/{product_id}/history | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/prices/{product_id}/lowest | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/prices/{product_id}/stats | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
가격 알림
4 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/alerts | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/alerts | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/alerts/{alert_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/alerts/{alert_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
가이드
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/guide/inventory | Bearer 필요 |
200 / object
application/json
|
{"contract_version":"...","endpoint_count":N,"groups":[...]}
현재 서버에 등록된 API 계약 인벤토리 원본입니다.
|
contract_version, endpoint_count, groups가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
groups 배열 누락, endpoint_count가 수치가 아님 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
관리자
3 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/admin/users | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
DELETE
|
/api/admin/users/{user_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PATCH
|
/api/admin/users/{user_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
구독 / 결제
8 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/subscribe/admin/market-slot-settings | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/subscribe/admin/market-slot-settings | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/subscribe/admin/payments/pending | Bearer 필요 |
200 / array
application/json
|
[{"id":1,"user_id":1,"email":"...","plan_name":"STANDARD 1개월 - 수강생할인","amount":98000,"period_months":1,"discount_type":"student","student_info":"1기_홍길동","referral_code":null,"paid_at":"..."}]
관리자 전용 결제 승인 대기열입니다. 항목이 있으면 결제는 완료됐지만 권한은 아직 적용되지 않은 상태입니다. 빈 배열은 승인 대기 없음입니다.
|
배열 응답이면 정상입니다. 각 항목은 paid_pending_approval 상태의 결제이며 amount, plan_name, paid_at, discount_type을 포함해야 합니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
배열이 아니거나 승인 대기 항목에 id/plan_name/amount/paid_at이 없음 |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/subscribe/admin/payments/{payment_id}/approve | Bearer 필요 |
200 / object
application/json
|
{"ok":true,"id":1,"status":"paid","approved_at":"..."}
관리자 전용 결제 승인 실행 결과입니다. status가 paid가 되는 순간 구독, 팀원 추가, 마켓 추가 권한이 적용됩니다.
|
ok=true이고 status=paid이며 approved_at이 있으면 정상입니다. 이 응답 이후에만 실제 구독/추가옵션 권한이 적용됩니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INVALID_INPUT
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이지만 ok가 true가 아니거나 status가 paid가 아니거나 approved_at이 없음 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/subscribe/create-order | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/subscribe/status | Bearer 필요 |
200 / object
application/json
|
{"active":true,"plan":"PRO","expires_at":"...","paid_expires_at":"...","admin_grant_expires_at":"...","market_slots":{"base_limit":6,"purchased_slots":0,"total_limit":6,"admin_bypass":false},...}
사용마켓 한도, 팀 공유 상태, 추가 슬롯 상태, 최종 구독 만료일, 결제분 만료일, 관리자 무료 제공 만료일을 확인하는 기준 응답입니다.
|
market_slots.base_limit/purchased_slots/total_limit/admin_bypass와 expires_at/paid_expires_at/admin_grant_expires_at 키가 모두 있으면 정상입니다. |
AUTH_REQUIRED
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
market_slots 하위 필드 누락, paid_expires_at/admin_grant_expires_at 키 누락, 무료 제공 기간과 결제분 기간이 같은 값으로만 뭉쳐 반환됨 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/subscribe/toss/fail | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/subscribe/toss/success | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
등록상품
7 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/registered-products | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/registered-products | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/registered-products/bulk | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/registered-products/categories | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/registered-products/suggest | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
DELETE
|
/api/registered-products/{product_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/registered-products/{product_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
디버그
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/debug/parsing-fail | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
리포트
2 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/reports/monthly | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/reports/weekly | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
마켓 계정
4 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/market-accounts | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/market-accounts | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/market-accounts/{account_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/market-accounts/{account_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
마켓 목록
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/markets | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
모니터링
7 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/monitoring/collection-log | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/monitoring/collection-logs | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/monitoring/errors | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/monitoring/heartbeat | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/monitoring/heartbeat | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/monitoring/market-status | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/monitoring/success-rate | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
베스트상품
3 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/best-products | 공개 |
200 / array
application/json
|
[{"market":"auction","rank":1,"title":"...","price":12345,"product_url":"...","thumbnail_url":"..."}]
베스트상품 화면 카드의 원본입니다. 제목, 가격, 마켓, 링크, 가능하면 실제 상품 썸네일이 있어야 합니다.
|
각 상품에 market/rank/title/price/product_url이 있고 썸네일이 placeholder로 오염되지 않으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
이벤트/배송 배너 이미지가 상품 썸네일로 저장되거나 title/price/market 누락 |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/best-products/collect | 공개 |
200 / object
application/json
|
{"ok":true,"saved_count":N,"markets":[...]}
수집 시도 수가 아니라 DB에 실제 저장된 상품 수를 보고해야 합니다.
|
실제 DB 저장 건수인 saved_count가 명확하면 정상입니다. |
INVALID_INPUT
UPSTREAM_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
crawler found count만 있고 실제 saved_count가 없거나 0인데 성공처럼 표시 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/best-products/trends | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
블랙리스트
7 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/blacklist | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/blacklist | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/blacklist/pending | Bearer 필요 |
200 / array
application/json
|
[{"id":...,"status":"pending","reporter":...,"source":...}]
관리자가 승인/삭제할 블랙리스트 제보 목록입니다. 승인된 항목이 섞이면 안 됩니다.
|
pending 제보만 배열로 반환하고 승인/삭제된 항목이 없으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
승인/삭제 항목이 pending 목록에 섞이거나 reporter/source가 없음 |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/blacklist/report | Bearer 필요 |
200 / object
application/json
|
{"ok":true,"id":...,"status":"pending"}
크롬확장/화면에서 들어온 제보가 관리자 검토 대기 상태로 저장된 결과입니다.
|
ok/id/status가 있고 status가 pending이면 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200인데 pending 저장 id가 없거나 관리자 알림/목록에 연결되지 않음 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/blacklist/{id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PATCH
|
/api/blacklist/{id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/blacklist/{id}/approve | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
상품
8 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/products | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/products | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/products/{product_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/products/{product_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/products/{product_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/products/{product_id}/markets | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/products/{product_id}/markets/{market_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/products/{product_id}/status | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
상품소싱
2 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/sourcing/workspace | Bearer 필요 |
200 / object
application/json
|
{"research_rows":[...],"research_column_settings":[...],"margin_rows":[...],"updated_at":"..."}
상품소싱 사용자 워크스페이스 전체 원본입니다. updated_at은 충돌 방지 기준입니다.
|
research_rows, margin_rows, updated_at가 동시에 있으면 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
CONFLICT
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
updated_at 누락, research_rows/margin_rows가 배열이 아님 |
부분 가능
updated_at, research_rows 구조는 확인 가능하지만 다중 탭 충돌의 사용자 의도까지는 응답만으로 알 수 없습니다.
|
|
PUT
|
/api/sourcing/workspace | Bearer 필요 |
200 / object
application/json
|
{"research_rows":[...],"research_column_settings":[...],"margin_rows":[...],"updated_at":"..."}
상품소싱 사용자 워크스페이스 전체 원본입니다. updated_at은 충돌 방지 기준입니다.
|
research_rows, margin_rows, updated_at가 동시에 있으면 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
CONFLICT
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
updated_at 누락, research_rows/margin_rows가 배열이 아님 |
부분 가능
updated_at, research_rows 구조는 확인 가능하지만 다중 탭 충돌의 사용자 의도까지는 응답만으로 알 수 없습니다.
|
셀렉터
13 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/selectors | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/selectors/admin/promote-to-defaults | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/selectors/admin/workflow-default | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selectors/backups | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/selectors/backups/{backup_id}/restore | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selectors/defaults | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selectors/effective | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/selectors/overrides | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/selectors/overrides | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/selectors/overrides/scope | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selectors/workflow-default | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selectors/workflow-defaults | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/selectors/{market_code} | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
셀렉터 워크플로우
4 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
PUT
|
/api/selector-workflows/admin/default | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selector-workflows/default | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/selector-workflows/user | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/selector-workflows/user | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
송장
5 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/invoices/collect | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/invoices/uncollected | Bearer 필요 |
200 / array
application/json
|
[{"id":...,"buy_market_code":"...","buy_order_number":"...","carrier":null,"tracking_number":null}]
송장수집 대상 큐입니다. 결제플랫폼과 주문번호는 마켓 조회에 쓰이고 택배사/송장번호는 아직 비어 있어야 합니다.
|
배열 각 항목에 buy_market_code, buy_order_number가 있고 수집 전 택배사/주문송장번호 의미가 보존되면 정상입니다. |
AUTH_REQUIRED
INVALID_INPUT
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
buy_market_code/buy_order_number 누락, 택배사와 송장번호 값 의미 뒤바뀜, 이미 수집된 행 포함 |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/invoices/unentered | Bearer 필요 |
200 / array
application/json
|
[{"id":...,"sell_order_number":"...","sell_market":"...","tracking_number":"..."}]
판매처 송장 자동입력용 큐입니다. sell_order_number/sell_market가 빠지면 즉시 버그입니다.
|
배열 각 항목에 sell_order_number, sell_market, tracking_number이 있고 tracking_number가 주문송장번호에서 온 값이면 정상입니다. |
AUTH_REQUIRED
INVALID_INPUT
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
sell_order_number 또는 sell_market 누락 |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/invoices/{invoice_id}/entered | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/invoices/{invoice_id}/tracking | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
송장 검증
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/invoice/validate | Bearer 필요 |
200 / object
application/json
|
{"valid":true,"errors":[],"carrier_name":"...","clean_number":"..."}
Authenticated invoice-number validation result. Duplicate checks are scoped to the current user and use 주문송장번호 first, then 송장번호2/송장번호 as legacy/PlayAuto fallbacks.
|
Authenticated response must include valid, errors, carrier_name, and clean_number; duplicate checking is limited to the current user's 주문송장번호/송장번호2/송장번호 values. |
AUTH_REQUIRED
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
Unauthenticated access succeeds, duplicate check sees another user's row, or response omits valid/errors/clean_number. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
수익분석
4 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/analytics/by-market | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/analytics/by-product | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/analytics/revenue | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/analytics/summary | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
수집 API 계정
6 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/collection-api-accounts | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/collection-api-accounts | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/collection-api-accounts/{account_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/collection-api-accounts/{account_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection-api-accounts/{account_id}/credentials | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection-api-accounts/{account_id}/test | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
알림
5 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/notifications | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/notifications | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/notifications/read-all | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/notifications/unread-count | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/notifications/{notification_id}/read | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
유틸리티
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/util/og-image | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
이미지
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/images/proxy | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
인증 / 사용자
8 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/auth/google/callback | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/auth/google/login | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/auth/license/verify | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/auth/login | 공개 |
200 / object
application/json
|
{"token":"...","user":{...}}
Normal login returns token and user together. Legacy SHA-256 password hashes are rehashed to bcrypt after successful login.
|
token and user must both exist. Repeated failed attempts may return RATE_LIMITED/429; successful legacy SHA-256 login must still work and migrate to bcrypt. |
INVALID_INPUT
AUTH_INVALID
RATE_LIMITED
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200 without token/user, AUTH_INVALID for a correct legacy password, RATE_LIMITED missing error.code, or rate limit counting successful logins. |
가능
token/user 유무만으로 성공 여부를 즉시 판별할 수 있습니다.
|
|
GET
|
/api/auth/me | Bearer 필요 |
200 / object
application/json
|
{"id":1,"email":"...","workspace_owner_id":1,...}
로그인 세션과 워크스페이스 정보가 유효한 상태입니다.
|
id/email/role/workspace_role가 있어야 정상입니다. |
AUTH_REQUIRED
AUTH_INVALID
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200인데 id/email이 없거나 401/403 |
가능
401이면 토큰 문제, 200 object면 세션 유효로 바로 해석 가능합니다.
|
|
PUT
|
/api/auth/nickname | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/auth/order-phone | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/auth/signup | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
주문
24 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/orders | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/orders | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/orders/dashboard | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/orders/pending | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
DELETE
|
/api/orders/rows | Bearer 필요 |
200 / object
application/json
|
{"total":N,"total_unregistered":N,"rows":[{"id":...,"row_index":...,"data":{...}}]}
주문관리 시트 원본입니다. rows[].data 구조가 비정상이면 화면 전체가 깨집니다.
|
rows가 배열이고 rows[].data가 객체여야 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
rows가 없음, rows가 배열이 아님, row.data가 객체가 아님 |
부분 가능
rows 구조는 확인 가능하지만 특정 행 계산 오류 원인까지는 응답만으로 완전히 판별되지 않습니다.
|
|
GET
|
/api/orders/rows | Bearer 필요 |
200 / object
application/json
|
{"total":N,"total_unregistered":N,"rows":[{"id":...,"row_index":...,"data":{...}}]}
주문관리 시트 원본입니다. rows[].data 구조가 비정상이면 화면 전체가 깨집니다.
|
rows가 배열이고 rows[].data가 객체여야 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
rows가 없음, rows가 배열이 아님, row.data가 객체가 아님 |
부분 가능
rows 구조는 확인 가능하지만 특정 행 계산 오류 원인까지는 응답만으로 완전히 판별되지 않습니다.
|
|
POST
|
/api/orders/rows | Bearer 필요 |
200 / object
application/json
|
{"total":N,"total_unregistered":N,"rows":[{"id":...,"row_index":...,"data":{...}}]}
주문관리 시트 원본입니다. rows[].data 구조가 비정상이면 화면 전체가 깨집니다.
|
rows가 배열이고 rows[].data가 객체여야 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
rows가 없음, rows가 배열이 아님, row.data가 객체가 아님 |
부분 가능
rows 구조는 확인 가능하지만 특정 행 계산 오류 원인까지는 응답만으로 완전히 판별되지 않습니다.
|
|
POST
|
/api/orders/rows/batch | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
CONFLICT
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/orders/rows/batch-import | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/orders/rows/columns | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/orders/rows/export-playauto.xlsx | Bearer 필요 |
200 / file
binary download
|
binary file stream
Content-Type이 파일이고 다운로드가 시작되면 정상입니다. JSON/HTML이면 오류입니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
가능
파일 스트림인지 여부만으로 정상/오류를 비교적 쉽게 판별할 수 있습니다.
|
|
GET
|
/api/orders/rows/export.xlsx | Bearer 필요 |
200 / file
binary download
|
binary file stream
Content-Type이 파일이고 다운로드가 시작되면 정상입니다. JSON/HTML이면 오류입니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
가능
파일 스트림인지 여부만으로 정상/오류를 비교적 쉽게 판별할 수 있습니다.
|
|
POST
|
/api/orders/rows/export.xlsx | Bearer 필요 |
200 / file
binary download
|
binary file stream
Content-Type이 파일이고 다운로드가 시작되면 정상입니다. JSON/HTML이면 오류입니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
가능
파일 스트림인지 여부만으로 정상/오류를 비교적 쉽게 판별할 수 있습니다.
|
|
POST
|
/api/orders/rows/sync-coupang-release-stop | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/orders/rows/{row_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PATCH
|
/api/orders/rows/{row_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/orders/rows/{row_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/orders/unordered | Bearer 필요 |
200 / array
application/json
|
[{"ordered_at":"...","market":"...","recipient_name":"..."}]
확장 주문자 자동입력용 큐입니다. 빈 배열은 미처리 주문 없음 또는 필터 불일치입니다.
|
배열 각 항목에 ordered_at, market, recipient_name이 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
배열 item에 market/recipient_name 누락 |
부분 가능
빈 배열만으로는 진짜 미처리 주문 없음인지, 필터/권한 문제인지 구분이 안 됩니다.
|
|
POST
|
/api/orders/upload | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/orders/{order_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PATCH
|
/api/orders/{order_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/orders/{order_id}/complete | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/orders/{order_id}/retry | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/orders/{order_id}/status | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
주문수집
30 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/collection/cancel | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/collection/carriers | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/collection/collect-sync | Bearer 필요 |
200 / object
application/json
|
{"ok":true,"saved_count":N,"updated_count":N,"warnings":[...]}
마켓 주문수집 결과입니다. 화면 집계는 발견 건수가 아니라 저장/갱신 건수를 기준으로 해야 합니다.
|
저장/갱신 건수와 warnings가 분리되어 있으면 정상입니다. |
AUTH_REQUIRED
VALIDATION_ERROR
UPSTREAM_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200인데 DB 저장 건수가 없고 발견 건수만 반환 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/collection/collect/stores | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/collection/columns/orders-all | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/collection/columns/orders-all | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/confirm | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/delete | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/exchange-approve | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/collection/export/excel | Bearer 필요 |
200 / file
binary download
|
binary file stream
Content-Type이 파일이고 다운로드가 시작되면 정상입니다. JSON/HTML이면 오류입니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
가능
파일 스트림인지 여부만으로 정상/오류를 비교적 쉽게 판별할 수 있습니다.
|
|
GET
|
/api/collection/inquiries | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/collection/inquiries/collect | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/inquiries/{inquiry_id}/answer | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/list | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/return-approve | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/collection/sales/by-market | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/collection/sales/by-product | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/collection/sales/revenue | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/collection/sales/summary | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/collection/seller-cancel | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/ship | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/collection/stats | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/collection/sync-status | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/update-buy-info | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/update-margin | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/update-memo | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/collection/update-pipeline | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/collection/{order_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/collection/{order_id}/field | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/collection/{order_id}/status | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
주소
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/address/parse | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
팀
9 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
POST
|
/api/team/invites | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/team/invites/accept | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/team/invites/token/{invite_token} | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/team/invites/{invite_id}/revoke | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/team/members | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/team/members/{member_user_id}/permissions | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/team/members/{member_user_id}/remove | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/team/status | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/team/users/search | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
필드 매핑
4 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/field-mappings | 공개 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/field-mappings | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/field-mappings/{mapping_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/field-mappings/{mapping_id} | 공개 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
핫딜
6 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/hotdeals | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/hotdeals/collect | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
GET
|
/api/hotdeals/favorites | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
GET
|
/api/hotdeals/search | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
DELETE
|
/api/hotdeals/{hotdeal_id}/favorite | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/hotdeals/{hotdeal_id}/favorite | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
핫딜 소스
5 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/hotdeal-sources | Bearer 필요 |
200 / array
application/json
|
[{...}]
최상위가 배열이면 정상입니다. 단, 빈 배열의 의미는 엔드포인트마다 다를 수 있습니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
배열 길이와 아이템 구조는 볼 수 있지만, 빈 배열의 원인까지는 응답만으로 완전히 알 수 없습니다.
|
|
POST
|
/api/hotdeal-sources | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
DELETE
|
/api/hotdeal-sources/{source_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
PUT
|
/api/hotdeal-sources/{source_id} | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
|
POST
|
/api/hotdeal-sources/{source_id}/scraped | Bearer 필요 |
200 / object
application/json
|
{"...":"..."}
최상위가 객체이고 detail/error만 단독으로 오지 않으면 정상으로 봅니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
FORBIDDEN
VALIDATION_ERROR
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|
헬스체크
1 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/health | 공개 |
200 / object
application/json
|
{"status":"ok"}
DB 연결까지 포함해 앱이 정상 응답 중인 상태입니다.
|
`{"status":"ok"}`만 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
HTML/502, JSON이지만 status가 ok가 아님 |
가능
`{"status":"ok"}` 이외 응답이면 바로 장애로 볼 수 있습니다.
|
확장프로그램
2 endpoints
| Method | Path | Auth | 정상 루트 타입 | 정상 200 형식 | 정상 판정 | 오류 코드 | 깨졌다고 보는 기준 | 응답만으로 진단 |
|---|---|---|---|---|---|---|---|---|
|
GET
|
/api/extension/download | 공개 |
200 / file
binary download
|
binary file stream
Content-Type이 파일이고 다운로드가 시작되면 정상입니다. JSON/HTML이면 오류입니다.
|
문서에 정의된 최상위 타입과 핵심 필드가 있으면 정상입니다. |
AUTH_REQUIRED
NOT_FOUND
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
200이어도 핵심 필드가 없거나 HTML/infra 응답이면 비정상입니다. |
가능
파일 스트림이 아니고 JSON/HTML이 오면 즉시 오류로 판단할 수 있습니다.
|
|
GET
|
/api/extension/version | 공개 |
200 / object
application/json
|
{"version":"0.1.61","download_url":"/api/extension/download",...}
확장 버전 비교, 팝업 배너, RS 버튼 UP 표식의 기준 응답입니다.
|
version과 download_url이 있으면 정상입니다. |
INTERNAL_ERROR
{"ok":false,"detail":"...","message":"...","error":{"code":"STABLE_ERROR_CODE","status":4xx/5xx,"type":"app_error"}}
|
version/download_url 누락 또는 HTML 응답 |
부분 가능
핵심 필드 유무로 1차 판별은 가능하지만, 업무 규칙까지는 응답만으로 완전히 알기 어렵습니다.
|