유료 구독에 연결된 API 키로 운영 일정 제출 API에 연동합니다. 테넌트 스케줄 기본값은 PATCH /v1/schedule-defaults로 저장하고, 직원별 주간 희망은 GET/PUT /v1/staff/{staffId}/weekly-shift-wish로 조회·전체 교체할 수 있습니다. 과금은 구독 및 계약에 따릅니다(API 호출 건수 기반 추가 과금 없음). 유료 권한, 검증 규칙, 오류 코드를 정리했으며 사이드바 검색으로 필드로 이동할 수 있습니다.
본 문서의 대상 범위
본 페이지는 외부 연동용 제품 REST API를 설명합니다.
스케줄 결과 완료 Webhook은 API 관리에서 등록하는 아웃바운드 HTTPS 알림이며 REST CRUD가 아닙니다. 페이로드·서명은 본 페이지의 완료 알림 Webhook을 보세요.
사이트 내 브라우저용 경로(결제 콜백·측정 등)는 이 제품 API를 대체하지 않습니다. 외부 시스템은 본 페이지의 /v1/*와 완료 알림 Webhook을 사용하세요.
구독 과금 및 액세스
본 HTTP API는 유료 제품의 일부입니다. 활성 상업 계약과 온보딩 후 조직에 발급된 키가 필요합니다.
과금은 구독 및 계약에 기반합니다. 유료 플랜의 청구는 가격표에 따라 등록 직원 수(석)에 비례하는 월액이 될 수 있습니다.
플레이그라운드/무료 한도는 유료 API 키에 적용되지 않습니다. 일정 기간, 직원 수, 15분 단위 사용 여부 등은 유료 권한으로 결정됩니다. 자세한 내용은 본 페이지의 한도 및 기본값을 참고하세요.
인증
유료 구독으로 발급된 유효한 API 키를 요청에 포함해야 합니다. 로그인 후 계정 영역에서 키를 생성·교체·폐기할 수 있습니다.
키는 x-api-key 헤더로 전송합니다. 키는 조직에 연결되어 테넌트 식별 및 플랜 기반 이용 한도에 사용됩니다. 키 scopes 밖 작업은 403(API_KEY_SCOPE_DENIED)입니다. scopes 속성이 없는 기존 키는 모든 작업이 허용됩니다.
MCP를 설정하지 않고 채팅형 LLM에 이 제품 API 전제를 전달할 때 아래 블록을 붙여넣으세요.
base URL·인증·주요 작업·쓰기 주의사항을 요약합니다. 실제 API 키는 포함하지 않습니다.
에이전트에서 API를 실제로 호출하려면 이 붙여넣기만이 아니라 MCP(에이전트) 를 설정하세요.
붙여넣을 컨텍스트
Auto Scheduler — Public API context for LLM assistants
Use this when helping a developer call the Auto Scheduler paid product REST API (/v1/*). Prefer configuring Tools MCP when available; this paste is for chat without MCP.
Base URL
- https://api.autoschedulers.com
- Paths are under /v1/*. Do not confuse this with the marketing website origin.
Authentication
- Every request needs header: x-api-key: <API_KEY>
- Never paste a real API key into chat logs or this prompt; ask the user to supply it via environment or a secret store.
- Keys are created in the product under Account → API management.
- JSON writes: Content-Type: application/json
Read endpoints
- GET /v1/schedule-results?limit=10
- GET /v1/schedule-results/{conditionId}
- GET /v1/schedule-conditions
- GET /v1/staff
- GET /v1/staff/{staffId}
- GET /v1/schedule-defaults
- GET /v1/schedule-results/{conditionId}/emergency-shift-context
Write endpoints (confirm with the user before calling)
- POST /v1/schedule — starts a job; may incur charges; max 14 calendar days
- PATCH /v1/schedule-defaults — tenant-wide
- POST /v1/staff
- PATCH /v1/staff/{staffId}
- PUT /v1/staff/{staffId}/weekly-shift-wish — full replace
- POST /v1/schedule-results/{conditionId}/emergency-shift — paid
- POST /v1/schedule-results/{conditionId}/confirm-assignments
- DELETE /v1/schedule-conditions/{conditionId}
- PUT /v1/schedule-actual/{conditionId} — full replace
Minimal curl (read)
curl -sS -H "x-api-key: YOUR_API_KEY" "https://api.autoschedulers.com/v1/staff"
curl -sS -H "x-api-key: YOUR_API_KEY" "https://api.autoschedulers.com/v1/schedule-results?limit=10"
Contract notes
- Schedule submit body needs a supported apiVersion and valid JSON fields — see api-docs Field reference or Docs MCP Resources; do not invent fields.
- planningHorizon on defaults is only week or two_weeks (month_attendance is rejected).
- Outbound completion webhooks are HMAC-signed HTTPS callbacks configured in API management (not REST CRUD).
Safety
- Write endpoints change tenant data. Confirm destructive or irreversible actions with the user before calling them.
- Prefer read/list first when exploring an unfamiliar tenant.
엔드포인트
일정 조건을 JSON으로 제출합니다. 유료 연동 표면이며, API 액세스가 부여된 뒤 환경별로 기본 URL이 안내됩니다.
기본 URL
공개 REST API(/v1/*) 호스트이며 브라우저 사이트 URL이 아닙니다. MCP 환경 변수 AUTO_SCHEDULER_PUBLIC_API_BASE_URL과 curl BASE_URL에 이 값을 설정하세요.
AUTO_SCHEDULER_PUBLIC_API_BASE_URL — 이 문서 환경에 설정된 기본 URL입니다. MCP와 curl에 같은 값을 사용하세요.
**BASE_URL**에는 액세스 개통 시 안내된 API 기본 URL(경로 접두사)을 넣습니다.
API 키는 **x-api-key** 헤더로 보냅니다. 조직(테넌트)은 키로 식별되므로 쿼리 문자열에 별도 테넌트 ID를 넘길 필요가 없습니다.
유료 기능(긴급 시프트·노무 상세·일부 스케줄 기본값 등)에는 유효한 유료 구독이 필요합니다. 테넌트에 결제가 구성되지 않은 경우 **503**(예: 코드 **STRIPE_NOT_CONFIGURED**)을 받을 수 있습니다. 회사 정보·감사 로그·사용자(계정)·회사 정보·감사 로그는 웹 앱 소관이며 공개 API에 포함되지 않습니다.
curl 예 (bash / macOS / Linux / WSL)
Windows PowerShell: 줄 끝의 `\`는 **줄 이어쓰기가 아닙니다**. 한 줄로 쓰거나, 줄 끝을 **백틱(`)**으로 이어 주세요.
다른 /v1 라우트와 동일한 API 키와 JSON 본문입니다. 각 카드에 복사 가능한 최소 요청 본문 예가 있습니다. 계정 사용자·회사 프로필·감사 로그는 웹 앱 관할이며 이 API에 포함되지 않습니다. POST /v1/staff는 명단이 테넌트 상한을 넘으면 409 STAFF_LIMIT을 반환합니다.
노무 및 Soft prefer/avoid 필드는 유료 구독이 필요합니다. 예제의 UUID·날짜·셀 키를 테넌트 실데이터로 바꾸세요.
cellKey 형식 — requirementsByCell과 availableCells의 키는 범위 내 YYYY-MM-DD 날짜와 시간 범위·분할에서 열거된 slotId로 만든 `${date}__${slotId}`와 일치해야 합니다(플레이그라운드 `cellKey`와 동일).
빠른 참조 표
timeZone
타입
string
필수
예
날짜와 슬롯 해석에 사용하는 IANA 시간대.
scheduleStartDate / scheduleEndDate
타입
string (YYYY-MM-DD)
필수
예
포함 달력 범위, 시작 ≤ 종료.
timeRangeStart / timeRangeEnd
타입
string (HH:mm)
필수
예
슬롯 열을 정의하는 시계 범위, 최소 1개 슬롯 생성.
slotGranularityMinutes
타입
60 | 15
필수
예
유료 API: 60(시간) 또는 15(15분). allowedGranularities에 포함.
requirementsByCell
타입
object
필수
예
키 = 계산된 그리드의 cellKey, 값 = 0~15 정수.
requiredRolesByCell
타입
object
필수
아니오 — 2026-09-09만
cellKey → roleId→need. 셀별 need 합계 ≤ requirementsByCell. 레거시 버전 → UNKNOWN_FIELD.
staff
타입
array
필수
예
비어 있지 않음, 최대 크기는 한도 참고, 각 항목: staffId, displayName, 선택 availableCells / laborConstraintMask / schedulingRoleIds (2026-09-09+) / Soft prefer-avoid (2026-09-14).
필드
타입
필수
비고
timeZone
string
예
날짜와 슬롯 해석에 사용하는 IANA 시간대.
scheduleStartDate / scheduleEndDate
string (YYYY-MM-DD)
예
포함 달력 범위, 시작 ≤ 종료.
timeRangeStart / timeRangeEnd
string (HH:mm)
예
슬롯 열을 정의하는 시계 범위, 최소 1개 슬롯 생성.
slotGranularityMinutes
60 | 15
예
유료 API: 60(시간) 또는 15(15분). allowedGranularities에 포함.
requirementsByCell
object
예
키 = 계산된 그리드의 cellKey, 값 = 0~15 정수.
requiredRolesByCell
object
아니오 — 2026-09-09만
cellKey → roleId→need. 셀별 need 합계 ≤ requirementsByCell. 레거시 버전 → UNKNOWN_FIELD.
staff
array
예
비어 있지 않음, 최대 크기는 한도 참고, 각 항목: staffId, displayName, 선택 availableCells / laborConstraintMask / schedulingRoleIds (2026-09-09+) / Soft prefer-avoid (2026-09-14).
필드 레퍼런스(허용 값)
아래 필드 규칙은 공개 API 검증과 일치합니다. JSON 숫자는 실제 number로 보내세요(문자열 금지). 검증 후 서버가 요청 키가 아닌 부모 행 기본값(유료 최적화·노동법 관할·모델 버전)을 저장할 수 있습니다 — 「노동법 및 유료 플래그」 참고.
apiVersion
string | 생략 · 필수: 아니요 — 선택
허용 값
생략: 허용(최신 동작).
있을 경우 "2026-04-01", "2026-09-09", "2026-09-13", "2026-09-14". 최신 게시 버전은 2026-09-14.
그 외 문자열은 거부(TYPE_ERROR).
동작
sanitizeApiVersion에서 trim 등 처리 후 비교.
버전에 따라 허용되는 최상위 및 직원 객체 키 집합이 달라집니다(역할 2026-09-09+; paidOptimization 2026-09-13+; Soft prefer/avoid 2026-09-14).
대표 오류
TYPE_ERROR지원하지 않는 apiVersion 값.
timeZone
string · 필수: 예
허용 값
와이어 형식은 단일 문자열. API는 모든 허용 문자열을 닫힌 enum으로 제공하지 않으며 서버가 동적으로 검증합니다.
제출 시 서버가 공유 기본값으로 부모 SCHEDULE_CONDITION을 설정합니다. paidOptimization은 본문(apiVersion 2026-09-13+) 또는 생략 시 테넌트 SCHEDULE_DEFAULTS; 없으면 DEFAULT_PAID_OPTIMIZATION(부모 laborLawCompliance는 항상 true). laborLawJurisdiction / usLaborStateCode / laborModelVersion은 테넌트 SCHEDULE_DEFAULTS를 상속(없으면 JP / GENERIC / 관할에 맞는 모델 버전).
옵티마이저의 법정 스타일 노동 제약은 부모·직원 모두 근무 준수 플래그가 켜져 있을 때만 적용됩니다. 직원 플래그는 JSON 본문에 없고, 서버가 테넌트 명단에서 상속합니다(명단에 없는 staffId는 기본 켜짐). POST /v1/staff 생성도 기본 켜짐. 인원별 끄기는 유료 PATCH /v1/staff/{staffId}.
노동 모델은 일정용 근사이며 법률 자문이 아닙니다. 카탈로그: .
문서
자세한 내용: this page 및 §3.1.
허용되지 않은 키를 보낸 경우
UNKNOWN_FIELD엄격 모드가 알 수 없는 루트 또는 staff 속성을 거부.
정리 규칙
검증 전후에 적용됩니다. 값이 INVALID_STAFF로 거절되는 이유를 설명합니다.
staffId
trim, 길이 1~128.
문자는 /^[a-zA-Z0-9._-]+$/ (슬래시·백슬래시 불가).
displayName
제어 문자·제로폭 제거, 공백 축소, trim.
괄호 < > 불가.
정리 후 최대 128자, 비어 있으면 안 됨.
셀 키(requirements / availableCells)
키는 trim 후 계산된 그리드의 cellKey 문자열과 정확히 일치.
성공 응답
202 Accepted
본문이 검증을 통과하고 조건이 기록되었으며, 최적화는 비동기로 계속될 수 있습니다. 핸들러가 conditionId 등이 포함된 JSON을 반환할 수 있습니다.
오류 코드 전체
검증 오류는 안정적인 `code`가 있는 구조화된 정보를 반환합니다. 검증 전에 JSON 파싱(INVALID_JSON, PAYLOAD_TOO_LARGE). 저장 실패는 DYNAMODB_ERROR로 나올 수 있습니다. PATCH /v1/schedule-defaults는 실패 시 HTTP 400과 SCHEDULE_DEFAULTS_SAVE_FAILED(상세는 details)를 반환할 수 있습니다.
INVALID_JSON
본문이 유효한 JSON이 아님.
PAYLOAD_TOO_LARGE
UTF-8 바이트 길이가 maxPayloadBytes(기본 512 KiB) 초과.
TYPE_ERROR
잘못된 JSON 타입 또는 지원하지 않는 apiVersion 문자열.
UNKNOWN_FIELD
엄격 모드: 루트 또는 staff 객체에 허용되지 않은 속성.
INVALID_TIME_ZONE
timeZone 누락 또는 유효한 IANA 이름이 아님.
INVALID_DATE_RANGE
YYYY-MM-DD가 아님, 잘못된 범위, 빈 열거.
SCHEDULE_SPAN_TOO_LONG
시작~종료 사이 일수가 maxScheduleDays 초과.
INVALID_TIME_RANGE
시간 범위 누락 또는 슬롯 0개.
INVALID_GRANULARITY
slotGranularityMinutes가 60/15가 아니거나 플랜에서 불허.
INVALID_REQUIREMENTS
requirementsByCell이 객체가 아니거나 값이 0~15 정수가 아님.
UNKNOWN_CELL_KEY
계산된 일정 그리드에 없는 키.
INVALID_STAFF
staff가 비어 있음, 너무 큼, 잘못된 행, 정리 실패 등.
DUPLICATE_STAFF_ID
staffId 중복.
INVALID_AVAILABLE_CELL
availableCells의 빈 항목 또는 알 수 없는 항목.
SHORTFALL_CELLS
필요 인원 대비 가용 인원 부족.
DYNAMODB_ERROR
검증 후 일시적 또는 저장 오류(핸들러에 따라 다름).
SCHEDULE_DEFAULTS_SAVE_FAILED
PATCH /v1/schedule-defaults: 검증 또는 비즈니스 규칙 실패(error.details 참고).
LABOR_COMPLIANCE_REQUIRED
PATCH /v1/staff/{staffId}: laborLawCompliance가 false일 때 laborConstraintMask를 보냄.
코드
의미
INVALID_JSON
본문이 유효한 JSON이 아님.
PAYLOAD_TOO_LARGE
UTF-8 바이트 길이가 maxPayloadBytes(기본 512 KiB) 초과.
TYPE_ERROR
잘못된 JSON 타입 또는 지원하지 않는 apiVersion 문자열.
UNKNOWN_FIELD
엄격 모드: 루트 또는 staff 객체에 허용되지 않은 속성.
INVALID_TIME_ZONE
timeZone 누락 또는 유효한 IANA 이름이 아님.
INVALID_DATE_RANGE
YYYY-MM-DD가 아님, 잘못된 범위, 빈 열거.
SCHEDULE_SPAN_TOO_LONG
시작~종료 사이 일수가 maxScheduleDays 초과.
INVALID_TIME_RANGE
시간 범위 누락 또는 슬롯 0개.
INVALID_GRANULARITY
slotGranularityMinutes가 60/15가 아니거나 플랜에서 불허.
INVALID_REQUIREMENTS
requirementsByCell이 객체가 아니거나 값이 0~15 정수가 아님.
UNKNOWN_CELL_KEY
계산된 일정 그리드에 없는 키.
INVALID_STAFF
staff가 비어 있음, 너무 큼, 잘못된 행, 정리 실패 등.
DUPLICATE_STAFF_ID
staffId 중복.
INVALID_AVAILABLE_CELL
availableCells의 빈 항목 또는 알 수 없는 항목.
SHORTFALL_CELLS
필요 인원 대비 가용 인원 부족.
DYNAMODB_ERROR
검증 후 일시적 또는 저장 오류(핸들러에 따라 다름).
SCHEDULE_DEFAULTS_SAVE_FAILED
PATCH /v1/schedule-defaults: 검증 또는 비즈니스 규칙 실패(error.details 참고).
LABOR_COMPLIANCE_REQUIRED
PATCH /v1/staff/{staffId}: laborLawCompliance가 false일 때 laborConstraintMask를 보냄.