공통 규칙

날짜는 ISO-8601, ID는 UUID를 사용하며 정상 응답은 HTTP 200입니다.

01

페이지네이션

page는 1부터, size는 기본 20·최대 100입니다. sort는 반복 가능하며 기본값은 createdAt,desc와 id,desc입니다.

02

응답 구조

JSON 단건 응답은 success · message · data, 목록은 items · pagination을 포함합니다. PDF 다운로드는 파일 바이너리를 바로 반환합니다.

03

쓰기 요청

프로그램·배지 생성과 수정은 PUBLISHED 상태로 처리되며, PATCH는 생략한 필드를 유지합니다.

01

발행 상태

써티 API의 프로그램·배지 생성과 수정 요청에는 publishStatusCode를 보내지 않습니다. 응답은 PUBLISHED 상태입니다.

02

PATCH

요청에서 생략한 필드는 유지합니다. null과 빈 배열의 의미는 각 엔드포인트의 Request body 설명을 확인하세요.

03

멱등성 키

직접 발급에는 1~300자의 Idempotency-Key가 필요합니다. 같은 조직·배지 범위의 키와 정규화 요청이 같으면 기존 발급을 반환합니다. 이메일·전화번호는 정규화하지만 수신자 순서는 유지합니다. 같은 절대 시각의 issuedAt은 offset 표현이 달라도 같으며, 생략과 null은 동일합니다. 명시한 발급 시각의 추가·제거·변경은 다른 요청입니다. 정규화 요청이 달라지면 409 · ISS057로 응답합니다.

날짜와 시간V3 요청은 2026-08-01T00:00:00Z 또는 2026-08-01T09:00:00+09:00처럼 UTC나 offset을 반드시 포함해야 합니다. 응답은 UTC Instant 문자열로 반환됩니다.
발급일과 만료일issuedAt은 발급일, createdAt은 실제 생성 시각입니다. V3 직접 발급 요청의 issuedAt은 선택값이며 생략/null이면 현재 시각을 사용합니다. 상대 만료 정책은 발급일의 서울 날짜에 개월 수를 더한 날짜의 00:00 서울 시간으로 계산합니다. startAt·endAt 조회와 createdAt 정렬은 생성 시각 기준을 유지하며 issuedAt 검색·정렬은 지원하지 않습니다.

공통 응답 구조

JSON API 표에는 아래 공통 구조를 제외하고 data 또는 data.items[]의 실제 필드만 표시합니다. PDF 다운로드 응답은 이 구조를 사용하지 않습니다.

단건 응답

필드타입설명
success
boolean
요청 성공 여부
message
string | null
응답 메시지. 메시지가 없으면 null
data
object | null
API별 단건 응답 데이터. 삭제 성공 시 null

목록 응답

필드타입설명
success
boolean
요청 성공 여부
data.items
object[]
현재 페이지의 응답 항목
data.pagination
object
목록의 페이지 정보

Pagination data.pagination

필드타입설명
page
integer
현재 페이지 번호
size
integer
페이지당 항목 수
totalElement
integer
전체 항목 수
totalPages
integer
전체 페이지 수
first
boolean
첫 페이지 여부
last
boolean
마지막 페이지 여부
empty
boolean
현재 페이지가 비어 있는지 여부