그랜터그랜터
그랜터
.md 다운로드
⌘K
.md 다운로드
목차
기본 안내
개요변경 로그
재무 데이터
티켓
조회단건 조회수정첨부 업로드갱신
티켓 연결
조회생성해제
자산/시장
자산 조회잔액 조회자금일보환율 조회
기관 연동
상태 조회로그인 연동로그인 재연동
기준 정보
태그
조회생성수정그룹 조회1차 조회 (deprecated)1차 생성 (deprecated)1차 수정 (deprecated)2차 조회 (deprecated)2차 생성 (deprecated)2차 수정 (deprecated)
계정과목
조회생성수정
인원/팀
인원 조회인원 초대팀 조회
거래처
조회생성수정담당자 추가담당자 수정담당자 삭제
운영 데이터
전자결재
조회생성
급여
조회생성
재고
품목 조회재고 조회
근태/휴가
근무 조회휴가 잔여 조회휴가 변경 조회공휴일 조회
수기 입력
수기 자산/거래
카드 생성계좌 생성카드거래 입력계좌거래 입력수기전표 생성수기전표 삭제
수기 증빙
세금계산서 입력현금영수증 입력
증빙 발행
세금계산서
발행수정발행취소발행
현금영수증
발행취소발행
참고
에러 응답집계 팁

granter API

그랜터 Public Docs API는 자산 연동 현황, 기관 연동 상태, 거래·증빙 데이터, 분류 기준, 잔액 흐름을 외부 시스템과 AI가 함께 이해할 수 있도록 구조화해 제공하는 연동 문서입니다. 발급된 API key와 Basic 인증만으로 권한 범위의 데이터를 안전하게 조회하고, 로그인 기반 기관 연동·재연동을 요청하고, 티켓 데이터 갱신을 요청하고, 티켓의 계정과목·태그·설명·사용 직원과 계좌 거래처를 수정하고, 티켓에 증빙 파일을 첨부하고, 티켓 간 연결내역을 조회하거나 연결을 생성·해제하고, 수기 카드·계좌와 해당 수기 거래, 수기 세금계산서·현금영수증을 입력하고, 인원 초대, 거래처·전자결재·급여 내역 생성, 거래처 담당자 추가·수정·삭제와 세금계산서·현금영수증의 발행, 취소발행, 수정발행, 계약 조회와 계약 입금내역 연결·완료 처리·발급 문서 재전달 같은 작업까지 자동화할 수 있습니다. 터미널 연동이 필요하면 공식 granter CLI로 같은 API key를 설정해 바로 호출할 수 있습니다.

문서 이해를 위한 빠른 가이드

1) 이 문서가 다루는 범위
- `assets`: 카드, 계좌, 홈택스, 스토어처럼 거래가 들어오는 자산·연동 대상을 조회합니다.
- `organizations`: 은행, 카드, 증권, 홈택스 등 기관의 연동 가능 상태와 현재 연결 상태를 조회합니다.
- `organizations-login-connect`, `organizations-login-reconnect`: 기관 로그인 ID/PW로 신규 연동 또는 재연동을 요청합니다.
- `cards-create`, `bank-accounts-create`: 자동 연동이 아닌 외부 시스템 기준의 수기 카드·계좌를 생성합니다.
- `card-usages-create`, `bank-transactions-create`: 생성된 수기 카드·계좌에 카드 승인/계좌 입출금 거래를 일괄 입력해 티켓을 만듭니다.
- `manual-transactions-create`, `manual-transactions-delete`: 수기관리 전표를 거래처 ID 기준으로 일괄 생성하거나 잘못 생성된 전표를 티켓 ID 기준으로 일괄 삭제합니다.
- `tax-invoices-create`, `cash-receipts-create`: 국세청 발행 없이 외부 시스템 기준의 수기 세금계산서·현금영수증을 입력합니다.
- `tickets`: 카드 승인, 계좌 입출금, 세금계산서, 현금영수증, 결재 등 실제 업무에서 발생한 거래·증빙 이벤트를 조회합니다.
- `tickets-update`: 티켓의 계정과목, 태그(다중 태그), 설명, 사용 직원과 계좌 티켓의 거래처를 단건 또는 묶음으로 수정합니다.
- `tickets-attachments-create`: 티켓 ID를 지정해 송금내역증·인보이스·신고필증 같은 증빙 파일을 첨부로 올립니다(파일 1개, 4MB까지). 같은 이름·같은 내용의 첨부가 이미 있으면 다시 올리지 않습니다.
- `tickets-complete-without-reference`, `tickets-uncomplete-without-reference`: 미연결 세금계산서를 연결없이 완료 처리하거나 완료 전 상태로 되돌립니다.
- `ticket-references`: 특정 티켓에 연결된 카드·계좌·증빙·결재 티켓 목록을 조회합니다.
- `ticket-references-create`: 세금계산서·현금영수증·수기관리·결재 같은 증빙/업무 티켓과 카드·계좌 거래 티켓을 연결 생성합니다.
- `ticket-references-create-bulk`: 여러 티켓 연결을 한 요청에서 생성하고 항목별 성공·실패를 확인합니다.
- `ticket-references-delete`: 잘못 연결됐거나 더 이상 유효하지 않은 티켓 연결을 해제합니다. 티켓 원본은 삭제하지 않습니다.
- `tickets-refresh`: 워크스페이스의 거래·증빙 데이터 갱신을 요청합니다. 요청은 비동기로 접수되며 새 데이터 반영까지 시간이 걸릴 수 있습니다.
- `tax-invoices-issue`: 세금계산서를 즉시발행, 예약발행, 반복발행 형태로 생성합니다.
- `tax-invoices-modify-issue`, `tax-invoices-cancel-issue`: 세금계산서 수정발행과 취소발행을 처리합니다.
- `cash-receipts-issue`, `cash-receipts-cancel-issue`: 현금영수증 발행과 취소발행을 처리합니다.
- `people-invite`: 외부 시스템의 구성원 정보를 기준으로 워크스페이스 인원을 초대합니다.
- `ticket-tags-create`, `ticket-tags-update`, `categories-create`, `categories-update`: 외부 시스템의 분류 기준을 그랜터 태그·계정과목 기준과 맞춥니다. 삭제 API는 아직 공개하지 않습니다. 1차/2차 태그 API(`tags-*`, `tag-details-*`)는 deprecated 입니다.
- `contacts-create`, `contacts-update`: 외부 시스템에서 거래처 기준 데이터를 생성·수정합니다. 거래처 삭제 API는 아직 공개하지 않습니다.
- `contacts-managers-create`, `contacts-managers-update`, `contacts-managers-delete`: 거래처에 속한 담당자(이름·휴대전화·전화·팩스·이메일·메모)를 추가·수정·삭제합니다. 거래처 생성 시 `managers`로 함께 추가할 수도 있습니다.
- `workspace-profile`, `user-profiles`: 워크스페이스 이름·아이콘과 구성원 프로필 이미지를 포함한 기본 프로필 정보를 조회합니다.
- `subscription`: 워크스페이스의 현재 요금제, 구독 상태, 활성 자산 수, 예상 결제 금액을 조회합니다.
- `workflows-create`: 외부 시스템에서 전자결재 문서를 생성합니다. 전자결재 수정/삭제 API는 아직 공개하지 않습니다.
- `workflows`: 전자결재 문서, 결재선, 승인 상태처럼 결재 프로세스 자체를 조회합니다.
- `salary-histories`: 직원별 급여 내역, 지급 상태, 공제/수당 상세처럼 급여 도메인 데이터를 조회합니다.
- `salary-histories-create`: 외부 시스템에서 급여 내역을 생성합니다. 급여 수정/삭제 API는 아직 공개하지 않습니다.
- `contracts`, `contracts-detail`: 업무 > 계약의 계약 목록과 상세(문서 발급·납부 현황, 연결된 입금내역·세금계산서, 계약서 서명 상태, 변경 이력)를 조회합니다.
- `contracts-payment-proofs-link`, `contracts-payment-proofs-unlink`: 계좌 입금 거래를 계약의 입금내역으로 연결하거나 연결을 해제합니다.
- `contracts-complete`, `contracts-uncomplete`: 계약을 완료 처리(결제 완료 기록)하거나 대기 상태로 되돌립니다.
- `contracts-documents-resend`: 발급된 견적서·청구서·거래명세서를 기존 수신자에게 다시 전달합니다. 새 계약 작성·문서 발급·계약 삭제 API는 아직 공개하지 않습니다.
- `inventory-products`, `inventories`: 품목 마스터와 현재 재고 수량을 분리해서 조회합니다.
- `balances`: 계좌별 잔액 흐름을 시계열로 조회해 자금 추이와 현금 상태를 파악할 수 있습니다.
- `daily-financial-report`: `balances`, 계좌 거래, 환율, 자산 정보를 조합해 자금일보용 잔액 표를 제공합니다. 대출 계좌는 일반 잔액 합계에서 분리됩니다.
- `workspace-profile`, `user-profiles`, `subscription`, `ticket-tags`, `ticket-tag-groups`, `categories`, `people`, `teams`, `contacts`: 원시 거래를 사람이 이해할 수 있는 회계·운영 언어로 바꾸는 기준 데이터를 조회합니다.
2) 추천 연동 순서
1. 발급된 live key 또는 test key를 준비하고 Basic 인증을 연결합니다.
2. `workspace-profile`, `user-profiles`, `subscription`, `people`, `teams`, `contacts`, `categories`, `ticket-tags`를 먼저 동기화해 회사·담당자·요금제·분류 기준을 맞춥니다.
3. 외부 HR/ERP에서 구성원을 동기화해야 하면 `people-invite`로 먼저 초대하고, 이후 `people`로 워크스페이스 인원 ID를 수집합니다.
4. 외부 분류 체계를 기준으로 맞춰야 하면 `ticket-tags-create`, `ticket-tags-update`, `categories-create`, `categories-update`를 연결합니다.
5. 외부 CRM/ERP의 거래처 마스터를 기준으로 맞춰야 하면 `contacts-create`, `contacts-update`를 연결합니다. 거래처 담당자는 `contacts-managers-create`, `contacts-managers-update`, `contacts-managers-delete`로 동기화합니다. 거래처 자체의 삭제 동기화는 아직 Public API로 제공하지 않습니다.
6. 외부 시스템에서 결재 문서를 올려야 하면 `workflows-create`를 연결하고, 결재 상태/결재선은 `workflows`로 수집합니다.
7. 외부 급여 시스템에서 산출한 급여대장을 올려야 하면 `salary-histories-create`를 연결하고, 지급 상태/공제 내역은 `salary-histories`로 수집합니다.
8. 급여 분석이나 인건비 자동화가 필요하면 `salary-histories`를 별도 도메인으로 함께 수집합니다.
9. 재고를 운영한다면 `inventory-products`와 `inventories`를 함께 수집해 품목 마스터와 수량 현황을 분리 적재합니다.
10. `organizations`로 지원 기관과 현재 연동 상태를 확인하고, 필요하면 로그인 연동 API로 기관 연결을 먼저 완료합니다.
11. `assets`로 어떤 자산에서 데이터가 들어오는지 파악합니다.
12. 최신 데이터가 필요하면 `tickets-refresh`로 갱신을 요청한 뒤 약 30분 후 `tickets`를 다시 조회합니다.
13. 외부 시스템의 자체 어드민 데이터를 그랜터로 밀어 넣어야 하면 수기 입력 API 묶음(`cards-create`, `bank-accounts-create`, `card-usages-create`, `bank-transactions-create`, `manual-transactions-create`, `manual-transactions-delete`, `tax-invoices-create`, `cash-receipts-create`)을 연결합니다.
14. `tickets`를 수집해 실제 거래·증빙 원천 데이터를 적재합니다.
15. 수집 후 수동 보정이나 외부 자동분류 결과 반영이 필요하면 `tickets-update`로 계정과목, 태그, 설명, 사용 직원과 계좌 티켓의 거래처를 정정합니다.
16. 정산 상태를 함께 적재해야 하면 `ticket-references`로 각 증빙 또는 결제 티켓의 현재 연결내역을 조회합니다.
17. 외부 시스템에서 이미 대금 지급/수납 매칭이 끝난 경우 `ticket-references-create`로 증빙 티켓과 카드·계좌 티켓을 연결합니다. 연결되지 않은 증빙은 거래처별 미수/미지급 후보로 남겨 두고, 실제 입출금·카드 결제가 확인된 시점에 연결하세요.
18. 여러 연결을 한 번에 처리하려면 `ticket-references-create-bulk`를 사용하고 응답의 항목별 결과를 확인합니다.
19. 실제 결제 연결 없이 정산이 끝난 미연결 세금계산서는 `tickets-complete-without-reference`로 완료 처리하고, 잘못 처리한 건은 `tickets-uncomplete-without-reference`로 되돌립니다.
20. 매칭이 잘못됐거나 외부 시스템에서 정산이 취소된 경우 `ticket-references`로 연결 관계 ID(`ticketReferenceId`)를 확인한 뒤 `ticket-references-delete`로 해당 연결을 해제합니다.
21. 세금계산서 또는 현금영수증 발행 자동화가 필요하면 `tax-invoices-issue`, `tax-invoices-modify-issue`, `tax-invoices-cancel-issue`, `cash-receipts-issue`, `cash-receipts-cancel-issue`를 연결합니다.
22. 자금 흐름까지 보려면 `balances`를 별도 주기로 함께 수집합니다.
23. 자금일보 형태의 바로 사용 가능한 표가 필요하면 `daily-financial-report`를 사용합니다.
24. 거래처 계약과 청구서를 앱의 계약 메뉴에서 관리한다면 `contracts`로 대기·연체 계약을 수집하고, 외부 시스템에서 입금이 확인되면 `contracts-complete`에 입금 거래 ID를 넣어 완료 처리합니다. 입금 없이 정산이 끝난 계약은 ID 없이 완료 처리하고, 잘못 처리한 건은 `contracts-uncomplete`로 되돌립니다.
3) 설계 원칙과 실무 규칙
- 모든 조회는 인증된 권한 범위 안에서만 수행됩니다.
- Public Docs API 앞단의 오용 방지 제한은 클라이언트 IP 기준 분당 120 작업 단위입니다. 일반 요청은 1, `ticket-references-create-bulk`는 연결 항목당 1, 연결없이 완료/되돌리기는 티켓당 2, 계약 상세·완료 되돌리기는 3, 계약 입금내역 연결·해제는 2에 거래당 1, 계약 완료 처리는 3에 거래당 1, 계약 문서 재전달은 5, 거래처 담당자 추가·수정·삭제는 2, 담당자를 함께 보내는 거래처 생성은 1에 담당자당 2를 사용합니다. 초과 시 `429 Too Many Requests`와 `Retry-After`를 반환합니다.
- `tickets-refresh`는 비동기 갱신 요청입니다. 같은 워크스페이스에서 자동화할 때는 30분 이상 간격으로 호출하세요.
- 기관 로그인 연동/재연동 API는 실제 금융기관 또는 홈택스 인증을 시도합니다. 외부 자동화에서는 사용자 동의, 기관 약관, 인증정보 보관 정책을 먼저 확정하세요.
- `ticket-references`는 특정 기준 티켓에 직접 연결된 상대 티켓 목록을 반환합니다. 여러 단계로 이어진 관계를 추적해야 하면 응답에 포함된 상대 티켓 ID로 다시 조회하세요.
- `ticket-references-create`는 현재 그랜터 내부 통합 API와 같은 `targets` 2개 구조를 사용합니다. 이미 연결된 조합을 다시 보내면 backend에서 중복 연결 오류가 반환될 수 있으므로 외부 시스템에서도 멱등 키와 연결 상태를 관리하세요.
- `ticket-references-delete`는 연결 관계 ID(`ticketReferenceId`) 기준으로 동작합니다. 연결된 티켓 ID가 아니라 `ticket-references` 조회 응답의 `ticketReferenceId`를 사용해야 하며, 해제해도 티켓 원본은 삭제되지 않습니다.
- 정산 연결, 미수/미지급 계산처럼 여러 API가 함께 필요한 개념은 `그랜터 데이터 구조와 활용 관점` 섹션을 먼저 읽고, 각 endpoint 섹션에서는 요청 형식과 제한사항만 확인하세요.
- 회계 데이터(거래·증빙)를 지우는 API는 현재 수기관리 전표 삭제만 제공합니다. 태그, 계정과목, 거래처, 전자결재, 급여 등 다른 데이터의 삭제는 앱 또는 담당자 안내를 통해 처리하세요. 거래처 담당자 삭제(`contacts-managers-delete`)는 거래처 연락처 정보 관리로, 거래처·티켓·발행된 증빙은 지우지 않습니다. `ticket-references-delete`는 연결 관계만 제거하고 티켓 원본은 삭제하지 않습니다.
- 모든 인증 Public API 응답의 `Granter-API-Revision`, `Granter-API-Changes`, `Link` 헤더에서 현재 계약 리비전과 해당 endpoint의 변경 내역을 확인할 수 있습니다. 전체 변경 로그는 `/api/public-docs/changelog`에서 조회하세요.
- CLI 사용자는 `granter config --api-key YOUR_API_KEY`로 같은 API key를 등록한 뒤 `granter contacts`, `granter categories` 같은 명령으로 기준 데이터를 조회할 수 있습니다.
- 응답은 원본 구조를 최대한 보존하므로, nullable/optional 필드는 자산 종류와 데이터 출처에 따라 비어 있을 수 있습니다.
- 발행 API의 `Idempotency-Key` 헤더는 optional입니다. 미입력 시 서버가 임의 생성한 키로 upstream 요청을 보냅니다. 다만 재시도 시 같은 키를 유지하지 못하므로, 중복 발행 위험을 줄이려면 클라이언트가 직접 키를 넣는 편이 안전합니다.
- 발행 API에서 `Idempotency-Key`는 같은 발행 payload를 네트워크 장애나 timeout 때문에 재시도할 때만 재사용하세요. 새 세금계산서·현금영수증, 금액·거래처·품목이 바뀐 요청, 사용자가 다시 발행 버튼을 누르는 별도 시도에는 반드시 새 키를 생성해야 합니다.
- 같은 `Idempotency-Key`로 다른 발행 payload를 보내면 서버나 외부 발행기관의 멱등 처리에 따라 새 발행이 생성되지 않고 이전 발행 결과(예: 기존 승인번호)가 반환될 수 있습니다.
- 세금계산서·현금영수증 발행은 활성 홈택스 계정과 유효한 인증서를 전제로 합니다.
- `tax-invoices-create`, `cash-receipts-create`는 국세청 발행/전송 없이 그랜터에 수기 증빙 내역만 생성합니다. 실제 발행이 필요하면 발행 API를 사용하세요.
- 발행 request body는 FE와 backend Swagger의 필수값 기준에 맞춰 검증합니다. AI는 이 문서의 `Request Fields`, `requestNotes`, 예시 body를 기준으로 payload를 만들되, 선택 필드는 비어 있으면 생략할 수 있습니다.
- `assets` API의 HOME_TAX_ACCOUNT 응답은 발행용 인증서(`issueCertificate`)를 노출하지 않습니다. 응답에 해당 필드가 없다는 이유만으로 인증서 미등록으로 판단하지 마세요.
- 세금계산서 발행/수정발행/취소발행에서 `supplier`, `contractor`의 필수값은 `registrationNumber`, `companyName`, 대표자명입니다. 대표자명은 `ceoName`으로 전달합니다.
- 세금계산서·현금영수증 발행 계열의 금액 필드는 모두 정수(integer)로 보내세요. 소수점은 허용하지 않는 것으로 가정하는 편이 안전합니다.
- 취소발행은 현재 그랜터에서 발행된 내역만 지원합니다. 외부 시스템이나 다른 채널에서 발행된 증빙은 취소발행 대상이 아닙니다.
- 세금계산서 수정발행은 수정사유에 따라 한 번 또는 두 번의 요청이 필요할 수 있습니다. `기재사항 착오정정`은 `tax-invoices-modify-issue`를 두 번(당초분 전액 마이너스 1장 + 올바른 내용 1장, 둘 다 `기재사항 착오정정`) 호출합니다. 취소발행 API는 `기재사항 착오정정`을 받지 않습니다.
- 세금계산서 수정발행/취소발행의 허용 사유는 이 문서에 적힌 enum만 사용하세요. backend에 더 많은 사유가 있더라도 현재 Public API에서 바로 허용되지 않을 수 있습니다.
- AI와 사람이 모두 이해하기 쉬운 데이터를 만들려면 `tickets`만 저장하지 말고 `workspace-profile`, `user-profiles`, `subscription`, `workflows`, `salary-histories`, `inventory-products`, `inventories`, `categories`, `tags`, `people`, `teams`, `contacts` 같은 기준 정보도 함께 적재하는 편이 좋습니다.
- 날짜 입력은 `YYYY-MM-DD`, 응답 시각은 주로 ISO-8601 문자열 형식을 사용합니다.
- 금액은 단순 부호보다 `transactionType`, 티켓 타입, endpoint 의미를 함께 보고 해석하는 것이 안전합니다.

API 활용 팁

1) AI에 문서를 전달할 때
- 우측 상단의 `.md 다운로드`로 문서를 내려받아 AI 프롬프트나 지식 파일에 그대로 넣는 방식을 권장합니다.
- Markdown 파일은 endpoint, 요청 필드, 응답 예시가 구조화되어 있어 PDF나 스크린샷보다 AI가 더 안정적으로 읽고 참조할 수 있습니다.
- AI에게 요청할 때는 이 파일 전체를 기준 문서로 주고, 필요한 endpoint와 예시 body를 함께 만들도록 지시하면 가장 안정적입니다.
2) Rate limit 대응
- Public Docs API 앞단의 오용 방지 제한은 클라이언트 IP 기준 분당 120 작업 단위입니다. 일반 요청은 1, `ticket-references-create-bulk`는 연결 항목당 1, 연결없이 완료/되돌리기는 티켓당 2, 계약 상세·완료 되돌리기는 3, 계약 입금내역 연결·해제는 2에 거래당 1, 계약 완료 처리는 3에 거래당 1, 계약 문서 재전달은 5, 거래처 담당자 추가·수정·삭제는 2, 담당자를 함께 보내는 거래처 생성은 1에 담당자당 2를 사용합니다. 초과 시 `429 Too Many Requests`와 `Retry-After`를 반환합니다.
- 여러 endpoint를 한 번에 수집할 때는 동시 요청 수를 낮추고, `429 Too Many Requests`가 오면 잠시 대기한 뒤 재시도하세요.
- 초기 백필이나 대량 적재는 1분 단위 배치로 나누어 호출하는 편이 안전합니다.
3) 조회 기간이 31일을 넘는 경우
- `tickets`는 요청 1회당 최대 366일까지 지원하며, 31일 초과 범위는 서버가 나눠 조회해 합칩니다.
- 그 밖의 기간 기반 조회는 요청 1회당 최대 31일까지 사용할 수 있습니다. 더 긴 기간은 `startDate`, `endDate`를 31일 이하 구간으로 나눠 순차 조회한 뒤 결과를 합치세요.
- 합칠 때는 응답의 `id`를 기준으로 중복을 제거하고, 적재 테이블에서는 보통 `workspaceId + id` 조합을 키로 둡니다.
[
  { "startDate": "2026-01-01", "endDate": "2026-01-31" },
  { "startDate": "2026-02-01", "endDate": "2026-02-28" },
  { "startDate": "2026-03-01", "endDate": "2026-03-31" }
]
4) 발행 API를 안전하게 호출할 때
- 쓰기 요청의 `Idempotency-Key` 헤더는 optional입니다. 생략해도 호출은 가능하지만, 서버가 요청마다 새 키를 만들 수 있으므로 재시도 안전성이 필요하면 직접 넣는 편이 안전합니다.
- `tax-invoices-issue`, `tax-invoices-modify-issue`, `tax-invoices-cancel-issue`는 `supplier`, `contractor`의 `registrationNumber`, `companyName`, 대표자명을 필요로 합니다. 대표자명은 `ceoName`으로 전달하세요.
- 세금계산서와 현금영수증 발행 계열 금액 필드는 모두 정수로 맞춘 뒤 보내세요. AI가 계산할 때도 소수점 반올림 규칙을 추정하지 말고 호출 전 미리 정수값을 확정하는 편이 안전합니다.
- `tax-invoices-issue`는 공급자/공급받는자 정보와 품목 명세를 그대로 전달하므로, 발행 전 계산값(`supplyValue`, `taxAmount`, `totalAmount`)을 먼저 확정하는 편이 좋습니다.
- `cash-receipts-issue`는 `homeTaxAccountId`가 필요합니다. 먼저 `assets` API에서 `assetType=HOME_TAX_ACCOUNT`로 활성 홈택스 자산을 조회해 사용하세요.
- 세금계산서 수정/취소 사유는 이 문서의 enum만 사용하세요. 현재 Public API에서는 수정발행은 `기재사항 착오정정`, `공급가액 변동`, `환입`, 취소발행은 `착오에 의한 이중발급`, `계약의 해제`만 허용합니다.
- 세금계산서 `기재사항 착오정정`은 `tax-invoices-modify-issue`로 두 장을 보냅니다. 한 장은 당초분 전액을 음수로, 한 장은 올바른 내용으로 보내고 두 장 모두 `기재사항 착오정정` 사유와 원본 승인번호를 넣습니다.
- 세금계산서 `환입`(반품)은 `tax-invoices-modify-issue`로 반품된 금액만큼만 음수 1장을 보냅니다. 금액 필드와 품목에 음수가 없으면 400으로 거절합니다.
- 그랜터는 `reportingDate`와 수정사유를 바꾸지 않고 그대로 국세청에 전송합니다. 사유별 작성일 기준(국세청): 기재사항 착오정정·착오에 의한 이중발급=당초 작성일, 공급가액 변동=변동이 생긴 날, 계약의 해제=계약 해제일, 환입=반품된 날.
- 공급받는자가 외국인(`contractorType=FOREIGNER`)이면 `contractor.registrationNumber`에 `9999999999999`를 넣고 `note`(비고)에 외국인등록번호 또는 여권번호를 적습니다(발행 대행사 필수 항목). 개인(`INDIVIDUAL`)은 주민등록번호를 넣습니다. 수정·취소발행도 원본과 같은 `contractorType`·번호로 보냅니다.
- `기재사항 착오정정` 두 장 중 한 장만 거절되면 거절된 장만 같은 원본 승인번호로 다시 보내면 됩니다. 거절된 요청은 저장되지 않습니다. 이미 발행된 장과 같은 `Idempotency-Key`를 쓰면 10분 동안 그 장의 응답이 그대로 돌아오니 새 키를 쓰세요. 그랜터는 같은 원본에 대한 중복 발행을 막지 않으므로 이미 발행된 장을 다시 보내지 않도록 호출하는 쪽에서 관리해야 합니다.
- 현금영수증 `transactAt`(거래일시)은 발행일 기준 전일부터 당일까지만 받습니다. 국세청은 현금영수증 거래일자 소급 발급을 허용하지 않으므로 3~5일 전 거래일로는 발급되지 않습니다. 그랜터는 `transactAt`을 바꾸지 않고 그대로 전달합니다.
- 현금영수증 부분취소는 한 영수증에 여러 번 할 수 있습니다. 매번 `cashReceiptId`에 원본 영수증 ID를 넣고, 금액 필드에는 이번에 취소할 금액을 넣습니다. 취소 금액 합계가 원래 금액을 넘으면 거절됩니다.

granter CLI · Claude Code MCP 연동

1) granter CLI 란
- 터미널에서 `granter` 커맨드로 그랜터 API를 바로 호출할 수 있는 공식 CLI입니다.
- Claude Code 같은 AI 에이전트는 MCP로 연결해 자연어로 그랜터 데이터를 조회·조작할 수 있습니다.
- 패키지: `@granter-biz/cli` · 설치 및 연동 가이드: http://guide.granter.biz/
2) 설치 및 API 키 설정
- 전역 설치: `npm install -g @granter-biz/cli`
- 설치 확인: `granter --version`, `granter --help`
- 개발자센터(`워크스페이스 > 프로필 > API`)에서 발급한 API 키를 등록: `granter config --api-key YOUR_API_KEY`
- 현재 설정 확인: `granter config --show`
3) 기본 조회 커맨드 예시
- 기준 정보: `granter contacts`, `granter categories`, `granter teams`
- 이번 달 카드 사용 내역: `granter tx --type EXPENSE_TICKET --from 2026-04-01 --to 2026-04-17`
- 자산·잔액: `granter assets --type CARD`, `granter bal --from 2026-04-01 --to 2026-04-17`
4) Claude Code MCP 연동
- MCP 서버 등록: `claude mcp add granter -- granter-mcp`
- 이후 `claude` 실행 → Claude Code 안에서 자연어로 "거래처 목록 보여줘", "이번 달 카드 내역 조회해줘", "3월 급여 내역 요약해줘" 처럼 바로 조작할 수 있습니다.

그랜터 데이터 구조와 활용 관점

1) Workspace
Workspace는 하나의 회사 또는 운영 단위를 뜻하는 가장 큰 데이터 경계입니다. 같은 회사 안의 자산, 거래, 태그, 계정과목, 구성원 정보가 모두 이 범위 안에서 조회됩니다. 외부 시스템 입장에서는 "어느 회사의 재무 데이터를 읽고 있는가"를 이해하는 기준이라고 보면 됩니다.
2) Asset (자산)
Asset은 계좌, 카드, 홈택스, 마켓 스토어처럼 거래가 수집되는 연결 대상입니다. 단순 목록이 아니라, 어떤 채널에서 어떤 데이터가 들어오는지 보여주는 출처 정보에 가깝습니다. 자산 유형(`assetType`), 활성 상태(`isActive`), 기관명, 계좌번호/카드번호 같은 식별 정보를 보면 이후 Ticket과 Balance를 어떤 맥락에서 해석해야 하는지 알 수 있습니다.
{
  "id": 101,
  "assetType": "CARD",
  "workspaceId": 123,
  "organizationName": "신한카드",
  "isActive": true
}
3) Ticket (거래 티켓)
Ticket은 실제 업무에서 발생한 거래·증빙 단위 데이터를 의미합니다. 카드 승인 1건, 계좌 입출금 1건, 세금계산서 1건, 현금영수증 1건처럼 "한 번의 재무 이벤트"를 표현한다고 보면 됩니다. 금액(`amount`), 방향(`transactionType`: IN/OUT), 발생일(`transactAt`), 내용(`content`), 분류 상태(`isIncluded`) 등을 가지며, 장부 정리, AI 분류, 분석 리포트, 업무 자동화의 공통 원천 데이터가 됩니다.
{
  "id": 98765,
  "ticketType": "EXPENSE_TICKET",
  "workspaceId": 123,
  "amount": 12000,
  "transactionType": "OUT",
  "transactAt": "2026-02-23T10:15:00.000Z",
  "content": "점심 식대",
  "isIncluded": true
}
4) Ticket Reference (정산 연결)
`ticket-references`는 특정 티켓에 연결된 상대 티켓 목록을 조회하고, `ticket-references-create`는 세금계산서·현금영수증·수기관리·결재 같은 증빙/업무 티켓과 카드 승인·계좌 입출금 같은 실거래 티켓을 연결하며, `ticket-references-delete`는 잘못 맺어진 연결을 해제합니다. 연결은 두 티켓이 같은 경제적 사건에 속한다는 정산 관계를 남기는 작업이며, 연결을 생성하거나 해제해도 원본 증빙을 발행/취소하거나 금융 거래 금액을 생성/수정하지 않습니다.
- 증빙 티켓: `TAX_INVOICE_TICKET`, `CASH_RECEIPT_TICKET`, `MANUAL_TRANSACTION_TICKET`, `WORKFLOW`처럼 매출/매입, 청구, 지출 승인, 채권·채무 발생의 근거가 되는 데이터입니다.
- 실거래 티켓: `EXPENSE_TICKET`, `BANK_TRANSACTION_TICKET`처럼 카드 결제나 계좌 입출금으로 실제 돈이 움직인 데이터입니다.
- 연결내역 응답의 `id`와 `referenceableType`은 연결된 상대 티켓을 가리키고, `ticketReferenceId`는 연결 관계 자체의 ID입니다. 연결 해제 시에는 이 `ticketReferenceId`를 사용합니다.
- 미수금: 매출 세금계산서나 청구성 증빙 중 연결된 입금 거래가 없거나 연결 합계가 증빙 금액보다 작은 금액입니다.
- 미지급금: 매입 세금계산서·현금영수증·결재 증빙 중 연결된 출금/카드 결제가 없거나 연결 합계가 증빙 금액보다 작은 금액입니다.
- 부분 수납/부분 지급은 같은 증빙 티켓에 여러 실거래 티켓을 연결해 표현합니다. 실제 결제·수납이 아직 없으면 임의 실거래 티켓을 만들지 말고 미수/미지급 상태로 유지하세요.
5) Workflow (전자결재 문서)
`workflows`는 기안 문서, 결재 상태, 결재선, 검토자 정보를 담는 전자결재 데이터입니다. `tickets`가 정산·증빙 중심의 재무 이벤트라면, `workflows`는 누가 어떤 안건을 올렸고 현재 몇 차 결재까지 진행됐는지를 보여주는 운영 문서에 가깝습니다. 비용 승인 플로우, 결재 병목 분석, 결재 대기 모니터링, 내부 승인 이력 적재에 적합합니다.
6) Salary History (급여 내역)
`salary-histories`는 급여 지급일, 총급여, 실지급액, 보험료, 세액, 수당·공제 상세를 담는 독립 도메인 데이터입니다. 급여는 티켓 도메인과 별도로 관리되므로, 인건비 분석, 급여 지급 상태 추적, 급여명세 자동화, 노무/세무 협업용 적재가 필요할 때는 `tickets` 대신 `salary-histories`를 직접 읽는 편이 맞습니다. 외부 급여 시스템에서 확정 급여 내역을 그랜터에 올릴 때는 `salary-histories-create`를 사용합니다.
7) Inventory Product / Inventory (품목 / 재고)
`inventory-products`는 품목명, 단가, 통화, 추가 속성 같은 품목 마스터를 조회하는 API이고, `inventories`는 해당 품목의 현재 수량, 메시지 수, 최근 수정 시각 같은 재고 현황을 조회하는 API입니다. 하나는 "무엇을 관리하는가", 다른 하나는 "현재 얼마나 남아 있는가"에 초점이 있으므로 같이 적재하는 편이 자연스럽습니다.
8) Reference Data (분류/담당자 기준 정보)
`categories`, `ticket-tags`, `people`, `teams`, `contacts`는 원시 거래를 사람이 읽을 수 있는 회계·운영 언어로 바꾸는 기준 데이터입니다. 예를 들어 "이 거래가 어떤 비용인지", "어떤 프로젝트/조직/담당자/팀/거래처와 연결되는지"를 설명할 때 사용합니다. 외부 HR/ERP 기준 인원을 그랜터에 추가해야 하면 `people-invite`로 초대한 뒤 `people`에서 ID를 다시 조회합니다. 외부 분류 기준을 그랜터와 맞춰야 하면 태그(`ticket-tags-create`·`ticket-tags-update`)와 계정과목(`categories-create`·`categories-update`)의 create/update API를 사용합니다. 티켓 응답만으로도 일부 정보를 볼 수 있지만, AI 분석이나 외부 리포트까지 고려한다면 이 기준 데이터를 별도로 동기화해 두는 편이 훨씬 안정적입니다.
9) Balance (잔액 시계열)
`balances`는 특정 기간의 계좌 잔액 변화를 보여주는 시계열 데이터입니다. `tickets`가 "무슨 거래가 있었는가"를 설명한다면, `balances`는 "그 결과로 계좌에 얼마가 남아 있는가"를 보여줍니다. 자금 추이, 일별 잔액 리포트, 유동성 모니터링, 현금 흐름 대시보드에 적합한 데이터입니다.
10) 관계와 조회 관점
- Workspace 1개 아래에 여러 Asset이 존재합니다.
- Workspace 1개 아래에 여러 Ticket이 존재합니다.
- Workspace 1개 아래에서 세금계산서·현금영수증 발행/취소발행/수정발행 요청이 수행됩니다.
- Workspace 1개 아래에 여러 Workflow(전자결재 문서)가 존재합니다.
- Workspace 1개 아래에 여러 Salary History(급여 내역)가 존재합니다.
- Workspace 1개 아래에 여러 Inventory Product(품목)와 Inventory(재고 엔트리)가 존재합니다.
- Ticket은 특정 Asset에서 수집된 거래나 증빙 이벤트를 표현합니다.
- `workflows` API는 결재 문서, 결재선, 승인 진행 상태를 읽을 때 사용합니다.
- `people-invite` API는 외부 시스템의 구성원 정보를 워크스페이스 초대로 반영할 때 사용합니다.
- `ticket-tags-create`, `ticket-tags-update`, `categories-create`, `categories-update` API는 외부 분류 기준을 그랜터 기준 데이터에 반영할 때 사용합니다.
- `salary-histories` API는 직원별 급여 내역, 지급 상태, 공제/수당 구성을 읽을 때 사용합니다.
- `salary-histories-create` API는 외부 시스템에서 계산한 급여 내역을 그랜터 급여대장에 추가할 때 사용합니다.
- `inventory-products`는 품목 마스터를, `inventories`는 현재 수량과 재고 상태를 읽을 때 사용합니다.
- `assets` API는 데이터 출처와 연동 상태를 이해할 때, `tickets` API는 실제 거래 원천 데이터를 읽을 때 사용합니다.
- `tickets-update` API는 수집된 티켓의 계정과목, 태그, 설명, 사용 직원과 계좌 티켓의 거래처를 정정하거나 후처리 자동화를 반영할 때 사용합니다.
- `tickets-attachments-create` API는 외부 시스템에 있는 증빙 파일을 그랜터 티켓의 첨부로 올릴 때 사용합니다.
- `ticket-references` API는 티켓의 현재 정산 연결 상태를 읽을 때 사용합니다.
- `ticket-references-create` API는 증빙 티켓과 실거래 티켓의 정산 관계를 기록할 때 사용합니다.
- `ticket-references-delete` API는 잘못 기록됐거나 취소된 정산 관계를 해제할 때 사용합니다.
- `tax-invoices-issue`, `tax-invoices-modify-issue`, `tax-invoices-cancel-issue`, `cash-receipts-issue`, `cash-receipts-cancel-issue` API는 증빙 발행을 요청하고 승인번호·발행 결과를 응답으로 받습니다.
- `balances` API는 자금 상태와 잔액 흐름을 따로 추적할 때 사용합니다.
- `ticket-tags`(태그), `ticket-tag-groups`(태그 그룹), `categories`, `people`, `teams`, `contacts` API는 Ticket을 해석하고 분류하는 기준 데이터로 사용합니다. 태그는 한 티켓에 여러 개 붙고, 단계는 이름의 `/`로 씁니다(`프로젝트 A/외주`).
11) 통합 시 자주 보는 포인트
- 동일한 회사 데이터를 반복 적재할 때는 `workspaceId + 내부 id` 조합으로 기본 키를 설계하는 것이 일반적입니다.
- 티켓 집계 시에는 `transactionType`, `ticketType`, `isIncluded`를 함께 봐야 사람이 보는 리포트와 AI 분석 결과가 모두 안정적입니다.
- 전자결재 분석이 목적이라면 `workflows.status`, `currentStep`, `steps`를 함께 저장해 결재 대기와 승인 흐름을 추적하는 편이 좋습니다.
- 급여 분석이 목적이라면 `salaryPaymentStatus`, `employmentType`, `recognizedAmount`, `netAmount`를 함께 저장해 지급 현황과 인건비 구조를 분리해서 보는 편이 좋습니다.
- 재고 분석이 목적이라면 `inventory-products`와 `inventories`를 분리 저장하고, `inventoryProductId`로 조인하는 편이 운영 화면과 분석 리포트 양쪽에 유리합니다.
- 자산별 활성 여부와 참조 데이터의 숨김 여부(`isHidden`)는 운영 화면과 외부 리포트에서 의미가 다를 수 있으므로 원본 값을 함께 보관하는 편이 좋습니다.

API 변경 로그

현재 계약 리비전은 2026-10-23.1입니다. 인증 API 응답의 Granter-API-Revision, Granter-API-Changes, Link 헤더에서도 확인할 수 있습니다.

GET JSON 변경 로그

하위호환성 정책: Breaking change 허용

그랜터 Public API는 현재 별도 버전 경로를 운영하지 않으며, 필요한 API 계약 변경에는 breaking change를 허용합니다.

사용자에게 영향을 주는 계약 변경은 이 changelog와 응답의 Granter-API-Revision·Granter-API-Changes 헤더에 기록합니다. 연동 클라이언트는 리비전 변경과 breaking 항목의 migration 안내를 확인해 반영해야 합니다.

2026-10-23.1

2026-10-23
Newtickets-attachments-create-added

티켓 첨부 업로드 API(`POST /api/public-docs/tickets/attachments`, `multipart/form-data`)를 추가합니다. `ticketId`·`ticketType`과 파일 1개(4MB까지)를 보내면 티켓에 첨부하고 새 첨부 ID를 돌려줍니다. 같은 이름·같은 내용(SHA-256)의 첨부가 이미 있으면 다시 올리지 않고 기존 첨부를 `duplicate: true`로 돌려줍니다.

적용일 2026-10-23 · 대상 tickets-attachments-create

2026-10-20.1

2026-10-20
Additivetax-invoices-modify-issue-return-reason

세금계산서 수정발행(`POST /api/public-docs/tax-invoices/modify-issue`)의 `modificationOption.modificationReason`에 `환입`(반품)을 허용합니다. 반품된 금액만큼만 음수로 1장 발행하며, `supplyValue`·`totalAmount`가 음수이고 `tradeItems`에 음수 금액 항목이 있어야 합니다(아니면 400). 기존 사유(`기재사항 착오정정`·`공급가액 변동`)의 동작은 그대로입니다.

적용일 2026-10-20 · 대상 tax-invoices-modify-issue

2026-10-19.1

2026-10-19
Newcontracts-create-beta-added

[베타] 계약 생성·발급 API(`POST /api/public-docs/contracts/create`)를 추가합니다. 계약과 품목을 만들고 견적서·청구서·거래명세서를 발급한 뒤 지정한 이메일·알림톡으로 전달합니다. 베타 참여 회사에만 열리며(그 밖에는 403 `CONTRACT_CREATE_BETA_NOT_ENABLED`), `Idempotency-Key` header가 필수입니다. 계약서(전자서명)는 아직 만들 수 없습니다.

적용일 2026-10-19 · 대상 contracts-create

Newcontracts-tax-invoices-link-added

계약 세금계산서 연결·해제 API(`/api/public-docs/contracts/tax-invoices` POST·DELETE)를 추가합니다. `tax-invoices-issue` 응답의 `id`(원본 세금계산서 ID)로 연결하며, 티켓이 아직 없으면 대기(`pending`)로 받아 두었다가 자동 연결합니다.

적용일 2026-10-19 · 대상 contracts-tax-invoices-link, contracts-tax-invoices-unlink

2026-10-15.1

2026-10-15
Behavioralpurchase-usage-fee-included-shinhan

`EXPENSE_TICKET` 응답의 `purchaseUsage.isFeeAmountIncluded`를 문서화하고, 신한카드 매입내역을 삼성카드와 같이 `true`로 제공합니다. 신한카드 해외 매입 금액은 카드사가 해외 이용수수료를 이미 합산해 내려주지만 수수료를 분리해 주지 않아 `feeAmount`가 0이고 플래그가 `false`로 나가 "수수료 미포함"으로 읽혔습니다. `isFeeAmountIncluded=true`면 `amount`가 수수료를 포함한 최종 금액이니 `feeAmount`를 다시 더하지 마세요.

적용일 2026-10-15 · 대상 tickets

2026-10-14.1

2026-10-14
Newcontact-managers-api-added

거래처 담당자 추가·수정·삭제 API(`/api/public-docs/contacts/managers` POST·PUT·DELETE)를 추가합니다. 추가는 거래처를 다시 조회해 새 담당자 ID(`contactManagerId`)를 돌려주고, 하나로 특정하지 못하면 추측하지 않고 `idConfirmed=false`로 알립니다. 수정은 전달한 필드만 바꾸며, 수정·삭제는 다시 조회한 결과(`verified`)를 함께 돌려줍니다.

적용일 2026-10-14 · 대상 contacts-managers-create, contacts-managers-update, contacts-managers-delete

Additivecontact-create-managers-added

거래처 생성에 선택 필드 `managers`(최대 10명)를 추가합니다. 거래처를 만든 뒤 담당자를 순서대로 추가하고, 응답에 담당자별 결과 `managerResults`와 `managerSummary`를 더합니다. 담당자 추가가 실패해도 거래처 생성은 유지됩니다. `managers`를 보내지 않으면 응답은 기존과 같습니다.

적용일 2026-10-14 · 대상 contacts-create

2026-10-13.1

2026-10-13
Fixtax-invoice-issue-negative-amount-allowed

세금계산서 정발행이 음수 금액(`supplyValue`·`taxAmount`·`totalAmount`, 결제수단 금액, `tradeItems[]`의 수량·단가·공급가액·세액)을 받습니다. 이전에는 0 미만 값을 400(Invalid request body)으로 거절해 마이너스 세금계산서를 발행할 수 없었습니다.

적용일 2026-10-13 · 대상 tax-invoices-issue

2026-10-06.1

2026-10-06
Additiveticket-inclusion-update-added

티켓 수정에 `IS_INCLUDED`+`items[].isIncluded`(포함 여부)를 추가합니다. 이중계상·부가세 납부처럼 집계에서 빼야 하는 티켓을 `isIncluded=false`로 제외하고 `true`로 다시 포함할 수 있습니다.

적용일 2026-10-06 · 대상 tickets-update

Additiveticket-status-filters-added

티켓 조회에 `isIncluded`(포함 여부)·`isClassified`(계정과목 지정 여부) 조건을 추가합니다. `isClassified=false`로 미분류 티켓만 받을 수 있습니다.

적용일 2026-10-06 · 대상 tickets

Additiveticket-update-source-exposed

티켓 응답에 `expenseCategoryUpdateSource`·`isIncludedUpdateSource`(값을 정한 주체)를 내보냅니다. `USER`는 사람이 확정한 값이고 그 밖은 자동 분류입니다.

적용일 2026-10-06 · 대상 tickets, tickets-detail

Additiveasset-scrap-history-exposed

자산 응답에 `scrapHistory`(`lastRequestedAt`·`lastCompletedAt`·`lastFailedAt`)를 추가해 자산별 마지막 수집 요청·성공·실패 시각을 확인할 수 있게 합니다. 수집 이력이 없으면 `null`입니다.

적용일 2026-10-06 · 대상 assets

2026-10-04.1

2026-10-04
Newticket-tags-api-added

태그(다중 태그, v2) 조회·생성·수정과 태그 그룹 조회 API를 추가합니다. 2026-10-01부터 그랜터는 한 티켓에 태그를 여러 개 붙이는 다중 태그만 사용하며, 단계(1차·2차·…)는 태그 이름의 `/`로 표현합니다(예전 1차/2차 태그는 `1차/2차` 이름으로 이관).

적용일 2026-10-04 · 대상 ticket-tags, ticket-tags-create, ticket-tags-update, ticket-tag-groups

Additiveticket-tags-assignment-added

티켓 조회·단건 조회 응답의 `ticketTags`(id·name·ticketTagGroup)를 공개 계약으로 문서화하고, 티켓 조회에 `ticketTagIds` 조건, 티켓 수정에 `TICKET_TAGS`+`ticketTagIds`(태그 전체 교체, 빈 배열은 모두 해제), 수기거래 생성에 `ticketTagIds`를 추가합니다.

적용일 2026-10-04 · 대상 tickets, tickets-detail, tickets-update, manual-transactions-create

Breakinglegacy-tag-assignment-rejected

1차/2차 태그 지정 — 티켓 수정의 `TAG`·`TAG_DETAIL`(`tagId`·`tagDetailId`), 수기거래 생성의 `tagId`·`tagDetailId` — 은 2026-10-03부터 거절됩니다(400). 같은 요청의 다른 변경도 함께 반영되지 않습니다.

적용일 2026-10-03 · 대상 tickets-update, manual-transactions-create

Migration: `ticket-tags` API로 태그 ID를 조회한 뒤, 티켓 수정은 `updateFields`에 `TICKET_TAGS`와 `items[].ticketTagIds`를, 수기거래 생성은 `manualTransactions[].ticketTagIds`를 보내세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있어 이름으로 찾을 수 있습니다.

Deprecatedlegacy-tag-api-deprecated

1차/2차 태그 API(`tags`, `tags-create`, `tags-update`, `tag-details`, `tag-details-create`, `tag-details-update`)와 티켓의 `tag`·`tagId`·`tagDetail`·`tagDetailId` 필드·조건을 deprecated 로 지정합니다. 이 태그는 2026-10-01 이후 앱에 보이지 않고 갱신되지 않으며, 곧 삭제될 예정입니다.

적용일 2026-10-04 · 대상 tags, tags-create, tags-update, tag-details, tag-details-create, tag-details-update, tickets

Migration: 태그 기준 데이터는 `ticket-tags`·`ticket-tag-groups`로, 티켓의 태그는 `ticketTags`로 읽고, 조건은 `ticketTagIds`를 쓰세요.

2026-10-02.1

2026-10-02
Breakingticket-list-overview-all-workspaces

티켓 조회 API의 목록 응답이 모든 워크스페이스에서 요약 기반(목록 V2)으로 바뀝니다. 2026-09-30부터 워크스페이스별로 순차 전환하던 것을 전체로 넓힌 것으로, 기존(V1) 목록 계약은 더 이상 반환하지 않습니다. 응답 원소에는 messages·attachments 원문이 없고 commentCount(댓글 수)·attachmentCount(첨부 수)·ticketReferences(연결내역)가 있으며, isConnected·connectionCount는 결재·계약 연결을 세지 않습니다.

적용일 2026-10-02 · 대상 tickets

Migration: 댓글·변경 기록·첨부 원문이 필요하면 목록 원소의 id·ticketType으로 티켓 단건 조회 API(POST /api/public-docs/tickets/detail)를 호출하세요. 개수만 필요하면 commentCount·attachmentCount를, 결재·계약을 포함한 연결 대상은 ticketReferences를 쓰세요.

2026-10-01.1

2026-10-01
Newcontracts-api-added

업무 > 계약의 계약 목록·상세 조회, 계약 입금내역 연결·해제, 완료 처리·되돌리기, 발급 문서 재전달 API를 추가합니다. 완료 처리는 앱과 같이 계약 결제 상태를 결제 완료로 기록하고, 재전달은 Idempotency-Key header가 필수입니다.

적용일 2026-10-01 · 대상 contracts, contracts-detail, contracts-payment-proofs-link, contracts-payment-proofs-unlink, contracts-complete, contracts-uncomplete, contracts-documents-resend

2026-09-30.1

2026-09-30
Newticket-detail-added

티켓 한 건의 댓글·변경 기록(messages), 첨부파일(attachments) 원문과 연결내역(ticketReferences)을 함께 반환하는 티켓 단건 조회 API(POST /api/public-docs/tickets/detail)를 추가합니다.

적용일 2026-09-30 · 대상 tickets-detail

Breakingticket-list-overview-rollout

티켓 조회 API의 목록 응답을 요약 기반(목록 V2)으로 워크스페이스별 순차 전환합니다. 전환된 응답에는 messages·attachments 원문이 없고 commentCount(댓글 수)와 ticketReferences(연결내역)가 추가됩니다. messageCount는 commentCount와 같은 값이고 attachmentCount는 그대로 제공합니다. isConnected·connectionCount는 결재·계약 연결을 세지 않습니다. 전환 여부는 응답 원소에 ticketReferences 필드가 있는지로 구분할 수 있습니다.

적용일 2026-09-30 · 대상 tickets

Migration: 댓글·변경 기록·첨부 원문이 필요하면 목록 원소의 id·ticketType으로 티켓 단건 조회 API(POST /api/public-docs/tickets/detail)를 호출하세요. 개수만 필요하면 commentCount·attachmentCount를, 결재·계약을 포함한 연결 대상은 ticketReferences를 쓰세요.

Deprecatedticket-list-v1-contract-deprecated

티켓 조회 API의 기존(V1) 목록 계약 — 목록 원소의 messages·attachments 원문, 결재·계약 연결을 포함하던 isConnected·connectionCount 기준 — 을 deprecated 로 지정합니다. 모든 워크스페이스가 목록 V2로 전환되면 곧 삭제될 예정입니다.

적용일 2026-09-30 · 대상 tickets

Migration: 지금 V1 목록을 받고 있어도 미리 옮기세요: 개수는 commentCount·attachmentCount, 연결 대상은 ticketReferences를 쓰고, 댓글·변경 기록·첨부 원문은 티켓 단건 조회 API(POST /api/public-docs/tickets/detail)로 받으세요.

2026-09-16.1

2026-09-16
Behavioralwoori-personal-withdraw-account-credential-added

우리은행(WOORI_BANK) 개인(PERSONAL) ID/PW 연동·재연동에 출금계좌번호(withdrawAccountNo)와 출금계좌 비밀번호(withdrawAccountPassword)를 추가합니다. 우리은행 개인 사이트 개편으로 두 값이 없으면 스크래핑이 실패하며, 해당 요청에서는 두 필드가 모두 필수입니다.

적용일 2026-09-16 · 대상 organizations-login-connect, organizations-login-reconnect

Migration: 우리은행 개인 연동·재연동 요청에 withdrawAccountNo·withdrawAccountPassword를 함께 보내세요. 은행 사이트 계좌인증 목록에 있는 계좌만 사용할 수 있습니다. 다른 기관·우리은행 법인 요청에는 두 필드를 보내지 마세요(400).

2026-08-14.1

2026-08-14
Additivebank-ticket-contact-assignment-added

계좌 티켓의 거래처를 지정하거나 재지정할 수 있도록 bulk-update-individual에 CONTACT와 contactId를 추가합니다.

적용일 2026-08-14 · 대상 tickets-update

Additivesettled-without-reference-added

세금계산서 티켓 응답에 실제 티켓 연결 없이 완료 처리된 상태를 나타내는 settledWithoutReference를 추가합니다.

적용일 2026-08-14 · 대상 tickets

2026-08-05.1

2026-08-05
Additiveticket-date-window-expanded

tickets 조회가 31일 초과 범위를 월 단위로 안전하게 분할·병합하며, 한 요청에서 최대 366일까지 지원합니다.

적용일 2026-08-05 · 대상 tickets

Newticket-references-bulk-create-added

한 요청에서 최대 25개의 티켓 연결을 생성하고 항목별 성공·실패 결과를 반환하는 bulk API를 추가합니다.

적용일 2026-08-05 · 대상 ticket-references-create-bulk

Newtax-invoice-complete-without-reference-added

미연결 세금계산서를 일괄 완료 처리하거나 완료 전 상태로 되돌리는 API를 추가합니다. 연결된 티켓은 안전하게 거부합니다.

적용일 2026-08-05 · 대상 tickets-complete-without-reference, tickets-uncomplete-without-reference

Additivevalidation-error-details-preserved

backend가 제공한 details, errors, fieldErrors 검증 상세를 Public API 오류 응답의 details로 보존합니다.

적용일 2026-08-05 · 대상 모든 Public API

2026-07-29.1

2026-07-29
Additivecontract-change-notices-added

모든 인증 Public API 응답에 현재 계약 리비전, 관련 변경 ID, 변경 로그 링크를 응답 헤더로 제공합니다.

적용일 2026-07-29 · 대상 모든 Public API

Behavioralrate-limit-status-corrected

Public API 앞단 또는 인증 확인 단계의 속도 제한을 401이 아닌 429로 분류하고 Retry-After를 제공합니다.

적용일 2026-07-29 · 대상 모든 Public API

Migration: 401은 API key 오류로만 처리하고, 429는 Retry-After 이후 동일 요청을 재시도하도록 클라이언트 분기를 수정하세요.

Behavioralauth-outage-status-corrected

API key 인증 서버의 일시적 장애를 잘못된 key와 구분하여 401이 아닌 503으로 응답합니다.

적용일 2026-07-29 · 대상 모든 Public API

Migration: 401은 API key를 점검하고, 503은 일시적 장애로 분류하여 지수 백오프로 재시도하세요.

Breakingnickname-canonicalized

응답에 함께 존재하던 nickName과 nickname을 표준 필드 nickname 하나로 통일합니다.

적용일 2026-07-29 · 대상 모든 Public API

Migration: 응답 모델과 필드 접근을 nickname으로 통일하세요.

Additiveticket-connection-summary-added

티켓 응답에 isConnected와 connectionCount 연결 요약을 제공합니다.

적용일 2026-07-29 · 대상 tickets

Newmanual-transactions-create-added

거래처 ID를 포함한 수기관리 전표 다건 생성 API와 안정적인 처리 확인 응답을 추가합니다. upstream이 생성 티켓을 반환하지 않으면 ticketIds와 tickets는 빈 배열입니다.

적용일 2026-07-29 · 대상 manual-transactions-create

Migration: 생성 성공 여부는 ok와 requestedCount로 확인하고, ticketIds가 항상 채워진다고 가정하지 마세요.

Newmanual-transactions-delete-added

수기관리 티켓 ID를 내부 수기거래 ID로 안전하게 변환하고 연결 상태를 확인한 뒤 삭제하는 API를 추가합니다.

적용일 2026-07-29 · 대상 manual-transactions-delete

POST /api/public-docs/tickets

카드, 계좌, 세금계산서, 현금영수증 등 실제 거래·증빙 데이터를 조회합니다.

Deprecated · 기존(V1) 목록 응답은 더 이상 제공되지 않습니다
2026-10-02부터 모든 워크스페이스가 목록 V2 응답을 받습니다. 목록 원소의 `messages`·`attachments` 원문과 결재·계약 연결을 포함하던 `isConnected`·`connectionCount` 기준은 제공되지 않으니, 개수는 `commentCount`·`attachmentCount`, 연결 대상은 `ticketReferences`를 쓰고 원문은 티켓 단건 조회 API(`POST /api/public-docs/tickets/detail`)로 받으세요.

Request Fields

tickets 기간 조회는 한 요청에서 최대 366일까지 지원합니다. 31일 초과 범위는 서버가 달력월 단위로 나눠 조회하고 티켓 타입과 ID 기준으로 중복 제거해 합칩니다. 조회 기간과 관계없이 결과는 거래일시 내림차순으로 정렬합니다.

목록 응답은 모든 워크스페이스에서 요약 기반(목록 V2)입니다(2026-10-02~). 각 원소에는 `ticketReferences`(연결내역)와 `commentCount`(댓글 수)·`attachmentCount`(첨부 수)가 있고, `messages`·`attachments` 원문은 없습니다. 원문이 필요하면 티켓 단건 조회 API(`POST /api/public-docs/tickets/detail`)를 쓰세요. `isConnected`·`connectionCount`는 결재·계약 연결을 세지 않습니다.

태그는 각 원소의 `ticketTags`(다중 태그 — `id`·`name`·`ticketTagGroup`)로 읽습니다. 한 티켓에 여러 개 붙을 수 있고, 특정 태그가 붙은 티켓만 받으려면 `ticketTagIds`를 보내세요. 레거시 `tag`·`tagId`·`tagDetail`·`tagDetailId`는 2026-10-01 이후 갱신되지 않는 deprecated 필드로 곧 삭제될 예정입니다.

`MERCHANT_CARD_TRANSACTION_TICKET`은 포스기 카드 승인·매출전표 단위 조회용입니다. 승인번호, 카드사, 거래금액 같은 원거래 정보를 확인할 때 사용하세요.

`MERCHANT_CARD_SETTLEMENT_DETAIL_TICKET`은 포스기/CREFIA 정산 항목 단위 조회용입니다. `POS-매입금액`, `POS-가맹점수수료`, `POS-포인트수수료`, `POS-기타수수료`처럼 수수료를 포함한 정산 구성 항목을 확인할 때 사용하세요.

`EXPENSE_TICKET`의 `purchaseUsage`(매입내역) 금액은 카드사에 따라 해외 이용수수료가 이미 합산되어 내려옵니다. `purchaseUsage.isFeeAmountIncluded`가 `true`(삼성·신한카드)면 `amount`가 수수료를 포함한 최종 금액이고 `feeAmount`는 0이므로 수수료를 다시 더하지 마세요. `false`면 `amount`에 `feeAmount`를 더한 값이 실제 청구 금액입니다. `cardUsage`(승인내역) 금액에는 수수료가 포함되지 않습니다.

ticketTypeenumrequired

조회 대상 티켓 타입. 아래 TicketType 상세 목록을 참고하세요.

▶TicketType 상세(기본 접힘)
EXPENSE_TICKET·카드-카드 승인/사용 내역 티켓
BANK_TRANSACTION_TICKET·계좌-계좌 입출금 거래 티켓
TAX_INVOICE_TICKET·세금계산서-세금계산서 증빙 티켓
CASH_RECEIPT_TICKET·현금영수증-현금영수증 증빙 티켓
MERCHANT_CARD_TRANSACTION_TICKET·포스기 카드거래-카드 승인·매출전표 단위 티켓. 수수료 항목은 정산상세 타입에서 조회합니다.
MERCHANT_CARD_SETTLEMENT_DETAIL_TICKET·포스기정산 상세-포스기/CREFIA 정산 항목 단위 티켓. 매입금액·가맹점수수료·포인트수수료·기타수수료 조회에 사용합니다.
ECOMMERCE_SETTLEMENT_DETAIL_TICKET·이커머스정산 상세-이커머스 정산 상세 티켓
ECOMMERCE_SALES_DETAIL_TICKET·이커머스매출 상세-이커머스 매출 상세 티켓
SOCIAL_INSURANCE_PREMIUM_TICKET·사회보험료-사회보험료 납부 티켓
PG_SETTLEMENT_DETAIL_TICKET·PG정산 상세-PG 정산 상세 티켓
PG_TRANSACTION_TICKET·PG거래-PG 원거래 티켓
MANUAL_TRANSACTION_TICKET·수기관리-수기 입력 거래 티켓
startDateYYYY-MM-DDrequired

조회 시작일

endDateYYYY-MM-DDrequired

조회 종료일

contactIdnumberoptional

거래처 ID

contactQueryOption"NONE" | "EXACT_MATCH"optional

거래처 검색 옵션

expenseCategoryIdnumberoptional

계정과목 ID

expenseCategoryQueryOption"NONE" | "EXACT_MATCH"optional

계정과목 검색 옵션

ticketTagIdsnumber[]optional

태그 ID 목록(`ticket-tags` API 의 id). 이 태그 중 하나라도 붙은 티켓만 반환합니다. 최대 100개

tagDetailIdnumberoptional

(deprecated) 2차 태그 ID — 2026-10-01 이후 갱신되지 않는 값으로 거릅니다. `ticketTagIds`를 쓰세요

tagDetailQueryOption"NONE" | "EXACT_MATCH"optional

(deprecated) 2차 태그 검색 옵션

tagIdnumberoptional

(deprecated) 1차 태그 ID — 2026-10-01 이후 갱신되지 않는 값으로 거릅니다. `ticketTagIds`를 쓰세요

assetIdnumberoptional

자산 ID

isIncludedbooleanoptional

포함 여부 조건. `false`면 지출 제외된 티켓만, `true`면 포함된 티켓만 반환합니다

isClassifiedbooleanoptional

분류 상태 조건. `false`면 계정과목이 없는(미분류) 티켓만, `true`면 계정과목이 지정된 티켓만 반환합니다

Response Fields

▶[]Ticketrequiredexpandable

BE `/tickets` 원본 응답 배열의 각 원소

idnumberrequired

티켓 ID

workspaceIdnumberrequired

워크스페이스 ID

contentstringrequired

거래/증빙 내용

amountnumberrequired

거래 금액

transactionType"IN" | "OUT" | "ALL"required

입출금 방향

transactAtISO-8601 stringrequired

거래 일시

modifiedTransactAtISO-8601 stringoptional

수정 거래 일시

descriptionstringrequired

설명

▶expenseCategoryExpenseCategoryoptionalexpandable

계정과목

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

anomalyStatus"NORMAL" | "ABUSE_SUSPECTED" | "ABUSE_CONFIRMED" | "ABUSE_REJECTED"required

이상치 상태

status"NONE" | "CONFIRMED" | "USER_CONFIRMED"required

티켓 상태

▶ticketTagsTicketTag[]optionalexpandable

티켓에 붙은 태그(다중 태그) 목록. 목록 V2·단건 조회 응답에 있습니다

idnumberrequired

태그 ID (`ticket-tags` 의 id)

namestringrequired

태그 이름

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

tagstringrequired

(deprecated) 1차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagIdnumber | nullrequired

(deprecated) 1차 태그 ID

contactstringrequired

거래처명

contactIdnumber | undefinedrequired

거래처 ID

tagDetailstringrequired

(deprecated) 2차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagDetailIdnumber | nullrequired

(deprecated) 2차 태그 ID

isIncludedbooleanrequired

포함 여부

expenseCategoryUpdateSourcestring | nulloptional

계정과목을 지정한 주체. `USER`는 사람이 확정한 값, 그 밖(`AI_INFERENCE`·`LLM_INFERENCE`·`PATTERN_CLASSIFICATION`·`CACHE_INFERENCE`·`PAYMENT_PROOF` 등)은 자동 분류입니다

isIncludedUpdateSourcestring | nulloptional

포함 여부를 정한 주체. 값의 의미는 `expenseCategoryUpdateSource`와 같습니다

▶usersUserResponse[]requiredexpandable

연결 유저 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesMessage[]optionalexpandable

댓글·변경 기록 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답(ticketReferences가 있는 응답)에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

메시지 ID

ticketIdnumberrequired

티켓 ID

▶userUserResponserequiredexpandable

작성자

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

userIdnumberrequired

작성자 ID

userNamestringrequired

작성자 이름

contentstringrequired

메시지 내용

typeMessageTyperequired

메시지 타입

createdAtstringrequired

생성 시각

deletedAtstring | nulloptional

삭제 시각

messageCountnumberrequired

댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서는 commentCount와 같은 값입니다.

▶attachmentsAttachment[]optionalexpandable

첨부파일 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

첨부파일 ID

ticketIdnumberrequired

티켓 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

attachmentCountnumberrequired

첨부파일 수

commentCountnumberoptional

삭제되지 않은 댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

ticketTypeTicketTyperequired

조회 대상 티켓 타입

▶cardUsageCardUsageoptionalexpandable

카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶purchaseUsageCardUsageoptionalexpandable

매입 카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶bankTransactionBankTransactionoptionalexpandable

계좌 거래 상세

bankTransactionIdnumberrequired

은행거래 ID

workspaceIdnumberrequired

워크스페이스 ID

transactionType"IN" | "OUT" | "ALL"required

거래 방향

descriptionstringrequired

설명

afterTransactionBalancenumberrequired

거래 후 잔액

originalAfterTransactionBalancenumberoptional

원본 거래 후 잔액

amountnumberrequired

거래 금액

originalAmountnumberoptional

원본 거래 금액

transactAtstringrequired

거래 일시

▶bankAccountTicketAssetrequiredexpandable

계좌 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

counterpartystringoptional

거래 상대방

descriptionTypestringoptional

설명 분류

contentstringoptional

내용

branchstringoptional

지점

▶taxInvoiceTaxInvoiceoptionalexpandable

세금계산서 상세

idnumberrequired

세금계산서 ID

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶issuerobjectrequiredexpandable

발행자

emailstringrequired

이메일

idnumberrequired

유저 ID

isDeletedbooleanrequired

삭제 여부

namestringrequired

이름

▶trusteeTaxInvoiceUserrequiredexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentType"SUMMARY" | "DETAIL"required

내용 타입

transactionType"SELL" | "BUY" | "TRUSTEE"required

거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestringoptional

전송일자

issueDatestringoptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

purposeType"RECEIPT" | "CHARGE"required

영수/청구 구분

representationItemsstringrequired

대표 품목

notestringrequired

비고

status"REPORTED" | "SENT" | "ISSUED"required

상태

taxInvoiceTypestringrequired

세금계산서 종류

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

modificationReasonstringoptional

수정사유

originalApprovalNumbernumberoptional

원본 승인번호

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

paymentStatus"PAID" | "UNPAID"optional

결제 상태

isConnectedbooleanrequired

다른 거래·증빙과 연결되어 있는지 여부. 목록 V2 응답과 티켓 단건 조회 API는 결재·계약 연결을 세지 않습니다.

connectionCountnumberoptional

연결된 거래·증빙 수. isConnected와 같은 기준으로 셉니다.

▶ticketReferencesTicketReference[]optionalexpandable

연결내역(결재·계약 연결 포함). 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

targetIdnumberrequired

연결 상대 ID

targetTypestringrequired

연결 상대 타입(TicketType 또는 WORKFLOW·CONTRACT·PG_SETTLEMENT 같은 연결 대상 타입)

purposestring | nulloptional

연결 목적(예: TAX_INVOICE_PAYMENT_MANAGEMENT, DEDUPLICATE_CHECK_CARD_USAGE)

settledWithoutReferencebooleanoptional

세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부

createdAtISO-8601 stringrequired

생성 시각

parentIdnumberoptional

부모 티켓 ID

isSplittedbooleanrequired

분할 티켓 여부

purchaseStatus"APPROVED" | "PURCHASED" | "PURCHASE_ONLY"optional

매입 상태

isSoftwareExpenditurebooleanoptional

소프트웨어 지출 여부

▶merchantCardTransactionMerchantCardTransactionoptionalexpandable

가맹점 카드 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypeCardTyperequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

installmentMonthnumberrequired

할부개월

transactionTypestringrequired

거래구분

transactAtstringrequired

거래일시

amountnumberrequired

금액

▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable

가맹점 매입 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypestringrequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

transactAtstringrequired

거래일시

purchaseDatestringrequired

매입일

purchaseAmountnumberrequired

매입 금액

totalFeenumberrequired

총 수수료

merchantServiceFeenumberrequired

가맹점 수수료

pointFeenumberrequired

포인트 수수료

etcFeenumberrequired

기타 수수료

paidAmountnumberrequired

지급 금액

expectedPaymentDatestringrequired

지급 예정일

▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable

포스기/CREFIA 정산 상세

idnumberrequired

정산 상세 ID

settlementIdnumberrequired

정산 ID

assetIdnumberrequired

포스기/CREFIA 자산 ID

namestringrequired

항목명

amountnumberrequired

금액

transactionType"IN" | "OUT"required

입출금 방향

▶cashReceiptCashReceiptoptionalexpandable

현금영수증 상세

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

▶manualTransactionManualTransactionoptionalexpandable

수기거래 상세

idnumberrequired

수기거래 ID

currencyCurrencyCoderequired

통화 코드

manualTransactionType"ETC" | "CASH" | "INVOICE"required

수기거래 타입

▶tradeItemsManualTransactionTradeItem[]requiredexpandable

거래 품목

itemNamestringrequired

품목명

quantitynumberrequired

수량

taxAmountnumberrequired

세액

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

isIncludedVatbooleanrequired

단가의 부가세 포함 여부

hasPurchaseCanceledUsagesbooleanoptional

매입 취소 사용내역 보유 여부

▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable

이커머스 정산 상세

▶assetobjectrequiredexpandable

이커머스 스토어 자산

idnumberoptional

자산 ID

organizationstringoptional

조직 (COUPANG, NAVER 등)

nicknamestringoptional

별칭

ecommerceSettlementIdnumberrequired

정산 ID

settlementDatestringrequired

정산일

settlementRationumberrequired

정산 비율

namestringrequired

항목명

amountnumberrequired

금액

typestringrequired

정산 상세 타입

transactionType"IN" | "OUT"required

입출금 방향

isRecommendedbooleanoptional

추천 티켓 여부

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

과세 유형

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketType": "EXPENSE_TICKET",
  "startDate": "2026-03-01",
  "endDate": "2026-03-07"
}'
POST /api/public-docs/tickets
Ticket Response Example
[
  {
    "id": 49176,
    "ticketType": "EXPENSE_TICKET",
    "workspaceId": 1,
    "description": "",
    "content": "GLOBAL SOFTWARE INC.",
    "amount": 14493,
    "transactionType": "OUT",
    "transactAt": "2026-02-28T17:04:34",
    "status": "CONFIRMED",
    "anomalyStatus": "NORMAL",
    "expenseCategory": {
      "id": 1008,
      "name": "숙박비",
      "subInfo": "판매비와 일반관리비",
      "description": "출장업무 등 숙박에 대한 비용",
      "code": "812",
      "type": "COMMON",
      "isHidden": false,
      "costType": "FIXED",
      "isFavorite": false,
      "taxType": "EXEMPT"
    },
    "users": [
      {
        "id": 73,
        "name": "담당자 A",
        "email": "user-a@example.com",
        "isDeleted": false
      }
    ],
    "owners": [
      {
        "id": 73,
        "name": "소유자 A",
        "email": "owner-a@example.com",
        "isDeleted": false
      }
    ],
    "isIncluded": true,
    "tag": "",
    "tagId": null,
    "contact": "",
    "contactId": null,
    "tagDetail": "",
    "tagDetailId": null,
    "ticketTags": [
      {
        "id": 31,
        "name": "프로젝트 A/외주",
        "ticketTagGroup": { "id": 4, "name": "프로젝트" }
      }
    ],
    "messageCount": 1,
    "commentCount": 1,
    "attachmentCount": 1,
    "isConnected": true,
    "connectionCount": 1,
    "ticketReferences": [
      {
        "targetId": 118823,
        "targetType": "BANK_TRANSACTION_TICKET",
        "purpose": "DEDUPLICATE_CHECK_CARD_USAGE"
      },
      {
        "targetId": 5521,
        "targetType": "WORKFLOW",
        "purpose": "WORKFLOW_PAYMENT_MANAGEMENT"
      }
    ],
    "createdAt": "2026-02-28T19:50:38.773108",
    "parentId": null,
    "isSplitted": false,
    "assetId": 53,
    "cardUsage": {
      "workspaceId": 1,
      "card": {
        "id": 53,
        "workspaceId": 1,
        "name": "KB국민 SME기업카드",
        "nickname": "운영 법인카드",
        "number": "558526******0880",
        "organization": "KB",
        "organizationName": "국민카드",
        "businessType": "CD",
        "businessTypeName": "CD",
        "owners": [
          {
            "id": 73,
            "name": "소유자 A",
            "email": "owner-a@example.com",
            "isDeleted": false
          }
        ],
        "isHidden": false,
        "clientType": "CORPORATE",
        "isActive": true,
        "isDormant": false,
        "isPossibleDormant": false,
        "userAutoAssignEnabled": true,
        "isFree": false,
        "hasPassword": false,
        "expirationYear": "2030",
        "expirationMonth": "09",
        "limitAmount": 1000000,
        "usedAmount": 0,
        "remainLimit": 0,
        "previousCardNumber": null
      },
      "organizationName": "국민카드",
      "paymentDate": "2026-02-28T17:04:34",
      "storeName": "GLOBAL SOFTWARE INC.",
      "storeType": "없음",
      "storeAddress": "",
      "storeCorporateNumber": "",
      "amount": 14245,
      "canceledAmount": 0,
      "vat": 0,
      "installmentMonth": 0,
      "paymentType": "FULL",
      "paymentStatus": "NORMAL",
      "approvalNumber": "323461",
      "discountedAmount": 0,
      "originalAmount": "10.00",
      "currency": "USD",
      "isStoreInfoUpdated": true,
      "isPurchased": true
    },
    "purchaseUsage": {
      "workspaceId": 1,
      "card": {
        "id": 53,
        "workspaceId": 1,
        "name": "KB국민 SME기업카드",
        "nickname": "운영 법인카드",
        "number": "558526******0880",
        "organization": "KB",
        "organizationName": "국민카드",
        "businessType": "CD",
        "businessTypeName": "CD",
        "owners": [
          {
            "id": 73,
            "name": "소유자 A",
            "email": "owner-a@example.com",
            "isDeleted": false
          }
        ],
        "isHidden": false,
        "clientType": "CORPORATE",
        "isActive": true,
        "isDormant": false,
        "isPossibleDormant": false,
        "userAutoAssignEnabled": true,
        "isFree": false,
        "hasPassword": false,
        "expirationYear": "2030",
        "expirationMonth": "09",
        "limitAmount": 1000000,
        "usedAmount": 0,
        "remainLimit": 0,
        "previousCardNumber": null
      },
      "organizationName": "국민카드",
      "paymentDate": "2026-02-28T00:00:00",
      "storeName": "GLOBAL SOFTWARE INC.",
      "storeType": "",
      "storeAddress": "",
      "storeCorporateNumber": "",
      "amount": 14493,
      "canceledAmount": 0,
      "vat": 0,
      "installmentMonth": 0,
      "paymentType": "FULL",
      "paymentStatus": "NORMAL",
      "approvalNumber": "GRANTER-0",
      "discountedAmount": 0,
      "originalAmount": "10.000",
      "currency": "USD",
      "purchaseDate": "2026-03-03",
      "exchangeRate": "1449.30",
      "foreignReceiptAmount": "10.00",
      "feeAmount": 187,
      "isFeeAmountIncluded": false
    },
    "bankTransaction": null,
    "taxInvoice": null,
    "paymentStatus": null,
    "purchaseStatus": "PURCHASED",
    "merchantCardTransaction": null,
    "merchantSettlementDetailTransaction": null,
    "merchantPurchaseTransaction": null,
    "cashReceipt": null,
    "manualTransaction": null,
    "hasPurchaseCanceledUsages": false,
    "ecommerceSettlementDetailTransaction": null,
    "taxType": "EXEMPT"
  }
]

POST /api/public-docs/tickets/detail

티켓 한 건의 상세를 조회합니다. 댓글·변경 기록(messages), 첨부파일(attachments) 원문과 연결내역(ticketReferences)을 함께 반환합니다.

Request Fields

티켓 조회 API(`tickets`)로 받은 티켓의 `id`와 `ticketType`을 그대로 넣어 호출하세요.

목록 V2 응답에는 `messages`·`attachments` 원문이 없습니다. 원문이 필요한 티켓만 이 API로 받으세요. 개수만 필요하면 목록의 `commentCount`·`attachmentCount`를 쓰세요.

`isConnected`·`connectionCount`는 결재·계약 연결을 세지 않습니다. 결재·계약을 포함한 전체 연결 대상은 `ticketReferences`에서 확인하세요.

API key가 연결된 워크스페이스의 티켓이 아니면 404를 반환합니다.

응답의 `contactId`는 티켓에 지정된 거래처 ID입니다. 거래처 정보와 담당자(`managers[]`)는 이 ID로 `contacts` 응답에서 찾으세요. 거래처가 지정되지 않은 티켓은 `contactId`가 비어 있습니다.

ticketIdnumberrequired

조회할 티켓 ID(목록 응답의 id)

ticketTypeenumrequired

조회할 티켓 타입. 티켓 조회 API와 같은 TicketType을 씁니다.

Response Fields

idnumberrequired

티켓 ID

workspaceIdnumberrequired

워크스페이스 ID

contentstringrequired

거래/증빙 내용

amountnumberrequired

거래 금액

transactionType"IN" | "OUT" | "ALL"required

입출금 방향

transactAtISO-8601 stringrequired

거래 일시

modifiedTransactAtISO-8601 stringoptional

수정 거래 일시

descriptionstringrequired

설명

▶expenseCategoryExpenseCategoryoptionalexpandable

계정과목

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

anomalyStatus"NORMAL" | "ABUSE_SUSPECTED" | "ABUSE_CONFIRMED" | "ABUSE_REJECTED"required

이상치 상태

status"NONE" | "CONFIRMED" | "USER_CONFIRMED"required

티켓 상태

▶ticketTagsTicketTag[]optionalexpandable

티켓에 붙은 태그(다중 태그) 목록. 목록 V2·단건 조회 응답에 있습니다

idnumberrequired

태그 ID (`ticket-tags` 의 id)

namestringrequired

태그 이름

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

tagstringrequired

(deprecated) 1차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagIdnumber | nullrequired

(deprecated) 1차 태그 ID

contactstringrequired

거래처명

contactIdnumber | undefinedrequired

거래처 ID

tagDetailstringrequired

(deprecated) 2차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagDetailIdnumber | nullrequired

(deprecated) 2차 태그 ID

isIncludedbooleanrequired

포함 여부

expenseCategoryUpdateSourcestring | nulloptional

계정과목을 지정한 주체. `USER`는 사람이 확정한 값, 그 밖(`AI_INFERENCE`·`LLM_INFERENCE`·`PATTERN_CLASSIFICATION`·`CACHE_INFERENCE`·`PAYMENT_PROOF` 등)은 자동 분류입니다

isIncludedUpdateSourcestring | nulloptional

포함 여부를 정한 주체. 값의 의미는 `expenseCategoryUpdateSource`와 같습니다

▶usersUserResponse[]requiredexpandable

연결 유저 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesMessage[]optionalexpandable

댓글·변경 기록 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답(ticketReferences가 있는 응답)에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

메시지 ID

ticketIdnumberrequired

티켓 ID

▶userUserResponserequiredexpandable

작성자

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

userIdnumberrequired

작성자 ID

userNamestringrequired

작성자 이름

contentstringrequired

메시지 내용

typeMessageTyperequired

메시지 타입

createdAtstringrequired

생성 시각

deletedAtstring | nulloptional

삭제 시각

messageCountnumberrequired

댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서는 commentCount와 같은 값입니다.

▶attachmentsAttachment[]optionalexpandable

첨부파일 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

첨부파일 ID

ticketIdnumberrequired

티켓 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

attachmentCountnumberrequired

첨부파일 수

commentCountnumberoptional

삭제되지 않은 댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

ticketTypeTicketTyperequired

조회 대상 티켓 타입

▶cardUsageCardUsageoptionalexpandable

카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶purchaseUsageCardUsageoptionalexpandable

매입 카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶bankTransactionBankTransactionoptionalexpandable

계좌 거래 상세

bankTransactionIdnumberrequired

은행거래 ID

workspaceIdnumberrequired

워크스페이스 ID

transactionType"IN" | "OUT" | "ALL"required

거래 방향

descriptionstringrequired

설명

afterTransactionBalancenumberrequired

거래 후 잔액

originalAfterTransactionBalancenumberoptional

원본 거래 후 잔액

amountnumberrequired

거래 금액

originalAmountnumberoptional

원본 거래 금액

transactAtstringrequired

거래 일시

▶bankAccountTicketAssetrequiredexpandable

계좌 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

counterpartystringoptional

거래 상대방

descriptionTypestringoptional

설명 분류

contentstringoptional

내용

branchstringoptional

지점

▶taxInvoiceTaxInvoiceoptionalexpandable

세금계산서 상세

idnumberrequired

세금계산서 ID

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶issuerobjectrequiredexpandable

발행자

emailstringrequired

이메일

idnumberrequired

유저 ID

isDeletedbooleanrequired

삭제 여부

namestringrequired

이름

▶trusteeTaxInvoiceUserrequiredexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentType"SUMMARY" | "DETAIL"required

내용 타입

transactionType"SELL" | "BUY" | "TRUSTEE"required

거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestringoptional

전송일자

issueDatestringoptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

purposeType"RECEIPT" | "CHARGE"required

영수/청구 구분

representationItemsstringrequired

대표 품목

notestringrequired

비고

status"REPORTED" | "SENT" | "ISSUED"required

상태

taxInvoiceTypestringrequired

세금계산서 종류

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

modificationReasonstringoptional

수정사유

originalApprovalNumbernumberoptional

원본 승인번호

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

paymentStatus"PAID" | "UNPAID"optional

결제 상태

isConnectedbooleanrequired

다른 거래·증빙과 연결되어 있는지 여부. 목록 V2 응답과 티켓 단건 조회 API는 결재·계약 연결을 세지 않습니다.

connectionCountnumberoptional

연결된 거래·증빙 수. isConnected와 같은 기준으로 셉니다.

▶ticketReferencesTicketReference[]optionalexpandable

연결내역(결재·계약 연결 포함). 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

targetIdnumberrequired

연결 상대 ID

targetTypestringrequired

연결 상대 타입(TicketType 또는 WORKFLOW·CONTRACT·PG_SETTLEMENT 같은 연결 대상 타입)

purposestring | nulloptional

연결 목적(예: TAX_INVOICE_PAYMENT_MANAGEMENT, DEDUPLICATE_CHECK_CARD_USAGE)

settledWithoutReferencebooleanoptional

세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부

createdAtISO-8601 stringrequired

생성 시각

parentIdnumberoptional

부모 티켓 ID

isSplittedbooleanrequired

분할 티켓 여부

purchaseStatus"APPROVED" | "PURCHASED" | "PURCHASE_ONLY"optional

매입 상태

isSoftwareExpenditurebooleanoptional

소프트웨어 지출 여부

▶merchantCardTransactionMerchantCardTransactionoptionalexpandable

가맹점 카드 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypeCardTyperequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

installmentMonthnumberrequired

할부개월

transactionTypestringrequired

거래구분

transactAtstringrequired

거래일시

amountnumberrequired

금액

▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable

가맹점 매입 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypestringrequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

transactAtstringrequired

거래일시

purchaseDatestringrequired

매입일

purchaseAmountnumberrequired

매입 금액

totalFeenumberrequired

총 수수료

merchantServiceFeenumberrequired

가맹점 수수료

pointFeenumberrequired

포인트 수수료

etcFeenumberrequired

기타 수수료

paidAmountnumberrequired

지급 금액

expectedPaymentDatestringrequired

지급 예정일

▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable

포스기/CREFIA 정산 상세

idnumberrequired

정산 상세 ID

settlementIdnumberrequired

정산 ID

assetIdnumberrequired

포스기/CREFIA 자산 ID

namestringrequired

항목명

amountnumberrequired

금액

transactionType"IN" | "OUT"required

입출금 방향

▶cashReceiptCashReceiptoptionalexpandable

현금영수증 상세

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

▶manualTransactionManualTransactionoptionalexpandable

수기거래 상세

idnumberrequired

수기거래 ID

currencyCurrencyCoderequired

통화 코드

manualTransactionType"ETC" | "CASH" | "INVOICE"required

수기거래 타입

▶tradeItemsManualTransactionTradeItem[]requiredexpandable

거래 품목

itemNamestringrequired

품목명

quantitynumberrequired

수량

taxAmountnumberrequired

세액

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

isIncludedVatbooleanrequired

단가의 부가세 포함 여부

hasPurchaseCanceledUsagesbooleanoptional

매입 취소 사용내역 보유 여부

▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable

이커머스 정산 상세

▶assetobjectrequiredexpandable

이커머스 스토어 자산

idnumberoptional

자산 ID

organizationstringoptional

조직 (COUPANG, NAVER 등)

nicknamestringoptional

별칭

ecommerceSettlementIdnumberrequired

정산 ID

settlementDatestringrequired

정산일

settlementRationumberrequired

정산 비율

namestringrequired

항목명

amountnumberrequired

금액

typestringrequired

정산 상세 타입

transactionType"IN" | "OUT"required

입출금 방향

isRecommendedbooleanoptional

추천 티켓 여부

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

과세 유형

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets/detail \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketId": 49176,
  "ticketType": "EXPENSE_TICKET"
}'
POST /api/public-docs/tickets/detail
Ticket Detail Response Example
{
  "id": 49176,
  "ticketType": "EXPENSE_TICKET",
  "workspaceId": 1,
  "description": "",
  "content": "GLOBAL SOFTWARE INC.",
  "amount": 14493,
  "transactionType": "OUT",
  "transactAt": "2026-02-28T17:04:34",
  "status": "CONFIRMED",
  "isIncluded": true,
  "users": [
    {
      "id": 73,
      "name": "담당자 A",
      "email": "user-a@example.com",
      "isDeleted": false
    }
  ],
  "messages": [
    {
      "id": 16100,
      "ticketId": 49176,
      "user": {
        "id": 4,
        "name": "운영자 A",
        "email": "operator@example.com",
        "isDeleted": false
      },
      "userId": 4,
      "userName": "운영자 A",
      "content": "출장 숙박비 영수증을 첨부했습니다.",
      "type": "COMMON_MESSAGE",
      "createdAt": "2026-03-01T21:55:02.113201",
      "deletedAt": null,
      "isDeleted": false
    },
    {
      "id": 16099,
      "ticketId": 49176,
      "user": {
        "id": 4,
        "name": "운영자 A",
        "email": "operator@example.com",
        "isDeleted": false
      },
      "userId": 4,
      "userName": "운영자 A",
      "content": "계정과목을 없음에서 숙박비로 변경하였습니다.",
      "type": "COMMON_CHANGE",
      "createdAt": "2026-03-01T21:52:10.826539",
      "deletedAt": null,
      "isDeleted": false
    }
  ],
  "messageCount": 1,
  "commentCount": 1,
  "attachments": [
    {
      "id": 8812,
      "ticketId": 49176,
      "name": "receipt.jpg",
      "uploadedUrl": "https://files.example.com/receipt.jpg",
      "contentType": "image/jpeg"
    }
  ],
  "attachmentCount": 1,
  "isConnected": true,
  "connectionCount": 1,
  "ticketReferences": [
    {
      "targetId": 118823,
      "targetType": "BANK_TRANSACTION_TICKET",
      "purpose": "DEDUPLICATE_CHECK_CARD_USAGE"
    },
    {
      "targetId": 5521,
      "targetType": "WORKFLOW",
      "purpose": "WORKFLOW_PAYMENT_MANAGEMENT"
    }
  ],
  "createdAt": "2026-02-28T19:50:38.773108"
}

POST /api/public-docs/tickets/bulk-update-individual

티켓의 계정과목, 태그(다중 태그), 설명, 사용 직원과 계좌 티켓의 거래처를 단건 또는 묶음으로 수정합니다.

Deprecated · 1차/2차 태그(TAG·TAG_DETAIL) 지정은 지원하지 않습니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용하고, 2026-10-03부터 `TAG`·`TAG_DETAIL`(`tagId`·`tagDetailId`) 지정 요청은 400으로 거절됩니다. 태그는 `updateFields`에 `TICKET_TAGS`를, `items[].ticketTagIds`에 `ticket-tags` API로 조회한 태그 ID를 넣어 지정하세요.

Request Fields

`ticketType`이 같은 티켓만 한 요청에 묶어 보내세요. 단건 수정도 `items` 배열에 1개만 넣으면 됩니다.

계정과목/태그 ID는 먼저 `categories`, `ticket-tags` API로 조회한 뒤 사용하세요.

`TICKET_TAGS`는 티켓의 태그를 `ticketTagIds` 전체로 교체합니다. 보내지 않은 기존 태그는 떼어지고, 빈 배열이면 모든 태그를 해제합니다. 태그를 하나만 더하려면 티켓 조회 응답의 `ticketTags[].id`에 새 ID를 더해 보내세요.

사용 직원 ID는 먼저 `people` 또는 `user-profiles` API로 조회하세요.

계좌 티켓의 거래처를 지정하거나 재지정하려면 `ticketType=BANK_TRANSACTION_TICKET`, `updateFields=["CONTACT"]`, `contactId`를 전달하세요. 거래처 ID는 먼저 `contacts` API로 조회하세요.

`updateFields`에는 현재 `EXPENSE_CATEGORY`, `TICKET_TAGS`, `DESCRIPTION`, `USERS`, `CONTACT`, `IS_INCLUDED`를 사용할 수 있습니다. `CONTACT`는 계좌 티켓에만 지원합니다. `TAG`·`TAG_DETAIL`은 deprecated 로, 보내면 400(`TICKET_TAGS`로 옮기라는 안내)을 돌려줍니다.

`DESCRIPTION`는 기존 설명을 새 문자열로 전체 교체합니다.

`USERS`는 기존 사용 직원 목록을 `userIds` 전체로 교체합니다. 모든 사용 직원 배정을 해제하려면 `userIds`에 `null`을 전달하세요.

ticketTypeenumrequired

수정 대상 티켓 타입

▶허용 값
EXPENSE_TICKET·카드-카드 승인/사용 내역 티켓
BANK_TRANSACTION_TICKET·계좌-계좌 입출금 거래 티켓
TAX_INVOICE_TICKET·세금계산서-세금계산서 증빙 티켓
CASH_RECEIPT_TICKET·현금영수증-현금영수증 증빙 티켓
MANUAL_TRANSACTION_TICKET·수기관리-수기 입력 거래 티켓
items[]arrayrequired

수정할 티켓 목록

items[].ticketIdnumberrequired

수정 대상 티켓 ID

items[].updateFields("EXPENSE_CATEGORY" | "TICKET_TAGS" | "DESCRIPTION" | "USERS" | "CONTACT" | "IS_INCLUDED")[]required

이번 요청에서 적용할 변경 필드 목록

▶허용 값
EXPENSE_CATEGORY·계정과목-`items[].expenseCategoryId`를 함께 전달합니다.
TICKET_TAGS·태그-`items[].ticketTagIds`를 함께 전달합니다. 티켓의 태그를 전체 교체하며 빈 배열이면 모두 해제합니다.
TAG·1차 태그 (deprecated)-지원하지 않습니다(2026-10-03~ 400). `TICKET_TAGS`를 쓰세요.
TAG_DETAIL·2차 태그 (deprecated)-지원하지 않습니다(2026-10-03~ 400). `TICKET_TAGS`를 쓰세요.
DESCRIPTION·설명-`items[].description`을 함께 전달합니다.
USERS·사용 직원-`items[].userIds`를 함께 전달합니다. 기존 배정 목록을 전체 교체합니다.
CONTACT·계좌 거래처-계좌 티켓에서 `items[].contactId`를 함께 전달합니다.
IS_INCLUDED·포함 여부(지출 제외)-`items[].isIncluded`(true/false)를 함께 전달합니다. `false`면 이중계상·부가세 납부처럼 집계에서 빼야 하는 티켓을 제외합니다.
items[].expenseCategoryIdnumberoptional

`updateFields`에 `EXPENSE_CATEGORY`가 포함되면 필수인 계정과목 ID

items[].isIncludedbooleanoptional

`updateFields`에 `IS_INCLUDED`가 포함되면 필수인 포함 여부. `false`면 지출에서 제외, `true`면 다시 포함

items[].ticketTagIdsnumber[]optional

`updateFields`에 `TICKET_TAGS`가 포함되면 필수인 태그 ID 목록(`ticket-tags` API 의 id). 티켓의 태그를 전체 교체하며 빈 배열이면 모두 해제. 최대 100개

items[].tagIdnumberoptional

(deprecated) 1차 태그 ID — 지원하지 않습니다. `ticketTagIds`를 쓰세요

items[].tagDetailIdnumberoptional

(deprecated) 2차 태그 ID — 지원하지 않습니다. `ticketTagIds`를 쓰세요

items[].descriptionstringoptional

`updateFields`에 `DESCRIPTION`이 포함되면 필수인 새 설명

items[].userIdsnumber[] | nulloptional

`updateFields`에 `USERS`가 포함되면 필수인 사용 직원 ID 목록. 기존 목록을 전체 교체하며 `null`이면 모두 해제

items[].contactIdnumberoptional

`BANK_TRANSACTION_TICKET`의 `updateFields`에 `CONTACT`가 포함되면 필수인 거래처 ID

Response Fields

okbooleanrequired

수정 요청 처리 성공 여부

ticketTypeTicketTyperequired

이번 요청에 적용된 티켓 타입

requestedCountnumberrequired

요청한 티켓 수정 건수

updatedFields("EXPENSE_CATEGORY" | "TICKET_TAGS" | "DESCRIPTION" | "USERS" | "CONTACT" | "IS_INCLUDED")[]required

이번 요청에서 적용한 변경 필드 목록

ticketIdsnumber[]required

수정 요청에 포함된 티켓 ID 목록

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets/bulk-update-individual \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketType": "BANK_TRANSACTION_TICKET",
  "items": [
    {
      "ticketId": 18222986,
      "contactId": 252010,
      "updateFields": ["CONTACT"]
    }
  ]
}'
POST /api/public-docs/tickets/bulk-update-individual
Ticket Update Response Example
{
  "ok": true,
  "ticketType": "BANK_TRANSACTION_TICKET",
  "requestedCount": 1,
  "updatedFields": ["CONTACT"],
  "ticketIds": [18222986]
}

POST /api/public-docs/tickets/attachments

티켓 한 건에 증빙 파일 1개를 첨부로 올립니다. 같은 이름·같은 내용의 첨부가 이미 있으면 올리지 않고 기존 첨부를 돌려주며, 올린 뒤 첨부 목록을 다시 읽어 새 첨부 ID를 확인합니다.

Request Fields

요청은 `multipart/form-data`입니다. `ticketId`·`ticketType` 텍스트 필드와 `file` 파일 필드 1개를 보내세요. 여러 파일은 파일마다 한 번씩 호출하세요.

`ticketId`·`ticketType`은 티켓 조회 API(`tickets`)로 받은 티켓의 `id`와 `ticketType`을 그대로 쓰세요. API key가 연결된 워크스페이스의 티켓이 아니면 404를 반환합니다.

파일 하나는 4MB까지 올릴 수 있습니다. 넘으면 413(`FILE_TOO_LARGE`)을 반환하니 그랜터 웹의 내역 상세 화면에서 올려 주세요. 요청 전체가 4.5MB를 넘으면 함수에 닿기 전에 413으로 거절됩니다.

허용 형식: pdf, jpg, jpeg, png, gif, webp, heic, heif, xls, xlsx, csv, doc, docx, ppt, pptx, hwp, hwpx, txt. 그 밖의 형식은 415(`UNSUPPORTED_FILE_TYPE`)입니다.

같은 이름의 첨부가 이미 있으면 그 파일을 내려받아 내용(SHA-256)을 비교합니다. 같으면 새로 올리지 않고 `duplicate: true`와 기존 첨부를 200으로 돌려줍니다. 이름이 같아도 내용이 다르면 새로 올립니다. 내용을 비교하지 못하면 올리지 않고 502(`DUPLICATE_CHECK_FAILED`)를 반환합니다. 중복이어도 올려야 하면 `allowDuplicate=true`를 함께 보내세요.

새로 올리면 201과 새 첨부(`attachment.id`)를 돌려줍니다. 업로드는 접수됐지만 첨부 목록에서 아직 확인하지 못했으면 202와 `verified: false`를 돌려줍니다. 이때는 티켓 단건 조회(`tickets-detail`)로 확인하세요. 같은 파일을 다시 보내도 중복으로 올라가지 않습니다.

티켓 하나에는 첨부를 10개까지 올릴 수 있습니다. 넘으면 409(`ATTACHMENT_LIMIT_REACHED`)입니다.

문서의 테스트 패널은 JSON 본문만 보내므로 이 API를 시험할 수 없습니다. cURL 예시처럼 `-F`로 보내세요. test key로 호출하면 실제로 올리지 않고 응답 예시를 돌려줍니다.

ticketIdnumberrequired

첨부를 올릴 티켓 ID(티켓 조회 응답의 id)

ticketTypeenumrequired

첨부를 올릴 티켓 타입

▶허용 값
EXPENSE_TICKET·카드-카드 승인/사용 내역 티켓
BANK_TRANSACTION_TICKET·계좌-계좌 입출금 거래 티켓
TAX_INVOICE_TICKET·세금계산서-세금계산서 증빙 티켓
CASH_RECEIPT_TICKET·현금영수증-현금영수증 증빙 티켓
MANUAL_TRANSACTION_TICKET·수기관리-수기 입력 거래 티켓
filefilerequired

올릴 파일 1개(4MB까지). 파일 이름이 첨부 이름이 됩니다.

allowDuplicate"true" | "false"optional

true 이면 같은 이름·같은 내용의 첨부가 있어도 새로 올립니다. 기본값 false.

Response Fields

ticketIdnumberrequired

첨부를 올린 티켓 ID

ticketTypeTicketTyperequired

첨부를 올린 티켓 타입

duplicatebooleanrequired

true 이면 같은 이름·같은 내용의 첨부가 이미 있어 새로 올리지 않고 기존 첨부를 돌려준 것입니다(응답 200).

verifiedbooleanrequired

첨부 목록을 다시 읽어 attachment 를 확인했는지 여부. false 이면 업로드는 접수됐지만 아직 확인하지 못한 것입니다(응답 202).

fileSha256stringrequired

보낸 파일 내용의 SHA-256(16진수). 중복 판정에 쓴 지문입니다.

▶attachmentAttachment | nullrequiredexpandable

올린 첨부(또는 중복으로 판정한 기존 첨부). verified=false 이면 null 입니다.

idnumberrequired

첨부 ID

ticketIdnumberrequired

첨부가 붙은 티켓 ID

namestringrequired

파일 이름

uploadedUrlstring | nullrequired

파일을 내려받는 서명 주소(유효기간이 짧습니다)

contentTypestring | nullrequired

파일 형식(MIME)

attachmentCountnumber | nullrequired

확인 시점의 티켓 첨부 개수

messagestringoptional

verified=false 일 때만 — 확인 방법 안내

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets/attachments \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{}'
POST /api/public-docs/tickets/attachments
Ticket Attachment Upload Response Example
{
  "ticketId": 118823,
  "ticketType": "BANK_TRANSACTION_TICKET",
  "fileSha256": "9f2c4d1e6b8a7f3c2d1e0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e",
  "duplicate": false,
  "verified": true,
  "attachment": {
    "id": 90121,
    "ticketId": 118823,
    "name": "remittance-2026-10.pdf",
    "uploadedUrl": "https://files.example.com/remittance-2026-10.pdf",
    "contentType": "application/pdf"
  },
  "attachmentCount": 2
}

POST /api/public-docs/tickets/refresh

워크스페이스에 연결된 카드, 계좌, 홈택스 등 거래·증빙 데이터 갱신을 요청합니다. 요청은 비동기로 접수되며 새 데이터가 즉시 조회되지는 않습니다.

Request Fields

요청 body를 생략하거나 `{}`를 보내면 API key가 연결된 워크스페이스의 지원 자산 전체를 갱신합니다.

특정 자산 종류만 갱신하려면 `assetTypes` 배열을 전달하세요. `requestGroupId`는 서버가 생성하므로 요청에 넣지 않습니다.

응답은 갱신 작업 접수 ACK입니다. 새 데이터 반영까지 약 30분 정도 걸릴 수 있으므로 이후 `tickets`, `balances`, `assets` API를 다시 조회하세요.

중복 수집과 금융기관 중복 로그인을 피하려면 자동화 호출 간격을 30분 이상으로 두세요. 갱신 잠금 시간(30분) 안에 다시 호출하면 새 갱신을 시작하지 않고 `429 Too Many Requests`와 `Retry-After` 헤더(남은 초)를 반환합니다. 응답 본문의 `retryAfterSeconds`에도 같은 값이 들어 있으니 그 시간 뒤에 다시 호출하세요.

assetTypesAssetType[]optional

선택 갱신 대상. 생략/빈 배열이면 지원 자산 전체 갱신

Response Fields

okbooleanrequired

갱신 요청 접수 여부

requestGroupIdstring | nulloptional

백엔드 갱신 작업 추적용 요청 그룹 ID

status"ACCEPTED"required

갱신 요청 접수 상태

estimatedDelayMinutesnumberrequired

새 데이터 반영까지 예상되는 대기 시간(분)

messagestringrequired

갱신 요청 처리 안내 메시지

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets/refresh \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "assetTypes": ["CARD", "HOME_TAX_ACCOUNT", "SOCIAL_INSURANCE_ACCOUNT"]
}'
POST /api/public-docs/tickets/refresh
Ticket Refresh Response Example
{
  "ok": true,
  "requestGroupId": "2f5d8c17-88f9-4f2f-8d7a-04d8cce13b5a",
  "status": "ACCEPTED",
  "estimatedDelayMinutes": 30,
  "message": "데이터 갱신 요청이 접수되었습니다. 새 데이터 반영까지 약 30분 정도 걸릴 수 있습니다."
}

GET /api/public-docs/ticket-references

특정 티켓 또는 전자결재 문서에 직접 연결된 티켓 목록을 조회합니다. 세금계산서·현금영수증·결재 증빙이 어떤 카드 승인이나 계좌 입출금으로 정산됐는지 확인할 때 사용합니다.

Request Fields

`referenceableId`, `referenceableType`은 query string으로 전달합니다. GET 요청이므로 JSON body를 보내지 않습니다.

`referenceableId`는 `tickets` 또는 `workflows` API에서 조회한 티켓/문서 ID입니다.

`referenceableType`에는 backend ReferenceableType을 넣습니다. `Total`은 사용할 수 없으며 사회보험료, PG 원거래, 휴가 기록 타입도 지원합니다.

응답은 기준 티켓에 직접 연결된 상대 티켓 목록입니다. 여러 단계의 연결 관계를 따라가야 하면 응답의 `id`, `referenceableType`으로 다시 조회하세요.

연결이 없는 티켓은 빈 배열(`[]`)을 반환합니다.

referenceableIdnumber(query)required

연결내역을 조회할 기준 티켓 또는 전자결재 문서 ID

referenceableTypeReferenceableType(query)required

기준 티켓 타입. `Total`은 사용할 수 없습니다.

▶주요 허용 값
TAX_INVOICE_TICKET·세금계산서-세금계산서 증빙 티켓
CASH_RECEIPT_TICKET·현금영수증-현금영수증 증빙 티켓
MANUAL_TRANSACTION_TICKET·수기관리-수기 입력 거래/증빙 티켓
WORKFLOW·결재-전자결재 문서 티켓
EXPENSE_TICKET·카드-카드 승인/사용 내역 티켓
BANK_TRANSACTION_TICKET·계좌-계좌 입출금 거래 티켓
MERCHANT_CARD_TRANSACTION_TICKET·가맹점 카드거래-포스/가맹점 카드 승인·매출전표 단위 티켓
MERCHANT_CARD_SETTLEMENT_DETAIL_TICKET·포스기 정산상세-포스/CREFIA 정산 항목 단위 티켓. 수수료 연결·조회 시 사용
ECOMMERCE_SETTLEMENT_DETAIL_TICKET·이커머스 정산상세-이커머스 정산 상세 티켓
PG_SETTLEMENT·PG정산-PG 정산 집계 티켓
PG_SETTLEMENT_DETAIL_TICKET·PG정산 상세-PG 정산 상세 티켓
PG_TRANSACTION_TICKET·PG거래-PG 원거래 티켓
SOCIAL_INSURANCE_PREMIUM_TICKET·사회보험료-사회보험료 납부 티켓
LEAVE_RECORD·휴가-휴가 기록

Response Fields

▶[]TicketReferencerequiredexpandable

기준 티켓에 직접 연결된 상대 티켓 목록

ticketReferenceIdnumberrequired

연결 관계 자체의 ID

idnumberrequired

연결된 상대 티켓 ID

contentstringrequired

연결된 상대 티켓의 거래/증빙 내용

amountnumberrequired

연결된 상대 티켓 금액

transactAtISO-8601 stringrequired

연결된 상대 티켓 거래 일시

referenceableTypeTicketTyperequired

연결된 상대 티켓 타입

purposeConnectionPurposerequired

연결 목적

referenceType"DEDUPLICATION" | "PAYMENT_PROOF"required

연결 타입

transactionType"IN" | "OUT" | nulloptional

연결된 상대 티켓의 입출금 방향

▶assetTicketReferenceAssetoptionalexpandable

연결된 상대 티켓의 자산 정보

organizationNamestringrequired

연결된 상대 티켓의 자산 기관명

assetNamestringrequired

연결된 상대 티켓의 자산명

nicknamestringrequired

연결된 상대 티켓의 자산 별칭

assetNumberstringrequired

연결된 상대 티켓의 자산 번호

contactNamestringoptional

연결된 상대 티켓의 거래처명

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/ticket-references?referenceableId=90101&referenceableType=TAX_INVOICE_TICKET \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/ticket-references?referenceableId=90101&referenceableType=TAX_INVOICE_TICKET
Ticket Reference Response Example
[
  {
    "ticketReferenceId": 88001,
    "id": 50102,
    "content": "HR EXCHANGE 2026 참가비 입금",
    "amount": 16500000,
    "transactAt": "2026-05-12T09:30:00",
    "referenceableType": "BANK_TRANSACTION_TICKET",
    "purpose": "TAX_INVOICE_PAYMENT_MANAGEMENT",
    "referenceType": "PAYMENT_PROOF",
    "transactionType": "IN",
    "asset": {
      "organizationName": "하나은행",
      "assetName": "보통예금",
      "nickname": "운영계좌",
      "assetNumber": "123-***-456789"
    },
    "contactName": "주식회사 샘플"
  }
]

POST /api/public-docs/ticket-references

두 티켓을 연결합니다. 세금계산서·현금영수증·수기관리·결재 같은 증빙/업무 티켓과 카드·계좌 거래 티켓을 연결해 증빙이 어떤 실제 결제·수납으로 정산되었는지 기록합니다.

Request Fields

현재 그랜터 내부 통합 API와 같은 `targets` 2개 구조를 사용합니다.

정산 연결의 의미와 미수/미지급 계산 기준은 상단 `그랜터 데이터 구조와 활용 관점 > Ticket Reference`를 먼저 확인하세요.

`targets`에는 서로 다른 두 티켓을 넣어야 하며 `Total` 타입은 사용할 수 없습니다.

`targets[].id`는 `tickets` API에서 조회되는 티켓 ID입니다. 수기 세금계산서/현금영수증 생성 응답의 원천 증빙 ID와 다를 수 있으므로, 생성 직후 연결하려면 `tickets`로 해당 `TAX_INVOICE_TICKET` 또는 `CASH_RECEIPT_TICKET`을 조회해 ID를 확인하세요.

증빙과 결제 거래를 연결할 때는 보통 첫 번째 target에 증빙 티켓(`TAX_INVOICE_TICKET`, `CASH_RECEIPT_TICKET`, `MANUAL_TRANSACTION_TICKET`, `WORKFLOW` 등), 두 번째 target에 결제 티켓(`EXPENSE_TICKET`, `BANK_TRANSACTION_TICKET`)을 넣습니다.

`isUpdateReferredTicket=true`이면 backend가 지원하는 범위 안에서 연결 대상 티켓의 거래처/상태 같은 참조 정보를 함께 갱신할 수 있습니다.

`Idempotency-Key` header는 optional입니다. 같은 연결을 재시도할 수 있으면 클라이언트가 직접 고정 값을 넣으세요.

isUpdateReferredTicketbooleanoptional

연결 대상 티켓의 참조 정보도 함께 갱신할지 여부. 기본 true

targetsTicketReferenceTarget[2]required

연결할 두 티켓

targets[].idnumberrequired

티켓 ID

targets[].typeReferenceableTyperequired

티켓 타입. `Total`은 사용할 수 없습니다.

▶주요 허용 값
TAX_INVOICE_TICKET·세금계산서-세금계산서 증빙 티켓
CASH_RECEIPT_TICKET·현금영수증-현금영수증 증빙 티켓
MANUAL_TRANSACTION_TICKET·수기관리-수기 입력 거래/증빙 티켓
WORKFLOW·결재-전자결재 문서 티켓
EXPENSE_TICKET·카드-카드 승인/사용 내역 티켓
BANK_TRANSACTION_TICKET·계좌-계좌 입출금 거래 티켓
SOCIAL_INSURANCE_PREMIUM_TICKET·사회보험료-사회보험료 납부 티켓
PG_TRANSACTION_TICKET·PG거래-PG 원거래 티켓
LEAVE_RECORD·휴가-휴가 기록

Response Fields

okbooleanrequired

티켓 연결 요청 처리 성공 여부

isUpdateReferredTicketbooleanrequired

연결 대상 티켓의 거래처/상태 등을 함께 갱신하도록 요청했는지 여부

targets{ id: number; type: TicketType }[]required

연결 요청에 포함된 두 티켓

connectedTicketIdsnumber[]required

연결 요청에 포함된 티켓 ID 목록

connectedTicketTypesTicketType[]required

연결 요청에 포함된 티켓 타입 목록

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/ticket-references \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "isUpdateReferredTicket": true,
  "targets": [
    {
      "id": 90101,
      "type": "TAX_INVOICE_TICKET"
    },
    {
      "id": 50102,
      "type": "BANK_TRANSACTION_TICKET"
    }
  ]
}'
POST /api/public-docs/ticket-references
Ticket Reference Create Response Example
{
  "ok": true,
  "isUpdateReferredTicket": true,
  "targets": [
    {
      "id": 90101,
      "type": "TAX_INVOICE_TICKET"
    },
    {
      "id": 50102,
      "type": "BANK_TRANSACTION_TICKET"
    }
  ],
  "connectedTicketIds": [90101, 50102],
  "connectedTicketTypes": ["TAX_INVOICE_TICKET", "BANK_TRANSACTION_TICKET"]
}

POST /api/public-docs/ticket-references/bulk

여러 티켓 연결을 한 요청에서 생성합니다. 기존 단건 연결 API를 안전한 제한 동시성으로 호출하고 각 연결의 성공·실패를 개별 결과로 반환합니다.

Request Fields

`references` 배열로 한 번에 최대 25개의 연결을 생성할 수 있습니다. 더 큰 작업은 25개 이하 묶음으로 나눠 호출하세요.

각 `references[]` 항목은 단건 `ticket-references-create`와 같은 `isUpdateReferredTicket`, `targets` 계약을 사용합니다.

같은 요청 안에 순서만 다른 동일 티켓 쌍을 중복으로 넣을 수 없습니다.

일부 항목이 실패해도 나머지 항목은 계속 처리합니다. HTTP 200 응답의 `ok`, `failedCount`, `results[]`를 반드시 확인하고 실패한 항목만 재시도하세요.

`Idempotency-Key` header를 전달하면 항목별 키를 결정적으로 파생하므로 동일한 요청 body 재시도가 안전합니다. 다른 body에는 새 키를 사용하세요.

referencesTicketReferenceCreateItem[]required

생성할 티켓 연결 목록(1~25개)

references[].isUpdateReferredTicketbooleanoptional

연결 대상 티켓의 참조 정보도 함께 갱신할지 여부. 기본 true

references[].targetsTicketReferenceTarget[2]required

연결할 서로 다른 두 티켓

references[].targets[].idnumberrequired

티켓 ID

references[].targets[].typeReferenceableTyperequired

티켓 타입. `Total`은 사용할 수 없습니다.

Response Fields

okbooleanrequired

모든 티켓 연결 생성 성공 여부

requestedCountnumberrequired

요청한 티켓 연결 수

succeededCountnumberrequired

성공한 티켓 연결 수

failedCountnumberrequired

실패한 티켓 연결 수

▶resultsTicketReferenceBulkCreateResult[]requiredexpandable

요청 순서와 동일한 항목별 처리 결과

indexnumberrequired

요청 references 배열의 0부터 시작하는 항목 위치

okbooleanrequired

해당 티켓 연결 생성 성공 여부

isUpdateReferredTicketbooleanrequired

연결 대상 티켓의 참조 정보도 함께 갱신하도록 요청했는지 여부

targets{ id: number; type: ReferenceableType }[2]required

해당 항목에서 연결을 요청한 두 티켓

statusnumberoptional

실패한 항목의 upstream HTTP 상태

errorstringoptional

실패한 항목의 오류 메시지

codestringoptional

실패한 항목의 오류 코드

detailsunknownoptional

backend가 제공한 구조화 오류 상세

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/ticket-references/bulk \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "references": [
    {
      "isUpdateReferredTicket": true,
      "targets": [
        { "id": 90101, "type": "TAX_INVOICE_TICKET" },
        { "id": 50102, "type": "BANK_TRANSACTION_TICKET" }
      ]
    },
    {
      "isUpdateReferredTicket": true,
      "targets": [
        { "id": 90102, "type": "TAX_INVOICE_TICKET" },
        { "id": 50103, "type": "BANK_TRANSACTION_TICKET" }
      ]
    }
  ]
}'
POST /api/public-docs/ticket-references/bulk
Ticket Reference Bulk Create Response Example
{
  "ok": true,
  "requestedCount": 2,
  "succeededCount": 2,
  "failedCount": 0,
  "results": [
    {
      "index": 0,
      "ok": true,
      "isUpdateReferredTicket": true,
      "targets": [
        { "id": 90101, "type": "TAX_INVOICE_TICKET" },
        { "id": 50102, "type": "BANK_TRANSACTION_TICKET" }
      ]
    },
    {
      "index": 1,
      "ok": true,
      "isUpdateReferredTicket": true,
      "targets": [
        { "id": 90102, "type": "TAX_INVOICE_TICKET" },
        { "id": 50103, "type": "BANK_TRANSACTION_TICKET" }
      ]
    }
  ]
}

DELETE /api/public-docs/ticket-references

티켓 연결을 해제합니다. `ticket-references`로 조회한 연결 관계 ID(`ticketReferenceId`)를 전달하면 해당 정산 연결만 제거하며, 연결돼 있던 티켓 자체는 삭제하지 않습니다.

Request Fields

`ticketReferenceIds`에는 `ticket-references` 조회 응답의 `ticketReferenceId` 값을 넣습니다. 연결된 상대 티켓 ID(`id`)가 아닙니다.

한 번에 1개 이상 100개 이하의 연결을 해제할 수 있습니다. 단건 해제도 ID 1개짜리 배열로 요청하세요.

해제는 연결 관계만 제거합니다. 증빙·거래 티켓 원본은 남아 있으므로, 해제된 증빙은 다시 미수/미지급 후보로 계산됩니다.

이미 해제됐거나 존재하지 않는 `ticketReferenceId`가 포함되면 backend에서 오류가 반환될 수 있습니다. 해제 전 `ticket-references`로 현재 연결 상태를 확인하세요.

`Idempotency-Key` header는 optional입니다. 같은 해제 요청을 재시도할 수 있으면 클라이언트가 직접 고정 값을 넣으세요.

ticketReferenceIdsnumber[]required

해제할 연결 관계 ID 목록(1~100개). `ticket-references` 조회 응답의 `ticketReferenceId` 값

Response Fields

okbooleanrequired

티켓 연결 해제 요청 처리 성공 여부

deletedTicketReferenceIdsnumber[]required

해제된 연결 관계 ID 목록

deletedCountnumberrequired

해제된 연결 관계 수

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X DELETE https://app.granter.biz/api/public-docs/ticket-references \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketReferenceIds": [88001]
}'
DELETE /api/public-docs/ticket-references
Ticket Reference Delete Response Example
{
  "ok": true,
  "deletedTicketReferenceIds": [88001],
  "deletedCount": 1
}

POST /api/public-docs/tickets/complete-without-reference

실제 입금·출금 티켓을 연결하지 않고 정산이 끝난 미연결 세금계산서를 결제완료(PAID) 상태로 일괄 변경합니다.

Request Fields

현재는 앱의 연결없이 완료 기능과 동일하게 `TAX_INVOICE_TICKET`만 지원합니다.

서버가 요청된 티켓을 모두 먼저 확인한 뒤 상태를 변경합니다. 세금계산서가 아니거나 이미 다른 티켓과 연결된 건이 하나라도 있으면 변경 전에 요청 전체를 거부합니다.

이미 PAID인 티켓은 성공 결과의 `unchanged=true`로 반환하며 다시 수정하지 않습니다.

한 번에 최대 25건까지 처리할 수 있습니다. 항목별 처리 실패는 HTTP 200 응답의 `results`와 `failedCount`로 확인하세요.

`Idempotency-Key` header는 optional입니다. 네트워크 오류로 같은 요청을 재시도할 수 있으면 고정 값을 직접 넣으세요.

ticketType"TAX_INVOICE_TICKET"required

현재 지원하는 대상 티켓 타입

ticketIdsnumber[]required

연결없이 완료 처리할 미연결 세금계산서 티켓 ID 목록(1~25개)

Response Fields

okbooleanrequired

모든 상태변경 성공 여부

ticketType"TAX_INVOICE_TICKET"required

처리 대상 티켓 타입

paymentStatus"PAID" | "UNPAID"required

적용한 결제 상태

requestedCountnumberrequired

요청한 세금계산서 티켓 수

succeededCountnumberrequired

성공 또는 기존 상태 유지로 처리된 수

unchangedCountnumberrequired

이미 목표 상태여서 변경하지 않은 수

failedCountnumberrequired

상태변경에 실패한 수

▶resultsTicketPaymentStatusBatchResult[]requiredexpandable

요청 순서와 동일한 티켓별 처리 결과

ticketIdnumberrequired

처리 대상 세금계산서 티켓 ID

okbooleanrequired

해당 티켓의 상태변경 성공 여부

unchangedbooleanrequired

이미 목표 상태여서 변경하지 않았는지 여부

statusnumberoptional

실패한 항목의 upstream HTTP 상태

errorstringoptional

실패한 항목의 오류 메시지

codestringoptional

실패한 항목의 오류 코드

detailsunknownoptional

backend가 제공한 구조화 오류 상세

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets/complete-without-reference \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketType": "TAX_INVOICE_TICKET",
  "ticketIds": [2512339, 2519677]
}'
POST /api/public-docs/tickets/complete-without-reference
Complete Without Reference Response Example
{
  "ok": true,
  "ticketType": "TAX_INVOICE_TICKET",
  "paymentStatus": "PAID",
  "requestedCount": 2,
  "succeededCount": 2,
  "unchangedCount": 0,
  "failedCount": 0,
  "results": [
    { "ticketId": 2512339, "ok": true, "unchanged": false },
    { "ticketId": 2519677, "ok": true, "unchanged": false }
  ]
}

POST /api/public-docs/tickets/uncomplete-without-reference

연결없이 완료 처리된 미연결 세금계산서를 미결제(UNPAID) 상태로 일괄 되돌립니다.

Request Fields

현재는 `TAX_INVOICE_TICKET`만 지원하며, 다른 티켓과 연결된 세금계산서는 안전하게 거부합니다.

서버가 요청된 티켓을 모두 먼저 확인한 뒤 상태를 변경합니다.

이미 UNPAID인 티켓은 성공 결과의 `unchanged=true`로 반환하며 다시 수정하지 않습니다.

한 번에 최대 25건까지 처리할 수 있습니다. 항목별 처리 실패는 HTTP 200 응답의 `results`와 `failedCount`로 확인하세요.

`Idempotency-Key` header는 optional입니다. 네트워크 오류로 같은 요청을 재시도할 수 있으면 고정 값을 직접 넣으세요.

ticketType"TAX_INVOICE_TICKET"required

현재 지원하는 대상 티켓 타입

ticketIdsnumber[]required

연결없이 완료 상태를 되돌릴 미연결 세금계산서 티켓 ID 목록(1~25개)

Response Fields

okbooleanrequired

모든 상태변경 성공 여부

ticketType"TAX_INVOICE_TICKET"required

처리 대상 티켓 타입

paymentStatus"PAID" | "UNPAID"required

적용한 결제 상태

requestedCountnumberrequired

요청한 세금계산서 티켓 수

succeededCountnumberrequired

성공 또는 기존 상태 유지로 처리된 수

unchangedCountnumberrequired

이미 목표 상태여서 변경하지 않은 수

failedCountnumberrequired

상태변경에 실패한 수

▶resultsTicketPaymentStatusBatchResult[]requiredexpandable

요청 순서와 동일한 티켓별 처리 결과

ticketIdnumberrequired

처리 대상 세금계산서 티켓 ID

okbooleanrequired

해당 티켓의 상태변경 성공 여부

unchangedbooleanrequired

이미 목표 상태여서 변경하지 않았는지 여부

statusnumberoptional

실패한 항목의 upstream HTTP 상태

errorstringoptional

실패한 항목의 오류 메시지

codestringoptional

실패한 항목의 오류 코드

detailsunknownoptional

backend가 제공한 구조화 오류 상세

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tickets/uncomplete-without-reference \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketType": "TAX_INVOICE_TICKET",
  "ticketIds": [2512339, 2519677]
}'
POST /api/public-docs/tickets/uncomplete-without-reference
Uncomplete Without Reference Response Example
{
  "ok": true,
  "ticketType": "TAX_INVOICE_TICKET",
  "paymentStatus": "UNPAID",
  "requestedCount": 2,
  "succeededCount": 2,
  "unchangedCount": 0,
  "failedCount": 0,
  "results": [
    { "ticketId": 2512339, "ok": true, "unchanged": false },
    { "ticketId": 2519677, "ok": true, "unchanged": false }
  ]
}

GET /api/public-docs/organizations

은행, 카드, 증권, 홈택스 등 기관별 연동 가능 여부와 현재 연동 상태를 조회합니다. 로그인 연동 전에 대상 organization, clientType, 지원 loginType을 확인할 때 사용합니다.

Request Fields

GET query로 `organization`, `clientType`, `businessType`, `loginType`, `isConnected`를 선택적으로 전달해 필터링할 수 있습니다.

Public Docs에서는 `AUTH` 로그인 연동 API만 제공합니다. `supportLoginTypes`는 기관이 지원하는 방식 참고값으로 사용하세요.

로그인 방식으로 연동할 수 없는 기관은 현재 Public Docs 연동 대상에서 제외하고, 앱 안의 기관 연동 화면에서 처리하세요.

organizationstring(query)optional

기관 enum. 예: KUKMIN_BANK, KB, HOME_TAX

clientTypePERSONAL | CORPORATE | ALL(query)optional

개인/기업 구분

businessTypestring(query)optional

BK, CD, ST, NT 등 기관 업무 구분

loginTypeAUTH | CERTIFICATION | TEMP(query)optional

현재 연동된 로그인 방식

isConnectedboolean(query)optional

true면 연동된 기관만, false면 미연동 기관만 조회

Response Fields

▶[]Organizationrequiredexpandable

기관 연동 상태 배열

organizationstringrequired

기관 enum

organizationNamestringrequired

기관명

businessTypeBusinessTyperequired

업무 구분

businessTypeNameBusinessTypeNamerequired

업무 구분명

clientTypeClientTyperequired

개인/기업 구분

isConnectedbooleanoptional

연동 여부

isExpiredbooleanoptional

연동 만료 여부

connectedAtISO-8601 string | nulloptional

연동 시각

homepageUrlstring | nulloptional

기관 홈페이지 URL

loginTypeAUTH | CERTIFICATION | TEMPoptional

현재 연동 방식

supportLoginTypesSupportLoginTypes[]required

지원 연동 방식 목록

▶supportScrapingDurationSupportScrapableDuration[]optionalexpandable

지원 조회 기간

clientTypeClientTyperequired

지원 clientType

durationstring | nulloptional

지원 조회 기간

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/organizations \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/organizations
Organization Connection Status Response Example
[
  {
    "organization": "KUKMIN_BANK",
    "organizationName": "KB국민은행",
    "businessType": "BK",
    "businessTypeName": "은행",
    "clientType": "CORPORATE",
    "isConnected": true,
    "isExpired": false,
    "connectedAt": "2026-04-09T09:30:00.000Z",
    "homepageUrl": "https://obank.kbstar.com",
    "loginType": "AUTH",
    "supportLoginTypes": ["AUTH"],
    "supportScrapingDuration": [
      {
        "clientType": "CORPORATE",
        "duration": "최근 1년"
      }
    ]
  }
]

POST /api/public-docs/organizations/certifications/connect

공동인증서 정보로 기관을 신규 연동합니다. 은행/카드/증권은 organization 목록을 전달하고, 홈택스는 organization에 HOME_TAX와 registrationNumber를 함께 전달합니다.

Request Fields

`organization` 단건 또는 `organizations` 배열 중 하나를 전달하세요. 은행/카드/증권은 여러 기관을 한 번에 요청할 수 있습니다.

`clientType` 기본값은 CORPORATE입니다. organization 상태 조회 응답의 clientType이 ALL이면 실제 대상에 맞게 PERSONAL 또는 CORPORATE를 지정하세요.

홈택스 신규 연동에는 `registrationNumber`가 필요합니다. 홈택스 재연동은 별도 registrationNumber 없이 기존 홈택스 자산 기준으로 처리됩니다.

`certFile`, `keyFile`은 인증서 모듈이나 외부 시스템에서 추출한 인증서 원문/base64 값을 그대로 전달합니다. 기관 정책상 인증서가 해당 기관 사이트에 등록되어 있어야 성공할 수 있습니다.

`requestGroupId`는 생략하는 것을 권장합니다. 서버가 UUID를 생성하며, 직접 전달할 때만 표준 UUID 형식을 사용하세요.

organizationstringoptional

연동할 기관 enum. organizations 대신 단건으로 전달할 때 사용

organizationsstring[]optional

연동할 기관 enum 배열. 예: [KUKMIN_BANK, KB]

clientTypePERSONAL | CORPORATE | ALLoptional

개인/기업 구분. 기본 CORPORATE

certFilestringrequired

인증서 파일 원문 또는 base64 문자열

keyFilestringoptional

개인키 파일 원문 또는 base64 문자열

certFingerPrintstringrequired

인증서 fingerprint

passwordstringrequired

인증서 비밀번호

certificationInformationobjectoptional

인증서 소유자/만료일/발급기관 정보

registrationNumberstringoptional

HOME_TAX 신규 연동 시 필요한 사업자등록번호

requestGroupIdUUIDoptional

선택 추적 ID. 생략 시 서버에서 UUID 생성

Response Fields

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/organizations/certifications/connect \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "organizations": ["KUKMIN_BANK", "KB"],
  "clientType": "CORPORATE",
  "certFile": "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----",
  "keyFile": "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----",
  "certFingerPrint": "7A:9B:11:22:33",
  "password": "certificate-password",
  "certificationInformation": {
    "ownerName": "샘플회사",
    "expireDate": "2027-04-08",
    "ca": "금융결제원"
  }
}'
POST /api/public-docs/organizations/certifications/connect
Organization Certificate Connect Response Example
[
  {
    "organization": "KUKMIN_BANK",
    "success": true,
    "message": "기관 연동이 완료되었습니다.",
    "code": "SUCCESS",
    "clientType": "CORPORATE"
  },
  {
    "organization": "KB",
    "success": true,
    "message": "기관 연동이 완료되었습니다.",
    "code": "SUCCESS",
    "clientType": "CORPORATE"
  }
]

POST /api/public-docs/organizations/certifications/reconnect

이미 연동된 기관을 공동인증서 정보로 재연동합니다. 인증서 재발급, 만료, 기관 인증서 등록 변경 후 기존 연결을 갱신할 때 사용합니다.

Request Fields

`organization` 단건 또는 `organizations` 배열 중 하나를 전달하세요.

`requestGroupId` 없이 호출하면 서버가 UUID를 생성합니다. 직접 전달할 때만 표준 UUID 형식을 사용하세요.

응답에 success=false가 포함되면 message를 사용자에게 노출하고, 기관 사이트에서 인증서 등록 상태를 확인하도록 안내하세요.

organizationstringoptional

재연동할 기관 enum. organizations 대신 단건으로 전달할 때 사용

organizationsstring[]optional

재연동할 기관 enum 배열

clientTypePERSONAL | CORPORATE | ALLoptional

개인/기업 구분. 기본 CORPORATE

certFilestringrequired

인증서 파일 원문 또는 base64 문자열

keyFilestringoptional

개인키 파일 원문 또는 base64 문자열

certFingerPrintstringrequired

인증서 fingerprint

passwordstringrequired

인증서 비밀번호

certificationInformationobjectoptional

인증서 소유자/만료일/발급기관 정보

registrationNumberstringoptional

HOME_TAX 재연동에서는 보통 생략

requestGroupIdUUIDoptional

선택 추적 ID. 생략 시 서버에서 UUID 생성

Response Fields

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/organizations/certifications/reconnect \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "organization": "KUKMIN_BANK",
  "clientType": "CORPORATE",
  "certFile": "-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----",
  "keyFile": "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----",
  "certFingerPrint": "7A:9B:11:22:33",
  "password": "certificate-password"
}'
POST /api/public-docs/organizations/certifications/reconnect
Organization Certificate Reconnect Response Example
[
  {
    "organization": "KUKMIN_BANK",
    "success": true,
    "message": "기관 재연동이 완료되었습니다.",
    "code": "SUCCESS",
    "clientType": "CORPORATE"
  }
]

POST /api/public-docs/organizations/login/connect

기관 사이트 로그인 ID/PW로 신규 연동합니다. organization 상태 조회에서 AUTH 로그인을 지원하는 기관에 사용합니다.

Request Fields

`bankingId`/`bankingPassword` 또는 별칭 `loginId`/`loginPassword`를 사용할 수 있습니다.

`clientType` 기본값은 CORPORATE입니다. 개인 계정은 PERSONAL로 지정하세요.

일부 기관은 생년월일, 사업자 정보, OTP 등 추가 인증을 요구할 수 있으며 이 경우 backend message를 그대로 반환합니다.

`requestGroupId`는 생략하는 것을 권장합니다. 서버가 UUID를 생성하며, 직접 전달할 때만 표준 UUID 형식을 사용하세요.

우리은행(WOORI_BANK) 개인(PERSONAL) 연동은 `withdrawAccountNo`(출금계좌번호)와 `withdrawAccountPassword`(출금계좌 비밀번호)를 모두 보내야 합니다. 은행 사이트 계좌인증 목록에 있는 계좌만 사용할 수 있으며, 다른 기관·우리은행 법인 요청에 두 필드를 보내면 400으로 거부됩니다.

organizationstringrequired

연동할 기관 enum

clientTypePERSONAL | CORPORATE | ALLoptional

개인/기업 구분. 기본 CORPORATE

bankingIdstringoptional

기관 로그인 ID. loginId 별칭 가능

bankingPasswordstringoptional

기관 로그인 비밀번호. loginPassword 별칭 가능

birthDatestringoptional

필요 기관용 생년월일. 예: 19900101

withdrawAccountNostringoptional

우리은행 개인 전용 출금계좌번호('-' 없이). WOORI_BANK + PERSONAL 이면 필수, 그 외 기관은 생략. 최대 255자

withdrawAccountPasswordstringoptional

우리은행 개인 전용 출금계좌 비밀번호. WOORI_BANK + PERSONAL 이면 필수, 그 외 기관은 생략. 최대 255자

requestGroupIdUUIDoptional

선택 추적 ID. 생략 시 서버에서 UUID 생성

Response Fields

▶[]ConnectResultrequiredexpandable

기관별 연동/재연동 처리 결과

organizationstringrequired

기관 enum

successbooleanrequired

연동 성공 여부

messagestringrequired

처리 메시지

codestringrequired

처리 코드

clientTypeClientTyperequired

개인/기업 구분

reasonstringoptional

실패 사유

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/organizations/login/connect \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "organization": "KUKMIN_BANK",
  "clientType": "CORPORATE",
  "bankingId": "company-login-id",
  "bankingPassword": "company-login-password"
}'
POST /api/public-docs/organizations/login/connect
Organization Login Connect Response Example
[
  {
    "organization": "KUKMIN_BANK",
    "success": true,
    "message": "기관 연동이 완료되었습니다.",
    "code": "SUCCESS",
    "clientType": "CORPORATE"
  }
]

POST /api/public-docs/organizations/login/reconnect

기관 사이트 로그인 ID/PW로 기존 연결을 재연동합니다. 비밀번호 변경, 만료, 인증 오류 후 연결을 갱신할 때 사용합니다.

Request Fields

`bankingId`/`bankingPassword` 또는 별칭 `loginId`/`loginPassword`를 사용할 수 있습니다.

`requestGroupId` 없이 호출하면 서버가 UUID를 생성합니다. 직접 전달할 때만 표준 UUID 형식을 사용하세요.

성공 후 최신 거래 반영까지 기관별 스크래핑 시간이 추가로 걸릴 수 있습니다.

우리은행(WOORI_BANK) 개인(PERSONAL) 재연동은 `withdrawAccountNo`(출금계좌번호)와 `withdrawAccountPassword`(출금계좌 비밀번호)를 다시 모두 보내야 합니다. 다른 기관·우리은행 법인 요청에는 두 필드를 보내지 마세요.

organizationstringrequired

재연동할 기관 enum

clientTypePERSONAL | CORPORATE | ALLoptional

개인/기업 구분. 기본 CORPORATE

bankingIdstringoptional

기관 로그인 ID. loginId 별칭 가능

bankingPasswordstringoptional

기관 로그인 비밀번호. loginPassword 별칭 가능

birthDatestringoptional

필요 기관용 생년월일. 예: 19900101

withdrawAccountNostringoptional

우리은행 개인 전용 출금계좌번호('-' 없이). WOORI_BANK + PERSONAL 이면 필수, 그 외 기관은 생략. 최대 255자

withdrawAccountPasswordstringoptional

우리은행 개인 전용 출금계좌 비밀번호. WOORI_BANK + PERSONAL 이면 필수, 그 외 기관은 생략. 최대 255자

requestGroupIdUUIDoptional

선택 추적 ID. 생략 시 서버에서 UUID 생성

Response Fields

▶[]ConnectResultrequiredexpandable

기관별 연동/재연동 처리 결과

organizationstringrequired

기관 enum

successbooleanrequired

연동 성공 여부

messagestringrequired

처리 메시지

codestringrequired

처리 코드

clientTypeClientTyperequired

개인/기업 구분

reasonstringoptional

실패 사유

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/organizations/login/reconnect \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "organization": "KUKMIN_BANK",
  "clientType": "CORPORATE",
  "loginId": "company-login-id",
  "loginPassword": "new-company-login-password"
}'
POST /api/public-docs/organizations/login/reconnect
Organization Login Reconnect Response Example
[
  {
    "organization": "KUKMIN_BANK",
    "success": true,
    "message": "기관 재연동이 완료되었습니다.",
    "code": "SUCCESS",
    "clientType": "CORPORATE"
  }
]

POST /api/public-docs/assets

거래가 수집되는 자산과 연동 대상을 조회합니다.

Request Fields

HOME_TAX_ACCOUNT 자산 응답은 홈택스 연결 상태와 사업자 기본 정보를 보여주지만, 발행용 인증서(`issueCertificate`)는 포함하지 않습니다.

`scrapHistory`는 자산별 마지막 수집 요청(`lastRequestedAt`)·성공(`lastCompletedAt`)·실패(`lastFailedAt`) 시각입니다. `lastFailedAt`이 `lastCompletedAt`보다 늦으면 최근 수집이 실패한 상태이므로, 카드처럼 실패 시 거래가 누락되는 자산은 재연결·재수집 여부를 확인하세요. 수집 이력이 없으면 `null`입니다.

assetTypeenumrequired

CARD, BANK_ACCOUNT, HOME_TAX_ACCOUNT, SOCIAL_INSURANCE_ACCOUNT, CUSTOM, MERCHANT_GROUP, SECURITIES_ACCOUNT, ECOMMERCE, PG, MANUAL

Response Fields

▶[]Assetrequiredexpandable

BE `/assets` 원본 응답 배열의 각 원소

idnumberrequired

자산 ID

assetTypeAssetTyperequired

자산 타입

numberstringrequired

자산 번호

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

별칭

organizationOrganizationTyperequired

금융기관 코드

organizationNamestringrequired

금융기관명

businessTypeBusinessTyperequired

업종

businessTypeNameBusinessTypeNamerequired

업종명

isHiddenbooleanrequired

숨김 여부

isActivebooleanrequired

활성 여부

isDormantbooleanrequired

휴면 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isFreebooleanrequired

무료 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientTypeClientTyperequired

고객 유형

userAutoAssignEnabledbooleanrequired

자동 할당 여부

▶scrapHistoryScrapHistory | nullrequiredexpandable

자산별 마지막 수집 이력. 수집 이력이 없으면 null

lastRequestedAtISO-8601 string | nullrequired

마지막 수집 요청 시각

lastCompletedAtISO-8601 string | nullrequired

마지막 수집 성공 시각

lastFailedAtISO-8601 string | nullrequired

마지막 수집 실패 시각

▶cardAssetCardInfooptionalexpandable

카드 자산 정보

expirationYearstringrequired

만료 연도

expirationMonthstringrequired

만료 월

limitAmountnumberrequired

한도 금액

usedAmountnumberrequired

사용 금액

remainLimitnumberrequired

잔여 한도

previousCardNumberstringoptional

이전 카드 번호

▶bankAccountAssetBankAccountInfooptionalexpandable

계좌 자산 정보

accountBalancenumberrequired

계좌 잔액

originalBalancenumberrequired

원본 계좌 잔액

currencyCodestringrequired

통화 코드

startDatestringrequired

조회 시작일

endDatestringrequired

조회 종료일

accountNumberstringrequired

계좌 번호

accountNamestringrequired

계좌명

nicknamestringrequired

별칭

accountTypeAccountTyperequired

계좌 유형

isTransactionVisiblebooleanrequired

거래내역 보유 여부

▶homeTaxAccountAssetHomeTaxAccountInfooptionalexpandable

홈택스 자산 정보

category"CASH_RECEIPT" | "TAX_INVOICE"required

홈택스 자산 카테고리

registrationNumberstringrequired

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringrequired

회사명

ceoNamestringrequired

대표자명

addressstringrequired

주소

contactNamestringrequired

담당자명

telstringrequired

연락처

businessTypesstringrequired

업태

businessItemsstringrequired

종목

▶securitiesAccountAssetSecuritiesAccountInfooptionalexpandable

증권 자산 정보

totalAmountnumberrequired

총액(원화)

depositAmountnumberrequired

예수금(원화)

foreignDepositAmountnumberrequired

외화예수금(원화)

▶foreignDepositsForeignDeposit[]requiredexpandable

외화예수금 보유 목록

idnumberrequired

외화예수금 ID

currencyCurrencyCoderequired

통화 코드

amountnumberrequired

금액

createdAtstringrequired

생성 시각

totalValuationAmountnumberrequired

보유 주식 평가액 합계(원화)

accountNumberstringrequired

계좌번호

▶productsProduct[]requiredexpandable

보유 투자상품

idnumberrequired

상품 ID

productTypestringrequired

상품 유형 코드

productTypeNamestringrequired

상품 유형명

namestringrequired

상품명

codestringoptional

상품 코드

quantitynumberoptional

수량

currencyCurrencyCoderequired

통화 코드

krwPresentAmountnumberoptional

현재 금액(원화)

presentAmountnumberoptional

현재 금액

krwValuationAmountnumberoptional

평가 금액(원화)

valuationAmountnumberoptional

평가 금액

krwValuationPLnumberoptional

평가 손익(원화)

valuationPLnumberoptional

평가 손익

earningsRatenumberoptional

수익률

createdAtstringrequired

생성 시각

▶customAssetAssetCustomInfooptionalexpandable

커스텀 자산 정보

assetType"CASH" | "LIABILITY" | "ASSET"required

커스텀 자산 유형

assetNumberstringrequired

자산 번호

amountnumberrequired

금액

▶ecommerceAccountAssetEcommerceAccountInfooptionalexpandable

이커머스 스토어 계정 정보

usernamestringrequired

스토어 사용자명

isOtpVerifiedbooleanrequired

OTP 인증 여부

createdAtstringoptional

생성 시각

modifiedAtstringoptional

수정 시각

hasPasswordbooleanoptional

비밀번호 보유 여부

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/assets \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "assetType": "CARD"
}'
POST /api/public-docs/assets
Asset Response Example
[
  {
    "id": 54,
    "assetType": "CARD",
    "number": "426586******9827",
    "workspaceId": 1,
    "name": "샘플 법인카드",
    "nickname": "운영 카드",
    "organization": "KB",
    "organizationName": "국민카드",
    "businessType": "CD",
    "businessTypeName": "CD",
    "isHidden": false,
    "isActive": true,
    "isDormant": false,
    "isPossibleDormant": false,
    "owners": [
      {
        "id": 67,
        "name": "소유자 A",
        "email": "owner-a@example.com",
        "isDeleted": false
      }
    ],
    "clientType": "CORPORATE",
    "userAutoAssignEnabled": true,
    "isFree": false,
    "hasPassword": false,
    "createdAt": "2024-12-25T13:01:51.863136",
    "modifiedAt": "2026-03-08T12:05:58.877862",
    "card": {
      "expirationYear": "2030",
      "expirationMonth": "09",
      "limitAmount": 1000000,
      "usedAmount": 0,
      "remainLimit": 0,
      "previousCardNumber": null
    },
    "bankAccount": null,
    "homeTaxAccount": null,
    "securitiesAccount": null,
    "customAsset": null,
    "ecommerceAccount": null
  }
]

POST /api/public-docs/balances

계좌별 잔액 흐름과 현금 추이를 조회합니다.

Request Fields

기간 기반 조회는 요청 1회당 최대 31일까지 사용할 수 있으며, 더 긴 범위는 31일 이하 구간으로 나눠 조회한 뒤 합쳐서 사용하세요.

대출 계좌(`bankAccount.accountType=LOAN`)의 잔액은 일반 예금 잔액과 단순 합산하지 마세요. 대출 실행 시 대출 계좌 잔액과 입금 계좌 잔액이 동시에 증가해 총자산이 과대 집계될 수 있습니다.

자금일보처럼 사람이 보는 현금 현황을 만들 때는 `daily-financial-report` API를 우선 사용하거나, 직접 집계한다면 대출 계좌를 별도 부채/대출 합계로 분리하세요.

startDateYYYY-MM-DDoptional

조회 시작일 (전달 시 endDate와 함께 전달 필수)

endDateYYYY-MM-DDoptional

조회 종료일 (전달 시 startDate와 함께 전달 필수)

Response Fields

▶[]AssetBalancerequiredexpandable

BE `/bank-accounts/daily-balances` 응답을 계좌 기준으로 가공한 배열의 각 원소

▶bankAccountTicketAssetrequiredexpandable

계좌 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

▶balancesBalanceByDate[]requiredexpandable

기간별 잔액 목록

baseDateYYYY-MM-DDrequired

잔액 기준일

accountBalancenumberrequired

계좌 잔액 (원화)

originalBalancenumberrequired

원본 통화 기준 잔액

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/balances \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "startDate": "2026-03-01",
  "endDate": "2026-03-07"
}'
POST /api/public-docs/balances
Balance Response Example
[
  {
    "bankAccount": {
      "id": 3,
      "assetType": "BANK_ACCOUNT",
      "number": "140014******561",
      "workspaceId": 1,
      "name": "기업자유예금",
      "nickname": "메인 통장",
      "organization": "SHINHAN_BANK",
      "organizationName": "신한은행",
      "businessType": "BK",
      "businessTypeName": "BK",
      "isHidden": false,
      "isActive": true,
      "isDormant": false,
      "isPossibleDormant": false,
      "owners": [
        {
          "id": 9,
          "name": "소유자 B",
          "email": "owner-b@example.com",
          "isDeleted": false
        }
      ],
      "clientType": "CORPORATE",
      "userAutoAssignEnabled": true,
      "isFree": false,
      "hasPassword": false,
      "createdAt": "2024-07-18T11:23:29.369334",
      "modifiedAt": "2026-03-08T12:06:11.683152",
      "card": null,
      "bankAccount": {
        "accountBalance": -89911970,
        "originalBalance": "-89911970",
        "currencyCode": "KRW",
        "startDate": "20240119",
        "endDate": "",
        "accountNumber": "140014******561",
        "accountName": "기업자유예금",
        "nickname": "메인 통장",
        "accountType": "DEPOSIT",
        "isTransactionVisible": true
      },
      "homeTaxAccount": null,
      "securitiesAccount": null,
      "customAsset": null,
      "ecommerceAccount": null
    },
    "balances": [
      {
        "accountBalance": -89911970,
        "baseDate": "2026-03-01",
        "originalBalance": -89911970
      },
      {
        "accountBalance": -89911970,
        "baseDate": "2026-03-02",
        "originalBalance": -89911970
      }
    ]
  }
]

POST /api/public-docs/daily-financial-report

자금일보 화면에서 쓰는 잔액 후처리 로직을 API 응답으로 제공합니다. 날짜별 잔액을 빠짐없이 채우고, 이전/현재 잔액과 입출금 합계, 통화별 합계, 대출 계좌 분리 합계를 함께 반환합니다.

Request Fields

기간 기반 조회는 요청 1회당 최대 31일까지 사용할 수 있으며, 더 긴 범위는 31일 이하 구간으로 나눠 조회한 뒤 합쳐서 사용하세요.

`startDate`와 `endDate`는 필수입니다. 미래 종료일은 오늘로 보정되어 `effectiveEndDate`에 표시됩니다.

외화 계좌의 `previousBalance`는 이전 기준일 환율, `currentBalance`는 종료 기준일 환율로 원화 환산합니다. `useCurrentExchangeRate=true`이면 둘 다 현재 환율 기준으로 계산합니다.

대출 계좌(`isLoan=true`)는 `total.currentBalance`에서 제외되고 `total.loanBalance` 및 `currencyTotals[].currencyCode=LOAN`에 별도로 표시됩니다. 대출 실행금이 입금 계좌에 들어온 경우에도 대출 잔액을 일반 잔액에 더하지 마세요.

startDateYYYY-MM-DDrequired

조회 시작일

endDateYYYY-MM-DDrequired

조회 종료일

useCurrentExchangeRatebooleanoptional

외화 잔액을 현재 환율 기준으로 통일할지 여부. 기본값은 false입니다.

Response Fields

startDateYYYY-MM-DDrequired

요청 시작일

endDateYYYY-MM-DDrequired

요청 종료일

effectiveEndDateYYYY-MM-DDrequired

실제 계산 종료일. 미래 종료일은 오늘로 보정됩니다.

previousDateYYYY-MM-DDrequired

이전 잔액 기준일

▶assetsDailyFinancialReportAssetBalance[]requiredexpandable

자산별 후처리 잔액 목록. 대출 계좌는 isLoan=true로 표시됩니다.

assetIdnumberrequired

자산 ID

assetType"BANK_ACCOUNT" | "SECURITIES_ACCOUNT"required

자산 유형

assetNamestringrequired

자금일보 표시 자산명

assetNumberstringrequired

마스킹된 계좌번호

organizationNamestringrequired

기관명

currencyCodestringrequired

통화 코드. 대출 집계 행은 currencyTotals에서 LOAN으로 분리됩니다.

accountTypestringrequired

계좌 유형. BANK_ACCOUNT의 LOAN은 대출 계좌입니다.

isLoanbooleanrequired

대출 계좌 여부

previousBalancenumberrequired

이전 기준일 표시 잔액. 외화는 이전 기준일 환율로 원화 환산됩니다.

previousOriginalBalancenumberrequired

이전 기준일 원통화 잔액

currentBalancenumberrequired

조회 종료 기준일 표시 잔액. 외화는 종료 기준일 환율로 원화 환산됩니다.

currentOriginalBalancenumberrequired

조회 종료 기준일 원통화 잔액

differencenumberrequired

표시 잔액 기준 이전 대비 증감

originalDifferencenumberrequired

원통화 기준 이전 대비 증감

inAmountnumberrequired

조회 기간 입금 합계

outAmountnumberrequired

조회 기간 출금 합계. 출금은 음수로 표시됩니다.

▶balancesBalanceByDate[]requiredexpandable

조회 기간을 빠짐없이 채운 날짜별 잔액 목록. 원천에 없는 날짜는 0으로 채웁니다.

baseDateYYYY-MM-DDrequired

잔액 기준일

accountBalancenumberrequired

계좌 잔액 (원화)

originalBalancenumberrequired

원본 통화 기준 잔액

▶totalobjectrequiredexpandable

자금일보 합계. 일반 잔액 합계와 대출 잔액을 분리합니다.

previousBalancenumberrequired

대출 제외 이전 잔액 합계

currentBalancenumberrequired

대출 제외 현재 잔액 합계

differencenumberrequired

대출 제외 잔액 증감

inAmountnumberrequired

대출 제외 입금 합계

outAmountnumberrequired

대출 제외 출금 합계

loanBalancenumberrequired

대출 계좌 현재 잔액 합계. 일반 잔액에 더하지 마세요.

netPositionnumberrequired

currentBalance - loanBalance

▶currencyTotalsobject[]requiredexpandable

통화별 합계. 대출 계좌는 LOAN 그룹으로 분리됩니다.

currencyCodestringrequired

통화 코드 또는 LOAN

previousBalancenumberrequired

이전 잔액 합계

currentBalancenumberrequired

현재 잔액 합계

differencenumberrequired

잔액 증감 합계

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/daily-financial-report \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "startDate": "2026-03-01",
  "endDate": "2026-03-07",
  "useCurrentExchangeRate": false
}'
POST /api/public-docs/daily-financial-report
Daily Financial Report Response Example
{
  "startDate": "2026-03-01",
  "endDate": "2026-03-07",
  "effectiveEndDate": "2026-03-07",
  "previousDate": "2026-02-28",
  "assets": [
    {
      "assetId": 3,
      "assetType": "BANK_ACCOUNT",
      "assetName": "메인 통장",
      "assetNumber": "140014******561",
      "organizationName": "신한은행",
      "currencyCode": "KRW",
      "accountType": "DEPOSIT",
      "isLoan": false,
      "previousBalance": 50000000,
      "previousOriginalBalance": 50000000,
      "currentBalance": 550000000,
      "currentOriginalBalance": 550000000,
      "difference": 500000000,
      "originalDifference": 500000000,
      "inAmount": 500000000,
      "outAmount": 0,
      "balances": [
        {
          "baseDate": "2026-03-01",
          "accountBalance": 550000000,
          "originalBalance": 550000000
        }
      ]
    },
    {
      "assetId": 9,
      "assetType": "BANK_ACCOUNT",
      "assetName": "운전자금 대출",
      "assetNumber": "110123******999",
      "organizationName": "신한은행",
      "currencyCode": "KRW",
      "accountType": "LOAN",
      "isLoan": true,
      "previousBalance": 0,
      "previousOriginalBalance": 0,
      "currentBalance": 500000000,
      "currentOriginalBalance": 500000000,
      "difference": 500000000,
      "originalDifference": 500000000,
      "inAmount": 0,
      "outAmount": 0,
      "balances": [
        {
          "baseDate": "2026-03-01",
          "accountBalance": 500000000,
          "originalBalance": 500000000
        }
      ]
    }
  ],
  "total": {
    "previousBalance": 50000000,
    "currentBalance": 550000000,
    "difference": 500000000,
    "inAmount": 500000000,
    "outAmount": 0,
    "loanBalance": 500000000,
    "netPosition": 50000000
  },
  "currencyTotals": [
    {
      "currencyCode": "KRW",
      "previousBalance": 50000000,
      "currentBalance": 550000000,
      "difference": 500000000
    },
    {
      "currencyCode": "LOAN",
      "previousBalance": 0,
      "currentBalance": 500000000,
      "difference": 500000000
    }
  ]
}

POST /api/public-docs/exchange-rates

기준일의 통화별 환율 정보를 조회합니다.

Request Fields

`baseDate`는 선택값이며, 미입력 시 백엔드 기본 기준일을 사용합니다.

baseDateYYYY-MM-DDoptional

환율 기준일

Response Fields

▶[]ExchangeRaterequiredexpandable

통화별 환율 배열

currencyCodestringrequired

통화 코드

presentNamestringrequired

통화 이름

baseForeignAmountnumberrequired

기준 외화 금액

krwAmountnumberrequired

원화 금액

baseDateYYYY-MM-DDrequired

기준 날짜

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/exchange-rates \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "baseDate": "2026-03-31"
}'
POST /api/public-docs/exchange-rates
Exchange Rate Response Example
[
  {
    "currencyCode": "USD",
    "presentName": "미국 달러",
    "baseForeignAmount": 1,
    "krwAmount": 1472.4,
    "baseDate": "2026-03-31"
  },
  {
    "currencyCode": "JPY",
    "presentName": "일본 엔",
    "baseForeignAmount": 100,
    "krwAmount": 985.31,
    "baseDate": "2026-03-31"
  }
]

GET /api/public-docs/ticket-tags

티켓에 붙이는 태그(다중 태그) 기준 데이터를 조회합니다. 한 티켓에 태그를 여러 개 붙일 수 있습니다.

Request Fields

요청 body는 사용하지 않습니다.

삭제되지 않은 전체 태그(숨김 포함)를 이름순으로 반환합니다. 숨긴 태그(`isHidden: true`)는 앱의 선택 목록에서만 빠지고, 이미 붙은 티켓에는 계속 보입니다.

단계(1차·2차·…)는 이름의 `/`로 표현합니다. 2026-10-01 이전의 1차/2차 태그는 `1차/2차` 이름의 태그로 이관됐고, 상위 1차 태그가 없던 2차 태그는 `/외주`처럼 이름 앞에 `/`가 붙습니다.

티켓에 붙은 태그는 티켓 조회 응답의 `ticketTags`로 읽고, `tickets-update`의 `TICKET_TAGS`로 지정합니다. 1차/2차 태그 API(`tags`, `tag-details`)는 deprecated 입니다.

Response Fields

▶[]TicketTagrequiredexpandable

BE `/ticket-tags` 응답 배열의 각 원소(삭제되지 않은 전체, 숨김 포함, 이름순)

idnumberrequired

태그 ID

namestringrequired

태그 이름. 단계는 `/`로 구분(예: `프로젝트 A/외주`)

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

descriptionstringrequired

설명. 없으면 빈 문자열

isHiddenbooleanrequired

앱 선택 목록에서 숨김 여부

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/ticket-tags \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/ticket-tags
태그 Response Example
[
  {
    "id": 31,
    "name": "프로젝트 A/외주",
    "ticketTagGroup": { "id": 4, "name": "프로젝트" },
    "description": "프로젝트 A 외주 개발 비용",
    "isHidden": false,
    "createdAt": "2026-10-01T09:00:00",
    "modifiedAt": "2026-10-01T09:00:00"
  }
]

POST /api/public-docs/ticket-tags

티켓에 붙일 태그(다중 태그)를 생성합니다.

Request Fields

이름은 회사 안의 활성 태그끼리 겹칠 수 없습니다(최대 255자).

하위 단계 태그는 `상위/이름`처럼 경로를 이름에 씁니다(예: `프로젝트 A/외주`). 상위 경로의 태그를 따로 만들지 않아도 됩니다.

삭제했던 이름으로 다시 만들면 예전 태그가 복구되어 같은 `id`가 돌아올 수 있습니다. 항상 응답의 `id`를 쓰세요.

`ticketTagGroupId`는 `ticket-tag-groups` API의 그룹 ID입니다. 생략하면 그룹 없이 생성됩니다.

요청 재시도 중 중복 생성을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

namestringrequired

태그 이름. 단계는 `/`로 구분

ticketTagGroupIdnumber | nulloptional

태그 그룹 ID

descriptionstringoptional

태그 설명. 생략하면 빈 설명

Response Fields

idnumberrequired

태그 ID

namestringrequired

태그 이름. 단계는 `/`로 구분(예: `프로젝트 A/외주`)

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

descriptionstringrequired

설명. 없으면 빈 문자열

isHiddenbooleanrequired

앱 선택 목록에서 숨김 여부

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/ticket-tags \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "name": "프로젝트 A/외주",
  "ticketTagGroupId": 4,
  "description": "프로젝트 A 외주 개발 비용"
}'
POST /api/public-docs/ticket-tags
태그 Create Response Example
{
  "id": 31,
  "name": "프로젝트 A/외주",
  "ticketTagGroup": { "id": 4, "name": "프로젝트" },
  "description": "프로젝트 A 외주 개발 비용",
  "isHidden": false,
  "createdAt": "2026-10-04T10:00:00",
  "modifiedAt": "2026-10-04T10:00:00"
}

PUT /api/public-docs/ticket-tags

기존 태그(다중 태그)의 이름, 그룹, 설명을 수정합니다.

Request Fields

보낸 필드만 바꿉니다. 생략한 이름·그룹·설명은 현재 값을 유지하고, `ticketTagGroupId: null`을 보내면 그룹을 해제합니다.

`id`는 `ticket-tags` 조회 또는 `ticket-tags-create` 응답의 태그 ID입니다.

이름을 바꿔도 하위 단계 태그(`상위/…`)의 이름은 함께 바뀌지 않습니다. 하위 태그도 옮기려면 각각 수정하세요.

요청 재시도 중 중복 수정을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

idnumberrequired

수정할 태그 ID

namestringoptional

새 태그 이름

ticketTagGroupIdnumber | nulloptional

태그 그룹 ID. null이면 그룹 해제

descriptionstringoptional

새 태그 설명

Response Fields

okbooleanrequired

수정 요청 처리 성공 여부

ticketTagIdnumberrequired

수정한 태그 ID

updatedFieldsstring[]required

이번 요청에서 보낸 필드 목록

▶ticketTagTicketTagrequiredexpandable

수정된 태그

idnumberrequired

태그 ID

namestringrequired

태그 이름. 단계는 `/`로 구분(예: `프로젝트 A/외주`)

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

descriptionstringrequired

설명. 없으면 빈 문자열

isHiddenbooleanrequired

앱 선택 목록에서 숨김 여부

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X PUT https://app.granter.biz/api/public-docs/ticket-tags \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "id": 31,
  "name": "프로젝트 A/외주 개발"
}'
PUT /api/public-docs/ticket-tags
태그 Update Response Example
{
  "ok": true,
  "ticketTagId": 31,
  "updatedFields": ["name"],
  "ticketTag": {
    "id": 31,
    "name": "프로젝트 A/외주 개발",
    "ticketTagGroup": { "id": 4, "name": "프로젝트" },
    "description": "프로젝트 A 외주 개발 비용",
    "isHidden": false,
    "createdAt": "2026-10-04T10:00:00",
    "modifiedAt": "2026-10-04T10:05:00"
  }
}

GET /api/public-docs/ticket-tag-groups

태그를 묶어 보는 태그 그룹 목록을 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

그룹은 태그를 묶어 보기 위한 선택 값이며, 한 태그는 그룹 하나에만 속합니다. 태그 생성·수정의 `ticketTagGroupId`에 그룹 ID를 씁니다.

Response Fields

▶[]TicketTagGrouprequiredexpandable

BE `/ticket-tag-groups` 응답 배열의 각 원소(이름순)

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

descriptionstringrequired

설명. 없으면 빈 문자열

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/ticket-tag-groups \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/ticket-tag-groups
태그 그룹 Response Example
[
  {
    "id": 4,
    "name": "프로젝트",
    "description": "프로젝트별 비용 묶음",
    "createdAt": "2026-10-01T09:00:00",
    "modifiedAt": "2026-10-01T09:00:00"
  }
]

GET /api/public-docs/tags

거래를 큰 범주로 묶는 1차 태그 기준 데이터를 조회합니다.

Deprecated · 1차/2차 태그 API는 deprecated 입니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용합니다. 이 API의 1차/2차 태그는 앱 화면에 보이지 않고, 2026-10-03부터 티켓에 지정할 수 없으며, 곧 삭제될 예정입니다. 태그 조회·생성·수정은 `ticket-tags` API(`/api/public-docs/ticket-tags`)를 쓰고, 티켓 지정은 `tickets-update`의 `TICKET_TAGS`를 쓰세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있습니다.

Request Fields

요청 body는 사용하지 않습니다.

Response Fields

▶[]Tagrequiredexpandable

BE `/tags` 원본 응답 배열의 각 원소

idnumberrequired

1차/2차 태그 ID

namestringrequired

1차/2차 태그명

descriptionstringrequired

설명

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

type"Tag" | "TagDetail" | "Supplier"required

태그 분류 타입 (Tag=1차 태그, TagDetail=2차 태그)

workspaceIdnumberoptional

워크스페이스 ID

tagIdnumberoptional

상위 1차 태그 ID (2차 태그에 해당)

codestring | numberoptional

코드

outAmountnumberoptional

지출 집계 금액

inAmountnumberoptional

입금 집계 금액

isHiddennumber | booleanoptional

숨김 여부

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/tags \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/tags
1차 태그 Response Example
[
  {
    "id": 82,
    "name": "프로젝트 A",
    "description": "2025.06.19 ~ 2026.01.05 프로젝트 기준 태그",
    "isHidden": false,
    "createdAt": "2025-09-27T19:48:29.285999",
    "modifiedAt": "2026-02-15T11:59:13.743678"
  }
]

POST /api/public-docs/tags

거래를 큰 범주로 묶는 1차 태그를 생성합니다.

Deprecated · 1차/2차 태그 API는 deprecated 입니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용합니다. 이 API의 1차/2차 태그는 앱 화면에 보이지 않고, 2026-10-03부터 티켓에 지정할 수 없으며, 곧 삭제될 예정입니다. 태그 조회·생성·수정은 `ticket-tags` API(`/api/public-docs/ticket-tags`)를 쓰고, 티켓 지정은 `tickets-update`의 `TICKET_TAGS`를 쓰세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있습니다.

Request Fields

1차 태그 생성만 지원합니다. 태그 삭제 API는 아직 공개하지 않습니다.

요청 재시도 중 중복 생성을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

`description`은 선택값입니다. 생략하면 빈 설명으로 생성됩니다.

namestringrequired

1차 태그 이름

descriptionstringoptional

1차 태그 설명

Response Fields

idnumberrequired

1차/2차 태그 ID

namestringrequired

1차/2차 태그명

descriptionstringrequired

설명

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

type"Tag" | "TagDetail" | "Supplier"required

태그 분류 타입 (Tag=1차 태그, TagDetail=2차 태그)

workspaceIdnumberoptional

워크스페이스 ID

tagIdnumberoptional

상위 1차 태그 ID (2차 태그에 해당)

codestring | numberoptional

코드

outAmountnumberoptional

지출 집계 금액

inAmountnumberoptional

입금 집계 금액

isHiddennumber | booleanoptional

숨김 여부

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tags \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "name": "프로젝트 B"
}'
POST /api/public-docs/tags
1차 태그 Create Response Example
{
  "id": 83,
  "name": "프로젝트 B",
  "description": "",
  "isHidden": false,
  "createdAt": "2026-04-30T10:00:00.000000",
  "modifiedAt": "2026-04-30T10:00:00.000000"
}

PUT /api/public-docs/tags

기존 1차 태그의 이름과 설명을 수정합니다.

Deprecated · 1차/2차 태그 API는 deprecated 입니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용합니다. 이 API의 1차/2차 태그는 앱 화면에 보이지 않고, 2026-10-03부터 티켓에 지정할 수 없으며, 곧 삭제될 예정입니다. 태그 조회·생성·수정은 `ticket-tags` API(`/api/public-docs/ticket-tags`)를 쓰고, 티켓 지정은 `tickets-update`의 `TICKET_TAGS`를 쓰세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있습니다.

Request Fields

1차 태그 수정만 지원합니다. 태그 삭제 API는 아직 공개하지 않습니다.

`id`는 `tags` 조회 또는 `tags-create` 응답에서 받은 1차 태그 ID입니다.

`description`은 선택값입니다. 이름만 바꿀 때는 생략할 수 있습니다.

idnumberrequired

수정할 1차 태그 ID

namestringrequired

수정할 1차 태그 이름

descriptionstringoptional

수정할 1차 태그 설명

Response Fields

okbooleanrequired

수정 요청 처리 성공 여부

tagIdnumberrequired

수정한 1차 태그 ID

updatedFieldsstring[]required

이번 요청에서 수정한 필드 목록

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X PUT https://app.granter.biz/api/public-docs/tags \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "id": 83,
  "name": "프로젝트 B"
}'
PUT /api/public-docs/tags
1차 태그 Update Response Example
{
  "ok": true,
  "tagId": 83,
  "updatedFields": ["name"]
}

GET /api/public-docs/tag-details

1차 태그 아래의 세부 분류 기준 데이터를 조회합니다.

Deprecated · 1차/2차 태그 API는 deprecated 입니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용합니다. 이 API의 1차/2차 태그는 앱 화면에 보이지 않고, 2026-10-03부터 티켓에 지정할 수 없으며, 곧 삭제될 예정입니다. 태그 조회·생성·수정은 `ticket-tags` API(`/api/public-docs/ticket-tags`)를 쓰고, 티켓 지정은 `tickets-update`의 `TICKET_TAGS`를 쓰세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있습니다.

Request Fields

요청 body는 사용하지 않습니다.

Response Fields

▶[]Tagrequiredexpandable

BE `/tag-details` 원본 응답 배열의 각 원소

idnumberrequired

1차/2차 태그 ID

namestringrequired

1차/2차 태그명

descriptionstringrequired

설명

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

type"Tag" | "TagDetail" | "Supplier"required

태그 분류 타입 (Tag=1차 태그, TagDetail=2차 태그)

workspaceIdnumberoptional

워크스페이스 ID

tagIdnumberoptional

상위 1차 태그 ID (2차 태그에 해당)

codestring | numberoptional

코드

outAmountnumberoptional

지출 집계 금액

inAmountnumberoptional

입금 집계 금액

isHiddennumber | booleanoptional

숨김 여부

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/tag-details \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/tag-details
2차 태그 Response Example
[
  {
    "id": 5,
    "workspaceId": 1,
    "name": "마케팅 비용",
    "description": "",
    "tagId": 82,
    "isHidden": false,
    "createdAt": "2024-11-11T19:58:19.541909",
    "modifiedAt": "2026-01-30T14:38:32.668294"
  }
]

POST /api/public-docs/tag-details

2차 태그를 생성합니다. 상위 1차 태그 연결은 선택값입니다.

Deprecated · 1차/2차 태그 API는 deprecated 입니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용합니다. 이 API의 1차/2차 태그는 앱 화면에 보이지 않고, 2026-10-03부터 티켓에 지정할 수 없으며, 곧 삭제될 예정입니다. 태그 조회·생성·수정은 `ticket-tags` API(`/api/public-docs/ticket-tags`)를 쓰고, 티켓 지정은 `tickets-update`의 `TICKET_TAGS`를 쓰세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있습니다.

Request Fields

2차 태그 생성만 지원합니다. 상세 태그 삭제 API는 아직 공개하지 않습니다.

`tagId`를 전달하면 해당 1차 태그 아래에 연결됩니다. 생략하면 상위 1차 태그 없이 생성됩니다.

요청 재시도 중 중복 생성을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

tagIdnumberoptional

상위 1차 태그 ID

namestringrequired

2차 태그 이름

descriptionstringrequired

2차 태그 설명

Response Fields

idnumberrequired

1차/2차 태그 ID

namestringrequired

1차/2차 태그명

descriptionstringrequired

설명

createdAtstringrequired

생성 시각

modifiedAtstringrequired

수정 시각

type"Tag" | "TagDetail" | "Supplier"required

태그 분류 타입 (Tag=1차 태그, TagDetail=2차 태그)

workspaceIdnumberoptional

워크스페이스 ID

tagIdnumberoptional

상위 1차 태그 ID (2차 태그에 해당)

codestring | numberoptional

코드

outAmountnumberoptional

지출 집계 금액

inAmountnumberoptional

입금 집계 금액

isHiddennumber | booleanoptional

숨김 여부

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tag-details \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "tagId": 83,
  "name": "마케팅 비용",
  "description": "프로젝트 B의 마케팅 비용 세부 태그"
}'
POST /api/public-docs/tag-details
2차 태그 Create Response Example
{
  "id": 6,
  "workspaceId": 1,
  "name": "마케팅 비용",
  "description": "프로젝트 B의 마케팅 비용 세부 태그",
  "tagId": 83,
  "isHidden": false,
  "createdAt": "2026-04-30T10:00:00.000000",
  "modifiedAt": "2026-04-30T10:00:00.000000"
}

PUT /api/public-docs/tag-details

기존 2차 태그의 이름, 설명, 상위 태그 연결을 수정합니다.

Deprecated · 1차/2차 태그 API는 deprecated 입니다
2026-10-01부터 그랜터는 다중 태그(v2)만 사용합니다. 이 API의 1차/2차 태그는 앱 화면에 보이지 않고, 2026-10-03부터 티켓에 지정할 수 없으며, 곧 삭제될 예정입니다. 태그 조회·생성·수정은 `ticket-tags` API(`/api/public-docs/ticket-tags`)를 쓰고, 티켓 지정은 `tickets-update`의 `TICKET_TAGS`를 쓰세요. 예전 1차/2차 태그는 `1차/2차` 이름의 태그로 이관돼 있습니다.

Request Fields

2차 태그 수정만 지원합니다. 상세 태그 삭제 API는 아직 공개하지 않습니다.

`id`는 `tag-details` 조회 또는 `tag-details-create` 응답에서 받은 2차 태그 ID입니다.

`tagId`는 선택값입니다. 상위 1차 태그 연결을 함께 지정할 때만 전달하세요.

idnumberrequired

수정할 2차 태그 ID

tagIdnumberoptional

상위 1차 태그 ID

namestringrequired

수정할 2차 태그 이름

descriptionstringrequired

수정할 2차 태그 설명

Response Fields

okbooleanrequired

수정 요청 처리 성공 여부

tagDetailIdnumberrequired

수정한 2차 태그 ID

updatedFieldsstring[]required

이번 요청에서 수정한 필드 목록

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X PUT https://app.granter.biz/api/public-docs/tag-details \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "id": 6,
  "tagId": 83,
  "name": "마케팅 비용",
  "description": "프로젝트 B 광고·콘텐츠 집행 비용"
}'
PUT /api/public-docs/tag-details
2차 태그 Update Response Example
{
  "ok": true,
  "tagDetailId": 6,
  "updatedFields": ["tagId", "name", "description"]
}

GET /api/public-docs/categories

회계 처리와 분석에 사용하는 계정과목 기준 데이터를 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

Response Fields

▶[]ExpenseCategoryrequiredexpandable

BE `/expense-categories` 원본 응답 배열의 각 원소

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/categories \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/categories
Category Response Example
[
  {
    "id": 285,
    "name": "가수금",
    "subInfo": "부채",
    "description": "계정과목이 명확치 않은 현금 입금액",
    "code": "257",
    "type": "COMMON",
    "isHidden": false,
    "costType": "VARIABLE",
    "isFavorite": false,
    "taxType": null
  }
]

POST /api/public-docs/categories

회계 처리와 분석에 사용할 커스텀 계정과목을 생성합니다.

Request Fields

계정과목 생성만 지원합니다. 계정과목 삭제 API는 아직 공개하지 않습니다.

요청 재시도 중 중복 생성을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

`costType`은 `NONE`, `VARIABLE`, `FIXED` 중 하나이며 한국어 `없음`, `변동비`, `고정비`도 허용합니다.

`taxType`은 선택값이며 `DETERMINE_NEEDED`, `TAXABLE`, `EXEMPT`, `ZERO_RATED`, `NONE` 중 하나입니다.

namestringrequired

계정과목 이름

descriptionstringrequired

계정과목 설명

subInfostringrequired

상위 분류. 예: 판매비와관리비, 영업외비용

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

codenumberoptional

계정과목 코드 번호

iconUrlstringoptional

아이콘 이미지 URL

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | "NONE"optional

기본 과세 유형

Response Fields

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/categories \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "name": "소프트웨어구독료",
  "description": "SaaS 구독 비용",
  "subInfo": "판매비와관리비",
  "costType": "FIXED",
  "code": 842,
  "taxType": "TAXABLE"
}'
POST /api/public-docs/categories
Category Create Response Example
{
  "id": 901,
  "name": "소프트웨어구독료",
  "subInfo": "판매비와관리비",
  "description": "SaaS 구독 비용",
  "code": "842",
  "image": "",
  "type": "CUSTOM",
  "isHidden": false,
  "costType": "FIXED",
  "isFavorite": false,
  "taxType": "TAXABLE"
}

PUT /api/public-docs/categories

기존 커스텀 계정과목의 이름, 설명, 분류, 비용 유형, 과세 유형을 수정합니다.

Request Fields

계정과목 수정만 지원합니다. 계정과목 삭제 API는 아직 공개하지 않습니다.

`id`는 `categories` 조회 또는 `categories-create` 응답에서 받은 계정과목 ID입니다.

수정 요청은 백엔드 계약상 `name`, `description`, `subInfo`, `costType`을 모두 전달해야 합니다.

idnumberrequired

수정할 계정과목 ID

namestringrequired

수정할 계정과목 이름

descriptionstringrequired

수정할 계정과목 설명

subInfostringrequired

수정할 상위 분류

costType"NONE" | "VARIABLE" | "FIXED"required

수정할 비용 유형

codenumberoptional

계정과목 코드 번호

iconUrlstringoptional

아이콘 이미지 URL

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | "NONE"optional

기본 과세 유형

Response Fields

okbooleanrequired

수정 요청 처리 성공 여부

categoryIdnumberrequired

수정한 계정과목 ID

updatedFieldsstring[]required

이번 요청에서 수정한 필드 목록

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X PUT https://app.granter.biz/api/public-docs/categories \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "id": 901,
  "name": "소프트웨어구독료",
  "description": "업무용 SaaS 정기 구독 비용",
  "subInfo": "판매비와관리비",
  "costType": "FIXED",
  "code": 842,
  "taxType": "TAXABLE"
}'
PUT /api/public-docs/categories
Category Update Response Example
{
  "ok": true,
  "categoryId": 901,
  "updatedFields": ["name", "description", "subInfo", "costType", "code", "taxType"]
}

GET /api/public-docs/workspace-profile

API key가 속한 워크스페이스의 이름, 아이콘 이미지, 회사 기본 프로필을 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

`imageUrl`은 워크스페이스 아이콘 이미지 URL입니다.

Response Fields

workspaceIdnumberrequired

워크스페이스 ID

companyNamestringrequired

워크스페이스/회사 이름

imageUrlstring | nulloptional

워크스페이스 아이콘 이미지 URL

companyRegistrationNumberstring | nulloptional

사업자등록번호

membersCountstring | nulloptional

가입 시 선택한 사용 인원 규모

companyTypeCompanyType | nulloptional

회사 유형

businessDescriptionstring | nulloptional

사업 설명

industrialCategoryobject | nulloptional

산업 분류 정보

createdAtstringrequired

워크스페이스 생성 시각

isAccountantbooleanrequired

회계사 워크스페이스 여부

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/workspace-profile \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/workspace-profile
Workspace Profile Response Example
{
  "workspaceId": 1,
  "companyName": "샘플 워크스페이스",
  "imageUrl": "https://cdn.granter.biz/workspaces/1/profile.png",
  "companyRegistrationNumber": "1234567890",
  "membersCount": "10-50",
  "companyType": "STARTUP",
  "businessDescription": "B2B SaaS 운영",
  "industrialCategory": null,
  "createdAt": "2026-01-10T09:00:00",
  "isAccountant": false
}

GET /api/public-docs/user-profiles

워크스페이스 구성원의 이름, 이메일, 팀, 역할, 프로필 이미지 URL을 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

`people` API와 달리 프로필 이미지 URL(`imageUrl`)을 포함한 표시용 프로필 정보를 반환합니다.

Response Fields

▶[]PublicUserProfilerequiredexpandable

워크스페이스 구성원 프로필 배열

idnumberrequired

유저 ID

namestringrequired

이름

nicknamestring | nulloptional

워크스페이스 표시 이름

emailstringrequired

이메일

phoneNumberstring | nulloptional

전화번호

imageUrlstring | nulloptional

사용자 프로필 이미지 URL

workspaceIdnumber | nulloptional

워크스페이스 ID

workspaceNamestring | nulloptional

워크스페이스명

teamIdnumber | nulloptional

팀 ID

teamNamestring | nulloptional

팀명

▶roleWorkspaceRole | nulloptionalexpandable

워크스페이스 역할

idnumberrequired

역할 ID

namestringrequired

역할명

isOwnerbooleanrequired

오너 여부

isDefaultbooleanrequired

기본 역할 여부

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/user-profiles \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/user-profiles
User Profiles Response Example
[
  {
    "id": 4,
    "name": "구성원 A",
    "nickname": "담당자 A",
    "email": "member-a@example.com",
    "phoneNumber": "01012345678",
    "imageUrl": "https://cdn.granter.biz/users/4/profile.png",
    "workspaceId": 1,
    "workspaceName": "샘플 워크스페이스",
    "teamId": 133,
    "teamName": "마케팅팀",
    "role": {
      "id": 1,
      "name": "소유자",
      "isOwner": true,
      "isDefault": false
    }
  }
]

GET /api/public-docs/subscription

API key가 속한 워크스페이스의 현재 요금제, 구독 상태, 활성 자산 수, 예상 결제 금액을 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

결제 카드 번호, 카드사, 결제수단 식별자 같은 민감한 결제수단 정보는 반환하지 않습니다.

`expectedPaymentAmount`는 현재 요금제와 할인, 리워드, 부가 요금 정책에 따라 backend가 계산한 예상 결제 금액입니다.

Response Fields

idnumberrequired

구독 ID

workspaceIdnumberrequired

워크스페이스 ID

statusACTIVE | INACTIVE | PENDING_INACTIVE | BILLING_FAILED | stringrequired

구독 상태

isFreePlanbooleanrequired

무료 플랜 여부

activeAssetCountnumberrequired

요금 산정 대상 활성 자산 수

rewardBalancenumberrequired

보유 리워드 잔액

expectedChargeAmountnumberrequired

예상 청구 금액

expectedPaymentAmountnumberrequired

예상 결제 금액

nextPaymentDateYYYY-MM-DD | ISO-8601 string | nulloptional

다음 결제 예정일

endedAtISO-8601 string | nulloptional

구독 종료 시각

freePlanEndedAtISO-8601 string | nulloptional

무료 플랜 종료 시각

▶subscriptionPlanSubscriptionPlan | nulloptionalexpandable

현재 요금제 정보

namestringrequired

요금제 이름

descriptionstringrequired

요금제 설명

sectionDescriptionstringrequired

요금제 섹션 설명

▶discountSubscriptionDiscount | nulloptionalexpandable

적용 중인 할인 정보

discountPercentagenumberrequired

할인율

discountEndDateYYYY-MM-DD | ISO-8601 stringrequired

할인 종료일

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/subscription \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/subscription
Subscription Response Example
{
  "id": 42,
  "workspaceId": 1,
  "status": "ACTIVE",
  "isFreePlan": false,
  "activeAssetCount": 12,
  "rewardBalance": 0,
  "expectedChargeAmount": 99000,
  "expectedPaymentAmount": 89100,
  "nextPaymentDate": "2026-06-01",
  "endedAt": null,
  "freePlanEndedAt": "2026-01-31T23:59:59",
  "subscriptionPlan": {
    "name": "그랜터 원 스탠다드",
    "description": "복수 자산 연동과 자동 회계 처리를 지원하는 기본 요금제",
    "sectionDescription": "연동 자산 수 기준 월 과금"
  },
  "discount": {
    "discountPercentage": 10,
    "discountEndDate": "2026-12-31"
  }
}

GET /api/public-docs/people

담당자, 결재자, 분류 주체로 활용되는 워크스페이스 구성원 데이터를 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

Response Fields

▶[]Userrequiredexpandable

BE `/workspaces` 응답의 `users` 배열 원본

idnumberrequired

유저 ID

namestringrequired

이름

emailstringrequired

이메일

workspaceIdnumberoptional

워크스페이스 ID

workspaceNamestringoptional

워크스페이스명

teamIdnumberoptional

팀 ID

teamNamestringoptional

팀명

phoneNumberstringoptional

전화번호

▶roleWorkspaceRolerequiredexpandable

워크스페이스 역할

idnumberrequired

역할 ID

namestringrequired

역할명

isOwnerbooleanrequired

오너 여부

isDefaultbooleanrequired

기본 역할 여부

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/people \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/people
People Response Example
[
  {
    "id": 4,
    "name": "구성원 A",
    "email": "member-a@example.com",
    "workspaceId": 1,
    "workspaceName": "샘플 워크스페이스",
    "teamId": 133,
    "teamName": "마케팅팀",
    "nickname": "담당자 A",
    "phoneNumber": "01012345678",
    "role": {
      "id": 1,
      "name": "소유자",
      "isOwner": true,
      "isDefault": false
    },
    "cards": [],
    "notificationConfig": {
      "userId": 4,
      "slack": false,
      "appPush": false,
      "email": false,
      "kakao": false
    }
  }
]

POST /api/public-docs/people

외부 시스템의 구성원 정보를 기준으로 워크스페이스 인원을 초대합니다.

Request Fields

인원 초대만 지원합니다. 인원 삭제나 역할 부여 API는 아직 공개하지 않습니다.

요청 재시도 중 중복 초대 위험을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

`users` 배열에는 최소 1명 이상을 전달해야 합니다.

초대 처리 결과는 사용자별 `isSuccess`, `message`, `email`, `name` 배열로 반환됩니다.

usersInviteUserRequest[]required

초대 대상 목록

users[].emailstringrequired

초대 대상 이메일

users[].namestringrequired

초대 대상 이름

users[].imageUrlstringoptional

프로필 이미지 URL

users[].phoneNumberstringoptional

전화번호

users[].slackTokenstringoptional

Slack 초대 토큰. 일반 이메일 초대에서는 생략합니다.

Response Fields

▶[]InviteUserResponserequiredexpandable

BE `/workspaces/bulk-invitation` 원본 응답 배열의 각 원소

isSuccessbooleanrequired

초대 성공 여부

messagestringrequired

초대 처리 메시지

emailstringrequired

초대 대상 이메일

namestringrequired

초대 대상 이름

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/people \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "users": [
    {
      "email": "member-a@example.com",
      "name": "구성원 A",
      "phoneNumber": "01012345678"
    },
    {
      "email": "member-b@example.com",
      "name": "구성원 B"
    }
  ]
}'
POST /api/public-docs/people
People Invite Response Example
[
  {
    "isSuccess": true,
    "message": "초대가 완료되었습니다.",
    "email": "member-a@example.com",
    "name": "구성원 A"
  },
  {
    "isSuccess": true,
    "message": "초대가 완료되었습니다.",
    "email": "member-b@example.com",
    "name": "구성원 B"
  }
]

GET /api/public-docs/teams

구성원을 조직 단위로 묶어 관리하는 팀 기준 데이터를 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

Response Fields

▶[]Teamrequiredexpandable

BE `/teams` 원본 응답 배열의 각 원소

idnumberrequired

팀 ID

namestringrequired

팀명

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/teams \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/teams
Team Response Example
[
  {
    "id": 6,
    "name": "인사팀"
  }
]

GET /api/public-docs/contacts

거래처, 고객사, 공급사처럼 상대방 기준으로 관리하는 거래처 데이터를 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

현재 응답은 최신 거래처 목록 기준으로 최대 100건을 조회합니다.

각 거래처의 `managers[]`에 거래처 담당자가 포함됩니다. 담당자 수정·삭제에는 `managers[].id`를 `contactManagerId`로 사용하세요.

Response Fields

▶[]Contactrequiredexpandable

BE `/contacts` 원본 응답 배열의 각 원소

idnumberrequired

거래처 ID

workspaceIdnumberrequired

워크스페이스 ID

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringrequired

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstring | nulloptional

이메일

email2string | nulloptional

보조 이메일

phonestring | nulloptional

휴대전화

telstring | nulloptional

전화번호

lastIssuedAtstringrequired

최근 발행 시각

region"DOMESTIC" | "FOREIGN"optional

거래처 지역 구분

isHiddenbooleanoptional

숨김 여부

▶managersContactManager[]optionalexpandable

거래처 담당자 목록

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

nationstringoptional

국가

accountNumberstring | nulloptional

계좌번호

bankNamestring | nulloptional

은행명

bankAccountOwnerNamestring | nulloptional

예금주명

memostringoptional

메모

isFavoritebooleanoptional

즐겨찾기 여부

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/contacts \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/contacts
Contact Response Example
[
  {
    "id": 928,
    "workspaceId": 1,
    "registrationNumber": "1111111111",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 A",
    "businessTypes": "",
    "businessItems": "",
    "businessPlace": "",
    "email": null,
    "email2": null,
    "phone": null,
    "tel": null,
    "bankName": null,
    "bankAccountOwnerName": null,
    "accountNumber": null,
    "lastIssuedAt": "2026-02-19T16:32:29.514778",
    "managers": [
      {
        "id": 5012,
        "contactId": 928,
        "name": "담당자 B",
        "phoneNumber": "01012345678",
        "telNumber": "0212345678",
        "faxNumber": null,
        "email": "manager@example.com",
        "memo": ""
      }
    ],
    "region": "DOMESTIC",
    "nation": "",
    "isHidden": false,
    "memo": "",
    "isFavorite": false
  }
]

POST /api/public-docs/contacts

외부 CRM, ERP, 영업관리 시스템에서 관리하는 거래처를 그랜터 거래처 마스터에 생성합니다.

Request Fields

쓰기 요청입니다. 재시도 안전성이 필요하면 `Idempotency-Key` 헤더를 고정 값으로 전달하세요.

거래처 생성 권한이 없는 API key 또는 플랜에서는 403 응답이 반환될 수 있습니다.

백엔드는 `registrationNumber`를 필수·고유 값으로 처리합니다. 빈 문자열은 기존 미등록 거래처와 중복될 수 있으므로 실제 식별 값을 전달하세요.

`managers`로 거래처 담당자를 최대 10명까지 함께 보낼 수 있습니다. 거래처를 먼저 만든 뒤 담당자를 순서대로 추가하며, 각 담당자 값의 규칙은 `contacts-managers-create`와 같습니다.

담당자 추가가 일부 또는 전부 실패해도 거래처 생성은 성공으로 유지되고 되돌리지 않습니다. 응답의 `managerResults[]`(요청 순서별 `ok`·`contactManagerId`·`error`)와 `managerSummary`로 담당자별 결과를 확인하고, 실패한 담당자만 `contacts-managers-create`로 다시 추가하세요.

`managers`를 보내면 응답의 `managers`는 담당자 추가 후 다시 조회한 목록입니다. `managers`를 보내지 않으면 응답은 기존과 같습니다.

`managers` 형식이 잘못되면 거래처도 생성하지 않고 400과 필드별 오류(`details.fieldErrors`)를 반환합니다.

거래처 삭제 API는 아직 Public API로 제공하지 않습니다.

companyNamestringrequired

거래처 상호명/회사명

registrationNumberstringrequired

고유 사업자/거래처 식별번호 (`-` 없이 10자리 권장)

ceoNamestringoptional

대표자명

businessTypesstringoptional

업태

businessItemsstringoptional

종목

businessPlacestringoptional

사업장 주소

emailstringoptional

대표 이메일

email2stringoptional

보조 이메일

phonestringoptional

휴대전화

telstringoptional

유선 전화번호

region"DOMESTIC" | "FOREIGN"optional

거래처 지역 구분. 기본값은 DOMESTIC

memostringoptional

메모/비고

accountNumberstringoptional

입금 계좌번호

bankNamestringoptional

입금 은행명

bankAccountOwnerNamestringoptional

예금주명

managersContactManagerInput[]optional

거래처 생성 직후 함께 추가할 담당자 목록(최대 10명). 각 원소의 필드는 아래 `managers[].*`와 같습니다.

managers[].namestringrequired

담당자 이름 (최대 255자)

managers[].phoneNumberstring | nulloptional

담당자 휴대전화. 하이픈을 빼고 숫자 11자리 (하이픈·공백은 서버가 지웁니다)

managers[].telNumberstring | nulloptional

담당자 전화번호. 하이픈을 빼고 숫자 9~12자리

managers[].faxNumberstring | nulloptional

담당자 팩스번호 (최대 255자)

managers[].emailstring | nulloptional

담당자 이메일

managers[].memostringoptional

담당자 메모 (최대 32,600자). 생략하면 빈 문자열로 저장합니다.

Response Fields

idnumberrequired

거래처 ID

workspaceIdnumberrequired

워크스페이스 ID

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringrequired

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstring | nulloptional

이메일

email2string | nulloptional

보조 이메일

phonestring | nulloptional

휴대전화

telstring | nulloptional

전화번호

lastIssuedAtstringrequired

최근 발행 시각

region"DOMESTIC" | "FOREIGN"optional

거래처 지역 구분

isHiddenbooleanoptional

숨김 여부

▶managersContactManager[]optionalexpandable

거래처 담당자 목록

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

nationstringoptional

국가

accountNumberstring | nulloptional

계좌번호

bankNamestring | nulloptional

은행명

bankAccountOwnerNamestring | nulloptional

예금주명

memostringoptional

메모

isFavoritebooleanoptional

즐겨찾기 여부

▶managerResultsContactManagerCreateResult[]optionalexpandable

요청에 `managers`를 보냈을 때만 포함. 담당자별 추가 결과(요청 순서)

indexnumberrequired

요청 `managers[]`에서의 순서(0부터)

okbooleanrequired

이 담당자 추가 성공 여부

contactManagerIdnumber | nulloptional

성공 시 새 담당자 ID. 재조회로 하나로 특정하지 못하면 null

idConfirmedbooleanoptional

성공 시 재조회로 새 담당자 ID를 확인했는지 여부

▶managerContactManager | nulloptionalexpandable

성공 시 재조회한 새 담당자

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

▶newManagersContactManager[]optionalexpandable

성공 시 이번 추가 전후 재조회에서 새로 나타난 담당자 목록(확인용)

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

messagestringoptional

ID를 확인하지 못했을 때의 안내

namestringoptional

실패 시 요청한 담당자 이름

statusnumberoptional

실패 시 HTTP 상태 코드

errorstringoptional

실패 시 오류 메시지

codestringoptional

실패 시 오류 코드(예: CONTACT_ID_UNCONFIRMED)

detailsunknownoptional

실패 시 backend 검증 상세

▶managerSummaryobjectoptionalexpandable

요청에 `managers`를 보냈을 때만 포함. 담당자 추가 결과 요약

requestedCountnumberrequired

요청한 담당자 수

succeededCountnumberrequired

추가에 성공한 담당자 수

failedCountnumberrequired

추가에 실패한 담당자 수

idConfirmedCountnumberrequired

새 담당자 ID까지 확인한 수

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contacts \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "companyName": "샘플 거래처",
  "registrationNumber": "1111111111",
  "ceoName": "대표자 A",
  "businessTypes": "서비스업",
  "businessItems": "소프트웨어 개발",
  "businessPlace": "서울특별시 강남구 테헤란로 1",
  "email": "finance@example.com",
  "phone": "01012345678",
  "region": "DOMESTIC",
  "memo": "외부 ERP에서 동기화",
  "managers": [
    {
      "name": "담당자 B",
      "phoneNumber": "010-1234-5678",
      "email": "manager@example.com"
    }
  ]
}'
POST /api/public-docs/contacts
Contact Create Response Example
{
  "id": 928,
  "workspaceId": 1,
  "registrationNumber": "1111111111",
  "companyName": "샘플 거래처",
  "ceoName": "대표자 A",
  "businessTypes": "서비스업",
  "businessItems": "소프트웨어 개발",
  "businessPlace": "서울특별시 강남구 테헤란로 1",
  "email": "finance@example.com",
  "email2": null,
  "phone": "01012345678",
  "tel": null,
  "bankName": null,
  "bankAccountOwnerName": null,
  "accountNumber": null,
  "lastIssuedAt": "2026-02-19T16:32:29.514778",
  "managers": [
    {
      "id": 5012,
      "contactId": 928,
      "name": "담당자 B",
      "phoneNumber": "01012345678",
      "telNumber": null,
      "faxNumber": null,
      "email": "manager@example.com",
      "memo": ""
    }
  ],
  "region": "DOMESTIC",
  "nation": "",
  "isHidden": false,
  "memo": "외부 ERP에서 동기화",
  "isFavorite": false,
  "managerResults": [
    {
      "index": 0,
      "ok": true,
      "contactManagerId": 5012,
      "idConfirmed": true,
      "manager": {
        "id": 5012,
        "contactId": 928,
        "name": "담당자 B",
        "phoneNumber": "01012345678",
        "telNumber": null,
        "faxNumber": null,
        "email": "manager@example.com",
        "memo": ""
      },
      "newManagers": [
        {
          "id": 5012,
          "contactId": 928,
          "name": "담당자 B",
          "phoneNumber": "01012345678",
          "telNumber": null,
          "faxNumber": null,
          "email": "manager@example.com",
          "memo": ""
        }
      ]
    }
  ],
  "managerSummary": {
    "requestedCount": 1,
    "succeededCount": 1,
    "failedCount": 0,
    "idConfirmedCount": 1
  }
}

PUT /api/public-docs/contacts

기존 거래처의 기본 정보, 연락처, 계좌 정보, 메모를 부분 수정합니다.

Request Fields

쓰기 요청입니다. `contactId`와 수정할 필드를 1개 이상 전달해야 합니다.

전달하지 않은 필드는 변경하지 않습니다.

거래처 수정 권한이 없는 API key 또는 플랜에서는 403 응답이 반환될 수 있습니다.

이 API는 거래처 담당자(`managers`)를 바꾸지 않습니다. 본문에 `managers`를 넣어도 무시되므로, 담당자는 `contacts-managers-create`, `contacts-managers-update`, `contacts-managers-delete`로 관리하세요.

거래처 삭제 API는 아직 Public API로 제공하지 않습니다.

contactIdnumberrequired

수정 대상 거래처 ID

companyNamestringoptional

거래처 상호명/회사명

registrationNumberstringoptional

사업자등록번호 (`-` 없이 10자리 권장)

ceoNamestringoptional

대표자명

businessTypesstringoptional

업태

businessItemsstringoptional

종목

businessPlacestringoptional

사업장 주소

emailstringoptional

대표 이메일

email2stringoptional

보조 이메일

phonestringoptional

휴대전화

telstringoptional

유선 전화번호

memostringoptional

메모/비고

accountNumberstringoptional

입금 계좌번호

bankNamestringoptional

입금 은행명

bankAccountOwnerNamestringoptional

예금주명

Response Fields

okbooleanrequired

수정 요청 처리 성공 여부

contactIdnumberrequired

수정한 거래처 ID

updatedFieldsstring[]required

이번 요청에서 수정한 거래처 필드 목록

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X PUT https://app.granter.biz/api/public-docs/contacts \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contactId": 928,
  "email": "new-finance@example.com",
  "memo": "담당 이메일 변경"
}'
PUT /api/public-docs/contacts
Contact Update Response Example
{
  "ok": true,
  "contactId": 928,
  "updatedFields": ["email", "memo"]
}

POST /api/public-docs/contacts/managers

기존 거래처에 담당자(이름·휴대전화·전화·팩스·이메일·메모)를 1명 추가하고, 추가 후 거래처를 다시 조회해 새 담당자 ID를 돌려줍니다.

Request Fields

쓰기 요청입니다. 재시도 안전성이 필요하면 `Idempotency-Key` 헤더를 고정 값으로 전달하세요.

`contactId`는 `contacts` 조회 응답의 거래처 `id`입니다. API key가 연결된 워크스페이스의 거래처가 아니면 404(`CONTACT_NOT_FOUND`)를 반환합니다.

`name`은 필수입니다. `phoneNumber`는 숫자 11자리, `telNumber`는 숫자 9~12자리여야 하며 하이픈·공백·괄호는 서버가 지운 뒤 검사합니다. `+82` 같은 국가번호는 0으로 시작하는 국내 번호로 바꿔 보내세요.

`memo`를 생략하면 빈 문자열로 저장합니다. 선택 필드에 빈 문자열이나 `null`을 보내면 값 없이 저장합니다.

백엔드 담당자 추가 API는 새 ID를 돌려주지 않습니다. 그래서 추가 전후 담당자 목록을 비교해 새 담당자를 찾습니다. 하나로 특정하지 못하면(같은 이름의 담당자가 동시에 추가된 경우, 같은 `Idempotency-Key`로 재시도해 새 담당자가 생기지 않은 경우, 재조회 실패) 추측하지 않고 `idConfirmed=false`, `contactManagerId=null`과 `newManagers`·`message`를 돌려줍니다. 이때도 추가 요청 자체는 성공한 것이므로 다시 추가하기 전에 `contacts`로 담당자 목록을 확인하세요.

담당자는 거래처 단위로 관리됩니다. 세금계산서 한 장에 담당자를 따로 지정하는 기능은 없습니다.

contactIdnumberrequired

담당자를 추가할 거래처 ID

namestringrequired

담당자 이름 (최대 255자)

phoneNumberstring | nulloptional

휴대전화. 하이픈을 빼고 숫자 11자리

telNumberstring | nulloptional

전화번호. 하이픈을 빼고 숫자 9~12자리

faxNumberstring | nulloptional

팩스번호 (최대 255자)

emailstring | nulloptional

이메일

memostringoptional

메모 (최대 32,600자). 생략하면 빈 문자열로 저장합니다.

Response Fields

okbooleanrequired

담당자 추가 요청 처리 성공 여부

contactIdnumberrequired

담당자를 추가한 거래처 ID

contactManagerIdnumber | nullrequired

새 담당자 ID. 재조회로 하나로 특정하지 못하면 null(`idConfirmed=false`)

idConfirmedbooleanrequired

추가 후 거래처를 다시 조회해 새 담당자 ID를 하나로 확인했는지 여부

▶managerContactManager | nullrequiredexpandable

재조회한 새 담당자. `idConfirmed=false`이면 null

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

▶newManagersContactManager[]requiredexpandable

추가 전후 재조회에서 새로 나타난 담당자 목록(확인용)

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

messagestringoptional

`idConfirmed=false`일 때 확인 방법 안내

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contacts/managers \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contactId": 928,
  "name": "담당자 B",
  "phoneNumber": "01012345678",
  "telNumber": "0212345678",
  "email": "manager@example.com",
  "memo": "세금계산서 수신 담당"
}'
POST /api/public-docs/contacts/managers
Contact Manager Create Response Example
{
  "ok": true,
  "contactId": 928,
  "contactManagerId": 5012,
  "idConfirmed": true,
  "manager": {
    "id": 5012,
    "contactId": 928,
    "name": "담당자 B",
    "phoneNumber": "01012345678",
    "telNumber": "0212345678",
    "faxNumber": null,
    "email": "manager@example.com",
    "memo": "세금계산서 수신 담당"
  },
  "newManagers": [
    {
      "id": 5012,
      "contactId": 928,
      "name": "담당자 B",
      "phoneNumber": "01012345678",
      "telNumber": "0212345678",
      "faxNumber": null,
      "email": "manager@example.com",
      "memo": "세금계산서 수신 담당"
    }
  ]
}

PUT /api/public-docs/contacts/managers

거래처 담당자의 이름·연락처·메모를 수정합니다. 전달한 필드만 바꾸고 나머지는 기존 값을 유지하며, 수정 후 다시 조회한 담당자를 돌려줍니다.

Request Fields

쓰기 요청입니다. `contactId`, `contactManagerId`와 수정할 필드를 1개 이상 전달해야 합니다.

`contactManagerId`는 `contacts` 조회 응답의 `managers[].id`입니다. 해당 거래처의 담당자가 아니면 404(`CONTACT_MANAGER_NOT_FOUND`)를 반환합니다.

전달하지 않은 필드는 기존 값을 유지합니다. 선택 필드(`phoneNumber`, `telNumber`, `faxNumber`, `email`)에 `null`이나 빈 문자열을 보내면 값을 지웁니다. `name`은 지울 수 없습니다.

백엔드 담당자 수정은 전체 교체 방식이라, 서버가 기존 담당자 값을 읽어 전달한 필드만 바꾼 전체 값을 보냅니다. 같은 담당자를 동시에 수정하면 나중 요청이 앞 요청의 변경을 덮을 수 있습니다.

필드 형식 규칙은 `contacts-managers-create`와 같습니다.

응답의 `verified`는 수정 후 다시 조회한 값이 요청한 값과 같은지입니다. `false`이면 `manager`와 `message`를 확인하세요.

contactIdnumberrequired

담당자가 속한 거래처 ID

contactManagerIdnumberrequired

수정할 담당자 ID (`managers[].id`)

namestringoptional

담당자 이름 (최대 255자)

phoneNumberstring | nulloptional

휴대전화. 숫자 11자리, `null`이면 삭제

telNumberstring | nulloptional

전화번호. 숫자 9~12자리, `null`이면 삭제

faxNumberstring | nulloptional

팩스번호 (최대 255자), `null`이면 삭제

emailstring | nulloptional

이메일, `null`이면 삭제

memostringoptional

메모 (최대 32,600자). 빈 문자열이면 메모를 비웁니다.

Response Fields

okbooleanrequired

담당자 수정 요청 처리 성공 여부

contactIdnumberrequired

거래처 ID

contactManagerIdnumberrequired

수정한 담당자 ID

updatedFieldsstring[]required

이번 요청에서 전달한 담당자 필드 목록

verifiedbooleanrequired

수정 후 다시 조회한 담당자 값이 요청한 값과 같은지 여부

▶managerContactManager | nullrequiredexpandable

수정 후 다시 조회한 담당자. 재조회하지 못하면 null

idnumberrequired

거래처 담당자 ID

contactIdnumberrequired

거래처 ID

namestringrequired

담당자 이름

phoneNumberstring | nulloptional

휴대전화

telNumberstring | nulloptional

전화번호

faxNumberstring | nulloptional

팩스번호

emailstring | nulloptional

이메일

memostringrequired

메모

messagestringoptional

`verified=false`일 때 안내

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X PUT https://app.granter.biz/api/public-docs/contacts/managers \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contactId": 928,
  "contactManagerId": 5012,
  "email": "new-manager@example.com",
  "telNumber": null
}'
PUT /api/public-docs/contacts/managers
Contact Manager Update Response Example
{
  "ok": true,
  "contactId": 928,
  "contactManagerId": 5012,
  "updatedFields": ["telNumber", "email"],
  "verified": true,
  "manager": {
    "id": 5012,
    "contactId": 928,
    "name": "담당자 B",
    "phoneNumber": "01012345678",
    "telNumber": null,
    "faxNumber": null,
    "email": "new-manager@example.com",
    "memo": "세금계산서 수신 담당"
  }
}

DELETE /api/public-docs/contacts/managers

거래처 담당자 1명을 삭제합니다. 거래처 연락처 정보 관리용이며 거래처·티켓·발행된 증빙은 지우지 않습니다.

Request Fields

쓰기 요청입니다. `contactId`와 `contactManagerId`를 body로 전달합니다.

`contactManagerId`는 `contacts` 조회 응답의 `managers[].id`입니다. 해당 거래처의 담당자가 아니거나 이미 삭제됐으면 404(`CONTACT_MANAGER_NOT_FOUND`)를 반환합니다. 재시도 후 404가 오면 `contacts`로 삭제 여부를 확인하세요.

삭제는 되돌릴 수 없습니다. 같은 정보가 다시 필요하면 `contacts-managers-create`로 새로 추가하세요(새 ID가 부여됩니다).

이미 발행된 세금계산서에 적힌 연락처는 바뀌지 않습니다.

응답의 `verified`는 삭제 후 다시 조회한 거래처에서 담당자가 사라진 것을 확인했는지입니다.

contactIdnumberrequired

담당자가 속한 거래처 ID

contactManagerIdnumberrequired

삭제할 담당자 ID (`managers[].id`)

Response Fields

okbooleanrequired

담당자 삭제 요청 처리 성공 여부

contactIdnumberrequired

거래처 ID

deletedContactManagerIdnumberrequired

삭제한 담당자 ID

verifiedbooleanrequired

삭제 후 다시 조회한 거래처에서 담당자가 사라진 것을 확인했는지 여부

messagestringoptional

`verified=false`일 때 안내

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X DELETE https://app.granter.biz/api/public-docs/contacts/managers \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contactId": 928,
  "contactManagerId": 5012
}'
DELETE /api/public-docs/contacts/managers
Contact Manager Delete Response Example
{
  "ok": true,
  "contactId": 928,
  "deletedContactManagerId": 5012,
  "verified": true
}

GET /api/public-docs/workflows

기안 문서, 결재 상태, 결재선 정보를 포함한 전자결재 데이터를 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

직접 호출 시 `status`, `draftedByMe`, `limit`, `offset` query string을 사용할 수 있습니다.

테스트 패널은 기본 목록 조회를 수행합니다.

status"REQUESTED" | "APPROVED" | "REJECTED" | "COMPLETED"optional

결재 상태 필터

draftedByMebooleanoptional

내가 올린 결재만 조회할지 여부

limitnumberoptional

조회 건수 제한. 지정하지 않으면 최대 100건까지 조회합니다.

offsetnumberoptional

페이지 오프셋

Response Fields

▶[]Workflowrequiredexpandable

BE `/workflows` 원본 응답 배열의 각 원소

idnumberrequired

전자결재 ID

workspaceIdnumberrequired

워크스페이스 ID

titlestringrequired

결재안 제목

contentstringrequired

결재 내용

amountnumberrequired

결재 금액

originalAmountnumberrequired

원본 결재 금액

expectedPaymentDateYYYY-MM-DDrequired

이체 요청일

status"REQUESTED" | "APPROVED" | "REJECTED" | "COMPLETED"required

결재 상태

currencystringrequired

통화 코드

createdAtISO-8601 stringrequired

결재 요청 시각

modifiedAtISO-8601 stringrequired

최종 수정 시각

currentStepnumberrequired

현재 결재 차수

tagstring | nulloptional

연결된 태그명

tagIdnumber | nulloptional

연결된 태그 ID

▶userUserrequiredexpandable

기안자 정보

idnumberrequired

기안자 ID

namestringrequired

기안자 이름

emailstringrequired

기안자 이메일

isDeletedbooleanrequired

삭제 여부

▶refundAccountRefundAccountoptionalexpandable

환급 계좌 정보

accountHolderstringrequired

예금주명

accountNumberstringrequired

계좌번호

organizationNamestringrequired

은행명

▶stepsWorkflowStep[]requiredexpandable

결재 단계 목록

idnumberrequired

결재 단계 ID

stepnumberrequired

결재 차수

status"REQUESTED" | "APPROVED" | "REJECTED" | "COMPLETED"required

결재 단계 상태

createdAtISO-8601 stringrequired

생성 시각

modifiedAtISO-8601 stringrequired

수정 시각

▶approverApproverrequiredexpandable

결재자 정보

idnumberrequired

결재자 ID

namestringrequired

결재자 이름

emailstringrequired

결재자 이메일

isDeletedbooleanrequired

삭제 여부

▶reviewersReviewer[]requiredexpandable

검토자 목록

idnumberrequired

검토자 연결 ID

▶reviewerUserResponserequiredexpandable

검토자 정보

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesWorkflowMessage[]optionalexpandable

결재 메시지 목록

idnumberrequired

메시지 ID

contentstringrequired

메시지 내용

typestringrequired

메시지 타입

createdAtISO-8601 stringrequired

생성 시각

deletedAtISO-8601 string | nulloptional

삭제 시각

▶userUserResponserequiredexpandable

작성자 정보

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶attachmentsWorkflowAttachment[]optionalexpandable

첨부파일 목록

idnumberrequired

첨부파일 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/workflows \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/workflows
Workflow Response Example
[
  {
    "id": 333,
    "workspaceId": 1,
    "user": {
      "id": 8,
      "name": "기안자 A",
      "email": "drafter@example.com",
      "isDeleted": false
    },
    "title": "3월 운영비 집행",
    "content": "<p>3월 운영비 집행 승인 요청입니다.</p>",
    "amount": 50000,
    "originalAmount": 50000,
    "expectedPaymentDate": "2026-02-11",
    "status": "COMPLETED",
    "currentStep": 1,
    "currency": "KRW",
    "createdAt": "2026-02-11T11:12:14.478782",
    "messages": [
      {
        "id": 878,
        "user": {
          "id": 8,
          "name": "기안자 A",
          "email": "drafter@example.com",
          "isDeleted": false
        },
        "content": "1차 결재가 승인되었습니다.",
        "type": "SYSTEM",
        "createdAt": "2026-02-11T11:12:25.120704",
        "deletedAt": null
      },
      {
        "id": 879,
        "user": {
          "id": 8,
          "name": "기안자 A",
          "email": "drafter@example.com",
          "isDeleted": false
        },
        "content": "결재 상태가 결재완료로 변경되었습니다.",
        "type": "SYSTEM",
        "createdAt": "2026-02-11T11:12:27.811770",
        "deletedAt": null
      }
    ],
    "attachments": [],
    "refundAccount": null,
    "steps": [
      {
        "id": 573,
        "approver": {
          "id": 8,
          "name": "결재자 A",
          "email": "approver@example.com",
          "isDeleted": false
        },
        "step": 1,
        "status": "APPROVED",
        "createdAt": "2026-02-11T11:12:14.483147",
        "modifiedAt": "2026-02-11T11:12:25.137155"
      }
    ],
    "reviewers": [],
    "tag": null,
    "tagId": null,
    "modifiedAt": "2026-02-11T11:12:27.813271"
  }
]

POST /api/public-docs/workflows

외부 시스템에서 결재 제목, 내용, 금액, 결재자 순서를 지정해 전자결재 문서를 생성합니다.

Request Fields

쓰기 요청입니다. 재시도 안전성이 필요하면 `Idempotency-Key` 헤더를 고정 값으로 전달하세요.

전자결재 생성만 지원합니다. 전자결재 수정/삭제 API는 아직 공개하지 않습니다.

`approverIds` 순서가 결재 단계 순서가 됩니다. 최소 1명의 결재자가 필요합니다.

`expectedPaymentDate`를 생략하면 요청 처리일 기준 날짜가 사용됩니다.

전자결재 생성 권한이 없는 API key 또는 플랜에서는 403 응답이 반환될 수 있습니다.

titlestringrequired

결재 제목

contentstringrequired

결재 내용. HTML 문자열도 전달할 수 있습니다.

originalAmountnumber | stringrequired

결재 금액. `150,000원` 같은 문자열도 허용합니다.

approverIdsnumber[]required

결재자 ID 배열. 배열 순서대로 1차, 2차 결재자가 됩니다.

reviewerIdsnumber[]optional

검토자/참조자 ID 배열

expectedPaymentDateYYYY-MM-DDoptional

지급예정일. 생략 시 요청 처리일 기준 날짜

currencystringoptional

통화 코드. 기본값은 KRW

refundAccountobjectoptional

환불/이체 계좌 정보. 제공 시 accountHolder, accountNumber, organizationName이 모두 필요합니다.

refundAccount.accountHolderstringoptional

예금주

refundAccount.accountNumberstringoptional

계좌번호

refundAccount.organizationNamestringoptional

은행명/기관명

Response Fields

idnumberrequired

전자결재 ID

workspaceIdnumberrequired

워크스페이스 ID

titlestringrequired

결재안 제목

contentstringrequired

결재 내용

amountnumberrequired

결재 금액

originalAmountnumberrequired

원본 결재 금액

expectedPaymentDateYYYY-MM-DDrequired

이체 요청일

status"REQUESTED" | "APPROVED" | "REJECTED" | "COMPLETED"required

결재 상태

currencystringrequired

통화 코드

createdAtISO-8601 stringrequired

결재 요청 시각

modifiedAtISO-8601 stringrequired

최종 수정 시각

currentStepnumberrequired

현재 결재 차수

tagstring | nulloptional

연결된 태그명

tagIdnumber | nulloptional

연결된 태그 ID

▶userUserrequiredexpandable

기안자 정보

idnumberrequired

기안자 ID

namestringrequired

기안자 이름

emailstringrequired

기안자 이메일

isDeletedbooleanrequired

삭제 여부

▶refundAccountRefundAccountoptionalexpandable

환급 계좌 정보

accountHolderstringrequired

예금주명

accountNumberstringrequired

계좌번호

organizationNamestringrequired

은행명

▶stepsWorkflowStep[]requiredexpandable

결재 단계 목록

idnumberrequired

결재 단계 ID

stepnumberrequired

결재 차수

status"REQUESTED" | "APPROVED" | "REJECTED" | "COMPLETED"required

결재 단계 상태

createdAtISO-8601 stringrequired

생성 시각

modifiedAtISO-8601 stringrequired

수정 시각

▶approverApproverrequiredexpandable

결재자 정보

idnumberrequired

결재자 ID

namestringrequired

결재자 이름

emailstringrequired

결재자 이메일

isDeletedbooleanrequired

삭제 여부

▶reviewersReviewer[]requiredexpandable

검토자 목록

idnumberrequired

검토자 연결 ID

▶reviewerUserResponserequiredexpandable

검토자 정보

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesWorkflowMessage[]optionalexpandable

결재 메시지 목록

idnumberrequired

메시지 ID

contentstringrequired

메시지 내용

typestringrequired

메시지 타입

createdAtISO-8601 stringrequired

생성 시각

deletedAtISO-8601 string | nulloptional

삭제 시각

▶userUserResponserequiredexpandable

작성자 정보

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶attachmentsWorkflowAttachment[]optionalexpandable

첨부파일 목록

idnumberrequired

첨부파일 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/workflows \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "title": "4월 운영비 집행",
  "content": "<p>4월 운영비 집행 승인 요청입니다.</p>",
  "originalAmount": 150000,
  "expectedPaymentDate": "2026-04-30",
  "currency": "KRW",
  "approverIds": [8],
  "reviewerIds": [],
  "refundAccount": {
    "accountHolder": "그랜터",
    "accountNumber": "1234567890",
    "organizationName": "국민은행"
  }
}'
POST /api/public-docs/workflows
Workflow Create Response Example
{
  "id": 333,
  "workspaceId": 1,
  "user": {
    "id": 8,
    "name": "기안자 A",
    "email": "drafter@example.com",
    "isDeleted": false
  },
  "title": "4월 운영비 집행",
  "content": "<p>4월 운영비 집행 승인 요청입니다.</p>",
  "amount": 150000,
  "originalAmount": 150000,
  "expectedPaymentDate": "2026-04-30",
  "status": "REQUESTED",
  "currentStep": 1,
  "currency": "KRW",
  "createdAt": "2026-04-30T11:12:14.478782",
  "messages": [],
  "attachments": [],
  "refundAccount": {
    "accountHolder": "그랜터",
    "accountNumber": "1234567890",
    "organizationName": "국민은행"
  },
  "steps": [
    {
      "id": 573,
      "approver": {
        "id": 8,
        "name": "결재자 A",
        "email": "approver@example.com",
        "isDeleted": false
      },
      "step": 1,
      "status": "REQUESTED",
      "createdAt": "2026-04-30T11:12:14.483147",
      "modifiedAt": "2026-04-30T11:12:14.483147"
    }
  ],
  "reviewers": [],
  "tag": null,
  "tagId": null,
  "modifiedAt": "2026-04-30T11:12:14.483147"
}

POST /api/public-docs/salary-histories

직원별 급여 내역, 지급 상태, 보험료, 수당·공제 상세를 조회합니다.

Request Fields

급여는 티켓과 분리된 독립 도메인입니다.

조회 시 `startDate`, `endDate`는 필수입니다.

기간 기반 조회는 요청 1회당 최대 31일까지 사용할 수 있으며, 더 긴 범위는 31일 이하 구간으로 나눠 조회한 뒤 합쳐서 사용하세요.

`employmentType`, `salaryPaymentStatus`, `employeeId`, `keyword`는 선택 필터입니다.

startDateYYYY-MM-DDrequired

조회 시작일

endDateYYYY-MM-DDrequired

조회 종료일

employmentType"REGULAR_EMPLOYEE" | "NON_REGULAR_EMPLOYEE" | "SPECIAL_EMPLOYEE" | "REPRESENTATIVE" | "FREELANCER" | "DAY_LABORER" | "CONTRACT_EMPLOYEE" | "REGISTERED_EXECUTIVE" | "NON_REGISTERED_EXECUTIVE" | arrayoptional

고용 형태 필터. 단일 값 또는 배열을 전달할 수 있습니다.

salaryPaymentStatus"PENDING" | "REVIEWED" | "PAID" | arrayoptional

급여 지급 상태 필터. 단일 값 또는 배열을 전달할 수 있습니다.

employeeIdnumberoptional

직원 ID 필터

keywordstringoptional

직원명 또는 설명 키워드 검색

Response Fields

▶[]SalaryHistoryrequiredexpandable

BE `/salary-histories` 원본 응답 배열의 각 원소

idnumberrequired

급여 이력 ID

workspaceIdnumberrequired

워크스페이스 ID

▶employeeUserResponseoptionalexpandable

직원 정보

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

employeeIdnumberrequired

직원 ID

employeeNamestringoptional

직원명

employeeEmailstring | nulloptional

직원 이메일

employmentType"REGULAR_EMPLOYEE" | "NON_REGULAR_EMPLOYEE" | "SPECIAL_EMPLOYEE" | "REPRESENTATIVE" | "FREELANCER" | "DAY_LABORER"required

고용 형태

totalAmountnumberrequired

총급여

recognizedAmountnumberrequired

실질인정금액

paymentDateYYYY-MM-DDrequired

지급일

mealAmountnumberrequired

비과세 식대

bonusAmountnumberrequired

상여금

allowanceAmountnumberrequired

수당 합계

pensionInsuranceAmountnumberrequired

국민연금

healthInsuranceAmountnumberrequired

건강보험

employInsuranceAmountnumberrequired

고용보험

careInsuranceAmountnumberrequired

장기요양보험

bankstringoptional

은행명

bankAccountstringoptional

은행 계좌번호

netAmountnumberrequired

실지급액

descriptionstringoptional

설명

employmentDiscount"NONE" | "GENERAL" | "YOUTH"required

고용 할인 유형

incomeTaxAmountnumberoptional

소득세

localIncomeTaxAmountnumberoptional

지방소득세

salaryPaymentStatus"PENDING" | "REVIEWED" | "PAID"required

급여 지급 상태

isEmailNotifiedbooleanrequired

명세서 email 발송 여부

emailNotifiedAtISO-8601 string | nulloptional

email 발송 시각

messageCountnumberrequired

메시지 개수

scheduledWorkHoursnumberrequired

당월 근무 시간

shortfallHoursnumberrequired

미달 근무 시간

unpaidLeaveHoursnumberoptional

무급휴가 시간

recognizedWorkHoursnumberrequired

근무 인정 시간

appliedRatioTypestringoptional

적용 비율 타입

appliedRationumberoptional

적용 비율

▶taxExemptionsTitleAmount[]optionalexpandable

비과세급 상세

titlestringrequired

항목명

amountnumberrequired

금액

▶incentivesTitleAmount[]optionalexpandable

인센티브 상세

titlestringrequired

항목명

amountnumberrequired

금액

▶allowancesTitleAmount[]optionalexpandable

수당 상세

titlestringrequired

항목명

amountnumberrequired

금액

▶deductionsTitleAmount[]optionalexpandable

공제 상세

titlestringrequired

항목명

amountnumberrequired

금액

createdAtISO-8601 stringrequired

생성 시각

modifiedAtISO-8601 stringrequired

수정 시각

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/salary-histories \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "startDate": "2026-02-01",
  "endDate": "2026-02-28"
}'
POST /api/public-docs/salary-histories
Salary History Response Example
[
  {
    "id": 303,
    "workspaceId": 1,
    "employee": {
      "id": 67,
      "name": "직원 A",
      "email": "employee-a@example.com",
      "isDeleted": false
    },
    "employeeName": "직원 A",
    "employeeEmail": null,
    "employmentType": "REGULAR_EMPLOYEE",
    "totalAmount": 5000000,
    "paymentDate": "2026-02-01",
    "mealAmount": 3000,
    "bonusAmount": 10000,
    "pensionInsuranceAmount": 261000,
    "healthInsuranceAmount": 198080,
    "employInsuranceAmount": 49580,
    "careInsuranceAmount": 26020,
    "bank": "국민은행",
    "bankAccount": "123-45-****",
    "recognizedAmount": 5003000,
    "netAmount": 4519877,
    "description": "",
    "employmentDiscount": "NONE",
    "incomeTaxAmount": 405590,
    "localIncomeTaxAmount": 40550,
    "salaryPaymentStatus": "PENDING",
    "isEmailNotified": false,
    "emailNotifiedAt": null,
    "messageCount": 0,
    "scheduledWorkHours": 224,
    "shortfallHours": 0,
    "unpaidLeaveHours": 0,
    "recognizedWorkHours": 224,
    "allowanceAmount": 500000,
    "appliedRatioType": "",
    "appliedRatio": 1,
    "taxExemptions": [{ "title": "비과세급", "amount": 3000 }],
    "incentives": [{ "title": "상여금", "amount": 10000 }],
    "allowances": [{ "title": "직책수당", "amount": 500000 }],
    "deductions": [{ "title": "기타 공제", "amount": 12303 }],
    "createdAt": "2026-02-11T14:02:48.545431",
    "modifiedAt": "2026-02-28T14:22:59.327028"
  }
]

POST /api/public-docs/salary-histories-create

외부 시스템에서 계산한 직원별 급여 내역을 생성합니다.

Request Fields

급여 내역 생성만 지원합니다. 급여 수정/삭제 API는 아직 공개하지 않습니다.

요청 재시도 중 중복 생성을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.

`employeeId`, `employeeName`, `employeeEmail` 중 하나는 필요합니다. 기존 구성원 급여라면 `people` API에서 조회한 `employeeId`를 사용하는 편이 가장 안전합니다.

금액·근무시간 상세를 생략하면 public proxy가 0 또는 지급월 기준 일수로 보수적으로 채워 upstream에 전달합니다. 외부 급여 시스템의 확정값이 있으면 직접 전달하세요.

employeeIdnumberoptional

직원 ID. 기존 구성원 급여 생성 시 권장

employeeNamestringoptional

직원명. 비회원 또는 수동 급여 생성 시 사용

employeeEmailstringoptional

직원 이메일

employmentType"REGULAR_EMPLOYEE" | "NON_REGULAR_EMPLOYEE" | "SPECIAL_EMPLOYEE" | "REPRESENTATIVE" | "FREELANCER" | "DAY_LABORER" | "CONTRACT_EMPLOYEE" | "REGISTERED_EXECUTIVE" | "NON_REGISTERED_EXECUTIVE"required

고용 형태

totalAmountnumberrequired

기본 급여 또는 총 급여 기준 금액

paymentDateYYYY-MM-DDrequired

지급일

mealAmountnumberoptional

비과세 식대. 생략 시 0

bonusAmountnumberoptional

상여금. 생략 시 0

allowanceAmountnumberoptional

수당 합계. 생략 시 allowances 합계 또는 0

pensionInsuranceAmountnumberoptional

국민연금. 생략 시 0

healthInsuranceAmountnumberoptional

건강보험. 생략 시 0

employInsuranceAmountnumberoptional

고용보험. 생략 시 0

careInsuranceAmountnumberoptional

장기요양보험. 생략 시 0

bankstringoptional

급여 입금 은행명

bankAccountstringoptional

급여 입금 계좌번호

descriptionstringoptional

급여 내역 메모

recognizedAmountnumberoptional

실질인정금액. 생략 시 totalAmount + mealAmount

netAmountnumberoptional

실지급액. 생략 시 지급/공제 항목으로 계산

employmentDiscount"NONE" | "GENERAL" | "YOUTH"optional

고용 할인 유형. 생략 시 NONE

incomeTaxAmountnumberoptional

소득세. 생략 시 0

localIncomeTaxAmountnumberoptional

지방소득세. 생략 시 0

salaryPaymentStatus"PENDING" | "REVIEWED" | "PAID"optional

급여 지급 상태. 생략 시 PENDING

scheduledWorkHoursnumberoptional

당월 소정근로시간(시간 단위). 생략 시 지급월 일수 × 8

shortfallHoursnumberoptional

미달 근무시간(시간 단위). 생략 시 0

unpaidLeaveHoursnumberoptional

무급휴가(시간 단위). 생략 시 0

recognizedWorkHoursnumberoptional

근무 인정시간(시간 단위). 생략 시 scheduledWorkHours - shortfallHours - unpaidLeaveHours

appliedRatioTypestringoptional

적용 비율 타입. 생략 시 빈 문자열

appliedRationumberoptional

적용 비율. 생략 시 1

taxExemptions{ title: string; amount: number }[]optional

비과세급 상세. 생략 시 빈 배열

incentives{ title: string; amount: number }[]optional

인센티브 상세. 생략 시 빈 배열

allowances{ title: string; amount: number }[]optional

수당 상세. 생략 시 빈 배열

deductions{ title: string; amount: number }[]optional

공제 상세. 생략 시 빈 배열

Response Fields

idnumberrequired

급여 이력 ID

workspaceIdnumberrequired

워크스페이스 ID

▶employeeUserResponseoptionalexpandable

직원 정보

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

employeeIdnumberrequired

직원 ID

employeeNamestringoptional

직원명

employeeEmailstring | nulloptional

직원 이메일

employmentType"REGULAR_EMPLOYEE" | "NON_REGULAR_EMPLOYEE" | "SPECIAL_EMPLOYEE" | "REPRESENTATIVE" | "FREELANCER" | "DAY_LABORER"required

고용 형태

totalAmountnumberrequired

총급여

recognizedAmountnumberrequired

실질인정금액

paymentDateYYYY-MM-DDrequired

지급일

mealAmountnumberrequired

비과세 식대

bonusAmountnumberrequired

상여금

allowanceAmountnumberrequired

수당 합계

pensionInsuranceAmountnumberrequired

국민연금

healthInsuranceAmountnumberrequired

건강보험

employInsuranceAmountnumberrequired

고용보험

careInsuranceAmountnumberrequired

장기요양보험

bankstringoptional

은행명

bankAccountstringoptional

은행 계좌번호

netAmountnumberrequired

실지급액

descriptionstringoptional

설명

employmentDiscount"NONE" | "GENERAL" | "YOUTH"required

고용 할인 유형

incomeTaxAmountnumberoptional

소득세

localIncomeTaxAmountnumberoptional

지방소득세

salaryPaymentStatus"PENDING" | "REVIEWED" | "PAID"required

급여 지급 상태

isEmailNotifiedbooleanrequired

명세서 email 발송 여부

emailNotifiedAtISO-8601 string | nulloptional

email 발송 시각

messageCountnumberrequired

메시지 개수

scheduledWorkHoursnumberrequired

당월 근무 시간

shortfallHoursnumberrequired

미달 근무 시간

unpaidLeaveHoursnumberoptional

무급휴가 시간

recognizedWorkHoursnumberrequired

근무 인정 시간

appliedRatioTypestringoptional

적용 비율 타입

appliedRationumberoptional

적용 비율

▶taxExemptionsTitleAmount[]optionalexpandable

비과세급 상세

titlestringrequired

항목명

amountnumberrequired

금액

▶incentivesTitleAmount[]optionalexpandable

인센티브 상세

titlestringrequired

항목명

amountnumberrequired

금액

▶allowancesTitleAmount[]optionalexpandable

수당 상세

titlestringrequired

항목명

amountnumberrequired

금액

▶deductionsTitleAmount[]optionalexpandable

공제 상세

titlestringrequired

항목명

amountnumberrequired

금액

createdAtISO-8601 stringrequired

생성 시각

modifiedAtISO-8601 stringrequired

수정 시각

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/salary-histories-create \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "employeeId": 67,
  "employeeName": "직원 A",
  "employmentType": "REGULAR_EMPLOYEE",
  "totalAmount": 5000000,
  "paymentDate": "2026-04-25",
  "mealAmount": 200000,
  "bonusAmount": 100000,
  "pensionInsuranceAmount": 225000,
  "healthInsuranceAmount": 180000,
  "employInsuranceAmount": 45000,
  "careInsuranceAmount": 23000,
  "incomeTaxAmount": 405590,
  "localIncomeTaxAmount": 40550,
  "salaryPaymentStatus": "PENDING",
  "allowances": [{ "title": "직책수당", "amount": 300000 }],
  "deductions": [{ "title": "기타 공제", "amount": 10000 }]
}'
POST /api/public-docs/salary-histories-create
Salary History Create Response Example
{
  "id": 331,
  "workspaceId": 1,
  "employee": {
    "id": 67,
    "name": "직원 A",
    "email": "employee-a@example.com",
    "isDeleted": false
  },
  "employeeName": "직원 A",
  "employeeEmail": null,
  "employmentType": "REGULAR_EMPLOYEE",
  "totalAmount": 5000000,
  "paymentDate": "2026-04-25",
  "mealAmount": 200000,
  "bonusAmount": 100000,
  "pensionInsuranceAmount": 225000,
  "healthInsuranceAmount": 180000,
  "employInsuranceAmount": 45000,
  "careInsuranceAmount": 23000,
  "bank": "국민은행",
  "bankAccount": "123-45-****",
  "recognizedAmount": 5200000,
  "netAmount": 4670860,
  "description": "",
  "employmentDiscount": "NONE",
  "incomeTaxAmount": 405590,
  "localIncomeTaxAmount": 40550,
  "salaryPaymentStatus": "PENDING",
  "isEmailNotified": false,
  "emailNotifiedAt": null,
  "messageCount": 0,
  "scheduledWorkHours": 240,
  "shortfallHours": 0,
  "unpaidLeaveHours": 0,
  "recognizedWorkHours": 240,
  "allowanceAmount": 300000,
  "appliedRatioType": "",
  "appliedRatio": 1,
  "taxExemptions": [{ "title": "비과세 식대", "amount": 200000 }],
  "incentives": [],
  "allowances": [{ "title": "직책수당", "amount": 300000 }],
  "deductions": [{ "title": "기타 공제", "amount": 10000 }],
  "createdAt": "2026-04-30T10:00:00.000000",
  "modifiedAt": "2026-04-30T10:00:00.000000"
}

GET /api/public-docs/contracts

업무 > 계약의 계약 목록을 상태·청구서 현황·문서 종류·생성일·거래처·검색어로 조회합니다. 계약마다 거래처, 품목 요약, 견적서·청구서·거래명세서의 발급·납부 현황, 연결된 세금계산서와 계약서(전자서명) 서명 상태를 함께 돌려줍니다.

Request Fields

모든 조건은 query string으로 전달합니다. 여러 값을 받는 필드는 `statuses=PENDING,COMPLETED`처럼 쉼표로 잇거나 같은 이름을 반복해 보냅니다.

계약 ID 내림차순 커서 페이지입니다. 응답의 `lastSeenId`를 다음 요청의 `lastSeenId`로 보내면 이어서 조회하고, `null`이면 마지막 페이지입니다.

`paymentDisplayStatuses`는 앱 계약 목록의 '현황' 값입니다. 연체·납부대기·확인불가는 대기(PENDING) 계약의 청구서 현황이므로 보통 `statuses=PENDING`과 함께 씁니다.

`createdDateFrom`·`createdDateTo`는 계약을 만든 날짜 조건입니다. 발급일·납부기한·입금일 조건이 아닙니다.

앱의 '초안' 탭은 브라우저에 임시 저장된 작성 중 계약이라 이 API에 나오지 않습니다. `DRAFT`는 서버에 저장된 초안만 뜻합니다.

문서에 없는 query parameter를 보내면 조건 오타로 전체 목록을 받는 일을 막기 위해 400으로 거부합니다.

계약 API는 워크스페이스 소유자 권한의 API key로 호출되며, 계약 관리 권한이 없는 워크스페이스는 403을 반환합니다.

statusesstring[](query)optional

계약 상태 목록

▶허용 값
PENDING·대기-발급·납부가 진행 중인 계약
COMPLETED·완료-결제 완료 등으로 끝난 거래 (계약 체결을 뜻하지 않음)
CANCELED·취소-취소된 계약
DRAFT·서버 초안-서버에 저장된 초안
paymentDisplayStatusesstring[](query)optional

청구서 현황. 넣으면 발급된 청구서가 있거나 대기·완료인 계약만 남습니다.

▶허용 값
OVERDUE·연체중-미납이고 최신 청구서 납부기한이 지남
PENDING·납부대기-미납이고 납부기한 전
VERIFICATION_SKIPPED·확인불가-발급 시 입금 확인을 생략한 청구서
COMPLETED·지급완료-결제 완료
documentTypesstring[](query)optional

보유 문서 종류. 발급 전 초안 문서도 포함해 판단합니다.

▶허용 값
QUOTATION·견적서
INVOICE·청구서
TRADE_STATEMENT·거래명세서
createdDateFromYYYY-MM-DD(query)optional

계약 생성일 시작(포함)

createdDateToYYYY-MM-DD(query)optional

계약 생성일 종료(포함)

keywordstring(query)optional

거래처명·문서번호·계약 품목명에 포함된 문자열 (100자 이하, 대소문자 무시)

contactIdnumber(query)optional

거래처 ID (`contacts` 조회 결과)

lastSeenIdnumber(query)optional

이전 응답의 `lastSeenId` 커서

limitnumber(query)optional

한 페이지 건수 (1~200, 기본 100)

includeCountsboolean(query)optional

`true`면 상태 조건을 뺀 같은 조건의 상태별 건수(`statusCounts`)를 함께 돌려줍니다.

Response Fields

▶contractsContractListItem[]requiredexpandable

계약 목록 (ID 내림차순)

▶contractContractrequiredexpandable

계약 요약

idnumberrequired

계약 ID

status"DRAFT" | "PENDING" | "COMPLETED" | "CANCELED"required

계약 상태. PENDING=대기(진행 중), COMPLETED=완료(거래 종료), CANCELED=취소, DRAFT=서버 초안

statusChangeSource"USER" | "INVOICE_PAYMENT" | nulloptional

마지막 상태 변경 주체. INVOICE_PAYMENT는 결제 상태에 따른 자동 완료·재개

contactIdnumber | nulloptional

현재 거래처 ID

totalAmountnumber | nulloptional

계약 총액

currencystring | nulloptional

계약 통화 (예: KRW)

defaultIssuerProfileIdnumber | nulloptional

기본 발급자 프로필 ID

cancellationReason"INPUT_ERROR" | "CUSTOMER_DECISION" | "OUT_OF_STOCK" | "ILLEGAL_CONCERN" | "OTHER" | nulloptional

취소 사유

cancellationReasonDetailstring | nulloptional

취소 상세 사유

statusChangedAtdatetime | nulloptional

마지막 상태 변경 시각

paymentStatus"UNPAID" | "PAID" | "PAYMENT_VERIFICATION_SKIPPED" | nulloptional

계약 결제 상태. PAID가 되면 대기 계약이 자동으로 완료됩니다

paymentConfirmationMethod"MANUAL" | "BANK_TRANSACTION" | nulloptional

결제 확인 방식. MANUAL=입금내역 연결 없이 완료, BANK_TRANSACTION=연결된 입금내역 근거

paymentConfirmedAtdatetime | nulloptional

결제 확인 시각

paymentConfirmedByUserIdnumber | nulloptional

결제를 확인한 구성원 ID. 자동 연결이면 null

contactNamestring | nulloptional

거래처명

contactManagerNamesstring[] | nulloptional

거래처 담당자 이름 목록

managerUserIdnumber | nulloptional

계약 담당 구성원 ID

paymentDisplayStatus"OVERDUE" | "PENDING" | "VERIFICATION_SKIPPED" | "COMPLETED" | nulloptional

화면 '현황' 값. OVERDUE=연체중, PENDING=납부대기, VERIFICATION_SKIPPED=확인불가, COMPLETED=지급완료

latestInvoicePaymentStatusstring | nulloptional

최신 청구서 결제 상태

latestInvoiceDueDateYYYY-MM-DD | nulloptional

최신 청구서 납부기한

overduebooleanrequired

연체 여부

▶documentsContractListDocument[]optionalexpandable

계약 문서 요약

idnumberrequired

계약 문서 ID

type"QUOTATION" | "INVOICE" | "TRADE_STATEMENT"required

문서 종류 (견적서·청구서·거래명세서)

documentNumberstring | nulloptional

문서번호 (발급 후 부여)

latestIssuedRevisionIdnumber | nulloptional

최신 발급본 ID. null이면 미발급

paymentStatusstring | nulloptional

청구서 결제 상태 (청구서만)

issueDateYYYY-MM-DD | nulloptional

발급일

issuedAtdatetime | nulloptional

발급 처리 시각

paymentConfirmedAtdatetime | nulloptional

결제 확인 시각

dueDateYYYY-MM-DD | nulloptional

납부기한 (청구서만)

overduebooleanrequired

연체 여부

▶itemSummaryItemSummary | nulloptionalexpandable

대표 품목명과 품목 수

representativeItemNamestringrequired

대표 품목명

itemCountnumberrequired

품목 수

▶taxInvoicesContractTaxInvoice[]optionalexpandable

계약에 연결된 세금계산서 요약

taxInvoiceIdnumberrequired

세금계산서 ID

statusstringoptional

세금계산서 상태

reportingDateYYYY-MM-DD | nulloptional

작성일

totalAmountnumber | nulloptional

합계 금액

▶agreementsContractAgreement[]optionalexpandable

계약에 연결된 계약서(전자서명) 요약

agreementIdnumberrequired

계약서 ID

latestIssuedRevisionIdnumber | nulloptional

최신 발급본 ID

agreementNumberstring | nulloptional

계약서 번호

issueDateYYYY-MM-DD | nulloptional

발급일

signingStatus"PREPARING" | "IN_PROGRESS" | "COMPLETED" | "EXPIRED" | nulloptional

서명 진행 상태

lastSeenIdnumber | nullrequired

다음 페이지 커서. null이면 마지막 페이지

▶statusCountsContractStatusCountsoptionalexpandable

includeCounts=true일 때만 포함되는 상태별 건수

totalnumberrequired

상태 조건을 뺀 전체 건수

draftnumberrequired

서버 초안 건수 (화면 '초안' 탭은 브라우저 임시 저장본이라 다를 수 있음)

pendingnumberrequired

대기 건수

completednumberrequired

완료 건수

cancelednumberrequired

취소 건수

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/contracts?statuses=PENDING&limit=20&includeCounts=true \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/contracts?statuses=PENDING&limit=20&includeCounts=true
Contracts Response Example
{
  "contracts": [
    {
      "contract": {
        "id": 1201,
        "status": "PENDING",
        "statusChangeSource": "USER",
        "contactId": 3301,
        "totalAmount": 3300000,
        "currency": "KRW",
        "defaultIssuerProfileId": 12,
        "cancellationReason": null,
        "cancellationReasonDetail": null,
        "statusChangedAt": "2026-09-01T10:12:00",
        "paymentStatus": "UNPAID",
        "paymentConfirmationMethod": null,
        "paymentConfirmedAt": null,
        "paymentConfirmedByUserId": null
      },
      "contactName": "주식회사 샘플",
      "contactManagerNames": ["김담당"],
      "managerUserId": 77,
      "paymentDisplayStatus": "OVERDUE",
      "latestInvoicePaymentStatus": "UNPAID",
      "latestInvoiceDueDate": "2026-09-20",
      "overdue": true,
      "documents": [
        {
          "id": 9001,
          "type": "INVOICE",
          "documentNumber": "I260900001",
          "latestIssuedRevisionId": 15001,
          "paymentStatus": "UNPAID",
          "issueDate": "2026-09-01",
          "issuedAt": "2026-09-01T10:12:00",
          "paymentConfirmedAt": null,
          "dueDate": "2026-09-20",
          "overdue": true
        }
      ],
      "itemSummary": { "representativeItemName": "홈페이지 유지보수", "itemCount": 2 },
      "taxInvoices": [],
      "agreements": []
    }
  ],
  "lastSeenId": null,
  "statusCounts": { "total": 42, "draft": 0, "pending": 25, "completed": 12, "canceled": 5 }
}

GET /api/public-docs/contracts/detail

계약 한 건의 상세를 조회합니다. 계약·결제 상태, 담당자, 품목, 문서별 발급본(품목·금액·입금 계좌·전달 수신자), 연결된 입금내역, 변경 이력과 함께 계약서(전자서명) 서명 상태와 연결된 세금계산서를 돌려줍니다.

Request Fields

`contractId`를 query string으로 전달합니다. 계약 ID는 `contracts` 조회 응답의 `contract.id`입니다.

`documents[].revisions`에는 발급본 전체(정정 발급 이력 포함)와 현재 초안만 담깁니다.

결제 상태(`contract.paymentStatus`)와 입금내역(`paymentProofs`)은 계약 단위입니다. 청구서 문서의 `paymentStatus`는 같은 값을 호환용으로 보여 줍니다.

`paymentProofs[].updateSource`가 `SYSTEM`이면 그랜터가 금액·입금 계좌·입금자명이 정확히 맞는 입금을 자동으로 연결한 것입니다.

변경 이력(`changeLogs`)의 스냅샷에는 해당 변경과 관련된 필드만 채워집니다.

contractIdnumber(query)required

조회할 계약 ID

Response Fields

▶contractContractrequiredexpandable

계약

idnumberrequired

계약 ID

status"DRAFT" | "PENDING" | "COMPLETED" | "CANCELED"required

계약 상태. PENDING=대기(진행 중), COMPLETED=완료(거래 종료), CANCELED=취소, DRAFT=서버 초안

statusChangeSource"USER" | "INVOICE_PAYMENT" | nulloptional

마지막 상태 변경 주체. INVOICE_PAYMENT는 결제 상태에 따른 자동 완료·재개

contactIdnumber | nulloptional

현재 거래처 ID

totalAmountnumber | nulloptional

계약 총액

currencystring | nulloptional

계약 통화 (예: KRW)

defaultIssuerProfileIdnumber | nulloptional

기본 발급자 프로필 ID

cancellationReason"INPUT_ERROR" | "CUSTOMER_DECISION" | "OUT_OF_STOCK" | "ILLEGAL_CONCERN" | "OTHER" | nulloptional

취소 사유

cancellationReasonDetailstring | nulloptional

취소 상세 사유

statusChangedAtdatetime | nulloptional

마지막 상태 변경 시각

paymentStatus"UNPAID" | "PAID" | "PAYMENT_VERIFICATION_SKIPPED" | nulloptional

계약 결제 상태. PAID가 되면 대기 계약이 자동으로 완료됩니다

paymentConfirmationMethod"MANUAL" | "BANK_TRANSACTION" | nulloptional

결제 확인 방식. MANUAL=입금내역 연결 없이 완료, BANK_TRANSACTION=연결된 입금내역 근거

paymentConfirmedAtdatetime | nulloptional

결제 확인 시각

paymentConfirmedByUserIdnumber | nulloptional

결제를 확인한 구성원 ID. 자동 연결이면 null

contactNamestring | nulloptional

거래처명

▶participantsParticipant[]requiredexpandable

계약 담당자·참조자

userIdnumberrequired

구성원 ID

role"MANAGER" | "REFERENCE"required

담당자 또는 참조자

▶itemsContractItem[]requiredexpandable

계약 품목

idnumberrequired

품목 ID

namestringrequired

품목명

quantitynumberrequired

수량

supplyAmountnumberrequired

공급가액

taxAmountnumberrequired

세액

currencystringrequired

통화

▶documentsContractDocumentDetail[]requiredexpandable

견적서·청구서·거래명세서 (종류별 최대 1개)

▶documentContractDocumentrequiredexpandable

계약 문서

idnumberrequired

계약 문서 ID

type"QUOTATION" | "INVOICE" | "TRADE_STATEMENT"required

문서 종류

documentNumberstring | nulloptional

문서번호

draftRevisionIdnumber | nulloptional

현재 초안 리비전 ID

latestIssuedRevisionIdnumber | nulloptional

최신 발급본 ID

transactionType"IN" | "OUT" | nulloptional

청구서 입출금 방향

paymentStatusstring | nulloptional

청구서 결제 상태 (계약 결제 상태와 동기화)

▶revisionsContractRevision[]requiredexpandable

발급본 전체와 현재 초안 (삭제된 초안 제외)

idnumberrequired

리비전 ID

revisionNonumberrequired

리비전 번호 (정정 발급마다 증가)

status"DRAFT" | "ISSUED"required

초안 또는 발급본

contactDisplayNamestring | nulloptional

문서에 표시된 거래처명

issuerDisplayNamestring | nulloptional

문서에 표시된 발급자명

▶paymentAccountPaymentAccount | nulloptionalexpandable

문서에 표시된 입금 계좌 스냅샷

bankNamestring | nulloptional

은행명

accountNumberstring | nulloptional

계좌번호

accountHolderstring | nulloptional

예금주

currencystring | nulloptional

문서 통화

issueDateYYYY-MM-DD | nulloptional

발급일

dueDateYYYY-MM-DD | nulloptional

납부기한 (청구서)

resolvedDiscountAmountnumber | nulloptional

적용된 할인액

memostring | nulloptional

문서 메모

issuedAtdatetime | nulloptional

발급 처리 시각

▶itemsRevisionItem[]requiredexpandable

발급 당시 품목 스냅샷

namestringrequired

품목명

unitstring | nulloptional

단위

quantitynumberrequired

수량

supplyAmountnumberrequired

공급가액 (수량이 반영된 행 금액)

taxAmountnumberrequired

세액

▶recipientsRecipient[]requiredexpandable

이메일 전달 수신자 (재전달 대상)

emailstringrequired

수신 이메일

namestring | nulloptional

수신자 이름

alimtalkRecipientsstring[] | nulloptional

알림톡 전달 수신 번호

overduebooleanrequired

연체 여부 (청구서)

▶paymentProofsPaymentProof[]optionalexpandable

계약에 연결된 입금내역

ticketReferenceIdnumberrequired

연결 관계 ID

bankTransactionTicketIdnumberrequired

연결된 계좌 거래 티켓 ID

transactionType"IN" | "OUT"required

입출금 방향

currencystringrequired

통화

amountnumberrequired

거래 금액

contentstringrequired

거래 내용(적요)

transactAtdatetimerequired

거래 일시

updateSource"USER" | "SYSTEM" | "LLM_INFERENCE" | nulloptional

연결 주체. SYSTEM은 그랜터 자동 연결

linkedBankTransactionTicketIdsnumber[]required

연결된 계좌 거래 티켓 ID 목록

▶changeLogsContractChangeLog[]requiredexpandable

변경 이력 (오래된 순)

idnumberrequired

변경 이력 ID

changeTypestringrequired

변경 유형 (CREATED, STARTED, COMPLETED, CANCELED, RESUMED, DOCUMENT_ISSUED, DOCUMENT_REVISED, PAYMENT_STATUS_CHANGED, PAYMENT_PROOF_LINKED, PAYMENT_PROOF_UNLINKED, TAX_INVOICE_LINKED, TAX_INVOICE_UNLINKED, NOTIFICATION_SENT 등)

actorUserIdnumber | nulloptional

변경한 구성원 ID. 자동 처리면 null

beforeSnapshotobject | nulloptional

변경 전 값 (변경과 관련된 필드만 채워짐)

afterSnapshotobject | nulloptional

변경 후 값 (변경과 관련된 필드만 채워짐)

createdAtdatetimerequired

기록 시각

▶agreementsContractAgreementSummary[]requiredexpandable

계약에 연결된 계약서(전자서명)와 서명 상태 (최대 50건)

agreementIdnumberrequired

계약서 ID

agreementNumberstring | nulloptional

계약서 번호

issueDateYYYY-MM-DD | nulloptional

발급일

latestIssuedRevisionIdnumber | nulloptional

최신 발급본 ID. null이면 초안

revisionStatus"DRAFT" | "ISSUED" | nulloptional

목록에 표시되는 리비전 상태

signingStatus"PREPARING" | "IN_PROGRESS" | "COMPLETED" | "EXPIRED" | nulloptional

발급본의 서명 진행 상태

signingDeadlineYYYY-MM-DD | nulloptional

서명 기한

▶linkedTaxInvoicesLinkedTaxInvoice[]requiredexpandable

계약에 연결된 세금계산서

ticketReferenceIdnumber | nulloptional

연결 관계 ID

taxInvoiceTicketIdnumber | nulloptional

세금계산서 티켓 ID

taxInvoiceIdnumber | nulloptional

세금계산서 ID

amountnumber | nulloptional

금액

transactAtdatetime | nulloptional

작성일시

contactNamestring | nulloptional

거래처명

contentstring | nulloptional

내용

pendingTaxInvoiceIdsnumber[]required

연결 요청됐지만 아직 반영되지 않은 세금계산서 ID

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/contracts/detail?contractId=1201 \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/contracts/detail?contractId=1201
Contract Detail Response Example
{
  "contract": {
    "id": 1201,
    "status": "PENDING",
    "statusChangeSource": "USER",
    "contactId": 3301,
    "totalAmount": 3300000,
    "currency": "KRW",
    "defaultIssuerProfileId": 12,
    "cancellationReason": null,
    "cancellationReasonDetail": null,
    "statusChangedAt": "2026-09-01T10:12:00",
    "paymentStatus": "UNPAID",
    "paymentConfirmationMethod": null,
    "paymentConfirmedAt": null,
    "paymentConfirmedByUserId": null
  },
  "contactName": "주식회사 샘플",
  "participants": [{ "userId": 77, "role": "MANAGER" }],
  "items": [
    {
      "id": 501,
      "name": "홈페이지 유지보수",
      "unit": "월",
      "quantity": 1,
      "supplyAmount": 3000000,
      "taxAmount": 300000,
      "currency": "KRW",
      "sortOrder": 0
    }
  ],
  "documents": [
    {
      "document": {
        "id": 9001,
        "type": "INVOICE",
        "documentNumber": "I260900001",
        "draftRevisionId": null,
        "latestIssuedRevisionId": 15001,
        "transactionType": "IN",
        "paymentStatus": "UNPAID",
        "paymentConfirmationMethod": null,
        "paymentConfirmedAt": null,
        "paymentConfirmationBankTransactionIds": []
      },
      "revisions": [
        {
          "id": 15001,
          "revisionNo": 1,
          "status": "ISSUED",
          "contactDisplayName": "주식회사 샘플",
          "issuerDisplayName": "그랜터 주식회사",
          "paymentAccount": { "bankName": "하나은행", "accountNumber": "123-456789-01001", "accountHolder": "그랜터 주식회사" },
          "currency": "KRW",
          "issueDate": "2026-09-01",
          "dueDate": "2026-09-20",
          "resolvedDiscountAmount": 0,
          "memo": null,
          "issuedAt": "2026-09-01T10:12:00",
          "items": [
            { "id": 7001, "contractItemId": 501, "name": "홈페이지 유지보수", "unit": "월", "quantity": 1, "supplyAmount": 3000000, "taxAmount": 300000, "sortOrder": 0 }
          ],
          "recipients": [{ "email": "billing@example.com", "name": "김담당", "sortOrder": 0 }],
          "alimtalkRecipients": []
        }
      ],
      "paymentProofs": [],
      "overdue": true
    }
  ],
  "paymentProofs": [],
  "changeLogs": [
    {
      "id": 88010,
      "changeType": "DOCUMENT_ISSUED",
      "actorUserId": 77,
      "beforeSnapshot": {},
      "afterSnapshot": { "contractDocumentId": 9001, "documentType": "INVOICE", "documentNumber": "I260900001", "documentRevisionNo": 1 },
      "createdAt": "2026-09-01T10:12:00"
    }
  ],
  "linkedBankTransactionTicketIds": [],
  "agreements": [],
  "linkedTaxInvoices": [],
  "pendingTaxInvoiceIds": []
}

POST /api/public-docs/contracts/payment-proofs

계좌 입금 거래를 계약의 입금내역으로 연결합니다. 연결만 하고 결제 상태는 바꾸지 않으므로, 입금 확인까지 하려면 `contracts-complete`를 사용하세요.

Request Fields

대기(PENDING) 또는 완료(COMPLETED) 상태의 계약에만 연결할 수 있습니다.

변경 전에 모든 거래를 먼저 확인합니다. 계좌 거래 티켓이 아니거나, 계약 청구서의 입출금 방향(청구서가 없으면 입금 IN)과 다르거나, 다른 계약에 이미 입금내역으로 연결된 거래가 하나라도 있으면 요청 전체를 거부합니다.

한 입금을 여러 계약에 나눠 반영하는 경우에만 `allowLinkedToOtherContract: true`로 다른 계약 연결 검사를 건너뜁니다.

이미 이 계약에 연결된 거래는 `unchangedBankTransactionTicketIds`로 돌려주고 다시 연결하지 않으므로, 같은 요청을 재시도해도 안전합니다.

한 번에 최대 20개까지 보낼 수 있습니다. 문서에 없는 필드는 400으로 거부합니다.

contractIdnumberrequired

입금내역을 연결할 계약 ID

bankTransactionTicketIdsnumber[]required

연결할 계좌 거래 티켓 ID 목록 (1~20개, `tickets` 조회의 BANK_TRANSACTION_TICKET ID)

allowLinkedToOtherContractbooleanoptional

`true`면 다른 계약에 이미 연결된 입금도 연결합니다. 기본값 false

Response Fields

okbooleanrequired

요청한 입금내역이 모두 연결됐는지 여부

contractIdnumberrequired

계약 ID

newlyLinkedBankTransactionTicketIdsnumber[]required

이번 요청으로 새로 연결한 계좌 거래 ID

unchangedBankTransactionTicketIdsnumber[]required

이미 연결돼 있던 계좌 거래 ID

linkedBankTransactionTicketIdsnumber[]required

처리 후 계약에 연결된 전체 계좌 거래 ID

contractStatusstringrequired

처리 후 계약 상태

paymentStatusstring | nulloptional

처리 후 계약 결제 상태

paymentConfirmationMethodstring | nulloptional

처리 후 결제 확인 방식

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contracts/payment-proofs \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201,
  "bankTransactionTicketIds": [5501]
}'
POST /api/public-docs/contracts/payment-proofs
Contract Payment Proof Link Response Example
{
  "ok": true,
  "contractId": 1201,
  "newlyLinkedBankTransactionTicketIds": [5501],
  "unchangedBankTransactionTicketIds": [],
  "linkedBankTransactionTicketIds": [5501],
  "contractStatus": "PENDING",
  "paymentStatus": "UNPAID",
  "paymentConfirmationMethod": null,
  "verification": { "status": "verified" }
}

DELETE /api/public-docs/contracts/payment-proofs

계약에 연결된 입금내역 연결을 해제합니다. 계좌 거래 원본은 삭제하지 않습니다.

Request Fields

연결돼 있지 않은 ID는 건너뛰고 `notLinkedBankTransactionTicketIds`로 돌려줍니다.

입금내역을 근거(BANK_TRANSACTION)로 결제 확인된 계약에서 연결을 해제하면 결제 상태가 미납(UNPAID)으로 돌아가고, 입금 확인으로 자동 완료됐던 계약은 대기로 돌아갑니다. 이때 `paymentStatusReverted`가 true입니다.

해제한 거래는 그랜터 자동 연결이 같은 계약에 다시 연결하지 않습니다.

한 번에 최대 20개까지 보낼 수 있습니다. 문서에 없는 필드는 400으로 거부합니다.

contractIdnumberrequired

연결을 해제할 계약 ID

bankTransactionTicketIdsnumber[]required

연결을 해제할 계좌 거래 티켓 ID 목록 (1~20개)

Response Fields

okbooleanrequired

요청한 연결이 모두 해제됐는지 여부

contractIdnumberrequired

계약 ID

unlinkedBankTransactionTicketIdsnumber[]required

연결을 해제한 계좌 거래 ID

notLinkedBankTransactionTicketIdsnumber[]required

처음부터 연결돼 있지 않아 건너뛴 ID

linkedBankTransactionTicketIdsnumber[]required

처리 후 남은 연결 계좌 거래 ID

paymentStatusRevertedbooleanrequired

입금내역 근거로 확인된 결제가 해제로 미납으로 돌아갔는지 여부

contractStatusstringrequired

처리 후 계약 상태

paymentStatusstring | nulloptional

처리 후 계약 결제 상태

paymentConfirmationMethodstring | nulloptional

처리 후 결제 확인 방식

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X DELETE https://app.granter.biz/api/public-docs/contracts/payment-proofs \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201,
  "bankTransactionTicketIds": [5501]
}'
DELETE /api/public-docs/contracts/payment-proofs
Contract Payment Proof Unlink Response Example
{
  "ok": true,
  "contractId": 1201,
  "unlinkedBankTransactionTicketIds": [5501],
  "notLinkedBankTransactionTicketIds": [],
  "linkedBankTransactionTicketIds": [],
  "paymentStatusReverted": true,
  "contractStatus": "PENDING",
  "paymentStatus": "UNPAID",
  "paymentConfirmationMethod": null,
  "verification": { "status": "verified" }
}

POST /api/public-docs/contracts/complete

계약을 완료 처리합니다. 앱의 '완료 처리'와 같이 계약 결제 상태를 결제 완료(PAID)로 기록하며, 대기 계약은 자동으로 완료(COMPLETED)됩니다.

Request Fields

`bankTransactionTicketIds`를 보내면 그 입금내역을 먼저 연결한 뒤 입금내역 근거(BANK_TRANSACTION)로 결제 완료를 기록합니다. 보내지 않으면 앱의 '연결없이 완료처리'와 같이 수동 확인(MANUAL)으로 기록합니다.

입금내역 확인 규칙은 `contracts-payment-proofs-link`와 같습니다.

대기(PENDING) 계약만 완료할 수 있습니다. 이미 완료·결제 완료된 계약은 `unchanged=true`로 돌려주고 다시 바꾸지 않으며, 취소·초안 계약은 409로 거부합니다.

단, 이미 완료된 계약에 아직 연결되지 않은 `bankTransactionTicketIds`를 보내면 입금 근거 보강으로 보고 그 입금내역을 연결한 뒤, 기존에 연결된 입금내역과 합쳐 입금내역 근거(BANK_TRANSACTION)로 다시 기록합니다(수동 확인으로 완료된 계약도 BANK_TRANSACTION으로 바뀝니다).

견적서·청구서·거래명세서를 발급하지 않고 계약서(전자서명)만 있는 계약은 모든 서명이 끝나기 전까지 409(`AGREEMENT_SIGNATURE_PENDING`)로 거부합니다.

확인불가(입금 확인 생략) 청구서가 있는 계약도 같은 방식으로 완료합니다.

처리 결과는 변경 뒤 원본을 다시 조회해 확인하고 `ok`와 `verification.status`로 돌려줍니다. 입금내역 연결 뒤 결제 상태 변경이 실패하면 오류 응답의 `details.newlyLinkedBankTransactionTicketIds`에 이미 반영된 연결이 담깁니다.

contractIdnumberrequired

완료 처리할 계약 ID

bankTransactionTicketIdsnumber[]optional

입금 근거로 연결할 계좌 거래 티켓 ID 목록 (최대 20개). 생략하면 수동 확인으로 완료

allowLinkedToOtherContractbooleanoptional

`true`면 다른 계약에 이미 연결된 입금도 근거로 연결합니다. 기본값 false

Response Fields

okbooleanrequired

계약이 완료(COMPLETED)·결제 완료(PAID) 상태가 됐는지 여부

contractIdnumberrequired

계약 ID

unchangedbooleanrequired

이미 완료된 계약이라 변경하지 않았는지 여부

contractStatusstringrequired

처리 후 계약 상태

paymentStatusstring | nulloptional

처리 후 계약 결제 상태

paymentConfirmationMethodstring | nulloptional

처리 후 결제 확인 방식

newlyLinkedBankTransactionTicketIdsnumber[]required

완료 처리 전에 새로 연결한 계좌 거래 ID

linkedBankTransactionTicketIdsnumber[]required

처리 후 연결된 전체 계좌 거래 ID

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contracts/complete \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201,
  "bankTransactionTicketIds": [5501]
}'
POST /api/public-docs/contracts/complete
Contract Complete Response Example
{
  "ok": true,
  "contractId": 1201,
  "unchanged": false,
  "contractStatus": "COMPLETED",
  "paymentStatus": "PAID",
  "paymentConfirmationMethod": "BANK_TRANSACTION",
  "newlyLinkedBankTransactionTicketIds": [5501],
  "linkedBankTransactionTicketIds": [5501],
  "verification": { "status": "verified" }
}

POST /api/public-docs/contracts/uncomplete

완료 처리한 계약을 대기(PENDING)·미결제(UNPAID) 상태로 되돌립니다. 앱에서 완료 처리 직후 누르는 '되돌리기'와 같습니다.

Request Fields

결제 상태를 미결제(UNPAID)로 바꾸고, 계약이 그래도 완료 상태로 남아 있으면 대기로 재개합니다.

연결된 입금내역은 유지됩니다. 연결도 끊으려면 `contracts-payment-proofs-unlink`를 사용하세요.

확인불가(입금 확인 생략)였던 청구서도 미결제로 돌아갑니다.

이미 대기·미결제 상태면 `unchanged=true`로 돌려줍니다. 취소·초안 계약은 409로 거부합니다.

contractIdnumberrequired

완료를 되돌릴 계약 ID

Response Fields

okbooleanrequired

계약이 대기(PENDING)·미결제 상태로 돌아갔는지 여부

contractIdnumberrequired

계약 ID

unchangedbooleanrequired

이미 대기·미결제 상태라 변경하지 않았는지 여부

contractStatusstringrequired

처리 후 계약 상태

paymentStatusstring | nulloptional

처리 후 계약 결제 상태

paymentConfirmationMethodstring | nulloptional

처리 후 결제 확인 방식

linkedBankTransactionTicketIdsnumber[]required

연결된 계좌 거래 ID (되돌려도 연결은 유지)

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contracts/uncomplete \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201
}'
POST /api/public-docs/contracts/uncomplete
Contract Uncomplete Response Example
{
  "ok": true,
  "contractId": 1201,
  "unchanged": false,
  "contractStatus": "PENDING",
  "paymentStatus": "UNPAID",
  "paymentConfirmationMethod": null,
  "linkedBankTransactionTicketIds": [5501],
  "verification": { "status": "verified" }
}

POST /api/public-docs/contracts/documents/resend

발급된 견적서·청구서·거래명세서의 최신 발급본을 기존 전달 수신자에게 다시 전달합니다. 거래처에 실제 이메일(선택 시 카카오 알림톡)이 발송됩니다.

Request Fields

`Idempotency-Key` header가 필수입니다. 네트워크 오류로 재시도할 때는 같은 값을 보내세요. 같은 키의 재요청은 10분 동안 한 번만 처리됩니다.

수신자는 바꿀 수 없습니다. 최신 발급본을 이메일로 전달했던 주소로만 다시 보냅니다. 처음 전달하거나 수신자를 바꾸려면 앱의 계약 화면에서 진행하세요. 정정 발급한 문서는 새 발급본을 한 번 전달하기 전까지 다시 전달할 수 없습니다.

이메일은 항상 포함됩니다. `sendAlimtalk: true`는 그 발급본을 알림톡으로도 전달했던 경우에만 쓸 수 있습니다.

발급된 문서가 여러 개면 `documentType` 또는 `documentId`로 다시 전달할 문서를 지정해야 합니다. 취소된 계약의 문서는 다시 전달하지 않습니다.

일부 수신자에게 발송이 실패해도 요청은 성공으로 끝납니다. 실제 발송 건수는 계약 변경 이력으로 확인해 `email.sentCount`·`alimtalk.sentCount`로 돌려주며, 발송 기록을 확인하지 못하면 `ok=false`, `verification.status=not_observed`입니다(같은 Idempotency-Key 재시도도 여기에 해당합니다).

test key 요청은 실제로 발송하지 않고 예시 응답만 돌려줍니다.

contractIdnumberrequired

문서를 다시 전달할 계약 ID

documentTypestringoptional

다시 전달할 문서 종류. 발급된 문서가 여러 개면 documentType 또는 documentId가 필요합니다.

▶허용 값
QUOTATION·견적서
INVOICE·청구서
TRADE_STATEMENT·거래명세서
documentIdnumberoptional

다시 전달할 계약 문서 ID (`contracts-detail`의 `documents[].document.id`)

sendAlimtalkbooleanoptional

`true`면 기존 알림톡 수신 번호로도 다시 전달합니다. 기본값 false

Response Fields

okbooleanrequired

이메일 발송 성공 기록을 확인했는지 여부

contractIdnumberrequired

계약 ID

documentIdnumberrequired

다시 전달한 계약 문서 ID

documentType"QUOTATION" | "INVOICE" | "TRADE_STATEMENT"required

문서 종류

documentNumberstring | nulloptional

문서번호

revisionIdnumberrequired

다시 전달한 최신 발급본 ID

revisionNonumber | nulloptional

발급본 리비전 번호

emailRecipientsstring[]required

이메일 수신자 (기존 전달 수신자)

▶emailChannelResultrequiredexpandable

이메일 발송 결과

sentCountnumberrequired

발송 성공 건수 (변경 이력 기준)

▶alimtalkChannelResultoptionalexpandable

sendAlimtalk=true일 때만 포함되는 알림톡 발송 결과

recipientCountnumberrequired

기존 알림톡 수신 번호 수

sentCountnumberrequired

발송 성공 건수 (변경 이력 기준)

▶verificationVerificationrequiredexpandable

발송 기록 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contracts/documents/resend \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201,
  "documentType": "INVOICE"
}'
POST /api/public-docs/contracts/documents/resend
Contract Document Resend Response Example
{
  "ok": true,
  "contractId": 1201,
  "documentId": 9001,
  "documentType": "INVOICE",
  "documentNumber": "I260900001",
  "revisionId": 15001,
  "revisionNo": 1,
  "emailRecipients": ["billing@example.com"],
  "email": { "sentCount": 1 },
  "verification": { "status": "verified" }
}

POST /api/public-docs/contracts/create

[베타] 계약을 만들고 견적서·청구서·거래명세서를 발급합니다. 앱의 계약 작성 화면과 같은 순서로 계약 → 품목 → 문서별 발급 → (선택) 이메일·알림톡 전달까지 한 번에 처리합니다. 외부 ERP에서 확정한 계약을 그랜터로 넘겨 발급·입금 확인·세금계산서 연결을 이어서 할 때 사용합니다.

Request Fields

베타 API입니다. 베타 참여 회사에만 열려 있으며, 그 밖의 회사는 403 `CONTRACT_CREATE_BETA_NOT_ENABLED`를 받습니다. 참여는 그랜터 담당자에게 요청하세요.

`Idempotency-Key` header가 필수입니다. 같은 키는 24시간 동안 한 번만 처리하며, 다시 보내면 409 `IDEMPOTENCY_KEY_REUSED`입니다. 네트워크 오류로 결과를 모르면 `contracts` 조회로 계약이 생겼는지 먼저 확인하세요.

`issue`를 빼면 문서 없이 초안(DRAFT) 계약만 만듭니다. `issue.documentTypes`를 보내면 계약을 대기(PENDING)로 올리고 견적서 → 청구서 → 거래명세서 순으로 발급합니다.

문서의 발급자(우리 회사) 표기는 앱에 저장된 발급자 정보를 씁니다. 발급자 정보가 없으면 계약을 만들기 전에 409 `ISSUER_PROFILE_REQUIRED`로 멈춥니다.

`delivery`를 보내면 발급한 문서마다 지정한 이메일(필수)과 휴대폰 번호(선택, 카카오 알림톡)로 전달합니다. 전달이 실패해도 발급은 유지되며 `documents[].delivery.status=failed`로 알려 줍니다. 다시 보낼 때는 `contracts-documents-resend`를 쓰세요.

문서를 하나도 발급하기 전에 실패하면 만든 계약을 정리하고 오류를 돌려줍니다(`details.cleanup`). 이때는 새 Idempotency-Key로 다시 요청하세요. 일부 문서만 발급된 뒤 실패하면 발급본은 바꿀 수 없어 계약을 남기고 `CONTRACT_PARTIALLY_ISSUED`와 함께 발급된 문서·남은 문서 종류를 알려 줍니다.

계약서(전자서명)는 아직 이 API로 만들 수 없습니다. 세금계산서를 함께 처리하려면 `tax-invoices-issue`로 발행한 뒤 응답의 `id`를 `contracts-tax-invoices-link`로 이 계약에 연결하세요.

test key 요청은 아무것도 만들지 않고 예시 응답만 돌려줍니다.

contactIdnumberrequired

거래처 ID (`contacts` 조회 결과)

currencystringoptional

통화 코드 (기본 KRW)

managerUserIdsnumber[]optional

계약 담당자 사용자 ID (최대 10명). 첫 번째가 담당자, 나머지는 참조자입니다. `people` 조회의 사용자 ID를 쓰세요.

itemsobject[]required

계약 품목 (1~100개). 문서에 같은 순서로 실립니다.

items[].namestringrequired

품목명 (200자 이하)

items[].unitstringoptional

단위 (예: 월, 개)

items[].quantitynumberrequired

수량 (0보다 큰 수)

items[].supplyAmountintegerrequired

공급가액 (원 단위 정수)

items[].taxAmountintegerrequired

세액 (원 단위 정수, 면세면 0)

discountobjectoptional

할인. `type`=AMOUNT(금액) 또는 RATE(비율, 0~100), `value`=할인 값

memostringoptional

문서 비고 (1000자 이하)

templateLocalestringoptional

문서 언어. 기본 KO

▶허용 값
KO·한국어
EN·영어
issueobjectoptional

발급 설정. 빼면 초안 계약만 만듭니다.

issue.documentTypesstring[]required

발급할 문서 종류 (1개 이상)

▶허용 값
QUOTATION·견적서
INVOICE·청구서
TRADE_STATEMENT·거래명세서
issue.issueDateYYYY-MM-DDoptional

발급일 (기본 오늘, 한국 시간)

issue.dueDateYYYY-MM-DDoptional

납부기한. 청구서(INVOICE)를 발급할 때만 보낼 수 있습니다.

issue.paymentAccountobjectoptional

문서에 표기할 입금 계좌 `{ bankName, accountNumber, accountHolder? }`

issue.skipPaymentVerificationbooleanoptional

`true`면 입금 확인이 필요 없는 청구서로 발급합니다. 청구서 전용이며 `paymentAccount`와 함께 보낼 수 없습니다.

issue.establishNumberstringoptional

문서에 표기할 종사업장번호 (32자 이하)

issue.delivery.emailRecipientsstring[]optional

전달 이메일 (delivery를 보내면 1~20개 필수)

issue.delivery.alimtalkRecipientsstring[]optional

카카오 알림톡을 받을 휴대폰 번호 (최대 20개, 01로 시작하는 10~11자리)

Response Fields

okbooleanrequired

계약 상태와 발급본을 원본 재조회로 확인했는지 여부

contractIdnumberrequired

만든 계약 ID

contractStatusstringrequired

처리 후 계약 상태 (문서를 발급하면 PENDING, 아니면 DRAFT)

totalAmountnumberrequired

계약 총액 (품목 공급가액+세액 합계에서 할인 차감)

currencystringrequired

통화 코드

contractItemIdsnumber[]required

만든 계약 품목 ID (요청 items 순서)

▶documentsIssuedContractDocument[]requiredexpandable

발급한 문서 (견적서 → 청구서 → 거래명세서 순)

documentIdnumberrequired

계약 문서 ID

documentType"QUOTATION" | "INVOICE" | "TRADE_STATEMENT"required

문서 종류

documentNumberstring | nulloptional

문서번호

revisionIdnumberrequired

발급본 ID

▶deliveryDeliveryResultrequiredexpandable

전달 결과

status"skipped" | "requested" | "failed"required

전달 결과. delivery를 보내지 않았으면 skipped, 전달 요청이 접수되면 requested

emailRecipientsstring[]optional

requested일 때 전달한 이메일

alimtalkRecipientsstring[]optional

requested일 때 알림톡을 보낸 휴대폰 번호

codestring | nulloptional

failed일 때 오류 코드

errorstringoptional

failed일 때 오류 메시지 (발급은 유지됨)

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contracts/create \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contactId": 3301,
  "managerUserIds": [77],
  "items": [
    { "name": "홈페이지 유지보수", "unit": "월", "quantity": 1, "supplyAmount": 3000000, "taxAmount": 300000 }
  ],
  "issue": {
    "documentTypes": ["INVOICE"],
    "issueDate": "2026-10-20",
    "dueDate": "2026-10-31",
    "paymentAccount": { "bankName": "하나은행", "accountNumber": "123-456789-01001", "accountHolder": "그랜터 주식회사" },
    "delivery": { "emailRecipients": ["billing@example.com"] }
  }
}'
POST /api/public-docs/contracts/create
Contract Create Response Example
{
  "ok": true,
  "contractId": 1201,
  "contractStatus": "PENDING",
  "totalAmount": 3300000,
  "currency": "KRW",
  "contractItemIds": [501],
  "documents": [
    {
      "documentId": 9001,
      "documentType": "INVOICE",
      "documentNumber": "I261000001",
      "revisionId": 15001,
      "delivery": {
        "status": "requested",
        "emailRecipients": ["billing@example.com"],
        "alimtalkRecipients": []
      }
    }
  ],
  "verification": { "status": "verified" }
}

POST /api/public-docs/contracts/tax-invoices

세금계산서를 계약에 연결합니다. `tax-invoices-issue`로 발행한 세금계산서를 계약과 묶어 계약 상세에서 함께 보이게 할 때 사용합니다.

Request Fields

`taxInvoiceIds`는 원본 세금계산서 ID입니다. `tax-invoices-issue` 응답의 `id`를 그대로 넣으세요(계약 상세 `linkedTaxInvoices[].taxInvoiceId`와 같은 값).

발행 직후처럼 그랜터에 세금계산서 티켓이 아직 없으면 연결 요청만 받아 두었다가 티켓이 생기면 자동으로 연결합니다. 이 경우 `taxInvoices[].status`가 `pending`입니다.

한 번에 최대 100개까지 보낼 수 있습니다. 연결 후 다시 조회해 세금계산서별로 `linked`(연결 완료)·`pending`(대기)·`not_observed`(확인 안 됨)를 돌려줍니다.

test key 요청은 실제로 연결하지 않고 예시 응답만 돌려줍니다.

contractIdnumberrequired

세금계산서를 연결할 계약 ID

taxInvoiceIdsnumber[]required

연결할 원본 세금계산서 ID (1~100개)

Response Fields

okbooleanrequired

보낸 세금계산서가 모두 연결 완료 또는 대기로 확인됐는지 여부

contractIdnumberrequired

계약 ID

▶taxInvoicesTaxInvoiceLinkResult[]requiredexpandable

보낸 세금계산서별 결과

taxInvoiceIdnumberrequired

원본 세금계산서 ID

status"linked" | "pending" | "not_observed"required

linked=연결 완료, pending=티켓 생성 대기(생기면 자동 연결), not_observed=재조회에서 확인 안 됨

▶linkedTaxInvoicesLinkedTaxInvoice[]requiredexpandable

처리 후 계약에 연결된 세금계산서 전체

ticketReferenceIdnumber | nulloptional

연결 관계 ID

taxInvoiceTicketIdnumber | nulloptional

세금계산서 티켓 ID

taxInvoiceIdnumber | nulloptional

세금계산서 ID

amountnumber | nulloptional

금액

transactAtdatetime | nulloptional

작성일시

contactNamestring | nulloptional

거래처명

contentstring | nulloptional

내용

pendingTaxInvoiceIdsnumber[]required

처리 후 연결 대기 중인 세금계산서 ID 전체

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/contracts/tax-invoices \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201,
  "taxInvoiceIds": [501]
}'
POST /api/public-docs/contracts/tax-invoices
Contract Tax Invoice Link Response Example
{
  "ok": true,
  "contractId": 1201,
  "taxInvoices": [{ "taxInvoiceId": 501, "status": "pending" }],
  "linkedTaxInvoices": [],
  "pendingTaxInvoiceIds": [501],
  "verification": { "status": "verified" }
}

DELETE /api/public-docs/contracts/tax-invoices

계약에 연결된 세금계산서를 해제합니다. 연결이 끝난 관계와 대기 중인 연결 요청을 함께 지우며, 계약 변경 이력에 남습니다.

Request Fields

`taxInvoiceIds`는 원본 세금계산서 ID입니다(`contracts-tax-invoices-link`에 보낸 값과 같습니다).

해제 후 다시 조회해 아직 남아 있는 ID를 `remainingTaxInvoiceIds`로 알려 줍니다.

test key 요청은 실제로 해제하지 않고 예시 응답만 돌려줍니다.

contractIdnumberrequired

세금계산서 연결을 해제할 계약 ID

taxInvoiceIdsnumber[]required

해제할 원본 세금계산서 ID (1~100개)

Response Fields

okbooleanrequired

보낸 세금계산서가 모두 해제됐는지 여부

contractIdnumberrequired

계약 ID

unlinkedTaxInvoiceIdsnumber[]required

해제를 확인한 세금계산서 ID

remainingTaxInvoiceIdsnumber[]required

해제 후에도 연결 또는 대기로 남아 있는 세금계산서 ID

▶linkedTaxInvoicesLinkedTaxInvoice[]requiredexpandable

처리 후 계약에 연결된 세금계산서 전체

ticketReferenceIdnumber | nulloptional

연결 관계 ID

taxInvoiceTicketIdnumber | nulloptional

세금계산서 티켓 ID

taxInvoiceIdnumber | nulloptional

세금계산서 ID

amountnumber | nulloptional

금액

transactAtdatetime | nulloptional

작성일시

contactNamestring | nulloptional

거래처명

contentstring | nulloptional

내용

pendingTaxInvoiceIdsnumber[]required

처리 후 연결 대기 중인 세금계산서 ID 전체

▶verificationVerificationrequiredexpandable

반영 확인 결과

status"verified" | "unverified" | "not_observed"required

변경 뒤 원본 재조회로 반영을 확인한 결과

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X DELETE https://app.granter.biz/api/public-docs/contracts/tax-invoices \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "contractId": 1201,
  "taxInvoiceIds": [501]
}'
DELETE /api/public-docs/contracts/tax-invoices
Contract Tax Invoice Unlink Response Example
{
  "ok": true,
  "contractId": 1201,
  "unlinkedTaxInvoiceIds": [501],
  "remainingTaxInvoiceIds": [],
  "linkedTaxInvoices": [],
  "pendingTaxInvoiceIds": [],
  "verification": { "status": "verified" }
}

GET /api/public-docs/inventory-products

품목명, 단가, 통화, 추가 속성으로 구성된 품목 마스터를 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

직접 호출 시 `limit`, `lastSeenId` query string을 사용할 수 있습니다.

limitnumberoptional

조회 건수 제한

lastSeenIdnumberoptional

페이지네이션 기준 ID

Response Fields

▶[]InventoryProductrequiredexpandable

BE `/inventory-products` 원본 응답 배열의 각 원소

idnumberrequired

품목 ID

namestringrequired

품목명

unitPricenumberrequired

단가

currencyCurrencyCoderequired

통화 코드

▶additionalPropertiesInventoryAdditionalProperty[]optionalexpandable

추가 속성 목록

idnumberrequired

추가 속성 ID

keystringrequired

속성명

valuestringrequired

속성값

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/inventory-products \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/inventory-products
Inventory Product Response Example
[
  {
    "id": 63,
    "name": "샘플 품목 A",
    "unitPrice": 123,
    "currency": "KRW",
    "additionalProperties": [
      { "id": 23, "key": "EXP date", "value": "" },
      { "id": 22, "key": "창고", "value": "" },
      { "id": 13, "key": "커스텀속성2", "value": "" }
    ]
  }
]

GET /api/public-docs/inventories

품목별 현재 재고 수량, 재고 메시지 수, 최근 수정 시각을 포함한 재고 현황을 조회합니다.

Request Fields

요청 body는 사용하지 않습니다.

직접 호출 시 `limit`, `lastSeenId` query string을 사용할 수 있습니다.

limitnumberoptional

조회 건수 제한

lastSeenIdnumberoptional

페이지네이션 기준 ID

Response Fields

▶[]InventoryStockrequiredexpandable

BE `/inventories` 원본 응답 배열의 각 원소

idnumberrequired

재고 엔트리 ID

inventoryProductIdnumberrequired

품목 ID

namestringrequired

품목명

unitPricenumberrequired

단가

quantitynumberrequired

현재 재고 수량

currencyCurrencyCoderequired

통화 코드

createdAtISO-8601 stringrequired

생성 시각

modifiedAtISO-8601 stringrequired

수정 시각

messageCountnumberrequired

메시지 개수

▶additionalPropertiesInventoryAdditionalProperty[]optionalexpandable

추가 속성 목록

idnumberrequired

추가 속성 ID

keystringrequired

속성명

valuestringrequired

속성값

호출
API KEY
호출 예시
cURL
curl -X GET https://app.granter.biz/api/public-docs/inventories \
  -H "Authorization: Basic <BASE64(API_KEY:)>"
GET /api/public-docs/inventories
Inventory Stock Response Example
[
  {
    "id": 3,
    "inventoryProductId": 2,
    "name": "샘플 재고 품목 A",
    "unitPrice": 880000,
    "quantity": 10,
    "currency": "KRW",
    "createdAt": "2025-12-05T12:29:29.850909",
    "modifiedAt": "2026-02-11T13:05:46.900783",
    "messageCount": 0,
    "additionalProperties": [
      { "id": 18, "key": "1211", "value": "123123" },
      { "id": 14, "key": "123", "value": "123" },
      { "id": 22, "key": "창고", "value": "" }
    ]
  }
]

POST /api/public-docs/attendances

구성원의 출퇴근 기록과 휴가 사용 내역을 기간별로 조회합니다.

Request Fields

조회 시 `startDate`, `endDate`는 필수입니다.

기간 기반 조회는 요청 1회당 최대 31일까지 사용할 수 있으며, 더 긴 범위는 31일 이하 구간으로 나눠 조회한 뒤 합쳐서 사용하세요.

`userIds`로 특정 구성원만 필터링하거나, `recordType`으로 근무/휴가를 구분할 수 있습니다.

startDateYYYY-MM-DDrequired

조회 시작일

endDateYYYY-MM-DDrequired

조회 종료일

userIdsnumber[]optional

조회 대상 유저 ID 목록

recordType"WORK" | "LEAVE"optional

기록 타입 필터. WORK: 근무만, LEAVE: 휴가만, 미입력 시 전체

Response Fields

▶[]TimeCardRecordrequiredexpandable

근무/휴가 기록 배열

▶timeCardTimeCardrequiredexpandable

타임카드 정보

workspaceIdnumberrequired

워크스페이스 ID

userIdnumberrequired

유저 ID

baseDateYYYY-MM-DDrequired

기준일

startedAtISO-8601 stringrequired

시작 일시

endedAtISO-8601 stringoptional

종료 일시

createdAtISO-8601 stringrequired

생성 일시

modifiedAtISO-8601 stringrequired

수정 일시

▶workRecordWorkRecord | nulloptionalexpandable

근무 기록 (휴가인 경우 null)

workRecordIdnumberrequired

근무 기록 ID

▶clockInLocationClockLocationrequiredexpandable

출근 위치

ipstringrequired

IP 주소

addressstringrequired

주소

addressDetailstringrequired

상세 주소

latitudenumberrequired

위도

longitudenumberrequired

경도

radiusnumberrequired

허용 반경 (m)

▶clockOutLocationClockLocation | nulloptionalexpandable

퇴근 위치

ipstringrequired

IP 주소

addressstringrequired

주소

addressDetailstringrequired

상세 주소

latitudenumberrequired

위도

longitudenumberrequired

경도

radiusnumberrequired

허용 반경 (m)

isRemotebooleanrequired

원격 근무 여부

breakStartedAtISO-8601 string | nulloptional

기본 휴게 시작 일시

breakEndedAtISO-8601 string | nulloptional

기본 휴게 종료 일시

▶additionalBreakTimesWorkBreakTime[]requiredexpandable

추가 휴게시간 목록

startedAtISO-8601 stringrequired

추가 휴게 시작 일시

endedAtISO-8601 stringrequired

추가 휴게 종료 일시

▶leaveRecordLeaveRecord | nulloptionalexpandable

휴가 기록 (근무인 경우 null)

leaveRecordIdnumberrequired

휴가 기록 ID

approverUserIdnumber | nulloptional

결재자 유저 ID

reasonstringrequired

휴가 사유

statusREQUESTED | APPROVED | REJECTEDrequired

승인 상태

approvedAtISO-8601 string | nulloptional

승인 일시

rejectedAtISO-8601 string | nulloptional

반려 일시

rejectedReasonstring | nulloptional

반려 사유

createdAtISO-8601 stringrequired

생성 일시

modifiedAtISO-8601 stringrequired

수정 일시

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/attendances \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "startDate": "2026-03-01",
  "endDate": "2026-03-15"
}'
POST /api/public-docs/attendances
Attendance Response Example
[
  {
    "timeCard": {
      "workspaceId": 1,
      "userId": 67,
      "baseDate": "2026-03-10",
      "startedAt": "2026-03-10T09:00:00",
      "endedAt": "2026-03-10T18:00:00",
      "createdAt": "2026-03-10T09:00:12.345678",
      "modifiedAt": "2026-03-10T18:00:45.123456"
    },
      "workRecord": {
        "workRecordId": 101,
        "clockInLocation": {
          "ip": "192.168.1.10",
          "address": "서울특별시 강남구",
        "addressDetail": "테헤란로 123",
        "latitude": 37.5065,
        "longitude": 127.0536,
        "radius": 200.0
      },
      "clockOutLocation": {
        "ip": "192.168.1.10",
        "address": "서울특별시 강남구",
        "addressDetail": "테헤란로 123",
        "latitude": 37.5065,
          "longitude": 127.0536,
          "radius": 200.0
        },
        "isRemote": false,
        "breakStartedAt": "2026-03-10T12:00:00",
        "breakEndedAt": "2026-03-10T13:00:00",
        "additionalBreakTimes": [
          {
            "startedAt": "2026-03-10T18:00:00",
            "endedAt": "2026-03-10T18:30:00"
          }
        ]
      },
    "leaveRecord": null
  },
  {
    "timeCard": {
      "workspaceId": 1,
      "userId": 67,
      "baseDate": "2026-03-12",
      "startedAt": "2026-03-12T00:00:00",
      "endedAt": "2026-03-12T23:59:59",
      "createdAt": "2026-03-11T15:30:00.000000",
      "modifiedAt": "2026-03-12T10:00:00.000000"
    },
    "workRecord": null,
    "leaveRecord": {
      "leaveRecordId": 55,
      "approverUserId": 4,
      "reason": "개인 사유",
      "status": "APPROVED",
      "approvedAt": "2026-03-11T16:00:00",
      "rejectedAt": null,
      "rejectedReason": null,
      "createdAt": "2026-03-11T15:30:00.000000",
      "modifiedAt": "2026-03-11T16:00:00.000000"
    }
  }
]

POST /api/public-docs/leave-balances

구성원별 잔여 연차 현황을 조회합니다.

Request Fields

`baseDate`는 선택값이며, 미입력 시 백엔드 기본 기준일로 계산합니다.

baseDateYYYY-MM-DDoptional

잔여 연차를 계산할 기준일

Response Fields

▶[]LeaveBalancerequiredexpandable

구성원별 잔여 연차 배열

workspaceUserIdnumberrequired

워크스페이스 유저 ID

userIdnumberrequired

유저 ID

isUnlimitedbooleanrequired

무제한 연차 여부. true이면 나머지 일수 필드는 null일 수 있습니다.

theoreticalDaysnumber | nulloptional

정책과 입사일 기준으로 계산한 이론적 발생 연차 일수

adjustmentDaysnumber | nulloptional

수동 조정, 사용, 소멸을 반영한 가감 일수 합계

employmentDateYYYY-MM-DD | nulloptional

입사일. 휴가 정책 승인자가 아니거나 급여 정보가 없으면 null입니다.

retirementDateYYYY-MM-DD | nulloptional

퇴사일. 휴가 정책 승인자가 아니거나 급여 정보가 없으면 null입니다.

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/leave-balances \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "baseDate": "2026-03-31"
}'
POST /api/public-docs/leave-balances
Leave Balance Response Example
[
  {
    "workspaceUserId": 18,
    "userId": 67,
    "isUnlimited": false,
    "theoreticalDays": 15,
    "adjustmentDays": -3,
    "employmentDate": "2024-03-01",
    "retirementDate": null
  }
]

POST /api/public-docs/leave-histories

구성원의 연차 변경 내역을 기간별로 조회합니다.

Request Fields

조회 시 `startDate`, `endDate`는 필수입니다.

기간 기반 조회는 요청 1회당 최대 31일까지 사용할 수 있으며, 더 긴 범위는 31일 이하 구간으로 나눠 조회한 뒤 합쳐서 사용하세요.

휴가 사용, 사용 취소, 소멸, 수동 조정 내역이 함께 반환됩니다.

startDateYYYY-MM-DDrequired

조회 시작일

endDateYYYY-MM-DDrequired

조회 종료일

Response Fields

▶[]LeaveHistoryrequiredexpandable

연차 변경 이력 배열

idnumberrequired

연차 변경 이력 ID

userIdnumberrequired

대상 유저 ID

requestUserIdnumberrequired

변경을 요청한 유저 ID

daysnumberrequired

변경 일수

typeUSAGE | USAGE_CANCEL | EXPIRATION | EXPIRATION_PROMOTED | ADJUSTMENT_ADD | ADJUSTMENT_SUBTRACTrequired

연차 변경 유형

occurredAtYYYY-MM-DDrequired

변경 발생일

expiresAtYYYY-MM-DD | nulloptional

소멸 예정일

timeCardIdnumber | nulloptional

연관 타임카드 ID

memostring | nulloptional

메모

createdAtISO-8601 stringrequired

생성 일시

modifiedAtISO-8601 stringrequired

수정 일시

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/leave-histories \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "startDate": "2026-03-01",
  "endDate": "2026-03-31"
}'
POST /api/public-docs/leave-histories
Leave History Response Example
[
  {
    "id": 91,
    "userId": 67,
    "requestUserId": 4,
    "days": 1,
    "type": "USAGE",
    "occurredAt": "2026-03-12",
    "expiresAt": null,
    "timeCardId": 310,
    "memo": "개인 사유",
    "createdAt": "2026-03-11T15:30:00.000000",
    "modifiedAt": "2026-03-11T16:00:00.000000"
  },
  {
    "id": 92,
    "userId": 67,
    "requestUserId": 4,
    "days": 2,
    "type": "ADJUSTMENT_ADD",
    "occurredAt": "2026-03-20",
    "expiresAt": "2027-03-19",
    "timeCardId": null,
    "memo": "관리자 수동 부여",
    "createdAt": "2026-03-20T09:00:00.000000",
    "modifiedAt": "2026-03-20T09:00:00.000000"
  }
]

POST /api/public-docs/holidays

기간 내 한국 공휴일 목록을 조회합니다.

Request Fields

조회 시 `startDate`, `endDate`는 필수입니다.

`startDate`, `endDate`는 2000-01-01 ~ 2099-12-31 안의 실제 날짜여야 하며, 조회 기간은 시작 월과 종료 월을 포함해 최대 60개월입니다. 벗어나면 400으로 응답합니다.

공공데이터포털 또는 대체 공휴일 소스에서 공휴일을 조회하며, 소스 장애 시 `enabled=false`로 응답합니다.

startDateYYYY-MM-DDrequired

조회 시작일

endDateYYYY-MM-DDrequired

조회 종료일

Response Fields

enabledbooleanrequired

공휴일 조회 가능 여부

reasonstring | nulloptional

조회 실패 사유

datesYYYY-MM-DD[]required

공휴일 날짜 목록

▶holidaysHoliday[]requiredexpandable

공휴일 상세 목록

dateYYYY-MM-DDrequired

공휴일 날짜

namestringrequired

공휴일 이름

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/holidays \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "startDate": "2026-05-01",
  "endDate": "2026-05-31"
}'
POST /api/public-docs/holidays
Holiday Response Example
{
  "enabled": true,
  "dates": ["2026-05-05", "2026-05-25"],
  "holidays": [
    {
      "date": "2026-05-05",
      "name": "어린이날"
    },
    {
      "date": "2026-05-25",
      "name": "부처님오신날"
    }
  ]
}

POST /api/public-docs/cards

자동 연동이 아닌 외부 시스템 기준의 수기 카드를 생성합니다. 생성된 카드 ID는 수기 카드거래 입력 API의 cardId로 사용합니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 재시도 안전성이 필요하면 직접 넣으세요.

`organization`은 카드사 enum 또는 한국어 라벨(예: 롯데카드, 하나카드, KB국민카드)을 사용할 수 있으며, 직접 생성 카드는 `CUSTOM_CARD`를 권장합니다.

`cardNumber`는 백엔드 필수값입니다. JavaScript 정수 정밀도 손실을 막기 위해 숫자만 포함한 문자열로 전달하세요.

namestringrequired

카드 별칭/이름

organizationCardOrganizationrequired

카드사 enum. 수기 카드는 CUSTOM_CARD 권장

cardNumberstringrequired

카드번호. 숫자만 포함한 문자열로 전달

Response Fields

▶[]Assetrequiredexpandable

BE `/assets` 원본 응답 배열의 각 원소

idnumberrequired

자산 ID

assetTypeAssetTyperequired

자산 타입

numberstringrequired

자산 번호

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

별칭

organizationOrganizationTyperequired

금융기관 코드

organizationNamestringrequired

금융기관명

businessTypeBusinessTyperequired

업종

businessTypeNameBusinessTypeNamerequired

업종명

isHiddenbooleanrequired

숨김 여부

isActivebooleanrequired

활성 여부

isDormantbooleanrequired

휴면 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isFreebooleanrequired

무료 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientTypeClientTyperequired

고객 유형

userAutoAssignEnabledbooleanrequired

자동 할당 여부

▶scrapHistoryScrapHistory | nullrequiredexpandable

자산별 마지막 수집 이력. 수집 이력이 없으면 null

lastRequestedAtISO-8601 string | nullrequired

마지막 수집 요청 시각

lastCompletedAtISO-8601 string | nullrequired

마지막 수집 성공 시각

lastFailedAtISO-8601 string | nullrequired

마지막 수집 실패 시각

▶cardAssetCardInfooptionalexpandable

카드 자산 정보

expirationYearstringrequired

만료 연도

expirationMonthstringrequired

만료 월

limitAmountnumberrequired

한도 금액

usedAmountnumberrequired

사용 금액

remainLimitnumberrequired

잔여 한도

previousCardNumberstringoptional

이전 카드 번호

▶bankAccountAssetBankAccountInfooptionalexpandable

계좌 자산 정보

accountBalancenumberrequired

계좌 잔액

originalBalancenumberrequired

원본 계좌 잔액

currencyCodestringrequired

통화 코드

startDatestringrequired

조회 시작일

endDatestringrequired

조회 종료일

accountNumberstringrequired

계좌 번호

accountNamestringrequired

계좌명

nicknamestringrequired

별칭

accountTypeAccountTyperequired

계좌 유형

isTransactionVisiblebooleanrequired

거래내역 보유 여부

▶homeTaxAccountAssetHomeTaxAccountInfooptionalexpandable

홈택스 자산 정보

category"CASH_RECEIPT" | "TAX_INVOICE"required

홈택스 자산 카테고리

registrationNumberstringrequired

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringrequired

회사명

ceoNamestringrequired

대표자명

addressstringrequired

주소

contactNamestringrequired

담당자명

telstringrequired

연락처

businessTypesstringrequired

업태

businessItemsstringrequired

종목

▶securitiesAccountAssetSecuritiesAccountInfooptionalexpandable

증권 자산 정보

totalAmountnumberrequired

총액(원화)

depositAmountnumberrequired

예수금(원화)

foreignDepositAmountnumberrequired

외화예수금(원화)

▶foreignDepositsForeignDeposit[]requiredexpandable

외화예수금 보유 목록

idnumberrequired

외화예수금 ID

currencyCurrencyCoderequired

통화 코드

amountnumberrequired

금액

createdAtstringrequired

생성 시각

totalValuationAmountnumberrequired

보유 주식 평가액 합계(원화)

accountNumberstringrequired

계좌번호

▶productsProduct[]requiredexpandable

보유 투자상품

idnumberrequired

상품 ID

productTypestringrequired

상품 유형 코드

productTypeNamestringrequired

상품 유형명

namestringrequired

상품명

codestringoptional

상품 코드

quantitynumberoptional

수량

currencyCurrencyCoderequired

통화 코드

krwPresentAmountnumberoptional

현재 금액(원화)

presentAmountnumberoptional

현재 금액

krwValuationAmountnumberoptional

평가 금액(원화)

valuationAmountnumberoptional

평가 금액

krwValuationPLnumberoptional

평가 손익(원화)

valuationPLnumberoptional

평가 손익

earningsRatenumberoptional

수익률

createdAtstringrequired

생성 시각

▶customAssetAssetCustomInfooptionalexpandable

커스텀 자산 정보

assetType"CASH" | "LIABILITY" | "ASSET"required

커스텀 자산 유형

assetNumberstringrequired

자산 번호

amountnumberrequired

금액

▶ecommerceAccountAssetEcommerceAccountInfooptionalexpandable

이커머스 스토어 계정 정보

usernamestringrequired

스토어 사용자명

isOtpVerifiedbooleanrequired

OTP 인증 여부

createdAtstringoptional

생성 시각

modifiedAtstringoptional

수정 시각

hasPasswordbooleanoptional

비밀번호 보유 여부

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/cards \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "name": "외부 ERP 법인카드",
  "organization": "CUSTOM_CARD",
  "cardNumber": "4111111111111111"
}'
POST /api/public-docs/cards
Manual Card Create Response Example
{
  "id": 3101,
  "assetType": "CARD",
  "name": "외부 ERP 법인카드",
  "organization": "CUSTOM_CARD",
  "number": "4111111111111111",
  "isActive": true,
  "source": "USER"
}

POST /api/public-docs/bank-accounts

자동 연동이 아닌 외부 시스템 기준의 수기 계좌를 생성합니다. 생성된 계좌 ID는 수기 계좌거래 입력 API의 bankAccountId로 사용합니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 재시도 안전성이 필요하면 직접 넣으세요.

`organization`은 은행 enum 또는 한국어 라벨(예: 신한은행, 하나은행, KB국민은행)을 사용할 수 있으며, 직접 생성 계좌는 `CUSTOM_BANK_ACCOUNT`를 권장합니다.

`nickname`, `accountBalance`, `currencyCode`, `accountType`을 생략하면 각각 accountName, 0, KRW, DEPOSIT(비KRW는 FOREIGN)로 처리됩니다.

organizationBankAccountOrganizationrequired

은행 enum. 수기 계좌는 CUSTOM_BANK_ACCOUNT 권장

accountNamestringrequired

계좌명

nicknamestringoptional

계좌 별칭

accountNumberinteger | stringrequired

계좌번호. 문자열이면 하이픈 포함 가능

accountBalancenumber | stringoptional

초기 잔액

currencyCodestringoptional

통화 코드. 기본 KRW

accountTypestringoptional

계좌 유형. DEPOSIT, FOREIGN, FUND, LOAN, INSURANCE, PENSION, CASH 등

Response Fields

▶[]Assetrequiredexpandable

BE `/assets` 원본 응답 배열의 각 원소

idnumberrequired

자산 ID

assetTypeAssetTyperequired

자산 타입

numberstringrequired

자산 번호

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

별칭

organizationOrganizationTyperequired

금융기관 코드

organizationNamestringrequired

금융기관명

businessTypeBusinessTyperequired

업종

businessTypeNameBusinessTypeNamerequired

업종명

isHiddenbooleanrequired

숨김 여부

isActivebooleanrequired

활성 여부

isDormantbooleanrequired

휴면 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isFreebooleanrequired

무료 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientTypeClientTyperequired

고객 유형

userAutoAssignEnabledbooleanrequired

자동 할당 여부

▶scrapHistoryScrapHistory | nullrequiredexpandable

자산별 마지막 수집 이력. 수집 이력이 없으면 null

lastRequestedAtISO-8601 string | nullrequired

마지막 수집 요청 시각

lastCompletedAtISO-8601 string | nullrequired

마지막 수집 성공 시각

lastFailedAtISO-8601 string | nullrequired

마지막 수집 실패 시각

▶cardAssetCardInfooptionalexpandable

카드 자산 정보

expirationYearstringrequired

만료 연도

expirationMonthstringrequired

만료 월

limitAmountnumberrequired

한도 금액

usedAmountnumberrequired

사용 금액

remainLimitnumberrequired

잔여 한도

previousCardNumberstringoptional

이전 카드 번호

▶bankAccountAssetBankAccountInfooptionalexpandable

계좌 자산 정보

accountBalancenumberrequired

계좌 잔액

originalBalancenumberrequired

원본 계좌 잔액

currencyCodestringrequired

통화 코드

startDatestringrequired

조회 시작일

endDatestringrequired

조회 종료일

accountNumberstringrequired

계좌 번호

accountNamestringrequired

계좌명

nicknamestringrequired

별칭

accountTypeAccountTyperequired

계좌 유형

isTransactionVisiblebooleanrequired

거래내역 보유 여부

▶homeTaxAccountAssetHomeTaxAccountInfooptionalexpandable

홈택스 자산 정보

category"CASH_RECEIPT" | "TAX_INVOICE"required

홈택스 자산 카테고리

registrationNumberstringrequired

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringrequired

회사명

ceoNamestringrequired

대표자명

addressstringrequired

주소

contactNamestringrequired

담당자명

telstringrequired

연락처

businessTypesstringrequired

업태

businessItemsstringrequired

종목

▶securitiesAccountAssetSecuritiesAccountInfooptionalexpandable

증권 자산 정보

totalAmountnumberrequired

총액(원화)

depositAmountnumberrequired

예수금(원화)

foreignDepositAmountnumberrequired

외화예수금(원화)

▶foreignDepositsForeignDeposit[]requiredexpandable

외화예수금 보유 목록

idnumberrequired

외화예수금 ID

currencyCurrencyCoderequired

통화 코드

amountnumberrequired

금액

createdAtstringrequired

생성 시각

totalValuationAmountnumberrequired

보유 주식 평가액 합계(원화)

accountNumberstringrequired

계좌번호

▶productsProduct[]requiredexpandable

보유 투자상품

idnumberrequired

상품 ID

productTypestringrequired

상품 유형 코드

productTypeNamestringrequired

상품 유형명

namestringrequired

상품명

codestringoptional

상품 코드

quantitynumberoptional

수량

currencyCurrencyCoderequired

통화 코드

krwPresentAmountnumberoptional

현재 금액(원화)

presentAmountnumberoptional

현재 금액

krwValuationAmountnumberoptional

평가 금액(원화)

valuationAmountnumberoptional

평가 금액

krwValuationPLnumberoptional

평가 손익(원화)

valuationPLnumberoptional

평가 손익

earningsRatenumberoptional

수익률

createdAtstringrequired

생성 시각

▶customAssetAssetCustomInfooptionalexpandable

커스텀 자산 정보

assetType"CASH" | "LIABILITY" | "ASSET"required

커스텀 자산 유형

assetNumberstringrequired

자산 번호

amountnumberrequired

금액

▶ecommerceAccountAssetEcommerceAccountInfooptionalexpandable

이커머스 스토어 계정 정보

usernamestringrequired

스토어 사용자명

isOtpVerifiedbooleanrequired

OTP 인증 여부

createdAtstringoptional

생성 시각

modifiedAtstringoptional

수정 시각

hasPasswordbooleanoptional

비밀번호 보유 여부

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/bank-accounts \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "organization": "CUSTOM_BANK_ACCOUNT",
  "accountName": "외부 ERP 현금계좌",
  "nickname": "ERP 현금",
  "accountNumber": "999-000-123456",
  "accountBalance": 1000000,
  "currencyCode": "KRW",
  "accountType": "DEPOSIT"
}'
POST /api/public-docs/bank-accounts
Manual Bank Account Create Response Example
{
  "id": 4201,
  "assetType": "BANK_ACCOUNT",
  "accountName": "외부 ERP 현금계좌",
  "nickname": "ERP 현금",
  "organization": "CUSTOM_BANK_ACCOUNT",
  "number": "999000123456",
  "accountBalance": "1000000",
  "currencyCode": "KRW",
  "isActive": true,
  "source": "USER"
}

POST /api/public-docs/card-usages

수기 카드에 카드 승인/취소 거래를 일괄 입력해 카드 티켓을 생성합니다. 먼저 수기 카드 생성 API 또는 자산 조회 API로 cardId를 확보하세요.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 재시도 안전성이 필요하면 직접 넣으세요.

`cardId`에는 그랜터 카드 자산 ID를 넣습니다. 보통 `cards-create` 응답의 `id` 또는 `assets` 응답의 카드 `id`를 사용합니다.

취소 거래는 `paymentStatus=CANCELED`로 전달하고 `amount`는 양수로 유지하세요.

생성 API는 처리 ACK를 반환합니다. 생성된 티켓 ID가 필요하면 같은 기간과 `EXPENSE_TICKET`으로 `tickets` API를 조회하세요.

cardIdintegerrequired

대상 카드 자산 ID

cardUsagesCardUsageItem[]required

카드 사용 내역 배열

cardUsages[].paymentDateYYYY-MM-DD | ISO-8601 stringrequired

결제 일시

cardUsages[].storeNamestringrequired

가맹점명

cardUsages[].amountnumberrequired

결제 금액

cardUsages[].paymentStatus"NORMAL" | "CANCELED"optional

결제 상태. 기본 NORMAL

cardUsages[].isErrorbooleanoptional

오류 거래 표시

Response Fields

▶[]Ticketrequiredexpandable

BE `/tickets` 원본 응답 배열의 각 원소

idnumberrequired

티켓 ID

workspaceIdnumberrequired

워크스페이스 ID

contentstringrequired

거래/증빙 내용

amountnumberrequired

거래 금액

transactionType"IN" | "OUT" | "ALL"required

입출금 방향

transactAtISO-8601 stringrequired

거래 일시

modifiedTransactAtISO-8601 stringoptional

수정 거래 일시

descriptionstringrequired

설명

▶expenseCategoryExpenseCategoryoptionalexpandable

계정과목

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

anomalyStatus"NORMAL" | "ABUSE_SUSPECTED" | "ABUSE_CONFIRMED" | "ABUSE_REJECTED"required

이상치 상태

status"NONE" | "CONFIRMED" | "USER_CONFIRMED"required

티켓 상태

▶ticketTagsTicketTag[]optionalexpandable

티켓에 붙은 태그(다중 태그) 목록. 목록 V2·단건 조회 응답에 있습니다

idnumberrequired

태그 ID (`ticket-tags` 의 id)

namestringrequired

태그 이름

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

tagstringrequired

(deprecated) 1차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagIdnumber | nullrequired

(deprecated) 1차 태그 ID

contactstringrequired

거래처명

contactIdnumber | undefinedrequired

거래처 ID

tagDetailstringrequired

(deprecated) 2차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagDetailIdnumber | nullrequired

(deprecated) 2차 태그 ID

isIncludedbooleanrequired

포함 여부

expenseCategoryUpdateSourcestring | nulloptional

계정과목을 지정한 주체. `USER`는 사람이 확정한 값, 그 밖(`AI_INFERENCE`·`LLM_INFERENCE`·`PATTERN_CLASSIFICATION`·`CACHE_INFERENCE`·`PAYMENT_PROOF` 등)은 자동 분류입니다

isIncludedUpdateSourcestring | nulloptional

포함 여부를 정한 주체. 값의 의미는 `expenseCategoryUpdateSource`와 같습니다

▶usersUserResponse[]requiredexpandable

연결 유저 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesMessage[]optionalexpandable

댓글·변경 기록 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답(ticketReferences가 있는 응답)에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

메시지 ID

ticketIdnumberrequired

티켓 ID

▶userUserResponserequiredexpandable

작성자

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

userIdnumberrequired

작성자 ID

userNamestringrequired

작성자 이름

contentstringrequired

메시지 내용

typeMessageTyperequired

메시지 타입

createdAtstringrequired

생성 시각

deletedAtstring | nulloptional

삭제 시각

messageCountnumberrequired

댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서는 commentCount와 같은 값입니다.

▶attachmentsAttachment[]optionalexpandable

첨부파일 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

첨부파일 ID

ticketIdnumberrequired

티켓 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

attachmentCountnumberrequired

첨부파일 수

commentCountnumberoptional

삭제되지 않은 댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

ticketTypeTicketTyperequired

조회 대상 티켓 타입

▶cardUsageCardUsageoptionalexpandable

카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶purchaseUsageCardUsageoptionalexpandable

매입 카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶bankTransactionBankTransactionoptionalexpandable

계좌 거래 상세

bankTransactionIdnumberrequired

은행거래 ID

workspaceIdnumberrequired

워크스페이스 ID

transactionType"IN" | "OUT" | "ALL"required

거래 방향

descriptionstringrequired

설명

afterTransactionBalancenumberrequired

거래 후 잔액

originalAfterTransactionBalancenumberoptional

원본 거래 후 잔액

amountnumberrequired

거래 금액

originalAmountnumberoptional

원본 거래 금액

transactAtstringrequired

거래 일시

▶bankAccountTicketAssetrequiredexpandable

계좌 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

counterpartystringoptional

거래 상대방

descriptionTypestringoptional

설명 분류

contentstringoptional

내용

branchstringoptional

지점

▶taxInvoiceTaxInvoiceoptionalexpandable

세금계산서 상세

idnumberrequired

세금계산서 ID

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶issuerobjectrequiredexpandable

발행자

emailstringrequired

이메일

idnumberrequired

유저 ID

isDeletedbooleanrequired

삭제 여부

namestringrequired

이름

▶trusteeTaxInvoiceUserrequiredexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentType"SUMMARY" | "DETAIL"required

내용 타입

transactionType"SELL" | "BUY" | "TRUSTEE"required

거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestringoptional

전송일자

issueDatestringoptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

purposeType"RECEIPT" | "CHARGE"required

영수/청구 구분

representationItemsstringrequired

대표 품목

notestringrequired

비고

status"REPORTED" | "SENT" | "ISSUED"required

상태

taxInvoiceTypestringrequired

세금계산서 종류

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

modificationReasonstringoptional

수정사유

originalApprovalNumbernumberoptional

원본 승인번호

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

paymentStatus"PAID" | "UNPAID"optional

결제 상태

isConnectedbooleanrequired

다른 거래·증빙과 연결되어 있는지 여부. 목록 V2 응답과 티켓 단건 조회 API는 결재·계약 연결을 세지 않습니다.

connectionCountnumberoptional

연결된 거래·증빙 수. isConnected와 같은 기준으로 셉니다.

▶ticketReferencesTicketReference[]optionalexpandable

연결내역(결재·계약 연결 포함). 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

targetIdnumberrequired

연결 상대 ID

targetTypestringrequired

연결 상대 타입(TicketType 또는 WORKFLOW·CONTRACT·PG_SETTLEMENT 같은 연결 대상 타입)

purposestring | nulloptional

연결 목적(예: TAX_INVOICE_PAYMENT_MANAGEMENT, DEDUPLICATE_CHECK_CARD_USAGE)

settledWithoutReferencebooleanoptional

세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부

createdAtISO-8601 stringrequired

생성 시각

parentIdnumberoptional

부모 티켓 ID

isSplittedbooleanrequired

분할 티켓 여부

purchaseStatus"APPROVED" | "PURCHASED" | "PURCHASE_ONLY"optional

매입 상태

isSoftwareExpenditurebooleanoptional

소프트웨어 지출 여부

▶merchantCardTransactionMerchantCardTransactionoptionalexpandable

가맹점 카드 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypeCardTyperequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

installmentMonthnumberrequired

할부개월

transactionTypestringrequired

거래구분

transactAtstringrequired

거래일시

amountnumberrequired

금액

▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable

가맹점 매입 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypestringrequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

transactAtstringrequired

거래일시

purchaseDatestringrequired

매입일

purchaseAmountnumberrequired

매입 금액

totalFeenumberrequired

총 수수료

merchantServiceFeenumberrequired

가맹점 수수료

pointFeenumberrequired

포인트 수수료

etcFeenumberrequired

기타 수수료

paidAmountnumberrequired

지급 금액

expectedPaymentDatestringrequired

지급 예정일

▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable

포스기/CREFIA 정산 상세

idnumberrequired

정산 상세 ID

settlementIdnumberrequired

정산 ID

assetIdnumberrequired

포스기/CREFIA 자산 ID

namestringrequired

항목명

amountnumberrequired

금액

transactionType"IN" | "OUT"required

입출금 방향

▶cashReceiptCashReceiptoptionalexpandable

현금영수증 상세

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

▶manualTransactionManualTransactionoptionalexpandable

수기거래 상세

idnumberrequired

수기거래 ID

currencyCurrencyCoderequired

통화 코드

manualTransactionType"ETC" | "CASH" | "INVOICE"required

수기거래 타입

▶tradeItemsManualTransactionTradeItem[]requiredexpandable

거래 품목

itemNamestringrequired

품목명

quantitynumberrequired

수량

taxAmountnumberrequired

세액

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

isIncludedVatbooleanrequired

단가의 부가세 포함 여부

hasPurchaseCanceledUsagesbooleanoptional

매입 취소 사용내역 보유 여부

▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable

이커머스 정산 상세

▶assetobjectrequiredexpandable

이커머스 스토어 자산

idnumberoptional

자산 ID

organizationstringoptional

조직 (COUPANG, NAVER 등)

nicknamestringoptional

별칭

ecommerceSettlementIdnumberrequired

정산 ID

settlementDatestringrequired

정산일

settlementRationumberrequired

정산 비율

namestringrequired

항목명

amountnumberrequired

금액

typestringrequired

정산 상세 타입

transactionType"IN" | "OUT"required

입출금 방향

isRecommendedbooleanoptional

추천 티켓 여부

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

과세 유형

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/card-usages \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "cardId": 3101,
  "cardUsages": [
    {
      "paymentDate": "2026-04-09T13:20:00+09:00",
      "storeName": "외부몰 정기구독",
      "amount": 55000,
      "paymentStatus": "NORMAL"
    }
  ]
}'
POST /api/public-docs/card-usages
Manual Card Usage Create Response Example
{
  "ok": true,
  "cardId": 3101,
  "requestedCount": 1,
  "message": "카드 사용내역 생성 요청이 처리되었습니다. 생성된 티켓은 tickets API로 조회하세요."
}

POST /api/public-docs/bank-transactions

수기 계좌에 입출금 거래를 일괄 입력해 계좌 거래 티켓을 생성합니다. 먼저 수기 계좌 생성 API 또는 자산 조회 API로 bankAccountId를 확보하세요.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 재시도 안전성이 필요하면 직접 넣으세요.

`bankAccountId`에는 그랜터 계좌 자산 ID를 넣습니다. 보통 `bank-accounts-create` 응답의 `id` 또는 `assets` 응답의 계좌 `id`를 사용합니다.

입금/출금 방향은 `transactionType`으로 구분하고 `amount`는 양수로 전달하세요.

생성 API는 처리 ACK를 반환합니다. 생성된 티켓 ID가 필요하면 같은 기간과 `BANK_TRANSACTION_TICKET`으로 `tickets` API를 조회하세요.

bankAccountIdintegerrequired

대상 계좌 자산 ID

bankTransactionsBankTransactionItem[]required

계좌 거래 배열

bankTransactions[].transactAtYYYY-MM-DD | ISO-8601 stringrequired

거래 일시

bankTransactions[].transactionType"IN" | "OUT"required

거래 방향

bankTransactions[].contentstringrequired

적요/거래 내용

bankTransactions[].amountnumberrequired

거래 금액

bankTransactions[].afterTransactionBalancenumberoptional

거래 후 잔액

bankTransactions[].counterpartystringoptional

거래 상대방

bankTransactions[].isErrorbooleanoptional

오류 거래 표시

Response Fields

▶[]Ticketrequiredexpandable

BE `/tickets` 원본 응답 배열의 각 원소

idnumberrequired

티켓 ID

workspaceIdnumberrequired

워크스페이스 ID

contentstringrequired

거래/증빙 내용

amountnumberrequired

거래 금액

transactionType"IN" | "OUT" | "ALL"required

입출금 방향

transactAtISO-8601 stringrequired

거래 일시

modifiedTransactAtISO-8601 stringoptional

수정 거래 일시

descriptionstringrequired

설명

▶expenseCategoryExpenseCategoryoptionalexpandable

계정과목

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

anomalyStatus"NORMAL" | "ABUSE_SUSPECTED" | "ABUSE_CONFIRMED" | "ABUSE_REJECTED"required

이상치 상태

status"NONE" | "CONFIRMED" | "USER_CONFIRMED"required

티켓 상태

▶ticketTagsTicketTag[]optionalexpandable

티켓에 붙은 태그(다중 태그) 목록. 목록 V2·단건 조회 응답에 있습니다

idnumberrequired

태그 ID (`ticket-tags` 의 id)

namestringrequired

태그 이름

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

tagstringrequired

(deprecated) 1차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagIdnumber | nullrequired

(deprecated) 1차 태그 ID

contactstringrequired

거래처명

contactIdnumber | undefinedrequired

거래처 ID

tagDetailstringrequired

(deprecated) 2차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagDetailIdnumber | nullrequired

(deprecated) 2차 태그 ID

isIncludedbooleanrequired

포함 여부

expenseCategoryUpdateSourcestring | nulloptional

계정과목을 지정한 주체. `USER`는 사람이 확정한 값, 그 밖(`AI_INFERENCE`·`LLM_INFERENCE`·`PATTERN_CLASSIFICATION`·`CACHE_INFERENCE`·`PAYMENT_PROOF` 등)은 자동 분류입니다

isIncludedUpdateSourcestring | nulloptional

포함 여부를 정한 주체. 값의 의미는 `expenseCategoryUpdateSource`와 같습니다

▶usersUserResponse[]requiredexpandable

연결 유저 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesMessage[]optionalexpandable

댓글·변경 기록 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답(ticketReferences가 있는 응답)에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

메시지 ID

ticketIdnumberrequired

티켓 ID

▶userUserResponserequiredexpandable

작성자

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

userIdnumberrequired

작성자 ID

userNamestringrequired

작성자 이름

contentstringrequired

메시지 내용

typeMessageTyperequired

메시지 타입

createdAtstringrequired

생성 시각

deletedAtstring | nulloptional

삭제 시각

messageCountnumberrequired

댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서는 commentCount와 같은 값입니다.

▶attachmentsAttachment[]optionalexpandable

첨부파일 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

첨부파일 ID

ticketIdnumberrequired

티켓 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

attachmentCountnumberrequired

첨부파일 수

commentCountnumberoptional

삭제되지 않은 댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

ticketTypeTicketTyperequired

조회 대상 티켓 타입

▶cardUsageCardUsageoptionalexpandable

카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶purchaseUsageCardUsageoptionalexpandable

매입 카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶bankTransactionBankTransactionoptionalexpandable

계좌 거래 상세

bankTransactionIdnumberrequired

은행거래 ID

workspaceIdnumberrequired

워크스페이스 ID

transactionType"IN" | "OUT" | "ALL"required

거래 방향

descriptionstringrequired

설명

afterTransactionBalancenumberrequired

거래 후 잔액

originalAfterTransactionBalancenumberoptional

원본 거래 후 잔액

amountnumberrequired

거래 금액

originalAmountnumberoptional

원본 거래 금액

transactAtstringrequired

거래 일시

▶bankAccountTicketAssetrequiredexpandable

계좌 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

counterpartystringoptional

거래 상대방

descriptionTypestringoptional

설명 분류

contentstringoptional

내용

branchstringoptional

지점

▶taxInvoiceTaxInvoiceoptionalexpandable

세금계산서 상세

idnumberrequired

세금계산서 ID

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶issuerobjectrequiredexpandable

발행자

emailstringrequired

이메일

idnumberrequired

유저 ID

isDeletedbooleanrequired

삭제 여부

namestringrequired

이름

▶trusteeTaxInvoiceUserrequiredexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentType"SUMMARY" | "DETAIL"required

내용 타입

transactionType"SELL" | "BUY" | "TRUSTEE"required

거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestringoptional

전송일자

issueDatestringoptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

purposeType"RECEIPT" | "CHARGE"required

영수/청구 구분

representationItemsstringrequired

대표 품목

notestringrequired

비고

status"REPORTED" | "SENT" | "ISSUED"required

상태

taxInvoiceTypestringrequired

세금계산서 종류

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

modificationReasonstringoptional

수정사유

originalApprovalNumbernumberoptional

원본 승인번호

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

paymentStatus"PAID" | "UNPAID"optional

결제 상태

isConnectedbooleanrequired

다른 거래·증빙과 연결되어 있는지 여부. 목록 V2 응답과 티켓 단건 조회 API는 결재·계약 연결을 세지 않습니다.

connectionCountnumberoptional

연결된 거래·증빙 수. isConnected와 같은 기준으로 셉니다.

▶ticketReferencesTicketReference[]optionalexpandable

연결내역(결재·계약 연결 포함). 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

targetIdnumberrequired

연결 상대 ID

targetTypestringrequired

연결 상대 타입(TicketType 또는 WORKFLOW·CONTRACT·PG_SETTLEMENT 같은 연결 대상 타입)

purposestring | nulloptional

연결 목적(예: TAX_INVOICE_PAYMENT_MANAGEMENT, DEDUPLICATE_CHECK_CARD_USAGE)

settledWithoutReferencebooleanoptional

세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부

createdAtISO-8601 stringrequired

생성 시각

parentIdnumberoptional

부모 티켓 ID

isSplittedbooleanrequired

분할 티켓 여부

purchaseStatus"APPROVED" | "PURCHASED" | "PURCHASE_ONLY"optional

매입 상태

isSoftwareExpenditurebooleanoptional

소프트웨어 지출 여부

▶merchantCardTransactionMerchantCardTransactionoptionalexpandable

가맹점 카드 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypeCardTyperequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

installmentMonthnumberrequired

할부개월

transactionTypestringrequired

거래구분

transactAtstringrequired

거래일시

amountnumberrequired

금액

▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable

가맹점 매입 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypestringrequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

transactAtstringrequired

거래일시

purchaseDatestringrequired

매입일

purchaseAmountnumberrequired

매입 금액

totalFeenumberrequired

총 수수료

merchantServiceFeenumberrequired

가맹점 수수료

pointFeenumberrequired

포인트 수수료

etcFeenumberrequired

기타 수수료

paidAmountnumberrequired

지급 금액

expectedPaymentDatestringrequired

지급 예정일

▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable

포스기/CREFIA 정산 상세

idnumberrequired

정산 상세 ID

settlementIdnumberrequired

정산 ID

assetIdnumberrequired

포스기/CREFIA 자산 ID

namestringrequired

항목명

amountnumberrequired

금액

transactionType"IN" | "OUT"required

입출금 방향

▶cashReceiptCashReceiptoptionalexpandable

현금영수증 상세

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

▶manualTransactionManualTransactionoptionalexpandable

수기거래 상세

idnumberrequired

수기거래 ID

currencyCurrencyCoderequired

통화 코드

manualTransactionType"ETC" | "CASH" | "INVOICE"required

수기거래 타입

▶tradeItemsManualTransactionTradeItem[]requiredexpandable

거래 품목

itemNamestringrequired

품목명

quantitynumberrequired

수량

taxAmountnumberrequired

세액

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

isIncludedVatbooleanrequired

단가의 부가세 포함 여부

hasPurchaseCanceledUsagesbooleanoptional

매입 취소 사용내역 보유 여부

▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable

이커머스 정산 상세

▶assetobjectrequiredexpandable

이커머스 스토어 자산

idnumberoptional

자산 ID

organizationstringoptional

조직 (COUPANG, NAVER 등)

nicknamestringoptional

별칭

ecommerceSettlementIdnumberrequired

정산 ID

settlementDatestringrequired

정산일

settlementRationumberrequired

정산 비율

namestringrequired

항목명

amountnumberrequired

금액

typestringrequired

정산 상세 타입

transactionType"IN" | "OUT"required

입출금 방향

isRecommendedbooleanoptional

추천 티켓 여부

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

과세 유형

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/bank-transactions \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "bankAccountId": 4201,
  "bankTransactions": [
    {
      "transactAt": "2026-04-09T09:30:00+09:00",
      "transactionType": "IN",
      "content": "외부 ERP 매출 입금",
      "amount": 110000,
      "afterTransactionBalance": 1110000,
      "counterparty": "샘플 거래처"
    }
  ]
}'
POST /api/public-docs/bank-transactions
Manual Bank Transaction Create Response Example
{
  "ok": true,
  "bankAccountId": 4201,
  "requestedCount": 1,
  "message": "계좌 거래내역 생성 요청이 처리되었습니다. 생성된 티켓은 tickets API로 조회하세요."
}

POST /api/public-docs/manual-transactions

세금계산서를 발행하지 않는 매출·매입을 수기관리 전표로 일괄 생성합니다. 거래처 문자열 추정 대신 contactId로 정확히 귀속할 수 있습니다.

Request Fields

`manualTransactions` 배열로 한 번에 최대 100건까지 생성할 수 있습니다.

`contactId`는 필수이며 적요 문자열과 무관하게 해당 거래처로 지정됩니다.

`currency`는 생략 시 KRW, `description`은 생략 시 빈 문자열, `tradeItems`는 생략 시 빈 배열로 처리됩니다.

현재 backend 계약에 없는 `accountId`, `tradeItems[].supplyValue` 같은 필드는 조용히 무시하지 않고 400으로 거부합니다.

`Idempotency-Key` header는 optional입니다. 재시도 중복 방지가 필요하면 호출 단위로 고정된 값을 직접 넣으세요.

응답의 `tickets`와 `ticketIds`는 backend가 생성 티켓을 응답한 경우에만 채워집니다. 현재 backend Swagger는 생성 응답 body를 보장하지 않으므로 빈 배열일 수 있습니다.

manualTransactionsManualTransaction[]required

생성할 수기관리 전표 배열. 최대 100건

manualTransactions[].contactIdintegerrequired

거래처 ID

manualTransactions[].transactionType"IN" | "OUT"required

매출/매입 방향

manualTransactions[].manualTransactionType"ETC" | "CASH" | "INVOICE"required

수기거래 유형

manualTransactions[].transactAtYYYY-MM-DD | ISO-8601 stringrequired

거래 일시

manualTransactions[].amountnumberrequired

거래 금액

manualTransactions[].contentstringrequired

적요/거래 내용

manualTransactions[].currencystringoptional

통화 코드. 기본 KRW

manualTransactions[].descriptionstringoptional

추가 설명. 기본 빈 문자열

manualTransactions[].expenseCategoryIdintegeroptional

계정과목 ID

manualTransactions[].ticketTagIdsinteger[]optional

붙일 태그 ID 목록(`ticket-tags` API 의 id). 최대 100개

manualTransactions[].tagIdintegeroptional

(deprecated) 1차 태그 ID — 지원하지 않습니다(2026-10-03~ 400). `ticketTagIds`를 쓰세요

manualTransactions[].tagDetailIdintegeroptional

(deprecated) 2차 태그 ID — 지원하지 않습니다(2026-10-03~ 400). `ticketTagIds`를 쓰세요

manualTransactions[].tradeItemsManualTransactionTradeItem[]optional

품목 배열

manualTransactions[].tradeItems[].itemNamestringrequired

품목명

manualTransactions[].tradeItems[].quantitynumberrequired

수량

manualTransactions[].tradeItems[].unitPricenumberrequired

단가

manualTransactions[].tradeItems[].taxAmountnumberrequired

세액

manualTransactions[].tradeItems[].supplyValuenumberoptional

공급가액. 생략하면 단가 × 수량을 원 단위로 절사해 저장한다

manualTransactions[].tradeItems[].isIncludedVatbooleanoptional

단가의 부가세 포함 여부 (기본 false)

Response Fields

okbooleanrequired

수기관리 전표 생성 요청 성공 여부

requestedCountnumberrequired

생성을 요청한 전표 수

ticketIdsnumber[]required

backend 생성 응답에서 확인된 수기관리 티켓 ID 목록. 응답 body가 없으면 빈 배열

▶ticketsTicket[]requiredexpandable

backend가 생성 티켓을 응답한 경우의 공개 티켓 목록. 응답 body가 없으면 빈 배열

▶[]Ticketrequiredexpandable

BE `/tickets` 원본 응답 배열의 각 원소

idnumberrequired

티켓 ID

workspaceIdnumberrequired

워크스페이스 ID

contentstringrequired

거래/증빙 내용

amountnumberrequired

거래 금액

transactionType"IN" | "OUT" | "ALL"required

입출금 방향

transactAtISO-8601 stringrequired

거래 일시

modifiedTransactAtISO-8601 stringoptional

수정 거래 일시

descriptionstringrequired

설명

▶expenseCategoryExpenseCategoryoptionalexpandable

계정과목

idnumberrequired

계정과목 ID

namestringrequired

계정과목명

subInfostringrequired

부가 정보

descriptionstringrequired

설명

codenumber | stringrequired

코드

type"COMMON" | "CUSTOM"required

카테고리 타입

isHiddenbooleanrequired

숨김 여부

costType"NONE" | "VARIABLE" | "FIXED"required

비용 유형

isFavoritebooleanrequired

즐겨찾기 여부

workspaceIdnumberoptional

워크스페이스 ID

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

기본 과세 유형

anomalyStatus"NORMAL" | "ABUSE_SUSPECTED" | "ABUSE_CONFIRMED" | "ABUSE_REJECTED"required

이상치 상태

status"NONE" | "CONFIRMED" | "USER_CONFIRMED"required

티켓 상태

▶ticketTagsTicketTag[]optionalexpandable

티켓에 붙은 태그(다중 태그) 목록. 목록 V2·단건 조회 응답에 있습니다

idnumberrequired

태그 ID (`ticket-tags` 의 id)

namestringrequired

태그 이름

▶ticketTagGroupTicketTagGroup | nullrequiredexpandable

태그 그룹. 그룹이 없으면 null

idnumberrequired

태그 그룹 ID

namestringrequired

태그 그룹 이름

tagstringrequired

(deprecated) 1차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagIdnumber | nullrequired

(deprecated) 1차 태그 ID

contactstringrequired

거래처명

contactIdnumber | undefinedrequired

거래처 ID

tagDetailstringrequired

(deprecated) 2차 태그명 — 2026-10-01 이후 갱신되지 않습니다. `ticketTags`를 쓰세요

tagDetailIdnumber | nullrequired

(deprecated) 2차 태그 ID

isIncludedbooleanrequired

포함 여부

expenseCategoryUpdateSourcestring | nulloptional

계정과목을 지정한 주체. `USER`는 사람이 확정한 값, 그 밖(`AI_INFERENCE`·`LLM_INFERENCE`·`PATTERN_CLASSIFICATION`·`CACHE_INFERENCE`·`PAYMENT_PROOF` 등)은 자동 분류입니다

isIncludedUpdateSourcestring | nulloptional

포함 여부를 정한 주체. 값의 의미는 `expenseCategoryUpdateSource`와 같습니다

▶usersUserResponse[]requiredexpandable

연결 유저 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

▶messagesMessage[]optionalexpandable

댓글·변경 기록 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답(ticketReferences가 있는 응답)에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

메시지 ID

ticketIdnumberrequired

티켓 ID

▶userUserResponserequiredexpandable

작성자

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

userIdnumberrequired

작성자 ID

userNamestringrequired

작성자 이름

contentstringrequired

메시지 내용

typeMessageTyperequired

메시지 타입

createdAtstringrequired

생성 시각

deletedAtstring | nulloptional

삭제 시각

messageCountnumberrequired

댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서는 commentCount와 같은 값입니다.

▶attachmentsAttachment[]optionalexpandable

첨부파일 목록. [Deprecated · 티켓 조회 API 목록 응답] 기존(V1) 목록 응답의 이 필드는 곧 삭제될 예정이며, 목록 V2 응답에는 이미 없습니다. 티켓 단건 조회 API에서는 계속 제공합니다.

idnumberrequired

첨부파일 ID

ticketIdnumberrequired

티켓 ID

namestringrequired

파일명

uploadedUrlstringrequired

업로드 URL

contentTypestringrequired

MIME 타입

attachmentCountnumberrequired

첨부파일 수

commentCountnumberoptional

삭제되지 않은 댓글 수. 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

ticketTypeTicketTyperequired

조회 대상 티켓 타입

▶cardUsageCardUsageoptionalexpandable

카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶purchaseUsageCardUsageoptionalexpandable

매입 카드 사용 상세

workspaceIdnumberrequired

워크스페이스 ID

▶cardTicketAssetrequiredexpandable

카드 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

paymentDatestringrequired

결제일

storeNamestringrequired

가맹점명

storeAddressstringrequired

가맹점 주소

amountnumberrequired

사용 금액

canceledAmountnumberrequired

취소 금액

discountedAmountnumberrequired

할인 금액

vatnumberrequired

부가세

installmentMonthnumberrequired

할부 개월

paymentTypestringrequired

결제 방식

paymentStatus"NORMAL" | "CANCELED" | "REJECTED" | "PURCHASE_CANCELED"required

결제 상태

approvalNumbernumberrequired

승인번호

storeCorporateNumbernumberrequired

가맹점 사업자번호

originalAmountnumberrequired

원본 금액

currencystringrequired

통화 코드

exchangeRatenumberoptional

환율

purchaseDatestringoptional

매입일

feeAmountnumberoptional

수수료

isPurchasedbooleanoptional

매입 여부

▶bankTransactionBankTransactionoptionalexpandable

계좌 거래 상세

bankTransactionIdnumberrequired

은행거래 ID

workspaceIdnumberrequired

워크스페이스 ID

transactionType"IN" | "OUT" | "ALL"required

거래 방향

descriptionstringrequired

설명

afterTransactionBalancenumberrequired

거래 후 잔액

originalAfterTransactionBalancenumberoptional

원본 거래 후 잔액

amountnumberrequired

거래 금액

originalAmountnumberoptional

원본 거래 금액

transactAtstringrequired

거래 일시

▶bankAccountTicketAssetrequiredexpandable

계좌 자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

counterpartystringoptional

거래 상대방

descriptionTypestringoptional

설명 분류

contentstringoptional

내용

branchstringoptional

지점

▶taxInvoiceTaxInvoiceoptionalexpandable

세금계산서 상세

idnumberrequired

세금계산서 ID

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶issuerobjectrequiredexpandable

발행자

emailstringrequired

이메일

idnumberrequired

유저 ID

isDeletedbooleanrequired

삭제 여부

namestringrequired

이름

▶trusteeTaxInvoiceUserrequiredexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentType"SUMMARY" | "DETAIL"required

내용 타입

transactionType"SELL" | "BUY" | "TRUSTEE"required

거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestringoptional

전송일자

issueDatestringoptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

purposeType"RECEIPT" | "CHARGE"required

영수/청구 구분

representationItemsstringrequired

대표 품목

notestringrequired

비고

status"REPORTED" | "SENT" | "ISSUED"required

상태

taxInvoiceTypestringrequired

세금계산서 종류

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

modificationReasonstringoptional

수정사유

originalApprovalNumbernumberoptional

원본 승인번호

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

paymentStatus"PAID" | "UNPAID"optional

결제 상태

isConnectedbooleanrequired

다른 거래·증빙과 연결되어 있는지 여부. 목록 V2 응답과 티켓 단건 조회 API는 결재·계약 연결을 세지 않습니다.

connectionCountnumberoptional

연결된 거래·증빙 수. isConnected와 같은 기준으로 셉니다.

▶ticketReferencesTicketReference[]optionalexpandable

연결내역(결재·계약 연결 포함). 목록 V2 응답과 티켓 단건 조회 API에서 제공합니다.

targetIdnumberrequired

연결 상대 ID

targetTypestringrequired

연결 상대 타입(TicketType 또는 WORKFLOW·CONTRACT·PG_SETTLEMENT 같은 연결 대상 타입)

purposestring | nulloptional

연결 목적(예: TAX_INVOICE_PAYMENT_MANAGEMENT, DEDUPLICATE_CHECK_CARD_USAGE)

settledWithoutReferencebooleanoptional

세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부

createdAtISO-8601 stringrequired

생성 시각

parentIdnumberoptional

부모 티켓 ID

isSplittedbooleanrequired

분할 티켓 여부

purchaseStatus"APPROVED" | "PURCHASED" | "PURCHASE_ONLY"optional

매입 상태

isSoftwareExpenditurebooleanoptional

소프트웨어 지출 여부

▶merchantCardTransactionMerchantCardTransactionoptionalexpandable

가맹점 카드 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypeCardTyperequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

installmentMonthnumberrequired

할부개월

transactionTypestringrequired

거래구분

transactAtstringrequired

거래일시

amountnumberrequired

금액

▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable

가맹점 매입 거래 상세

▶assetTicketAssetrequiredexpandable

자산 정보

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

cardCompanystringrequired

카드사

cardNamestringrequired

카드명

cardTypestringrequired

카드 타입

cardNumberstringrequired

카드번호

approvalNumberstringrequired

승인번호

transactAtstringrequired

거래일시

purchaseDatestringrequired

매입일

purchaseAmountnumberrequired

매입 금액

totalFeenumberrequired

총 수수료

merchantServiceFeenumberrequired

가맹점 수수료

pointFeenumberrequired

포인트 수수료

etcFeenumberrequired

기타 수수료

paidAmountnumberrequired

지급 금액

expectedPaymentDatestringrequired

지급 예정일

▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable

포스기/CREFIA 정산 상세

idnumberrequired

정산 상세 ID

settlementIdnumberrequired

정산 ID

assetIdnumberrequired

포스기/CREFIA 자산 ID

namestringrequired

항목명

amountnumberrequired

금액

transactionType"IN" | "OUT"required

입출금 방향

▶cashReceiptCashReceiptoptionalexpandable

현금영수증 상세

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

▶manualTransactionManualTransactionoptionalexpandable

수기거래 상세

idnumberrequired

수기거래 ID

currencyCurrencyCoderequired

통화 코드

manualTransactionType"ETC" | "CASH" | "INVOICE"required

수기거래 타입

▶tradeItemsManualTransactionTradeItem[]requiredexpandable

거래 품목

itemNamestringrequired

품목명

quantitynumberrequired

수량

taxAmountnumberrequired

세액

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

isIncludedVatbooleanrequired

단가의 부가세 포함 여부

hasPurchaseCanceledUsagesbooleanoptional

매입 취소 사용내역 보유 여부

▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable

이커머스 정산 상세

▶assetobjectrequiredexpandable

이커머스 스토어 자산

idnumberoptional

자산 ID

organizationstringoptional

조직 (COUPANG, NAVER 등)

nicknamestringoptional

별칭

ecommerceSettlementIdnumberrequired

정산 ID

settlementDatestringrequired

정산일

settlementRationumberrequired

정산 비율

namestringrequired

항목명

amountnumberrequired

금액

typestringrequired

정산 상세 타입

transactionType"IN" | "OUT"required

입출금 방향

isRecommendedbooleanoptional

추천 티켓 여부

taxType"DETERMINE_NEEDED" | "TAXABLE" | "EXEMPT" | "ZERO_RATED" | nulloptional

과세 유형

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/manual-transactions \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "manualTransactions": [
    {
      "contactId": 469653,
      "transactionType": "IN",
      "manualTransactionType": "ETC",
      "transactAt": "2026-04-01",
      "amount": 50000,
      "content": "관리비고지서 및 전산이용료(소사푸르지오상가)",
      "tradeItems": [
        {
          "itemName": "관리비고지서 및 전산이용료",
          "quantity": 1,
          "unitPrice": 50000,
          "taxAmount": 0
        }
      ]
    }
  ]
}'
POST /api/public-docs/manual-transactions
Manual Transaction Create Response Example
{
  "ok": true,
  "requestedCount": 1,
  "ticketIds": [23860366],
  "tickets": [
    {
      "id": 23860366,
      "ticketType": "MANUAL_TRANSACTION_TICKET",
      "contactId": 469653,
      "content": "관리비고지서 및 전산이용료(소사푸르지오상가)",
      "manualTransaction": {
        "id": 91001,
        "currency": "KRW",
        "manualTransactionType": "ETC"
      }
    }
  ]
}

DELETE /api/public-docs/manual-transactions

잘못 생성됐거나 중복된 수기관리 전표를 티켓 ID 기준으로 일괄 삭제합니다.

Request Fields

`ticketIds`에는 수기거래 내부 ID가 아니라 수기관리 티켓의 `id`를 넣습니다.

한 번에 최대 100건까지 삭제할 수 있으며 중복 ID는 허용하지 않습니다.

서버가 각 티켓의 워크스페이스, 티켓 타입, 내부 수기거래 ID를 확인한 뒤 삭제하며 연결된 전표는 409로 거부합니다. 먼저 티켓 연결 해제 API로 연결을 제거하세요.

`Idempotency-Key` header는 optional입니다. 안전한 재시도가 필요하면 호출 단위로 고정된 값을 직접 넣으세요.

ticketIdsinteger[]required

삭제할 수기관리 티켓 ID 배열. 최대 100건

Response Fields

okbooleanrequired

수기관리 전표 삭제 성공 여부

deletedTicketIdsnumber[]required

삭제된 수기관리 티켓 ID 목록

deletedManualTransactionIdsnumber[]required

티켓에서 확인해 실제 upstream 삭제에 사용한 내부 수기거래 ID 목록

deletedCountnumberrequired

삭제된 전표 수

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X DELETE https://app.granter.biz/api/public-docs/manual-transactions \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "ticketIds": [23860366, 23860367]
}'
DELETE /api/public-docs/manual-transactions
Manual Transaction Delete Response Example
{
  "ok": true,
  "deletedTicketIds": [23860366, 23860367],
  "deletedManualTransactionIds": [91001, 91002],
  "deletedCount": 2
}

POST /api/public-docs/tax-invoices

국세청 발행 없이 외부 시스템 기준의 세금계산서 내역을 수기로 입력합니다. 실제 전자세금계산서 발행이 아니라 그랜터 증빙/티켓 데이터 생성용입니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 재시도 안전성이 필요하면 직접 넣으세요.

`supplier`, `contractor`는 실제 발행 API와 달리 모두 request body에 직접 전달합니다.

`supplier.registrationNumber`는 워크스페이스에 활성 홈택스 계정으로 등록된 사업자번호와 일치해야 합니다.

`taxAmount`, `totalAmount`, `tradeItems`를 생략하면 `supplyValue`, `taxType`, `reportingDate` 기준으로 단일 품목을 자동 구성합니다.

사업자등록번호는 하이픈 포함 입력도 가능하며 upstream 전달 전 숫자만 남깁니다.

issueTypestringoptional

발행 구분. 기본 정발행

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"optional

과세 유형. 기본 TAX

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"optional

공급받는 자 구분. 기본 BUSINESS

purposeType"RECEIPT" | "CHARGE" | "NONE"optional

영수/청구 구분. 기본 RECEIPT

reportingDateYYYY-MM-DDrequired

작성일자

supplyValuenumberrequired

공급가액

taxAmountnumberoptional

세액. 생략 시 과세 건은 공급가액의 10%

totalAmountnumberoptional

합계금액. 생략 시 공급가액 + 세액

notestringoptional

비고

supplier.registrationNumberstringrequired

공급자 사업자등록번호

supplier.companyNamestringrequired

공급자 상호

supplier.ceoNamestringoptional

공급자 대표자명. 생략 시 companyName 사용

supplier.emailstringoptional

공급자 이메일

contractor.registrationNumberstringrequired

공급받는 자 사업자등록번호

contractor.companyNamestringrequired

공급받는 자 상호

contractor.ceoNamestringoptional

공급받는 자 대표자명. 생략 시 companyName 사용

contractor.emailstringoptional

공급받는 자 이메일

tradeItemsTradeItem[]optional

품목 배열. 생략 시 공급가액 기준 1건 자동 생성

Response Fields

idnumberrequired

세금계산서 ID

issueUuidstringoptional

발행 요청 UUID

▶accountTicketAssetrequiredexpandable

발행에 사용된 홈택스 자산

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶trusteeTaxInvoiceUser | nulloptionalexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentTypestringrequired

내용 타입

transactionTypestringrequired

거래 타입

taxtransactionTypestringrequired

세금계산서 거래 타입

etaxtransactionTypestringrequired

전자세금계산서 거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestring | nulloptional

전송일자

issueDatestring | nulloptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

totalCountnumber | nulloptional

총 건수

cashnumberrequired

현금 금액

checknumberrequired

수표 금액

bankBillnumberrequired

어음 금액

accountReceivablenumber | nulloptional

외상미수금 금액

purposeTypestringrequired

영수/청구 구분

representationItemsstringrequired

대표 품목

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

notestringrequired

비고

statusstringrequired

발행 상태

resultCodenumberoptional

발행 결과 코드

resultMessagestringoptional

발행 결과 메시지

importDeclarationNumberstring | nulloptional

수입신고번호

commStartDatestring | nulloptional

통신 시작일

commEndDatestring | nulloptional

통신 종료일

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

modificationReasonstring | nulloptional

수정사유

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tax-invoices \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "issueType": "정발행",
  "taxType": "TAX",
  "contractorType": "BUSINESS",
  "purposeType": "RECEIPT",
  "reportingDate": "2026-04-09",
  "supplyValue": 100000,
  "taxAmount": 10000,
  "totalAmount": 110000,
  "note": "외부 ERP 수기 입력",
  "supplier": {
    "registrationNumber": "123-45-67890",
    "companyName": "그랜터",
    "ceoName": "대표자",
    "email": "accounting@example.com"
  },
  "contractor": {
    "registrationNumber": "111-22-33333",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "email": "buyer@example.com"
  },
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-09",
      "taxItemName": "SaaS 이용료",
      "standards": "ea",
      "quantity": 1,
      "unitPrice": 100000,
      "supplyValue": 100000,
      "taxAmount": 10000,
      "note": ""
    }
  ]
}'
POST /api/public-docs/tax-invoices
Manual Tax Invoice Create Response Example
{
  "id": 90101,
  "approvalNumber": null,
  "issueName": "SaaS 이용료",
  "reportingDate": "2026-04-09",
  "supplyValue": 100000,
  "taxAmount": 10000,
  "totalAmount": 110000,
  "purposeType": "RECEIPT",
  "status": "REPORTED",
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "그랜터"
  },
  "contractor": {
    "registrationNumber": "1112233333",
    "companyName": "샘플 거래처"
  }
}

POST /api/public-docs/cash-receipts

국세청 발행 없이 외부 시스템 기준의 현금영수증 내역을 수기로 입력합니다. 실제 현금영수증 발행이 아니라 그랜터 증빙/티켓 데이터 생성용입니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 재시도 안전성이 필요하면 직접 넣으세요.

`issuer`와 `buyer`를 직접 전달합니다. 발행 API와 달리 홈택스 계정 ID가 필요하지 않습니다.

`supplyValue`, `vat`를 생략하면 `totalAmount`, `serviceFee`, `taxationType` 기준으로 자동 계산합니다.

사업자등록번호, 휴대폰번호, 주민등록번호 등 식별번호는 하이픈 포함 입력도 가능하며 upstream 전달 전 숫자만 남깁니다.

transactAtYYYY-MM-DD | ISO-8601 stringrequired

거래일시. upstream에는 YYYY-MM-DDTHH:mm:ss로 정규화

contentstringoptional

거래 내용. 기본 현금영수증

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"optional

용도. 기본 EXPENSE_PROOF

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세 형태. 기본 TAXABLE

totalAmountnumberrequired

총금액

supplyValuenumberoptional

공급가액. 생략 시 자동 계산

vatnumberoptional

부가세. 생략 시 자동 계산

serviceFeenumberoptional

봉사료. 기본 0

issuer.registrationNumberstringrequired

발행자 사업자등록번호

issuer.companyNamestringrequired

발행자 상호

buyer.identityNumberstringrequired

구매자 식별번호

buyer.userNamestringoptional

구매자 이름/상호

Response Fields

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/cash-receipts \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "transactAt": "2026-04-09T13:20:00+09:00",
  "content": "외부 ERP 현금 매출",
  "usage": "EXPENSE_PROOF",
  "taxationType": "TAXABLE",
  "totalAmount": 110000,
  "issuer": {
    "registrationNumber": "123-45-67890",
    "companyName": "그랜터"
  },
  "buyer": {
    "identityNumber": "111-22-33333",
    "userName": "샘플 거래처"
  }
}'
POST /api/public-docs/cash-receipts
Manual Cash Receipt Create Response Example
{
  "id": 80101,
  "transactAt": "2026-04-09T13:20:00",
  "usage": "EXPENSE_PROOF",
  "taxationType": "TAXABLE",
  "totalAmount": 110000,
  "supplyValue": 100000,
  "vat": 10000,
  "serviceFee": 0,
  "content": "외부 ERP 현금 매출",
  "issuer": {
    "registrationNumber": "1234567890",
    "companyName": "그랜터"
  },
  "buyer": {
    "identityNumber": "1112233333",
    "userName": "샘플 거래처"
  }
}

POST /api/public-docs/tax-invoices/issue

세금계산서를 즉시발행, 예약발행, 반복발행 형태로 신규 발행합니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 다만 timeout, 네트워크 끊김처럼 같은 발행 요청을 재시도해야 하는 경우에는 클라이언트가 직접 넣어야 중복 발행을 줄일 수 있습니다.

`Idempotency-Key`는 실제 발행 요청을 보내는 순간 생성하고, 같은 payload 재시도에만 같은 값을 재사용하세요. 화면 진입, 세션, 임시저장, 거래처 선택 같은 긴 수명에 묶어 재사용하지 마세요.

payload의 금액, 거래처, 품목, 작성일자, 발행 일정이 바뀌었거나 사용자가 새 세금계산서를 발행하는 경우에는 이전 `Idempotency-Key`를 재사용하지 말고 새 값을 생성하세요.

이미 사용한 `Idempotency-Key`로 다른 payload를 보내면 새 세금계산서가 발행되지 않고 기존 요청의 승인번호/결과가 반환될 수 있으므로, 외부 시스템에서는 payload fingerprint와 키를 함께 관리하는 것을 권장합니다.

`supplier`, `contractor`, `tradeItems`를 포함한 발행 payload를 JSON body로 전달합니다.

AI 또는 외부 시스템은 `issueScheduleType`를 항상 명시하고, `supplier`와 `contractor`에는 `registrationNumber`, `companyName`, 대표자명(`ceoName`)을 넣어야 합니다.

금액 필드(`supplyValue`, `taxAmount`, `totalAmount`, `cash`, `check`, `bankBill`, `accountReceivable`, `tradeItems[].supplyValue`, `tradeItems[].taxAmount`)는 모두 정수(integer)로 전달하세요.

금액 필드는 음수도 받습니다(마이너스 세금계산서). 다만 음수 금액으로 발급하면 가산세가 발생할 수 있으므로, 이미 발행한 세금계산서를 정정하려는 경우에는 `tax-invoices-modify-issue`, `tax-invoices-cancel-issue`로 수정세금계산서를 발행하세요.

`cash`, `check`, `bankBill`, `accountReceivable`를 전달하면 네 금액의 합이 `totalAmount`와 같아야 합니다. 결제수단을 따로 관리하지 않으면 보통 `accountReceivable`에 `totalAmount`를 넣습니다.

`tradeItems[].taxItemName`은 발행된 세금계산서의 품목란에 그대로 표시됩니다. 내부 테스트명, 검증 문구, 추적용 메모는 `taxItemName`이 아니라 `memo`에 넣으세요.

`note`는 세금계산서 상단 비고란, `tradeItems[].note`는 품목 행 비고란에 표시됩니다. 외부에 보이지 않는 내부 메모는 `memo`를 사용하세요.

`issueScheduleType`이 `RECURRING`이면 `reportingDate`는 `null`, `recurringScheduleOption`은 필수입니다.

수정발행/취소발행은 각각 `tax-invoices-modify-issue`, `tax-invoices-cancel-issue` endpoint를 사용하세요.

`assets` API의 HOME_TAX_ACCOUNT 응답에는 `issueCertificate`가 포함되지 않습니다. 발행용 인증서 미등록 여부는 `assets` 응답의 필드 누락만으로 판단하지 마세요.

거래처 담당자 이름은 세금계산서 발행 필드가 아닙니다. 세금계산서에 실리는 연락처는 `supplier`·`contractor`의 휴대전화(`phone`)·전화(`tel`)·이메일(`email`, `email2`)뿐입니다.

거래처 담당자는 세금계산서마다가 아니라 거래처 단위로 관리합니다. `contacts-managers-create`, `contacts-managers-update`, `contacts-managers-delete`로 관리하고, 세금계산서와는 티켓의 `contactId`(거래처 ID)로 이어집니다. 담당자 정보는 공급받는자(거래 상대방)에게 보이지 않는 그랜터 내부 관리 정보입니다.

그랜터에서 발행한 세금계산서는 홈택스 전송이 끝난 뒤에야 티켓으로 조회됩니다. 그 전에 거래처와 담당자를 찾으려면 거래 상대방(공급받는자) 사업자등록번호 `contractor.registrationNumber`로 `contacts`에서 거래처를 찾으세요.

issueTypestringrequired

발행 타입. 일반적으로 `정발행`을 사용합니다.

taxTypeenumrequired

과세 유형

▶허용 값
TAX·과세
ZERO_TAX_RATE·영세율
TAX_EXEMPTION·면세
chargeDirectionstringrequired

청구 방향. 일반적으로 `정과금`을 사용합니다.

reportingDateYYYY-MM-DD | nullrequired

작성일자. 반복발행이면 `null`입니다.

issueScheduleTypeenumrequired

발행 스케줄 타입

▶허용 값
IMMEDIATE·즉시발행
SCHEDULED·예약발행
RECURRING·반복발행
recurringScheduleOption.dayOfMonthintegeroptional

반복발행(RECURRING)일 때 필요한 발행 일자 (1~31)

recurringScheduleOption.endDateYYYY-MM-DDoptional

반복발행(RECURRING)일 때 필요한 종료일

purposeTypeenumrequired

영수/청구 구분

▶허용 값
RECEIPT·영수
CHARGE·청구
supplyValueintegerrequired

공급가액. 음수 가능

taxAmountintegerrequired

세액. 음수 가능

totalAmountintegerrequired

합계금액. 음수 가능

cashintegeroptional

현금 금액

checkintegeroptional

수표 금액

bankBillintegeroptional

어음 금액

accountReceivableintegeroptional

외상미수금 금액. 결제수단 금액 합계는 totalAmount와 같아야 합니다.

notestringrequired

세금계산서 상단 비고란에 표시되는 비고

contractorTypeenumrequired

공급받는자 유형

▶허용 값
BUSINESS·사업자
INDIVIDUAL·개인 — contractor.registrationNumber에 주민등록번호
FOREIGNER·외국인 — contractor.registrationNumber에 9999999999999, note에 외국인등록번호 또는 여권번호
forceIssuebooleanoptional

강제 발행 여부

writeSpecificationbooleanoptional

명세 작성 여부

memostringrequired

그랜터 내부 메모. 세금계산서 품목/비고에는 표시되지 않습니다.

supplier.registrationNumberstringrequired

공급자 사업자등록번호

supplier.companyNamestringrequired

공급자 회사명

supplier.ceoNamestringrequired

공급자 대표자명

supplier.emailstringoptional

공급자 이메일

supplier.email2stringoptional

공급자 보조 이메일

supplier.telstringoptional

발행 세금계산서 담당자 연락처에 반영되는 공급자 연락처

supplier.phonestringoptional

기존 호환용 연락처 alias. tel 미입력 시 연락처로 사용되며, tel과 함께 보내면 tel이 우선됩니다.

supplier.businessTypesstringoptional

공급자 업태

supplier.businessItemsstringoptional

공급자 종목

supplier.businessPlacestringoptional

공급자 사업장 주소

contractor.registrationNumberstringrequired

공급받는자 사업자등록번호

contractor.companyNamestringrequired

공급받는자 회사명

contractor.ceoNamestringrequired

공급받는자 대표자명

contractor.emailstringoptional

공급받는자 이메일

contractor.email2stringoptional

공급받는자 보조 이메일

contractor.telstringoptional

발행 세금계산서 담당자 연락처에 반영되는 공급받는자 연락처

contractor.phonestringoptional

기존 호환용 연락처 alias. tel 미입력 시 연락처로 사용되며, tel과 함께 보내면 tel이 우선됩니다.

contractor.businessTypesstringoptional

공급받는자 업태

contractor.businessItemsstringoptional

공급받는자 종목

contractor.businessPlacestringoptional

공급받는자 사업장 주소

tradeItems[].purchaseExpiryDateYYYY-MM-DD | nulloptional

공급일자

tradeItems[].taxItemNamestringrequired

세금계산서 품목란에 그대로 표시되는 품목명

tradeItems[].standardsstringrequired

규격

tradeItems[].quantitynumberrequired

수량

tradeItems[].unitPricenumberrequired

단가. 음수 가능

tradeItems[].supplyValueintegerrequired

품목 공급가액. 음수 가능

tradeItems[].taxAmountintegerrequired

품목 세액. 음수 가능

tradeItems[].notestringoptional

품목 행 비고란에 표시되는 비고

Response Fields

idnumberrequired

세금계산서 ID

issueUuidstringoptional

발행 요청 UUID

▶accountTicketAssetrequiredexpandable

발행에 사용된 홈택스 자산

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶trusteeTaxInvoiceUser | nulloptionalexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentTypestringrequired

내용 타입

transactionTypestringrequired

거래 타입

taxtransactionTypestringrequired

세금계산서 거래 타입

etaxtransactionTypestringrequired

전자세금계산서 거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestring | nulloptional

전송일자

issueDatestring | nulloptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

totalCountnumber | nulloptional

총 건수

cashnumberrequired

현금 금액

checknumberrequired

수표 금액

bankBillnumberrequired

어음 금액

accountReceivablenumber | nulloptional

외상미수금 금액

purposeTypestringrequired

영수/청구 구분

representationItemsstringrequired

대표 품목

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

notestringrequired

비고

statusstringrequired

발행 상태

resultCodenumberoptional

발행 결과 코드

resultMessagestringoptional

발행 결과 메시지

importDeclarationNumberstring | nulloptional

수입신고번호

commStartDatestring | nulloptional

통신 시작일

commEndDatestring | nulloptional

통신 종료일

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

modificationReasonstring | nulloptional

수정사유

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tax-invoices/issue \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "issueType": "정발행",
  "taxType": "TAX",
  "chargeDirection": "정과금",
  "reportingDate": "2026-04-09",
  "issueScheduleType": "IMMEDIATE",
  "purposeType": "CHARGE",
  "supplyValue": 100000,
  "taxAmount": 10000,
  "totalAmount": 110000,
  "cash": 0,
  "check": 0,
  "bankBill": 0,
  "accountReceivable": 110000,
  "note": "4월 개발 용역",
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "businessPlace": "서울특별시 강남구 테헤란로 1",
    "email": "billing@supplier.example",
    "email2": "",
    "tel": "0212345678"
  },
  "contractor": {
    "registrationNumber": "0987654321",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "businessTypes": "도매업",
    "businessItems": "소프트웨어 유통",
    "businessPlace": "서울특별시 서초구 서초대로 10",
    "email": "ap@buyer.example",
    "email2": "",
    "tel": "01012345678"
  },
  "contractorType": "BUSINESS",
  "forceIssue": false,
  "writeSpecification": true,
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-09",
      "taxItemName": "개발 용역",
      "standards": "건",
      "quantity": 1,
      "unitPrice": 100000,
      "supplyValue": 100000,
      "taxAmount": 10000,
      "note": ""
    }
  ],
  "memo": "Public API 발행 테스트"
}'
POST /api/public-docs/tax-invoices/issue
Tax Invoice Issue Response Example
{
  "id": 501,
  "issueUuid": "a5d9d5b7-8bc9-4b4d-9e77-5677f40b8c2a",
  "account": {
    "id": 41,
    "workspaceId": 1,
    "name": "세금계산서 홈택스",
    "nickname": "발행용 홈택스",
    "organization": "HOME_TAX",
    "organizationName": "홈택스",
    "isActive": true,
    "isPossibleDormant": false,
    "isDormant": false,
    "number": "1234567890",
    "owners": [
      {
        "id": 73,
        "name": "소유자 A",
        "email": "owner-a@example.com",
        "isDeleted": false
      }
    ],
    "clientType": "CORPORATE",
    "businessType": "HTX",
    "businessTypeName": "홈택스",
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "address": "서울특별시 강남구 테헤란로 1",
    "contactName": "재무담당자",
    "email": "billing@supplier.example",
    "tel": "0212345678",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "category": "TAX_INVOICE"
  },
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "businessPlace": "서울특별시 강남구 테헤란로 1",
    "email": "billing@supplier.example",
    "email2": "",
    "tel": "0212345678"
  },
  "contractor": {
    "registrationNumber": "0987654321",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "businessTypes": "도매업",
    "businessItems": "소프트웨어 유통",
    "businessPlace": "서울특별시 서초구 서초대로 10",
    "email": "ap@buyer.example",
    "email2": "",
    "tel": "01012345678"
  },
  "trustee": null,
  "approvalNumber": "20260409-000001",
  "contentType": "SUMMARY",
  "transactionType": "SELL",
  "taxtransactionType": "SELL",
  "etaxtransactionType": "SELL",
  "issueName": "정발행",
  "reportingDate": "2026-04-09",
  "sendDate": "2026-04-09T08:31:00.000Z",
  "issueDate": "2026-04-09T08:31:02.000Z",
  "supplyValue": 100000,
  "taxAmount": 10000,
  "totalAmount": 110000,
  "totalCount": 1,
  "cash": 0,
  "check": 0,
  "bankBill": 0,
  "accountReceivable": 110000,
  "purposeType": "CHARGE",
  "representationItems": "개발 용역",
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-09",
      "taxItemName": "개발 용역",
      "standards": "건",
      "quantity": 1,
      "unitPrice": 100000,
      "supplyValue": 100000,
      "taxAmount": 10000,
      "note": ""
    }
  ],
  "note": "4월 개발 용역",
  "status": "ISSUED",
  "resultCode": 1,
  "resultMessage": "SUCCESS",
  "importDeclarationNumber": null,
  "commStartDate": null,
  "commEndDate": null,
  "issueOption": {
    "issueType": "정발행",
    "taxType": "TAX",
    "chargeDirection": "정과금",
    "kwon": 1,
    "ho": 1,
    "contractorType": "BUSINESS",
    "forceIssue": false,
    "writeSpecification": true,
    "closeDownStatus": "ACTIVE",
    "closeDownDate": ""
  },
  "modificationReason": null
}

POST /api/public-docs/tax-invoices/modify-issue

세금계산서를 수정발행합니다. 공급가액 변동·기재사항 착오정정·환입처럼 원본 승인번호를 기준으로 정정할 때 사용합니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 같은 수정발행 payload를 재시도할 때만 같은 값을 재사용하고, 정정 내용이 바뀌면 새 값을 생성하세요.

`modificationOption.originalApprovalNumber`에는 정정 대상 원본 승인번호를 넣어야 합니다.

`supplier`와 `contractor`에는 정발행과 동일하게 `registrationNumber`, `companyName`, 대표자명(`ceoName`)이 필요합니다.

금액 필드와 `tradeItems[].supplyValue`, `tradeItems[].taxAmount`는 모두 정수(integer)로 전달하세요.

`tradeItems[].taxItemName`은 발행된 수정세금계산서의 품목란에 그대로 표시됩니다. 내부 추적용 문구는 `memo`를 사용하세요.

`modificationOption.modificationReason`은 현재 Public API에서 `기재사항 착오정정`, `공급가액 변동`, `환입`만 허용합니다.

`기재사항 착오정정`은 이 endpoint를 두 번 호출합니다. 한 번은 당초분 전액을 음수로, 한 번은 올바른 내용으로 보내고 두 번 모두 `기재사항 착오정정` 사유와 원본 승인번호를 넣습니다. 공급받는자(사업자번호·상호)를 바로잡는 경우도 같으며, 정정분 공급받는자가 원본과 달라도 막지 않습니다.

`환입`(반품)은 반품된 금액만큼만 음수로 1장 발행합니다. `supplyValue`·`totalAmount`가 음수이고 `tradeItems`에 음수 금액 항목이 있어야 하며, 아니면 400으로 거절합니다. `reportingDate`는 반품된 날, `note`에는 당초 작성일을 적는 것이 국세청 안내입니다.

`reportingDate`는 바꾸지 않고 그대로 작성일자로 국세청에 전송됩니다. 사유에 맞는 날짜인지는 그랜터가 검사하지 않습니다.

`기재사항 착오정정` 두 장 중 정정 장만 거절됐다면 정정 장만 같은 원본 승인번호로 다시 보내세요. 마이너스 장과 같은 `Idempotency-Key`를 쓰면 10분 동안 마이너스 장 응답이 그대로 돌아오므로 새 키를 생성합니다. 그랜터는 같은 원본에 대한 중복 발행을 막지 않으니 이미 발행된 장을 다시 보내지 마세요.

공급받는자가 외국인(`contractorType=FOREIGNER`)이면 `contractor.registrationNumber`에 `9999999999999`, `note`에 외국인등록번호 또는 여권번호를 넣습니다. 개인(`INDIVIDUAL`)은 원본과 같은 주민등록번호로 보냅니다.

modificationOption.modificationReasonenumrequired

수정사유

▶허용 값
기재사항 착오정정·기재사항 착오 정정
공급가액 변동·공급가액 변동
환입·환입(반품) — 반품된 금액만큼 음수로 발행
modificationOption.originalApprovalNumberstringrequired

원본 승인번호

reportingDateYYYY-MM-DDrequired

수정세금계산서 작성일자

tradeItems[]arrayrequired

정정 또는 차액 기준 품목 목록. 공급가액 변동은 차액을, 기재사항 착오정정은 당초분 음수 또는 정정본 내용을, 환입은 반품된 품목을 음수로 전달합니다.

supplyValueintegerrequired

공급가액. 차액 수정이면 음수/양수 모두 가능

taxAmountintegerrequired

세액. 차액 수정이면 음수/양수 모두 가능

totalAmountintegerrequired

합계금액. 차액 수정이면 음수/양수 모두 가능

Response Fields

idnumberrequired

세금계산서 ID

issueUuidstringoptional

발행 요청 UUID

▶accountTicketAssetrequiredexpandable

발행에 사용된 홈택스 자산

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶trusteeTaxInvoiceUser | nulloptionalexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentTypestringrequired

내용 타입

transactionTypestringrequired

거래 타입

taxtransactionTypestringrequired

세금계산서 거래 타입

etaxtransactionTypestringrequired

전자세금계산서 거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestring | nulloptional

전송일자

issueDatestring | nulloptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

totalCountnumber | nulloptional

총 건수

cashnumberrequired

현금 금액

checknumberrequired

수표 금액

bankBillnumberrequired

어음 금액

accountReceivablenumber | nulloptional

외상미수금 금액

purposeTypestringrequired

영수/청구 구분

representationItemsstringrequired

대표 품목

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

notestringrequired

비고

statusstringrequired

발행 상태

resultCodenumberoptional

발행 결과 코드

resultMessagestringoptional

발행 결과 메시지

importDeclarationNumberstring | nulloptional

수입신고번호

commStartDatestring | nulloptional

통신 시작일

commEndDatestring | nulloptional

통신 종료일

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

modificationReasonstring | nulloptional

수정사유

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tax-invoices/modify-issue \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "issueType": "정발행",
  "taxType": "TAX",
  "chargeDirection": "정과금",
  "reportingDate": "2026-04-12",
  "purposeType": "CHARGE",
  "supplyValue": 20000,
  "taxAmount": 2000,
  "totalAmount": 22000,
  "cash": 0,
  "check": 0,
  "bankBill": 0,
  "accountReceivable": 22000,
  "note": "공급가액 변동 차액분",
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "businessPlace": "서울특별시 강남구 테헤란로 1",
    "email": "billing@supplier.example",
    "email2": "",
    "tel": "0212345678"
  },
  "contractor": {
    "registrationNumber": "0987654321",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "businessTypes": "도매업",
    "businessItems": "소프트웨어 유통",
    "businessPlace": "서울특별시 서초구 서초대로 10",
    "email": "ap@buyer.example",
    "email2": "",
    "tel": "01012345678"
  },
  "contractorType": "BUSINESS",
  "forceIssue": false,
  "writeSpecification": true,
  "modificationOption": {
    "modificationReason": "공급가액 변동",
    "originalApprovalNumber": "20260409-000001"
  },
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-12",
      "taxItemName": "개발 용역",
      "standards": "건",
      "quantity": 0,
      "unitPrice": 20000,
      "supplyValue": 20000,
      "taxAmount": 2000,
      "note": "Difference"
    }
  ],
  "memo": "공급가액 변동 정정"
}'
POST /api/public-docs/tax-invoices/modify-issue
Tax Invoice Modify Issue Response Example
{
  "id": 502,
  "issueUuid": "5a0b2f56-60f4-4d59-b5ff-6e70f29c0c11",
  "account": {
    "id": 41,
    "workspaceId": 1,
    "name": "세금계산서 홈택스",
    "nickname": "발행용 홈택스",
    "organization": "HOME_TAX",
    "organizationName": "홈택스",
    "isActive": true,
    "isPossibleDormant": false,
    "isDormant": false,
    "number": "1234567890",
    "owners": [
      {
        "id": 73,
        "name": "소유자 A",
        "email": "owner-a@example.com",
        "isDeleted": false
      }
    ],
    "clientType": "CORPORATE",
    "businessType": "HTX",
    "businessTypeName": "홈택스",
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "address": "서울특별시 강남구 테헤란로 1",
    "contactName": "재무담당자",
    "email": "billing@supplier.example",
    "tel": "0212345678",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "category": "TAX_INVOICE"
  },
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "businessPlace": "서울특별시 강남구 테헤란로 1",
    "email": "billing@supplier.example",
    "email2": "",
    "tel": "0212345678"
  },
  "contractor": {
    "registrationNumber": "0987654321",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "businessTypes": "도매업",
    "businessItems": "소프트웨어 유통",
    "businessPlace": "서울특별시 서초구 서초대로 10",
    "email": "ap@buyer.example",
    "email2": "",
    "tel": "01012345678"
  },
  "trustee": null,
  "approvalNumber": "20260412-000003",
  "contentType": "SUMMARY",
  "transactionType": "SELL",
  "taxtransactionType": "SELL",
  "etaxtransactionType": "SELL",
  "issueName": "수정발행",
  "reportingDate": "2026-04-12",
  "sendDate": "2026-04-12T08:30:00.000Z",
  "issueDate": "2026-04-12T08:30:02.000Z",
  "supplyValue": 20000,
  "taxAmount": 2000,
  "totalAmount": 22000,
  "totalCount": 1,
  "cash": 0,
  "check": 0,
  "bankBill": 0,
  "accountReceivable": 22000,
  "purposeType": "CHARGE",
  "representationItems": "개발 용역",
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-12",
      "taxItemName": "개발 용역",
      "standards": "건",
      "quantity": 0,
      "unitPrice": 20000,
      "supplyValue": 20000,
      "taxAmount": 2000,
      "note": "Difference"
    }
  ],
  "note": "공급가액 변동 차액분",
  "status": "ISSUED",
  "resultCode": 1,
  "resultMessage": "SUCCESS",
  "importDeclarationNumber": null,
  "commStartDate": null,
  "commEndDate": null,
  "issueOption": {
    "issueType": "정발행",
    "taxType": "TAX",
    "chargeDirection": "정과금",
    "kwon": 1,
    "ho": 1,
    "contractorType": "BUSINESS",
    "forceIssue": false,
    "writeSpecification": true,
    "closeDownStatus": "ACTIVE",
    "closeDownDate": ""
  },
  "modificationReason": "공급가액 변동"
}

POST /api/public-docs/tax-invoices/cancel-issue

세금계산서를 취소발행합니다. 원본 승인번호를 기준으로 음수 금액의 수정세금계산서를 발행하는 방식입니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 같은 취소발행 payload를 재시도할 때만 같은 값을 재사용하고, 취소 대상 승인번호나 금액이 바뀌면 새 값을 생성하세요.

`modificationOption.originalApprovalNumber`에는 취소 대상 원본 승인번호를 넣어야 합니다.

`supplier`와 `contractor`에는 정발행과 동일하게 `registrationNumber`, `companyName`, 대표자명(`ceoName`)이 필요합니다.

`modificationOption.modificationReason`은 현재 Public API에서 `착오에 의한 이중발급` 또는 `계약의 해제`만 허용합니다.

취소발행은 현재 그랜터에서 발행된 세금계산서만 가능합니다.

취소발행은 `totalAmount`, `supplyValue`, 그리고 각 `tradeItems` 금액 필드가 음수인 정수(integer)여야 합니다.

`contractorType`과 `contractor.registrationNumber`는 원본과 같게 보냅니다. 외국인(`FOREIGNER`)은 `9999999999999`와 함께 `note`에 외국인등록번호 또는 여권번호를 넣습니다.

`tradeItems[].taxItemName`은 발행된 취소 세금계산서의 품목란에 그대로 표시됩니다. 내부 추적용 문구는 `memo`를 사용하세요.

modificationOption.modificationReasonenumrequired

취소 사유

▶허용 값
착오에 의한 이중발급·착오에 의한 이중발급
계약의 해제·계약의 해제
modificationOption.originalApprovalNumberstringrequired

원본 승인번호

reportingDateYYYY-MM-DDrequired

취소발행 작성일자

supplyValueintegerrequired

음수 공급가액

taxAmountintegerrequired

음수 세액

totalAmountintegerrequired

음수 합계금액

tradeItems[]arrayrequired

음수 금액 기준 품목 목록

Response Fields

idnumberrequired

세금계산서 ID

issueUuidstringoptional

발행 요청 UUID

▶accountTicketAssetrequiredexpandable

발행에 사용된 홈택스 자산

idnumberrequired

자산 ID

workspaceIdnumberrequired

워크스페이스 ID

namestringrequired

자산명

nicknamestringrequired

자산 별칭

organizationstringrequired

기관 코드

organizationNamestringrequired

기관명

isActivebooleanrequired

활성 여부

isPossibleDormantbooleanrequired

휴면 가능 여부

isDormantbooleanrequired

휴면 여부

numberstringrequired

자산 번호

▶ownersUserResponse[]requiredexpandable

소유자 목록

idnumberrequired

유저 ID

namestringrequired

유저 이름

emailstringrequired

유저 이메일

isDeletedbooleanrequired

삭제 여부

clientType"PERSONAL" | "CORPORATE" | "ALL"required

고객 유형

businessTypestringrequired

업종 코드

businessTypeNamestringrequired

업종명

userAutoAssignEnabledbooleanoptional

유저 자동 할당 여부

expirationYearstringoptional

카드 만료 연도

expirationMonthstringoptional

카드 만료 월

limitAmountnumberoptional

카드 한도 금액

usedAmountnumberoptional

카드 사용 금액

remainLimitnumberoptional

카드 잔여 한도

isAutoApprovalbooleanoptional

자동 승인 여부

previousCardNumberstringoptional

이전 카드번호

accountBalancenumberoptional

계좌 잔액

originalBalancenumberoptional

원본 잔액

currencyCodestringoptional

통화 코드

startDatestringoptional

조회 시작일

endDatestring | nulloptional

조회 종료일

accountTypestringoptional

계좌 유형

isTransactionVisiblebooleanoptional

거래내역 보유 여부

totalAmountnumberoptional

증권 총액

depositAmountnumberoptional

증권 예수금

foreignDepositAmountobject[]optional

외화예수금 상세 목록

foreignDepositsnumberoptional

외화예수금 합계

totalValuationAmountnumberoptional

총 평가금액

accountNumberstringoptional

계좌 번호

productsProduct[]optional

증권 보유 상품 목록

registrationNumberstringoptional

사업자등록번호

establishNumberstringoptional

개업일자 코드

companyNamestringoptional

회사명

ceoNamestringoptional

대표자명

addressstringoptional

주소

contactNamestringoptional

담당자명

emailstringoptional

담당자 이메일

telstringoptional

연락처

businessTypesstringoptional

업태

businessItemsstringoptional

종목

categorystringoptional

홈택스 카테고리

createdAtstringoptional

생성 시각

updatedAtstringoptional

수정 시각

readCertificateobjectoptional

조회 인증서 정보

issueCertificateobjectoptional

발행 인증서 정보

▶supplierTaxInvoiceUserrequiredexpandable

공급자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶contractorTaxInvoiceUserrequiredexpandable

공급받는자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

▶trusteeTaxInvoiceUser | nulloptionalexpandable

수탁자

registrationNumberstringrequired

사업자등록번호

companyNamestringrequired

회사명

ceoNamestringoptional

대표자명

businessTypesstringrequired

업태

businessItemsstringrequired

종목

businessPlacestringrequired

사업장 주소

emailstringrequired

이메일

email2stringoptional

보조 이메일

establishNumberstringoptional

개업일자 코드

userType"SUPPLIER" | "CONTRACTOR" | "TRUSTEE"optional

당사자 유형

taxInvoiceTaxInvoiceoptional

관련 세금계산서

phonestringoptional

휴대전화

telstringoptional

전화번호

approvalNumberstringrequired

승인번호

contentTypestringrequired

내용 타입

transactionTypestringrequired

거래 타입

taxtransactionTypestringrequired

세금계산서 거래 타입

etaxtransactionTypestringrequired

전자세금계산서 거래 타입

issueNamestringrequired

발행명

reportingDatestringrequired

작성일자

sendDatestring | nulloptional

전송일자

issueDatestring | nulloptional

발행일자

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

totalAmountnumberrequired

합계금액

totalCountnumber | nulloptional

총 건수

cashnumberrequired

현금 금액

checknumberrequired

수표 금액

bankBillnumberrequired

어음 금액

accountReceivablenumber | nulloptional

외상미수금 금액

purposeTypestringrequired

영수/청구 구분

representationItemsstringrequired

대표 품목

▶tradeItemsTradeItem[]requiredexpandable

품목 목록

purchaseExpiryDatestringrequired

공급일자

taxItemNamestringrequired

품목명

standardsstringrequired

규격

quantitynumberrequired

수량

unitPricenumberrequired

단가

supplyValuenumberrequired

공급가액

taxAmountnumberrequired

세액

notestringrequired

비고

isIncludedVatbooleanoptional

부가세 포함 여부

notestringrequired

비고

statusstringrequired

발행 상태

resultCodenumberoptional

발행 결과 코드

resultMessagestringoptional

발행 결과 메시지

importDeclarationNumberstring | nulloptional

수입신고번호

commStartDatestring | nulloptional

통신 시작일

commEndDatestring | nulloptional

통신 종료일

▶issueOptionIssueOptionoptionalexpandable

발행 옵션

issueTypestringrequired

발행 타입

taxType"TAX" | "ZERO_TAX_RATE" | "TAX_EXEMPTION"required

과세 유형

chargeDirectionstringrequired

청구 방향

kwonnumberrequired

권

honumberrequired

호

contractorType"BUSINESS" | "INDIVIDUAL" | "FOREIGNER"required

공급받는자 유형

forceIssuebooleanrequired

강제 발행 여부

writeSpecificationbooleanrequired

명세 작성 여부

closeDownStatusstringrequired

휴폐업 상태

closeDownDatestringrequired

휴폐업 일자

modificationReasonstring | nulloptional

수정사유

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/tax-invoices/cancel-issue \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "issueType": "정발행",
  "taxType": "TAX",
  "chargeDirection": "정과금",
  "reportingDate": "2026-04-09",
  "purposeType": "CHARGE",
  "supplyValue": -100000,
  "taxAmount": -10000,
  "totalAmount": -110000,
  "cash": -110000,
  "check": 0,
  "bankBill": 0,
  "accountReceivable": 0,
  "note": "이중발급 취소",
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "businessPlace": "서울특별시 강남구 테헤란로 1",
    "email": "billing@supplier.example",
    "email2": "",
    "tel": "0212345678"
  },
  "contractor": {
    "registrationNumber": "0987654321",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "businessTypes": "도매업",
    "businessItems": "소프트웨어 유통",
    "businessPlace": "서울특별시 서초구 서초대로 10",
    "email": "ap@buyer.example",
    "email2": "",
    "tel": "01012345678"
  },
  "contractorType": "BUSINESS",
  "forceIssue": false,
  "writeSpecification": true,
  "modificationOption": {
    "modificationReason": "착오에 의한 이중발급",
    "originalApprovalNumber": "20260409-000001"
  },
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-09",
      "taxItemName": "개발 용역",
      "standards": "건",
      "quantity": 1,
      "unitPrice": -100000,
      "supplyValue": -100000,
      "taxAmount": -10000,
      "note": ""
    }
  ],
  "memo": "이중발급 취소"
}'
POST /api/public-docs/tax-invoices/cancel-issue
Tax Invoice Cancel Issue Response Example
{
  "id": 503,
  "issueUuid": "a20d9192-1234-4f5c-a911-eaa10252f123",
  "account": {
    "id": 41,
    "workspaceId": 1,
    "name": "세금계산서 홈택스",
    "nickname": "발행용 홈택스",
    "organization": "HOME_TAX",
    "organizationName": "홈택스",
    "isActive": true,
    "isPossibleDormant": false,
    "isDormant": false,
    "number": "1234567890",
    "owners": [
      {
        "id": 73,
        "name": "소유자 A",
        "email": "owner-a@example.com",
        "isDeleted": false
      }
    ],
    "clientType": "CORPORATE",
    "businessType": "HTX",
    "businessTypeName": "홈택스",
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "address": "서울특별시 강남구 테헤란로 1",
    "contactName": "재무담당자",
    "email": "billing@supplier.example",
    "tel": "0212345678",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "category": "TAX_INVOICE"
  },
  "supplier": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "ceoName": "대표자 A",
    "businessTypes": "서비스업",
    "businessItems": "소프트웨어 개발",
    "businessPlace": "서울특별시 강남구 테헤란로 1",
    "email": "billing@supplier.example",
    "email2": "",
    "tel": "0212345678"
  },
  "contractor": {
    "registrationNumber": "0987654321",
    "companyName": "샘플 거래처",
    "ceoName": "대표자 B",
    "businessTypes": "도매업",
    "businessItems": "소프트웨어 유통",
    "businessPlace": "서울특별시 서초구 서초대로 10",
    "email": "ap@buyer.example",
    "email2": "",
    "tel": "01012345678"
  },
  "trustee": null,
  "approvalNumber": "20260409-000002",
  "contentType": "SUMMARY",
  "transactionType": "SELL",
  "taxtransactionType": "SELL",
  "etaxtransactionType": "SELL",
  "issueName": "취소발행",
  "reportingDate": "2026-04-09",
  "sendDate": "2026-04-09T08:32:00.000Z",
  "issueDate": "2026-04-09T08:32:02.000Z",
  "supplyValue": -100000,
  "taxAmount": -10000,
  "totalAmount": -110000,
  "totalCount": 1,
  "cash": -110000,
  "check": 0,
  "bankBill": 0,
  "accountReceivable": 0,
  "purposeType": "CHARGE",
  "representationItems": "개발 용역",
  "tradeItems": [
    {
      "purchaseExpiryDate": "2026-04-09",
      "taxItemName": "개발 용역",
      "standards": "건",
      "quantity": 1,
      "unitPrice": -100000,
      "supplyValue": -100000,
      "taxAmount": -10000,
      "note": ""
    }
  ],
  "note": "이중발급 취소",
  "status": "ISSUED",
  "resultCode": 1,
  "resultMessage": "SUCCESS",
  "importDeclarationNumber": null,
  "commStartDate": null,
  "commEndDate": null,
  "issueOption": {
    "issueType": "정발행",
    "taxType": "TAX",
    "chargeDirection": "정과금",
    "kwon": 1,
    "ho": 1,
    "contractorType": "BUSINESS",
    "forceIssue": false,
    "writeSpecification": true,
    "closeDownStatus": "ACTIVE",
    "closeDownDate": ""
  },
  "modificationReason": "착오에 의한 이중발급"
}

POST /api/public-docs/cash-receipts/issue

현금영수증을 발행합니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 미입력 시 서버가 임의 생성합니다. 다만 timeout, 네트워크 끊김처럼 같은 발행 요청을 재시도해야 하는 경우에는 클라이언트가 직접 넣어야 중복 발행을 줄일 수 있습니다.

`Idempotency-Key`는 실제 발행 요청을 보내는 순간 생성하고, 같은 payload 재시도에만 같은 값을 재사용하세요. 화면 진입, 세션, 임시저장, 구매자 선택 같은 긴 수명에 묶어 재사용하지 마세요.

payload의 금액, 구매자, 거래 일시, 발행 용도, 과세 형태가 바뀌었거나 사용자가 새 현금영수증을 발행하는 경우에는 이전 `Idempotency-Key`를 재사용하지 말고 새 값을 생성하세요.

이미 사용한 `Idempotency-Key`로 다른 payload를 보내면 새 현금영수증이 발행되지 않고 기존 요청의 승인번호/결과가 반환될 수 있으므로, 외부 시스템에서는 payload fingerprint와 키를 함께 관리하는 것을 권장합니다.

`homeTaxAccountId`는 `assets` API에서 `assetType=HOME_TAX_ACCOUNT`로 조회한 활성 홈택스 자산 ID를 사용합니다.

`totalAmount`, `supplyValue`, `vat`, `serviceFee`는 모두 정수(integer)로 전달하세요.

`transactAt`은 발행일 기준 전일부터 당일까지만 받습니다. 국세청은 현금영수증 거래일자 소급 발급을 허용하지 않아 3~5일 전 거래일로는 발급되지 않고, 발행 대행사 오류가 그대로 돌아옵니다. 그랜터는 `transactAt`을 바꾸지 않고 그대로 전달합니다.

homeTaxAccountIdintegerrequired

발행에 사용할 홈택스 자산 ID

transactAtISO-8601 stringrequired

거래 일시(발행일 기준 전일~당일)

contentstringrequired

거래 내용

usageenumrequired

발행 용도

▶허용 값
TAX_DEDUCTION·소득공제
EXPENSE_PROOF·지출증빙
taxationTypeenumrequired

과세 형태

▶허용 값
TAXABLE·과세
NON_TAXABLE·면세
totalAmountintegerrequired

총금액

supplyValueintegerrequired

공급가액

vatintegerrequired

부가세

serviceFeeintegerrequired

봉사료

issuer.registrationNumberstringrequired

발행자 사업자등록번호

issuer.companyNamestringrequired

발행자 회사명

buyer.identityNumberstringrequired

구매자 식별번호

buyer.userNamestringoptional

구매자명

Response Fields

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/cash-receipts/issue \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "homeTaxAccountId": 41,
  "transactAt": "2026-04-09T09:30:00+09:00",
  "content": "오프라인 판매",
  "usage": "EXPENSE_PROOF",
  "taxationType": "TAXABLE",
  "totalAmount": 110000,
  "supplyValue": 100000,
  "vat": 10000,
  "serviceFee": 0,
  "issuer": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자"
  },
  "buyer": {
    "identityNumber": "01012345678",
    "userName": "홍길동"
  }
}'
POST /api/public-docs/cash-receipts/issue
Cash Receipt Issue Response Example
{
  "id": 901,
  "workspaceId": 1,
  "receiptType": "SALES",
  "transactAt": "2026-04-09T09:30:00+09:00",
  "transactDate": "2026-04-09",
  "transactionType": "APPROVAL",
  "taxationType": "TAXABLE",
  "deductionStatus": "공제",
  "usage": "EXPENSE_PROOF",
  "issueType": "SELF",
  "issueStatus": "ISSUED",
  "approvalNumber": "CR-20260409-0001",
  "totalAmount": 110000,
  "supplyValue": 100000,
  "vat": 10000,
  "serviceFee": 0,
  "content": "오프라인 판매",
  "ntsResultCode": "SUCCESS",
  "issuer": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "userId": 101
  },
  "buyer": {
    "identityNumber": "01012345678",
    "userName": "홍길동"
  }
}

POST /api/public-docs/cash-receipts/cancel-issue

현금영수증을 취소발행합니다. 기존 현금영수증 ID를 기준으로 전체취소 또는 부분취소를 처리합니다.

Request Fields

`Idempotency-Key` header는 optional입니다. 같은 취소발행 payload를 재시도할 때만 같은 값을 재사용하고, 취소 대상 현금영수증 ID·취소 사유·부분취소 금액이 바뀌면 새 값을 생성하세요.

`cashReceiptId`에는 취소 대상 현금영수증 ID를 넣습니다. 보통 `tickets` API에서 `ticketType=CASH_RECEIPT_TICKET` 응답의 `cashReceipt.id` 값을 사용합니다.

취소발행은 현재 그랜터에서 발행된 현금영수증만 가능합니다.

`isPartialCancel=true`이면 `totalAmount`, `supplyValue`, `vat`, `serviceFee`를 모두 전달해야 합니다.

취소 금액 필드(`totalAmount`, `supplyValue`, `vat`, `serviceFee`)는 모두 정수(integer)로 전달하세요.

부분취소는 한 영수증에 여러 번 할 수 있습니다. 두 번째 이후 부분취소에도 `cashReceiptId`에는 항상 원본 영수증 ID를 넣습니다(국세청 기준 취소는 당초 승인거래의 승인번호·승인일자로 합니다). 앞선 부분취소로 생긴 영수증 ID를 넣으면 안 됩니다.

부분취소 금액 필드는 이번에 취소할 금액입니다(취소 후 남는 금액이 아님). 취소 금액 합계가 원래 금액을 넘으면 발행 대행사가 거절하며, 그랜터는 누적 취소액을 따로 계산해 막지 않으니 남은 금액 안에서 나눠 보내세요.

이미 일부를 취소한 영수증의 남은 금액을 모두 취소할 때도 `isPartialCancel=true`로 남은 금액을 보냅니다. `isPartialCancel=false`는 원래 금액 전체를 취소하는 요청이라 일부를 취소한 뒤에는 금액이 넘쳐 거절됩니다.

취소 건 `transactAt`도 발행일 기준 전일부터 당일까지만 받으며, 당초 승인 거래일보다 앞선 날짜로 보낼 수 없습니다. 원본을 발행한 당일에 바로 취소해도 원본과 취소 건이 다음 날 함께 국세청에 전송됩니다(전송 결과는 다음 날 오전 10시 이후 확인 가능).

cashReceiptIdintegerrequired

취소 대상 현금영수증 ID

transactAtISO-8601 stringrequired

취소 거래 일시

cancelReasonenumrequired

취소 사유

▶허용 값
TRANSACTION_CANCELED·거래취소
ERROR_ISSUE_CANCELED·오발급 취소
OTHER·기타
contentstringrequired

메모 또는 취소 내용

isPartialCancelbooleanrequired

부분취소 여부

totalAmountintegeroptional

이번에 취소할 총금액(남는 금액 아님)

supplyValueintegeroptional

이번에 취소할 공급가액

vatintegeroptional

이번에 취소할 부가세

serviceFeeintegeroptional

이번에 취소할 봉사료

emailsstring[]required

수신 이메일 목록

Response Fields

idnumberrequired

현금영수증 ID

workspaceIdnumberrequired

워크스페이스 ID

receiptType"SALES" | "PURCHASE"required

영수증 구분

transactAtstringrequired

거래 일시

transactDatestringrequired

국세청 승인일자

transactionType"APPROVAL" | "CANCEL"required

거래구분

taxationType"TAXABLE" | "NON_TAXABLE"optional

과세형태

deductionStatusstringoptional

공제여부

usage"TAX_DEDUCTION" | "EXPENSE_PROOF"required

용도구분

issueTypestringoptional

발행구분

issueStatusstringrequired

발행 상태

approvalNumberstringrequired

승인번호

totalAmountnumberrequired

총금액

supplyValuenumberrequired

공급가액

vatnumberrequired

부가세

serviceFeenumberrequired

봉사료

contentstringrequired

거래 내용

ntsResultCodestringoptional

국세청 결과 코드

▶issuerCashReceiptCounterPartyrequiredexpandable

발행자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶buyerCashReceiptCounterPartyrequiredexpandable

구매자

registrationNumberstringoptional

사업자번호

companyNamestringoptional

상호

userIdnumberoptional

유저 ID

identityNumberstringoptional

식별번호

userNamestringoptional

사용자명

emailsstring[]optional

이메일 목록

▶cancelOptionobjectoptionalexpandable

취소 정보

cancelReasonstringrequired

취소 사유

originalApprovalNumberstringrequired

원본 승인번호

originalTransactDatestringrequired

원본 승인일자

originalCashReceiptIdnumberrequired

원본 현금영수증 ID

호출
API KEY
REQUEST EXAMPLE (JSON)
호출 예시
cURL
curl -X POST https://app.granter.biz/api/public-docs/cash-receipts/cancel-issue \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic <BASE64(API_KEY:)>" \
  -d '{
  "cashReceiptId": 901,
  "transactAt": "2026-04-10T11:15:00+09:00",
  "cancelReason": "TRANSACTION_CANCELED",
  "content": "고객 환불",
  "isPartialCancel": false,
  "emails": ["accounting@example.com"]
}'
POST /api/public-docs/cash-receipts/cancel-issue
Cash Receipt Cancel Issue Response Example
{
  "id": 902,
  "workspaceId": 1,
  "receiptType": "SALES",
  "transactAt": "2026-04-10T11:15:00+09:00",
  "transactDate": "2026-04-10",
  "transactionType": "CANCEL",
  "taxationType": "TAXABLE",
  "deductionStatus": "공제",
  "usage": "EXPENSE_PROOF",
  "issueType": "SELF",
  "issueStatus": "ISSUED",
  "approvalNumber": "CR-20260410-0002",
  "totalAmount": 110000,
  "supplyValue": 100000,
  "vat": 10000,
  "serviceFee": 0,
  "content": "고객 환불",
  "ntsResultCode": "SUCCESS",
  "issuer": {
    "registrationNumber": "1234567890",
    "companyName": "샘플 공급자",
    "userId": 101
  },
  "buyer": {
    "identityNumber": "01012345678",
    "userName": "홍길동"
  },
  "cancelOption": {
    "cancelReason": "TRANSACTION_CANCELED",
    "originalApprovalNumber": "CR-20260409-0001",
    "originalTransactDate": "2026-04-09",
    "originalCashReceiptId": 901
  }
}

Error Responses

401 Unauthorized
Basic Authorization 헤더가 없거나, API key가 유효하지 않은 경우
응답 `code`는 `UNAUTHORIZED`입니다.
400 Bad Request
요청 body 형식/값이 잘못된 경우
티켓 API 유효성 규칙: `ticketType`, `startDate`, `endDate` 필수, 날짜는 `YYYY-MM-DD` 형식, `startDate <= endDate`, ID 필드는 양의 정수
티켓 수정 API 유효성 규칙: `ticketType` 필수, `items`는 1개 이상, `items[].ticketId`는 양의 정수, `updateFields`에 따라 `expenseCategoryId`/`ticketTagIds`/`description`/`userIds`/`contactId`/`isIncluded`가 각각 필요, `TAG`·`TAG_DETAIL`(1차/2차 태그)은 지원하지 않음
발행 API 유효성 규칙: 세금계산서 정발행은 양수·음수 금액 모두 가능, 세금계산서 취소발행은 음수 금액, 현금영수증 부분취소는 취소 금액 필수
잔액 API 유효성 규칙: `startDate/endDate`는 함께 전달, `startDate/endDate`는 `YYYY-MM-DD` 형식, `startDate <= endDate`
자금일보 API 유효성 규칙: `startDate/endDate` 필수, `startDate/endDate`는 `YYYY-MM-DD` 형식, `startDate <= endDate`, 조회 기간은 최대 31일
급여 API 유효성 규칙: `startDate/endDate` 필수, `startDate/endDate`는 `YYYY-MM-DD` 형식, `startDate <= endDate`, `employeeId`는 양의 정수
403 Forbidden
API key가 활성화되어 있지만 해당 쓰기 기능을 사용할 권한 또는 플랜 범위가 없는 경우
거래처 생성·수정·삭제, 전자결재 생성, 티켓 수정, 증빙 발행 같은 쓰기 API는 워크스페이스/API 권한에 따라 제한될 수 있습니다.
409 Conflict
현재 리소스 상태와 요청이 충돌하는 경우
수기관리 전표 삭제에서는 연결된 티켓에 `MANUAL_TRANSACTION_CONNECTED`, 여러 티켓이 같은 수기거래를 가리키면 `DUPLICATE_MANUAL_TRANSACTION` code를 반환합니다.
429 Too Many Requests
클라이언트 IP 기준 분당 120 작업 단위 제한을 초과했거나 upstream 인증 확인 요청이 속도 제한에 도달한 경우
`Retry-After` 응답 헤더의 초 단위 대기시간 이후 재시도하세요.
응답 `code`는 `RATE_LIMITED`입니다.
503 Service Unavailable
API key 인증 서버가 일시적으로 응답하지 않거나 연결할 수 없는 경우
잘못된 API key를 의미하는 401과 구분하여 지수 백오프로 재시도하세요.
응답 `code`는 `UPSTREAM_UNAVAILABLE`입니다.

Aggregation Tips

1) 집계 설계의 기본 원칙
- 집계용 리포트를 만들 때는 `tickets`를 원천 이벤트, `balances`를 잔액 시계열로 나눠 보는 편이 가장 안전합니다. 거래 합계와 분류는 `tickets`, 시작/종료 잔액은 `balances` 기준으로 해석하세요.
- 기간 버킷은 보통 `daily`, `monthly`, `quarterly`, `total` 중 하나로 먼저 정하고, 그다음 `category`, `tag`, `user`, `contact`, `asset` 같은 집계 축을 선택해 표를 구성합니다.
- 실무에서는 보통 `기간 -> 자산/티켓 타입 -> isIncluded=true -> 중복 거래 제외 -> 태그/계정과목/거래처` 순서로 필터를 적용한 뒤 집계를 시작하면 결과가 안정적입니다.
- 금액은 `amount` 하나만 보지 말고 `transactionType`, `inAmount`, `outAmount`를 함께 해석하세요. 특히 지출표와 입출금표를 같은 규칙으로 합치려면 방향값을 분리해 두는 편이 좋습니다.
{
  "period": "monthly",
  "filters": {
    "ticketTypes": ["EXPENSE_TICKET", "BANK_TRANSACTION_TICKET"],
    "startDate": "2026-02-01",
    "endDate": "2026-02-28",
    "isIncluded": true
  },
  "groupBy": "expenseCategoryId"
}
2) 예시: 월별 계정과목별 지출내역
- 월별 지출표는 보통 `tickets`와 `categories`를 같이 씁니다. 먼저 카드/계좌/수기 등 보고 싶은 티켓 타입을 모으고, `transactionType=OUT`, `isIncluded=true`인 건만 남깁니다.
- 그다음 `transactAt -> YYYY-MM`으로 월 버킷을 만들고, `expenseCategory.id` 기준으로 묶습니다. 표시명과 고정비/변동비 구분이 필요하면 `categories.id`로 조인해 `name`, `costType`을 붙입니다.
- 비용 리포트는 이렇게 만든 계정과목별 월 금액을 다시 합쳐 `총 소비`, `고정비`, `변동비`, `기타` 같은 상위 지표를 만듭니다. 즉, `월-계정과목` 1차 집계 테이블을 먼저 만들고 그 위에 상위 지표를 2차 계산하는 구조입니다.
- 손익계산서처럼 더 높은 단계의 리포트가 필요하면 `categories.subInfo`를 이용해 `매출`, `매출원가`, `판매관리비`, `영업외수익`, `영업외비용`으로 다시 묶어 `매출총이익`, `영업이익`, `세전이익`을 계산하면 됩니다.
[
  {
    "period": "2026-02",
    "categoryId": 101,
    "categoryName": "식비",
    "costType": "VARIABLE",
    "outAmount": -158000,
    "displayAmount": 158000,
    "count": 9
  },
  {
    "period": "2026-02",
    "categoryId": 205,
    "categoryName": "급여",
    "costType": "FIXED",
    "outAmount": -4200000,
    "displayAmount": 4200000,
    "count": 4
  }
]
3) 예시: 자금일보 구성
- 자금일보는 `잔액 요약`과 `거래 상세`를 분리해서 만드는 편이 안정적입니다. 상단 잔액 표는 `balances`로 전일 잔액과 현재 잔액을 잡고, 같은 기간 `tickets`를 합산해 입금/출금 합계를 붙입니다.
- 화면 구성은 보통 상단에 자산별 `이전잔액 + 입출금 합계 + 현재잔액`을 두고, 하단에는 `계좌 입출금`, `카드 사용`, `세금계산서`, `현금영수증`, `수기관리` 같은 상세 테이블을 분리하는 방식이 읽기 쉽습니다.
- 체크카드 승인과 계좌 출금처럼 중복 가능성이 있는 건은 연결된 계좌 내역을 제외하는 규칙을 함께 두는 편이 좋습니다. 이렇게 해야 대표 거래만 남고 자금 흐름이 과대 집계되지 않습니다.
- 핵심은 `잔액은 balances`, `흐름과 분류는 tickets`로 역할을 나누는 것입니다. 티켓만으로 순유입을 계산할 수는 있지만, 그 값이 자금일보의 기초/기말 잔액과 항상 같지는 않습니다.
{
  "date": "2026-03-08",
  "balances": [
    {
      "assetId": 11,
      "assetName": "국민은행",
      "openingBalance": 12500000,
      "inAmount": 3200000,
      "outAmount": -1850000,
      "closingBalance": 13850000
    }
  ],
  "sections": {
    "bankTransactions": [{ "ticketId": 1, "content": "거래처 입금", "amount": 3200000 }],
    "cardExpenses": [{ "ticketId": 2, "content": "점심 식대", "amount": 12000 }],
    "taxInvoices": [],
    "cashReceipts": [],
    "manualTransactions": []
  }
}
4) 같은 방식으로 확장할 수 있는 집계
- 태그별 분석은 티켓의 `ticketTags[].id` 기준으로 같은 집계 패턴을 반복하면 됩니다. 한 티켓에 태그가 여러 개 붙을 수 있어, 태그별 합계를 더하면 전체 합계보다 커질 수 있습니다(티켓을 태그마다 한 번씩 셉니다). 레거시 `tagId`·`tagDetailId`는 2026-10-01 이후 갱신되지 않습니다.
- 거래처별 분석은 `contactId`, 담당자별 분석은 `user_ids`를 기준으로 묶습니다. 여러 사용자가 함께 사용한 건은 `amount / user_count`처럼 균등 배분 규칙을 미리 정해 두면 인원별 집계가 흔들리지 않습니다.
- 외부 대시보드는 `원천 티켓 보관 -> 1차 집계 테이블 생성 -> 리포트별 2차 계산` 흐름으로 설계하면 월별 지출표, 자금일보, 태그 리포트 같은 화면을 일관된 규칙으로 확장하기 쉽습니다.