{"currentRevision":"2026-08-14.1","compatibilityPolicy":{"versioning":"unversioned","breakingChanges":"allowed","tracking":"changelog-and-response-headers","title":"하위호환성 정책: Breaking change 허용","summary":"그랜터 Public API는 현재 별도 버전 경로를 운영하지 않으며, 필요한 API 계약 변경에는 breaking change를 허용합니다.","guidance":"사용자에게 영향을 주는 계약 변경은 이 changelog와 응답의 Granter-API-Revision·Granter-API-Changes 헤더에 기록합니다. 연동 클라이언트는 리비전 변경과 breaking 항목의 migration 안내를 확인해 반영해야 합니다."},"revisions":[{"revision":"2026-08-14.1","releasedAt":"2026-08-14","changes":[{"id":"bank-ticket-contact-assignment-added","type":"additive","effectiveAt":"2026-08-14","endpointKeys":["tickets-update"],"summary":"계좌 티켓의 거래처를 지정하거나 재지정할 수 있도록 bulk-update-individual에 CONTACT와 contactId를 추가합니다."},{"id":"settled-without-reference-added","type":"additive","effectiveAt":"2026-08-14","endpointKeys":["tickets"],"summary":"세금계산서 티켓 응답에 실제 티켓 연결 없이 완료 처리된 상태를 나타내는 settledWithoutReference를 추가합니다."}]},{"revision":"2026-08-05.1","releasedAt":"2026-08-05","changes":[{"id":"ticket-date-window-expanded","type":"additive","effectiveAt":"2026-08-05","endpointKeys":["tickets"],"summary":"tickets 조회가 31일 초과 범위를 월 단위로 안전하게 분할·병합하며, 한 요청에서 최대 366일까지 지원합니다."},{"id":"ticket-references-bulk-create-added","type":"new","effectiveAt":"2026-08-05","endpointKeys":["ticket-references-create-bulk"],"summary":"한 요청에서 최대 25개의 티켓 연결을 생성하고 항목별 성공·실패 결과를 반환하는 bulk API를 추가합니다."},{"id":"tax-invoice-complete-without-reference-added","type":"new","effectiveAt":"2026-08-05","endpointKeys":["tickets-complete-without-reference","tickets-uncomplete-without-reference"],"summary":"미연결 세금계산서를 일괄 완료 처리하거나 완료 전 상태로 되돌리는 API를 추가합니다. 연결된 티켓은 안전하게 거부합니다."},{"id":"validation-error-details-preserved","type":"additive","effectiveAt":"2026-08-05","endpointKeys":"all","summary":"backend가 제공한 details, errors, fieldErrors 검증 상세를 Public API 오류 응답의 details로 보존합니다."}]},{"revision":"2026-07-29.1","releasedAt":"2026-07-29","changes":[{"id":"contract-change-notices-added","type":"additive","effectiveAt":"2026-07-29","endpointKeys":"all","summary":"모든 인증 Public API 응답에 현재 계약 리비전, 관련 변경 ID, 변경 로그 링크를 응답 헤더로 제공합니다."},{"id":"rate-limit-status-corrected","type":"behavioral","effectiveAt":"2026-07-29","endpointKeys":"all","summary":"Public API 앞단 또는 인증 확인 단계의 속도 제한을 401이 아닌 429로 분류하고 Retry-After를 제공합니다.","migration":"401은 API key 오류로만 처리하고, 429는 Retry-After 이후 동일 요청을 재시도하도록 클라이언트 분기를 수정하세요."},{"id":"auth-outage-status-corrected","type":"behavioral","effectiveAt":"2026-07-29","endpointKeys":"all","summary":"API key 인증 서버의 일시적 장애를 잘못된 key와 구분하여 401이 아닌 503으로 응답합니다.","migration":"401은 API key를 점검하고, 503은 일시적 장애로 분류하여 지수 백오프로 재시도하세요."},{"id":"nickname-canonicalized","type":"breaking","effectiveAt":"2026-07-29","endpointKeys":"all","summary":"응답에 함께 존재하던 nickName과 nickname을 표준 필드 nickname 하나로 통일합니다.","migration":"응답 모델과 필드 접근을 nickname으로 통일하세요."},{"id":"ticket-connection-summary-added","type":"additive","effectiveAt":"2026-07-29","endpointKeys":["tickets"],"summary":"티켓 응답에 isConnected와 connectionCount 연결 요약을 제공합니다."},{"id":"manual-transactions-create-added","type":"new","effectiveAt":"2026-07-29","endpointKeys":["manual-transactions-create"],"summary":"거래처 ID를 포함한 수기관리 전표 다건 생성 API와 안정적인 처리 확인 응답을 추가합니다. upstream이 생성 티켓을 반환하지 않으면 ticketIds와 tickets는 빈 배열입니다.","migration":"생성 성공 여부는 ok와 requestedCount로 확인하고, ticketIds가 항상 채워진다고 가정하지 마세요."},{"id":"manual-transactions-delete-added","type":"new","effectiveAt":"2026-07-29","endpointKeys":["manual-transactions-delete"],"summary":"수기관리 티켓 ID를 내부 수기거래 ID로 안전하게 변환하고 연결 상태를 확인한 뒤 삭제하는 API를 추가합니다."}]}]}