광고연구소

OnSureLab API

개발 중

OnSureLab 서비스 연동을 위한 API 명세서입니다.

API 문서 내보내기

OpenAPI YAML

openapi.yaml (2,205 lines)

API 문서 (Markdown)

onsurelab-api-public.md (1,184 lines)

인증

모든 API 요청에는 API Key가 필요합니다. API Key는 담당자에게 발급받으세요.

요청 헤더

모든 API 요청 시 헤더에 X-API-Key를 포함해야 합니다.

X-API-Key: your-api-key-here
개발 환경 vs 운영 환경

OnSureLab API는 개발(dev)운영(prod) 두 가지 환경을 제공합니다. 발급받은 API Key에 따라 자동으로 환경이 결정됩니다.

환경API Key 예시용도
DEV
xxx-partner-dev개발/테스트용. 테스트 DB 사용
PROD
xxx-partner실제 서비스용. 운영 DB 사용
주의:개발 중에는 반드시 DEV 키를 사용하세요. PROD 키로 테스트하면 실제 데이터에 영향을 줍니다.
요청 예시

cURL

curl -X GET "https://api.example.com/api/onsurelab/users" \
  -H "X-API-Key: your-api-key-here"

JavaScript (fetch)

const response = await fetch('/api/onsurelab/users', {
  headers: {
    'X-API-Key': 'your-api-key-here'
  }
});
const data = await response.json();
인증 실패 응답

API Key 누락 (401)

{
  "success": false,
  "error": "API Key가 필요합니다."
}

유효하지 않은 API Key (401)

{
  "success": false,
  "error": "유효하지 않은 API Key입니다."
}

에러 응답

401 Unauthorized
{
  "success": false,
  "error": "API Key가 필요합니다."
}
404 Not Found
{
  "success": false,
  "error": "유저를 찾을 수 없습니다."
}
409 Conflict
{
  "success": false,
  "error": "이미 존재하는 이메일입니다."
}
500 Server Error
{
  "success": false,
  "error": "서버 오류 메시지"
}

DB 스키마

테이블관계용도
user-유저 (이메일, 비밀번호, 이름, 역할)
phone_verification-휴대폰 인증번호 (4자리, 5분 만료)
executionuser 1:N집행건 메인 데이터 (draft + step2Payload JSON)
execution_fileexecution 1:N업로드 파일 메타 (URL, category, step)
execution_messageexecution 1:N외주 소통 채팅 메시지
execution_deliverableexecution 1:N업체 결과물/시안 (버전 관리)
execution_planexecution 1:1집행계획서 (9개 섹션 + 테이블)
user
CREATE TABLE user (
    id         BIGINT PRIMARY KEY AUTO_INCREMENT,
    email      VARCHAR(255) NOT NULL UNIQUE,
    password   VARCHAR(255) NOT NULL,
    name       VARCHAR(100) NOT NULL,
    phone      VARCHAR(20),
    company    VARCHAR(200),
    role       VARCHAR(50) NOT NULL DEFAULT 'DEVELOPER',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
phone_verification
CREATE TABLE phone_verification (
    id          BIGINT PRIMARY KEY AUTO_INCREMENT,
    phone       VARCHAR(20) NOT NULL,
    code        VARCHAR(10) NOT NULL,
    is_verified TINYINT(1) NOT NULL DEFAULT 0,
    expires_at  TIMESTAMP NOT NULL,
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_phone_verification_phone (phone)
);
execution
CREATE TABLE execution (
    id             VARCHAR(50) PRIMARY KEY,        -- "exec_" + UUID
    user_id        BIGINT NOT NULL,
    title          VARCHAR(255) DEFAULT NULL,
    current_step   INT NOT NULL DEFAULT 1,         -- 1~10
    status         VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
                                                   -- DRAFT | IN_PROGRESS | COMPLETED
    step2_payload  JSON DEFAULT NULL,              -- Step 2 집행 조건 전체
    draft          JSON DEFAULT ('{}'),            -- Step 3~10 진행 데이터
    created_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at     TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES user(id),
    INDEX idx_execution_user_id (user_id),
    INDEX idx_execution_status (status)
);
execution_file
CREATE TABLE execution_file (
    id            VARCHAR(50) PRIMARY KEY,         -- "file_" + UUID
    execution_id  VARCHAR(50) NOT NULL,
    url           VARCHAR(1000) NOT NULL,          -- Naver Object Storage URL
    original_name VARCHAR(255) NOT NULL,
    size          BIGINT NOT NULL DEFAULT 0,
    mime_type     VARCHAR(100),
    category      VARCHAR(30) NOT NULL,            -- reference | logo | brand_guide
                                                   -- | evidence | deliverable
    step          INT,                             -- 어떤 스텝에서 올린 건지 (5, 7, 9 등)
    uploaded_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (execution_id) REFERENCES execution(id) ON DELETE CASCADE,
    INDEX idx_execfile_execution_id (execution_id),
    INDEX idx_execfile_category (category)
);
execution_message
CREATE TABLE execution_message (
    id            VARCHAR(50) PRIMARY KEY,         -- "msg_" + UUID
    execution_id  VARCHAR(50) NOT NULL,
    sender        VARCHAR(20) NOT NULL,            -- USER | VENDOR | SYSTEM
    text          TEXT NOT NULL,
    files         JSON DEFAULT NULL,               -- 첨부파일 URL 배열
    timestamp     BIGINT NOT NULL,                 -- Unix timestamp (ms)
    created_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (execution_id) REFERENCES execution(id) ON DELETE CASCADE,
    INDEX idx_execmsg_execution_id (execution_id),
    INDEX idx_execmsg_timestamp (timestamp)
);
execution_deliverable
CREATE TABLE execution_deliverable (
    id            VARCHAR(50) PRIMARY KEY,         -- "dlv_" + UUID
    execution_id  VARCHAR(50) NOT NULL,
    version       INT NOT NULL DEFAULT 1,          -- 같은 execution 내 자동 증가
    url           VARCHAR(1000) NOT NULL,
    original_name VARCHAR(255) NOT NULL,
    size          BIGINT NOT NULL DEFAULT 0,
    mime_type     VARCHAR(100),
    note          VARCHAR(500),                    -- 메모 ("초안", "수정본 v2" 등)
    created_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by    VARCHAR(50),                     -- 업로드한 유저/업체 ID
    FOREIGN KEY (execution_id) REFERENCES execution(id) ON DELETE CASCADE,
    INDEX idx_execdlv_execution_id (execution_id)
);
execution_plan
CREATE TABLE execution_plan (
    id            VARCHAR(50) PRIMARY KEY,         -- "plan_" + UUID
    execution_id  VARCHAR(50) NOT NULL UNIQUE,     -- 1:1 관계
    meta          JSON DEFAULT NULL,
    sections      JSON DEFAULT NULL,               -- 9개 섹션
                                                   -- overview, background, strategy,
                                                   -- details, schedule, kpi,
                                                   -- budget, evidence, risk
    tables_data   JSON DEFAULT NULL,               -- budgetItems, scheduleItems 등
    created_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (execution_id) REFERENCES execution(id) ON DELETE CASCADE,
    INDEX idx_execplan_execution_id (execution_id)
);