# API 계약(1차) ## 공개 API - `GET /api/public/route-by-host` - Query: `host`, `path` - Response: - `status`: `ok | not_found` - `page`: block json - `campaignId`, `pageId`, `routeId` - `POST /api/public/lead` - Body: `campaignId`, `pageId`, `routeId`, `payload`, `sourceMeta` ## 관리자 API - 인증: `POST /api/admin/auth/login` (현재는 역할 기반 데모 토큰 반환) - 캠페인: `GET /api/admin/campaigns`, `POST /api/admin/campaigns`, `PUT /api/admin/campaigns/:id` - 페이지: `GET /api/admin/pages`, `GET /api/admin/pages/:id`, `POST /api/admin/pages`, `PUT /api/admin/pages/:id` - 라우트: `GET /api/admin/pages/:id/routes`, `POST /api/admin/pages/:id/routes` - 조건: `GET /api/admin/pages/:id/conditions`, `POST /api/admin/pages/:id/conditions`, `PATCH /api/admin/pages/:id/conditions/:conditionId`, `DELETE /api/admin/pages/:id/conditions/:conditionId` - 리드: `GET /api/admin/leads` - 사용자: `GET /api/admin/users`, `POST /api/admin/users`, `PUT /api/admin/users/:id/role` ## 역할/권한(1차) - 헤더: `x-user-role` - 값: `ADMIN`, `LEAD_MANAGER` - `ADMIN`: 관리자 API 전체 사용 - `LEAD_MANAGER`: 리드 조회(`/api/admin/leads`)만 사용 ## 공통 에러 - 401 `{ error: "unauthorized" }` - 403 `{ error: "forbidden" }` - 422 `{ error: "validation", details: [...] }`