granter API
그랜터 Public Docs API는 자산 연동 현황, 기관 연동 상태, 거래·증빙 데이터, 분류 기준, 잔액 흐름을 외부 시스템과 AI가 함께 이해할 수 있도록 구조화해 제공하는 연동 문서입니다. 발급된 API key와 Basic 인증만으로 권한 범위의 데이터를 안전하게 조회하고, 로그인 기반 기관 연동·재연동을 요청하고, 티켓 데이터 갱신을 요청하고, 티켓의 계정과목·태그·설명·사용 직원과 계좌 거래처를 수정하고, 티켓 간 연결내역을 조회하거나 연결을 생성·해제하고, 수기 카드·계좌와 해당 수기 거래, 수기 세금계산서·현금영수증을 입력하고, 인원 초대, 거래처·전자결재·급여 내역 생성과 세금계산서·현금영수증의 발행, 취소발행, 수정발행 같은 작업까지 자동화할 수 있습니다. 터미널 연동이 필요하면 공식 granter CLI로 같은 API key를 설정해 바로 호출할 수 있습니다.
문서 이해를 위한 빠른 가이드
API 활용 팁
[
{ "startDate": "2026-01-01", "endDate": "2026-01-31" },
{ "startDate": "2026-02-01", "endDate": "2026-02-28" },
{ "startDate": "2026-03-01", "endDate": "2026-03-31" }
]granter CLI · Claude Code MCP 연동
그랜터 데이터 구조와 활용 관점
{
"id": 101,
"assetType": "CARD",
"workspaceId": 123,
"organizationName": "신한카드",
"isActive": true
}{
"id": 98765,
"ticketType": "EXPENSE_TICKET",
"workspaceId": 123,
"amount": 12000,
"transactionType": "OUT",
"transactAt": "2026-02-23T10:15:00.000Z",
"content": "점심 식대",
"isIncluded": true
}API 변경 로그
현재 계약 리비전은 2026-08-14.1입니다. 인증 API 응답의 Granter-API-Revision, Granter-API-Changes, Link 헤더에서도 확인할 수 있습니다.
하위호환성 정책: Breaking change 허용
그랜터 Public API는 현재 별도 버전 경로를 운영하지 않으며, 필요한 API 계약 변경에는 breaking change를 허용합니다.
사용자에게 영향을 주는 계약 변경은 이 changelog와 응답의 Granter-API-Revision·Granter-API-Changes 헤더에 기록합니다. 연동 클라이언트는 리비전 변경과 breaking 항목의 migration 안내를 확인해 반영해야 합니다.
2026-08-14.1
2026-08-14bank-ticket-contact-assignment-added계좌 티켓의 거래처를 지정하거나 재지정할 수 있도록 bulk-update-individual에 CONTACT와 contactId를 추가합니다.
적용일 2026-08-14 · 대상 tickets-update
settled-without-reference-added세금계산서 티켓 응답에 실제 티켓 연결 없이 완료 처리된 상태를 나타내는 settledWithoutReference를 추가합니다.
적용일 2026-08-14 · 대상 tickets
2026-08-05.1
2026-08-05ticket-date-window-expandedtickets 조회가 31일 초과 범위를 월 단위로 안전하게 분할·병합하며, 한 요청에서 최대 366일까지 지원합니다.
적용일 2026-08-05 · 대상 tickets
ticket-references-bulk-create-added한 요청에서 최대 25개의 티켓 연결을 생성하고 항목별 성공·실패 결과를 반환하는 bulk API를 추가합니다.
적용일 2026-08-05 · 대상 ticket-references-create-bulk
tax-invoice-complete-without-reference-added미연결 세금계산서를 일괄 완료 처리하거나 완료 전 상태로 되돌리는 API를 추가합니다. 연결된 티켓은 안전하게 거부합니다.
적용일 2026-08-05 · 대상 tickets-complete-without-reference, tickets-uncomplete-without-reference
validation-error-details-preservedbackend가 제공한 details, errors, fieldErrors 검증 상세를 Public API 오류 응답의 details로 보존합니다.
적용일 2026-08-05 · 대상 모든 Public API
2026-07-29.1
2026-07-29contract-change-notices-added모든 인증 Public API 응답에 현재 계약 리비전, 관련 변경 ID, 변경 로그 링크를 응답 헤더로 제공합니다.
적용일 2026-07-29 · 대상 모든 Public API
rate-limit-status-correctedPublic API 앞단 또는 인증 확인 단계의 속도 제한을 401이 아닌 429로 분류하고 Retry-After를 제공합니다.
적용일 2026-07-29 · 대상 모든 Public API
Migration: 401은 API key 오류로만 처리하고, 429는 Retry-After 이후 동일 요청을 재시도하도록 클라이언트 분기를 수정하세요.
auth-outage-status-correctedAPI key 인증 서버의 일시적 장애를 잘못된 key와 구분하여 401이 아닌 503으로 응답합니다.
적용일 2026-07-29 · 대상 모든 Public API
Migration: 401은 API key를 점검하고, 503은 일시적 장애로 분류하여 지수 백오프로 재시도하세요.
nickname-canonicalized응답에 함께 존재하던 nickName과 nickname을 표준 필드 nickname 하나로 통일합니다.
적용일 2026-07-29 · 대상 모든 Public API
Migration: 응답 모델과 필드 접근을 nickname으로 통일하세요.
ticket-connection-summary-added티켓 응답에 isConnected와 connectionCount 연결 요약을 제공합니다.
적용일 2026-07-29 · 대상 tickets
manual-transactions-create-added거래처 ID를 포함한 수기관리 전표 다건 생성 API와 안정적인 처리 확인 응답을 추가합니다. upstream이 생성 티켓을 반환하지 않으면 ticketIds와 tickets는 빈 배열입니다.
적용일 2026-07-29 · 대상 manual-transactions-create
Migration: 생성 성공 여부는 ok와 requestedCount로 확인하고, ticketIds가 항상 채워진다고 가정하지 마세요.
manual-transactions-delete-added수기관리 티켓 ID를 내부 수기거래 ID로 안전하게 변환하고 연결 상태를 확인한 뒤 삭제하는 API를 추가합니다.
적용일 2026-07-29 · 대상 manual-transactions-delete
POST /api/public-docs/tickets
카드, 계좌, 세금계산서, 현금영수증 등 실제 거래·증빙 데이터를 조회합니다.
Request Fields
tickets 기간 조회는 한 요청에서 최대 366일까지 지원합니다. 31일 초과 범위는 서버가 달력월 단위로 나눠 조회하고 티켓 타입과 ID 기준으로 중복 제거해 합칩니다. 조회 기간과 관계없이 결과는 거래일시 내림차순으로 정렬합니다.
`MERCHANT_CARD_TRANSACTION_TICKET`은 포스기 카드 승인·매출전표 단위 조회용입니다. 승인번호, 카드사, 거래금액 같은 원거래 정보를 확인할 때 사용하세요.
`MERCHANT_CARD_SETTLEMENT_DETAIL_TICKET`은 포스기/CREFIA 정산 항목 단위 조회용입니다. `POS-매입금액`, `POS-가맹점수수료`, `POS-포인트수수료`, `POS-기타수수료`처럼 수수료를 포함한 정산 구성 항목을 확인할 때 사용하세요.
조회 대상 티켓 타입. 아래 TicketType 상세 목록을 참고하세요.
▶TicketType 상세(기본 접힘)
조회 시작일
조회 종료일
거래처 ID
거래처 검색 옵션
계정과목 ID
계정과목 검색 옵션
2차 태그 ID
2차 태그 검색 옵션
1차 태그 ID
자산 ID
Response Fields
▶[]TicketrequiredexpandableBE `/tickets` 원본 응답 배열의 각 원소
티켓 ID
워크스페이스 ID
거래/증빙 내용
거래 금액
입출금 방향
거래 일시
수정 거래 일시
설명
▶expenseCategoryExpenseCategoryoptionalexpandable계정과목
계정과목 ID
계정과목명
부가 정보
설명
코드
카테고리 타입
숨김 여부
비용 유형
즐겨찾기 여부
워크스페이스 ID
기본 과세 유형
이상치 상태
티켓 상태
1차 태그명
1차 태그 ID
거래처명
거래처 ID
2차 태그명
2차 태그 ID
포함 여부
▶usersUserResponse[]requiredexpandable연결 유저 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶messagesMessage[]requiredexpandable메시지 목록
메시지 ID
티켓 ID
▶userUserResponserequiredexpandable작성자
유저 ID
유저 이름
유저 이메일
삭제 여부
작성자 ID
작성자 이름
메시지 내용
메시지 타입
생성 시각
삭제 시각
메시지 수
▶attachmentsAttachment[]requiredexpandable첨부파일 목록
첨부파일 ID
티켓 ID
파일명
업로드 URL
MIME 타입
첨부파일 수
조회 대상 티켓 타입
▶cardUsageCardUsageoptionalexpandable카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶purchaseUsageCardUsageoptionalexpandable매입 카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶bankTransactionBankTransactionoptionalexpandable계좌 거래 상세
은행거래 ID
워크스페이스 ID
거래 방향
설명
거래 후 잔액
원본 거래 후 잔액
거래 금액
원본 거래 금액
거래 일시
▶bankAccountTicketAssetrequiredexpandable계좌 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
거래 상대방
설명 분류
내용
지점
▶taxInvoiceTaxInvoiceoptionalexpandable세금계산서 상세
세금계산서 ID
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶issuerobjectrequiredexpandable발행자
이메일
유저 ID
삭제 여부
이름
▶trusteeTaxInvoiceUserrequiredexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
영수/청구 구분
대표 품목
비고
상태
세금계산서 종류
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
수정사유
원본 승인번호
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
결제 상태
다른 티켓과 연결되어 있는지 여부
연결된 티켓 수
세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부
생성 시각
부모 티켓 ID
분할 티켓 여부
매입 상태
소프트웨어 지출 여부
▶merchantCardTransactionMerchantCardTransactionoptionalexpandable가맹점 카드 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
할부개월
거래구분
거래일시
금액
▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable가맹점 매입 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
거래일시
매입일
매입 금액
총 수수료
가맹점 수수료
포인트 수수료
기타 수수료
지급 금액
지급 예정일
▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable포스기/CREFIA 정산 상세
정산 상세 ID
정산 ID
포스기/CREFIA 자산 ID
항목명
금액
입출금 방향
▶cashReceiptCashReceiptoptionalexpandable현금영수증 상세
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
▶manualTransactionManualTransactionoptionalexpandable수기거래 상세
수기거래 ID
통화 코드
수기거래 타입
▶tradeItemsManualTransactionTradeItem[]requiredexpandable거래 품목
품목명
수량
세액
단가
매입 취소 사용내역 보유 여부
▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable이커머스 정산 상세
▶assetobjectrequiredexpandable이커머스 스토어 자산
자산 ID
조직 (COUPANG, NAVER 등)
별칭
정산 ID
정산일
정산 비율
항목명
금액
정산 상세 타입
입출금 방향
추천 티켓 여부
과세 유형
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"
}'[
{
"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,
"messages": [
{
"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,
"attachments": [],
"attachmentCount": 0,
"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
},
"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/bulk-update-individual
티켓의 계정과목, 1차/2차 태그, 설명, 사용 직원과 계좌 티켓의 거래처를 단건 또는 묶음으로 수정합니다.
Request Fields
`ticketType`이 같은 티켓만 한 요청에 묶어 보내세요. 단건 수정도 `items` 배열에 1개만 넣으면 됩니다.
계정과목/태그 ID는 먼저 `categories`, `tags`, `tag-details` API로 조회한 뒤 사용하세요.
사용 직원 ID는 먼저 `people` 또는 `user-profiles` API로 조회하세요.
계좌 티켓의 거래처를 지정하거나 재지정하려면 `ticketType=BANK_TRANSACTION_TICKET`, `updateFields=["CONTACT"]`, `contactId`를 전달하세요. 거래처 ID는 먼저 `contacts` API로 조회하세요.
`updateFields`에는 현재 `EXPENSE_CATEGORY`, `TAG`, `TAG_DETAIL`, `DESCRIPTION`, `USERS`, `CONTACT`를 사용할 수 있습니다. `CONTACT`는 계좌 티켓에만 지원합니다.
`DESCRIPTION`는 기존 설명을 새 문자열로 전체 교체합니다.
`USERS`는 기존 사용 직원 목록을 `userIds` 전체로 교체합니다. 모든 사용 직원 배정을 해제하려면 `userIds`에 `null`을 전달하세요.
수정 대상 티켓 타입
▶허용 값
수정할 티켓 목록
수정 대상 티켓 ID
이번 요청에서 적용할 변경 필드 목록
▶허용 값
`updateFields`에 `EXPENSE_CATEGORY`가 포함되면 필수인 계정과목 ID
`updateFields`에 `TAG`가 포함되면 필수인 1차 태그 ID
`updateFields`에 `TAG_DETAIL`이 포함되면 필수인 2차 태그 ID
`updateFields`에 `DESCRIPTION`이 포함되면 필수인 새 설명
`updateFields`에 `USERS`가 포함되면 필수인 사용 직원 ID 목록. 기존 목록을 전체 교체하며 `null`이면 모두 해제
`BANK_TRANSACTION_TICKET`의 `updateFields`에 `CONTACT`가 포함되면 필수인 거래처 ID
Response Fields
수정 요청 처리 성공 여부
이번 요청에 적용된 티켓 타입
요청한 티켓 수정 건수
이번 요청에서 적용한 변경 필드 목록
수정 요청에 포함된 티켓 ID 목록
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"]
}
]
}'{
"ok": true,
"ticketType": "BANK_TRANSACTION_TICKET",
"requestedCount": 1,
"updatedFields": ["CONTACT"],
"ticketIds": [18222986]
}POST /api/public-docs/tickets/refresh
워크스페이스에 연결된 카드, 계좌, 홈택스 등 거래·증빙 데이터 갱신을 요청합니다. 요청은 비동기로 접수되며 새 데이터가 즉시 조회되지는 않습니다.
Request Fields
요청 body를 생략하거나 `{}`를 보내면 API key가 연결된 워크스페이스의 지원 자산 전체를 갱신합니다.
특정 자산 종류만 갱신하려면 `assetTypes` 배열을 전달하세요. `requestGroupId`는 서버가 생성하므로 요청에 넣지 않습니다.
응답은 갱신 작업 접수 ACK입니다. 새 데이터 반영까지 약 30분 정도 걸릴 수 있으므로 이후 `tickets`, `balances`, `assets` API를 다시 조회하세요.
중복 수집과 금융기관 중복 로그인을 피하려면 자동화 호출 간격을 30분 이상으로 두세요. 너무 자주 호출하면 백엔드에서 400 또는 429가 반환될 수 있습니다.
선택 갱신 대상. 생략/빈 배열이면 지원 자산 전체 갱신
Response Fields
갱신 요청 접수 여부
백엔드 갱신 작업 추적용 요청 그룹 ID
갱신 요청 접수 상태
새 데이터 반영까지 예상되는 대기 시간(분)
갱신 요청 처리 안내 메시지
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"]
}'{
"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`으로 다시 조회하세요.
연결이 없는 티켓은 빈 배열(`[]`)을 반환합니다.
연결내역을 조회할 기준 티켓 또는 전자결재 문서 ID
기준 티켓 타입. `Total`은 사용할 수 없습니다.
▶주요 허용 값
Response Fields
▶[]TicketReferencerequiredexpandable기준 티켓에 직접 연결된 상대 티켓 목록
연결 관계 자체의 ID
연결된 상대 티켓 ID
연결된 상대 티켓의 거래/증빙 내용
연결된 상대 티켓 금액
연결된 상대 티켓 거래 일시
연결된 상대 티켓 타입
연결 목적
연결 타입
연결된 상대 티켓의 입출금 방향
▶assetTicketReferenceAssetoptionalexpandable연결된 상대 티켓의 자산 정보
연결된 상대 티켓의 자산 기관명
연결된 상대 티켓의 자산명
연결된 상대 티켓의 자산 별칭
연결된 상대 티켓의 자산 번호
연결된 상대 티켓의 거래처명
curl -X GET https://app.granter.biz/api/public-docs/ticket-references?referenceableId=90101&referenceableType=TAX_INVOICE_TICKET \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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입니다. 같은 연결을 재시도할 수 있으면 클라이언트가 직접 고정 값을 넣으세요.
연결 대상 티켓의 참조 정보도 함께 갱신할지 여부. 기본 true
연결할 두 티켓
티켓 ID
티켓 타입. `Total`은 사용할 수 없습니다.
▶주요 허용 값
Response Fields
티켓 연결 요청 처리 성공 여부
연결 대상 티켓의 거래처/상태 등을 함께 갱신하도록 요청했는지 여부
연결 요청에 포함된 두 티켓
연결 요청에 포함된 티켓 ID 목록
연결 요청에 포함된 티켓 타입 목록
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"
}
]
}'{
"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에는 새 키를 사용하세요.
생성할 티켓 연결 목록(1~25개)
연결 대상 티켓의 참조 정보도 함께 갱신할지 여부. 기본 true
연결할 서로 다른 두 티켓
티켓 ID
티켓 타입. `Total`은 사용할 수 없습니다.
Response Fields
모든 티켓 연결 생성 성공 여부
요청한 티켓 연결 수
성공한 티켓 연결 수
실패한 티켓 연결 수
▶resultsTicketReferenceBulkCreateResult[]requiredexpandable요청 순서와 동일한 항목별 처리 결과
요청 references 배열의 0부터 시작하는 항목 위치
해당 티켓 연결 생성 성공 여부
연결 대상 티켓의 참조 정보도 함께 갱신하도록 요청했는지 여부
해당 항목에서 연결을 요청한 두 티켓
실패한 항목의 upstream HTTP 상태
실패한 항목의 오류 메시지
실패한 항목의 오류 코드
backend가 제공한 구조화 오류 상세
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" }
]
}
]
}'{
"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입니다. 같은 해제 요청을 재시도할 수 있으면 클라이언트가 직접 고정 값을 넣으세요.
해제할 연결 관계 ID 목록(1~100개). `ticket-references` 조회 응답의 `ticketReferenceId` 값
Response Fields
티켓 연결 해제 요청 처리 성공 여부
해제된 연결 관계 ID 목록
해제된 연결 관계 수
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]
}'{
"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입니다. 네트워크 오류로 같은 요청을 재시도할 수 있으면 고정 값을 직접 넣으세요.
현재 지원하는 대상 티켓 타입
연결없이 완료 처리할 미연결 세금계산서 티켓 ID 목록(1~25개)
Response Fields
모든 상태변경 성공 여부
처리 대상 티켓 타입
적용한 결제 상태
요청한 세금계산서 티켓 수
성공 또는 기존 상태 유지로 처리된 수
이미 목표 상태여서 변경하지 않은 수
상태변경에 실패한 수
▶resultsTicketPaymentStatusBatchResult[]requiredexpandable요청 순서와 동일한 티켓별 처리 결과
처리 대상 세금계산서 티켓 ID
해당 티켓의 상태변경 성공 여부
이미 목표 상태여서 변경하지 않았는지 여부
실패한 항목의 upstream HTTP 상태
실패한 항목의 오류 메시지
실패한 항목의 오류 코드
backend가 제공한 구조화 오류 상세
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]
}'{
"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입니다. 네트워크 오류로 같은 요청을 재시도할 수 있으면 고정 값을 직접 넣으세요.
현재 지원하는 대상 티켓 타입
연결없이 완료 상태를 되돌릴 미연결 세금계산서 티켓 ID 목록(1~25개)
Response Fields
모든 상태변경 성공 여부
처리 대상 티켓 타입
적용한 결제 상태
요청한 세금계산서 티켓 수
성공 또는 기존 상태 유지로 처리된 수
이미 목표 상태여서 변경하지 않은 수
상태변경에 실패한 수
▶resultsTicketPaymentStatusBatchResult[]requiredexpandable요청 순서와 동일한 티켓별 처리 결과
처리 대상 세금계산서 티켓 ID
해당 티켓의 상태변경 성공 여부
이미 목표 상태여서 변경하지 않았는지 여부
실패한 항목의 upstream HTTP 상태
실패한 항목의 오류 메시지
실패한 항목의 오류 코드
backend가 제공한 구조화 오류 상세
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]
}'{
"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 연동 대상에서 제외하고, 앱 안의 기관 연동 화면에서 처리하세요.
기관 enum. 예: KUKMIN_BANK, KB, HOME_TAX
개인/기업 구분
BK, CD, ST, NT 등 기관 업무 구분
현재 연동된 로그인 방식
true면 연동된 기관만, false면 미연동 기관만 조회
Response Fields
▶[]Organizationrequiredexpandable기관 연동 상태 배열
기관 enum
기관명
업무 구분
업무 구분명
개인/기업 구분
연동 여부
연동 만료 여부
연동 시각
기관 홈페이지 URL
현재 연동 방식
지원 연동 방식 목록
▶supportScrapingDurationSupportScrapableDuration[]optionalexpandable지원 조회 기간
지원 clientType
지원 조회 기간
curl -X GET https://app.granter.biz/api/public-docs/organizations \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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 형식을 사용하세요.
연동할 기관 enum. organizations 대신 단건으로 전달할 때 사용
연동할 기관 enum 배열. 예: [KUKMIN_BANK, KB]
개인/기업 구분. 기본 CORPORATE
인증서 파일 원문 또는 base64 문자열
개인키 파일 원문 또는 base64 문자열
인증서 fingerprint
인증서 비밀번호
인증서 소유자/만료일/발급기관 정보
HOME_TAX 신규 연동 시 필요한 사업자등록번호
선택 추적 ID. 생략 시 서버에서 UUID 생성
Response Fields
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": "금융결제원"
}
}'[
{
"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를 사용자에게 노출하고, 기관 사이트에서 인증서 등록 상태를 확인하도록 안내하세요.
재연동할 기관 enum. organizations 대신 단건으로 전달할 때 사용
재연동할 기관 enum 배열
개인/기업 구분. 기본 CORPORATE
인증서 파일 원문 또는 base64 문자열
개인키 파일 원문 또는 base64 문자열
인증서 fingerprint
인증서 비밀번호
인증서 소유자/만료일/발급기관 정보
HOME_TAX 재연동에서는 보통 생략
선택 추적 ID. 생략 시 서버에서 UUID 생성
Response Fields
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"
}'[
{
"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 형식을 사용하세요.
연동할 기관 enum
개인/기업 구분. 기본 CORPORATE
기관 로그인 ID. loginId 별칭 가능
기관 로그인 비밀번호. loginPassword 별칭 가능
필요 기관용 생년월일. 예: 19900101
선택 추적 ID. 생략 시 서버에서 UUID 생성
Response Fields
▶[]ConnectResultrequiredexpandable기관별 연동/재연동 처리 결과
기관 enum
연동 성공 여부
처리 메시지
처리 코드
개인/기업 구분
실패 사유
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"
}'[
{
"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 형식을 사용하세요.
성공 후 최신 거래 반영까지 기관별 스크래핑 시간이 추가로 걸릴 수 있습니다.
재연동할 기관 enum
개인/기업 구분. 기본 CORPORATE
기관 로그인 ID. loginId 별칭 가능
기관 로그인 비밀번호. loginPassword 별칭 가능
필요 기관용 생년월일. 예: 19900101
선택 추적 ID. 생략 시 서버에서 UUID 생성
Response Fields
▶[]ConnectResultrequiredexpandable기관별 연동/재연동 처리 결과
기관 enum
연동 성공 여부
처리 메시지
처리 코드
개인/기업 구분
실패 사유
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"
}'[
{
"organization": "KUKMIN_BANK",
"success": true,
"message": "기관 재연동이 완료되었습니다.",
"code": "SUCCESS",
"clientType": "CORPORATE"
}
]POST /api/public-docs/assets
거래가 수집되는 자산과 연동 대상을 조회합니다.
Request Fields
HOME_TAX_ACCOUNT 자산 응답은 홈택스 연결 상태와 사업자 기본 정보를 보여주지만, 발행용 인증서(`issueCertificate`)는 포함하지 않습니다.
CARD, BANK_ACCOUNT, HOME_TAX_ACCOUNT, SOCIAL_INSURANCE_ACCOUNT, CUSTOM, MERCHANT_GROUP, SECURITIES_ACCOUNT, ECOMMERCE, PG, MANUAL
Response Fields
▶[]AssetrequiredexpandableBE `/assets` 원본 응답 배열의 각 원소
자산 ID
자산 타입
자산 번호
워크스페이스 ID
자산명
별칭
금융기관 코드
금융기관명
업종
업종명
숨김 여부
활성 여부
휴면 여부
휴면 가능 여부
무료 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
자동 할당 여부
▶cardAssetCardInfooptionalexpandable카드 자산 정보
만료 연도
만료 월
한도 금액
사용 금액
잔여 한도
이전 카드 번호
▶bankAccountAssetBankAccountInfooptionalexpandable계좌 자산 정보
계좌 잔액
원본 계좌 잔액
통화 코드
조회 시작일
조회 종료일
계좌 번호
계좌명
별칭
계좌 유형
거래내역 보유 여부
▶homeTaxAccountAssetHomeTaxAccountInfooptionalexpandable홈택스 자산 정보
홈택스 자산 카테고리
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
연락처
업태
종목
▶securitiesAccountAssetSecuritiesAccountInfooptionalexpandable증권 자산 정보
총액(원화)
예수금(원화)
외화예수금(원화)
▶foreignDepositsForeignDeposit[]requiredexpandable외화예수금 보유 목록
외화예수금 ID
통화 코드
금액
생성 시각
보유 주식 평가액 합계(원화)
계좌번호
▶productsProduct[]requiredexpandable보유 투자상품
상품 ID
상품 유형 코드
상품 유형명
상품명
상품 코드
수량
통화 코드
현재 금액(원화)
현재 금액
평가 금액(원화)
평가 금액
평가 손익(원화)
평가 손익
수익률
생성 시각
▶customAssetAssetCustomInfooptionalexpandable커스텀 자산 정보
커스텀 자산 유형
자산 번호
금액
▶ecommerceAccountAssetEcommerceAccountInfooptionalexpandable이커머스 스토어 계정 정보
스토어 사용자명
OTP 인증 여부
생성 시각
수정 시각
비밀번호 보유 여부
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"
}'[
{
"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를 우선 사용하거나, 직접 집계한다면 대출 계좌를 별도 부채/대출 합계로 분리하세요.
조회 시작일 (전달 시 endDate와 함께 전달 필수)
조회 종료일 (전달 시 startDate와 함께 전달 필수)
Response Fields
▶[]AssetBalancerequiredexpandableBE `/bank-accounts/daily-balances` 응답을 계좌 기준으로 가공한 배열의 각 원소
▶bankAccountTicketAssetrequiredexpandable계좌 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
▶balancesBalanceByDate[]requiredexpandable기간별 잔액 목록
잔액 기준일
계좌 잔액 (원화)
원본 통화 기준 잔액
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"
}'[
{
"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`에 별도로 표시됩니다. 대출 실행금이 입금 계좌에 들어온 경우에도 대출 잔액을 일반 잔액에 더하지 마세요.
조회 시작일
조회 종료일
외화 잔액을 현재 환율 기준으로 통일할지 여부. 기본값은 false입니다.
Response Fields
요청 시작일
요청 종료일
실제 계산 종료일. 미래 종료일은 오늘로 보정됩니다.
이전 잔액 기준일
▶assetsDailyFinancialReportAssetBalance[]requiredexpandable자산별 후처리 잔액 목록. 대출 계좌는 isLoan=true로 표시됩니다.
자산 ID
자산 유형
자금일보 표시 자산명
마스킹된 계좌번호
기관명
통화 코드. 대출 집계 행은 currencyTotals에서 LOAN으로 분리됩니다.
계좌 유형. BANK_ACCOUNT의 LOAN은 대출 계좌입니다.
대출 계좌 여부
이전 기준일 표시 잔액. 외화는 이전 기준일 환율로 원화 환산됩니다.
이전 기준일 원통화 잔액
조회 종료 기준일 표시 잔액. 외화는 종료 기준일 환율로 원화 환산됩니다.
조회 종료 기준일 원통화 잔액
표시 잔액 기준 이전 대비 증감
원통화 기준 이전 대비 증감
조회 기간 입금 합계
조회 기간 출금 합계. 출금은 음수로 표시됩니다.
▶balancesBalanceByDate[]requiredexpandable조회 기간을 빠짐없이 채운 날짜별 잔액 목록. 원천에 없는 날짜는 0으로 채웁니다.
잔액 기준일
계좌 잔액 (원화)
원본 통화 기준 잔액
▶totalobjectrequiredexpandable자금일보 합계. 일반 잔액 합계와 대출 잔액을 분리합니다.
대출 제외 이전 잔액 합계
대출 제외 현재 잔액 합계
대출 제외 잔액 증감
대출 제외 입금 합계
대출 제외 출금 합계
대출 계좌 현재 잔액 합계. 일반 잔액에 더하지 마세요.
currentBalance - loanBalance
▶currencyTotalsobject[]requiredexpandable통화별 합계. 대출 계좌는 LOAN 그룹으로 분리됩니다.
통화 코드 또는 LOAN
이전 잔액 합계
현재 잔액 합계
잔액 증감 합계
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
}'{
"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`는 선택값이며, 미입력 시 백엔드 기본 기준일을 사용합니다.
환율 기준일
Response Fields
▶[]ExchangeRaterequiredexpandable통화별 환율 배열
통화 코드
통화 이름
기준 외화 금액
원화 금액
기준 날짜
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"
}'[
{
"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/tag-details
1차 태그 아래의 세부 분류 기준 데이터를 조회합니다.
Request Fields
요청 body는 사용하지 않습니다.
Response Fields
▶[]TagrequiredexpandableBE `/tag-details` 원본 응답 배열의 각 원소
1차/2차 태그 ID
1차/2차 태그명
설명
생성 시각
수정 시각
태그 분류 타입 (Tag=1차 태그, TagDetail=2차 태그)
워크스페이스 ID
상위 1차 태그 ID (2차 태그에 해당)
코드
지출 집계 금액
입금 집계 금액
숨김 여부
curl -X GET https://app.granter.biz/api/public-docs/tag-details \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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차 태그 연결은 선택값입니다.
Request Fields
2차 태그 생성만 지원합니다. 상세 태그 삭제 API는 아직 공개하지 않습니다.
`tagId`를 전달하면 해당 1차 태그 아래에 연결됩니다. 생략하면 상위 1차 태그 없이 생성됩니다.
요청 재시도 중 중복 생성을 줄이려면 `Idempotency-Key` 헤더를 고정값으로 전달하세요.
상위 1차 태그 ID
2차 태그 이름
2차 태그 설명
Response Fields
1차/2차 태그 ID
1차/2차 태그명
설명
생성 시각
수정 시각
태그 분류 타입 (Tag=1차 태그, TagDetail=2차 태그)
워크스페이스 ID
상위 1차 태그 ID (2차 태그에 해당)
코드
지출 집계 금액
입금 집계 금액
숨김 여부
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의 마케팅 비용 세부 태그"
}'{
"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차 태그의 이름, 설명, 상위 태그 연결을 수정합니다.
Request Fields
2차 태그 수정만 지원합니다. 상세 태그 삭제 API는 아직 공개하지 않습니다.
`id`는 `tag-details` 조회 또는 `tag-details-create` 응답에서 받은 2차 태그 ID입니다.
`tagId`는 선택값입니다. 상위 1차 태그 연결을 함께 지정할 때만 전달하세요.
수정할 2차 태그 ID
상위 1차 태그 ID
수정할 2차 태그 이름
수정할 2차 태그 설명
Response Fields
수정 요청 처리 성공 여부
수정한 2차 태그 ID
이번 요청에서 수정한 필드 목록
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 광고·콘텐츠 집행 비용"
}'{
"ok": true,
"tagDetailId": 6,
"updatedFields": ["tagId", "name", "description"]
}GET /api/public-docs/categories
회계 처리와 분석에 사용하는 계정과목 기준 데이터를 조회합니다.
Request Fields
요청 body는 사용하지 않습니다.
Response Fields
▶[]ExpenseCategoryrequiredexpandableBE `/expense-categories` 원본 응답 배열의 각 원소
계정과목 ID
계정과목명
부가 정보
설명
코드
카테고리 타입
숨김 여부
비용 유형
즐겨찾기 여부
워크스페이스 ID
기본 과세 유형
curl -X GET https://app.granter.biz/api/public-docs/categories \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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` 중 하나입니다.
계정과목 이름
계정과목 설명
상위 분류. 예: 판매비와관리비, 영업외비용
비용 유형
계정과목 코드 번호
아이콘 이미지 URL
기본 과세 유형
Response Fields
계정과목 ID
계정과목명
부가 정보
설명
코드
카테고리 타입
숨김 여부
비용 유형
즐겨찾기 여부
워크스페이스 ID
기본 과세 유형
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"
}'{
"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`을 모두 전달해야 합니다.
수정할 계정과목 ID
수정할 계정과목 이름
수정할 계정과목 설명
수정할 상위 분류
수정할 비용 유형
계정과목 코드 번호
아이콘 이미지 URL
기본 과세 유형
Response Fields
수정 요청 처리 성공 여부
수정한 계정과목 ID
이번 요청에서 수정한 필드 목록
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"
}'{
"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
워크스페이스 ID
워크스페이스/회사 이름
워크스페이스 아이콘 이미지 URL
사업자등록번호
가입 시 선택한 사용 인원 규모
회사 유형
사업 설명
산업 분류 정보
워크스페이스 생성 시각
회계사 워크스페이스 여부
curl -X GET https://app.granter.biz/api/public-docs/workspace-profile \ -H "Authorization: Basic <BASE64(API_KEY:)>"
{
"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워크스페이스 구성원 프로필 배열
유저 ID
이름
워크스페이스 표시 이름
이메일
전화번호
사용자 프로필 이미지 URL
워크스페이스 ID
워크스페이스명
팀 ID
팀명
▶roleWorkspaceRole | nulloptionalexpandable워크스페이스 역할
역할 ID
역할명
오너 여부
기본 역할 여부
curl -X GET https://app.granter.biz/api/public-docs/user-profiles \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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
구독 ID
워크스페이스 ID
구독 상태
무료 플랜 여부
요금 산정 대상 활성 자산 수
보유 리워드 잔액
예상 청구 금액
예상 결제 금액
다음 결제 예정일
구독 종료 시각
무료 플랜 종료 시각
▶subscriptionPlanSubscriptionPlan | nulloptionalexpandable현재 요금제 정보
요금제 이름
요금제 설명
요금제 섹션 설명
▶discountSubscriptionDiscount | nulloptionalexpandable적용 중인 할인 정보
할인율
할인 종료일
curl -X GET https://app.granter.biz/api/public-docs/subscription \ -H "Authorization: Basic <BASE64(API_KEY:)>"
{
"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
▶[]UserrequiredexpandableBE `/workspaces` 응답의 `users` 배열 원본
유저 ID
이름
이메일
워크스페이스 ID
워크스페이스명
팀 ID
팀명
전화번호
▶roleWorkspaceRolerequiredexpandable워크스페이스 역할
역할 ID
역할명
오너 여부
기본 역할 여부
curl -X GET https://app.granter.biz/api/public-docs/people \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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` 배열로 반환됩니다.
초대 대상 목록
초대 대상 이메일
초대 대상 이름
프로필 이미지 URL
전화번호
Slack 초대 토큰. 일반 이메일 초대에서는 생략합니다.
Response Fields
▶[]InviteUserResponserequiredexpandableBE `/workspaces/bulk-invitation` 원본 응답 배열의 각 원소
초대 성공 여부
초대 처리 메시지
초대 대상 이메일
초대 대상 이름
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"
}
]
}'[
{
"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
▶[]TeamrequiredexpandableBE `/teams` 원본 응답 배열의 각 원소
팀 ID
팀명
curl -X GET https://app.granter.biz/api/public-docs/teams \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"id": 6,
"name": "인사팀"
}
]GET /api/public-docs/contacts
거래처, 고객사, 공급사처럼 상대방 기준으로 관리하는 거래처 데이터를 조회합니다.
Request Fields
요청 body는 사용하지 않습니다.
현재 응답은 최신 거래처 목록 기준으로 최대 100건을 조회합니다.
Response Fields
▶[]ContactrequiredexpandableBE `/contacts` 원본 응답 배열의 각 원소
거래처 ID
워크스페이스 ID
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
휴대전화
전화번호
최근 발행 시각
거래처 지역 구분
숨김 여부
▶managersContactManager[]optionalexpandable거래처 담당자 목록
거래처 담당자 ID
거래처 ID
담당자 이름
휴대전화
전화번호
팩스번호
이메일
메모
국가
계좌번호
은행명
예금주명
메모
즐겨찾기 여부
curl -X GET https://app.granter.biz/api/public-docs/contacts \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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": [],
"region": "DOMESTIC",
"nation": "",
"isHidden": false,
"memo": "",
"isFavorite": false
}
]POST /api/public-docs/contacts
외부 CRM, ERP, 영업관리 시스템에서 관리하는 거래처를 그랜터 거래처 마스터에 생성합니다.
Request Fields
쓰기 요청입니다. 재시도 안전성이 필요하면 `Idempotency-Key` 헤더를 고정 값으로 전달하세요.
거래처 생성 권한이 없는 API key 또는 플랜에서는 403 응답이 반환될 수 있습니다.
백엔드는 `registrationNumber`를 필수·고유 값으로 처리합니다. 빈 문자열은 기존 미등록 거래처와 중복될 수 있으므로 실제 식별 값을 전달하세요.
거래처 삭제 API는 아직 Public API로 제공하지 않습니다.
거래처 상호명/회사명
고유 사업자/거래처 식별번호 (`-` 없이 10자리 권장)
대표자명
업태
종목
사업장 주소
대표 이메일
보조 이메일
휴대전화
유선 전화번호
거래처 지역 구분. 기본값은 DOMESTIC
메모/비고
입금 계좌번호
입금 은행명
예금주명
Response Fields
거래처 ID
워크스페이스 ID
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
휴대전화
전화번호
최근 발행 시각
거래처 지역 구분
숨김 여부
▶managersContactManager[]optionalexpandable거래처 담당자 목록
거래처 담당자 ID
거래처 ID
담당자 이름
휴대전화
전화번호
팩스번호
이메일
메모
국가
계좌번호
은행명
예금주명
메모
즐겨찾기 여부
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에서 동기화"
}'{
"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": [],
"region": "DOMESTIC",
"nation": "",
"isHidden": false,
"memo": "외부 ERP에서 동기화",
"isFavorite": false
}PUT /api/public-docs/contacts
기존 거래처의 기본 정보, 연락처, 계좌 정보, 메모를 부분 수정합니다.
Request Fields
쓰기 요청입니다. `contactId`와 수정할 필드를 1개 이상 전달해야 합니다.
전달하지 않은 필드는 변경하지 않습니다.
거래처 수정 권한이 없는 API key 또는 플랜에서는 403 응답이 반환될 수 있습니다.
거래처 삭제 API는 아직 Public API로 제공하지 않습니다.
수정 대상 거래처 ID
거래처 상호명/회사명
사업자등록번호 (`-` 없이 10자리 권장)
대표자명
업태
종목
사업장 주소
대표 이메일
보조 이메일
휴대전화
유선 전화번호
메모/비고
입금 계좌번호
입금 은행명
예금주명
Response Fields
수정 요청 처리 성공 여부
수정한 거래처 ID
이번 요청에서 수정한 거래처 필드 목록
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": "담당 이메일 변경"
}'{
"ok": true,
"contactId": 928,
"updatedFields": ["email", "memo"]
}GET /api/public-docs/workflows
기안 문서, 결재 상태, 결재선 정보를 포함한 전자결재 데이터를 조회합니다.
Request Fields
요청 body는 사용하지 않습니다.
직접 호출 시 `status`, `draftedByMe`, `limit`, `offset` query string을 사용할 수 있습니다.
테스트 패널은 기본 목록 조회를 수행합니다.
결재 상태 필터
내가 올린 결재만 조회할지 여부
조회 건수 제한. 지정하지 않으면 최대 100건까지 조회합니다.
페이지 오프셋
Response Fields
▶[]WorkflowrequiredexpandableBE `/workflows` 원본 응답 배열의 각 원소
전자결재 ID
워크스페이스 ID
결재안 제목
결재 내용
결재 금액
원본 결재 금액
이체 요청일
결재 상태
통화 코드
결재 요청 시각
최종 수정 시각
현재 결재 차수
연결된 태그명
연결된 태그 ID
▶userUserrequiredexpandable기안자 정보
기안자 ID
기안자 이름
기안자 이메일
삭제 여부
▶refundAccountRefundAccountoptionalexpandable환급 계좌 정보
예금주명
계좌번호
은행명
▶stepsWorkflowStep[]requiredexpandable결재 단계 목록
결재 단계 ID
결재 차수
결재 단계 상태
생성 시각
수정 시각
▶approverApproverrequiredexpandable결재자 정보
결재자 ID
결재자 이름
결재자 이메일
삭제 여부
▶reviewersReviewer[]requiredexpandable검토자 목록
검토자 연결 ID
▶reviewerUserResponserequiredexpandable검토자 정보
유저 ID
유저 이름
유저 이메일
삭제 여부
▶messagesWorkflowMessage[]optionalexpandable결재 메시지 목록
메시지 ID
메시지 내용
메시지 타입
생성 시각
삭제 시각
▶userUserResponserequiredexpandable작성자 정보
유저 ID
유저 이름
유저 이메일
삭제 여부
▶attachmentsWorkflowAttachment[]optionalexpandable첨부파일 목록
첨부파일 ID
파일명
업로드 URL
MIME 타입
curl -X GET https://app.granter.biz/api/public-docs/workflows \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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 응답이 반환될 수 있습니다.
결재 제목
결재 내용. HTML 문자열도 전달할 수 있습니다.
결재 금액. `150,000원` 같은 문자열도 허용합니다.
결재자 ID 배열. 배열 순서대로 1차, 2차 결재자가 됩니다.
검토자/참조자 ID 배열
지급예정일. 생략 시 요청 처리일 기준 날짜
통화 코드. 기본값은 KRW
환불/이체 계좌 정보. 제공 시 accountHolder, accountNumber, organizationName이 모두 필요합니다.
예금주
계좌번호
은행명/기관명
Response Fields
전자결재 ID
워크스페이스 ID
결재안 제목
결재 내용
결재 금액
원본 결재 금액
이체 요청일
결재 상태
통화 코드
결재 요청 시각
최종 수정 시각
현재 결재 차수
연결된 태그명
연결된 태그 ID
▶userUserrequiredexpandable기안자 정보
기안자 ID
기안자 이름
기안자 이메일
삭제 여부
▶refundAccountRefundAccountoptionalexpandable환급 계좌 정보
예금주명
계좌번호
은행명
▶stepsWorkflowStep[]requiredexpandable결재 단계 목록
결재 단계 ID
결재 차수
결재 단계 상태
생성 시각
수정 시각
▶approverApproverrequiredexpandable결재자 정보
결재자 ID
결재자 이름
결재자 이메일
삭제 여부
▶reviewersReviewer[]requiredexpandable검토자 목록
검토자 연결 ID
▶reviewerUserResponserequiredexpandable검토자 정보
유저 ID
유저 이름
유저 이메일
삭제 여부
▶messagesWorkflowMessage[]optionalexpandable결재 메시지 목록
메시지 ID
메시지 내용
메시지 타입
생성 시각
삭제 시각
▶userUserResponserequiredexpandable작성자 정보
유저 ID
유저 이름
유저 이메일
삭제 여부
▶attachmentsWorkflowAttachment[]optionalexpandable첨부파일 목록
첨부파일 ID
파일명
업로드 URL
MIME 타입
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": "국민은행"
}
}'{
"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`는 선택 필터입니다.
조회 시작일
조회 종료일
고용 형태 필터. 단일 값 또는 배열을 전달할 수 있습니다.
급여 지급 상태 필터. 단일 값 또는 배열을 전달할 수 있습니다.
직원 ID 필터
직원명 또는 설명 키워드 검색
Response Fields
▶[]SalaryHistoryrequiredexpandableBE `/salary-histories` 원본 응답 배열의 각 원소
급여 이력 ID
워크스페이스 ID
▶employeeUserResponseoptionalexpandable직원 정보
유저 ID
유저 이름
유저 이메일
삭제 여부
직원 ID
직원명
직원 이메일
고용 형태
총급여
실질인정금액
지급일
비과세 식대
상여금
수당 합계
국민연금
건강보험
고용보험
장기요양보험
은행명
은행 계좌번호
실지급액
설명
고용 할인 유형
소득세
지방소득세
급여 지급 상태
명세서 email 발송 여부
email 발송 시각
메시지 개수
당월 근무 시간
미달 근무 시간
무급휴가 시간
근무 인정 시간
적용 비율 타입
적용 비율
▶taxExemptionsTitleAmount[]optionalexpandable비과세급 상세
항목명
금액
▶incentivesTitleAmount[]optionalexpandable인센티브 상세
항목명
금액
▶allowancesTitleAmount[]optionalexpandable수당 상세
항목명
금액
▶deductionsTitleAmount[]optionalexpandable공제 상세
항목명
금액
생성 시각
수정 시각
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"
}'[
{
"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": 28,
"shortfallHours": 0,
"unpaidLeaveHours": 0,
"recognizedWorkHours": 28,
"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에 전달합니다. 외부 급여 시스템의 확정값이 있으면 직접 전달하세요.
직원 ID. 기존 구성원 급여 생성 시 권장
직원명. 비회원 또는 수동 급여 생성 시 사용
직원 이메일
고용 형태
기본 급여 또는 총 급여 기준 금액
지급일
비과세 식대. 생략 시 0
상여금. 생략 시 0
수당 합계. 생략 시 allowances 합계 또는 0
국민연금. 생략 시 0
건강보험. 생략 시 0
고용보험. 생략 시 0
장기요양보험. 생략 시 0
급여 입금 은행명
급여 입금 계좌번호
급여 내역 메모
실질인정금액. 생략 시 totalAmount + mealAmount
실지급액. 생략 시 지급/공제 항목으로 계산
고용 할인 유형. 생략 시 NONE
소득세. 생략 시 0
지방소득세. 생략 시 0
급여 지급 상태. 생략 시 PENDING
당월 근무 시간/일수. 생략 시 지급월 일수
미달 근무 시간/일수. 생략 시 0
무급휴가 시간/일수. 생략 시 0
근무 인정 시간/일수. 생략 시 scheduledWorkHours - shortfallHours - unpaidLeaveHours
적용 비율 타입. 생략 시 빈 문자열
적용 비율. 생략 시 1
비과세급 상세. 생략 시 빈 배열
인센티브 상세. 생략 시 빈 배열
수당 상세. 생략 시 빈 배열
공제 상세. 생략 시 빈 배열
Response Fields
급여 이력 ID
워크스페이스 ID
▶employeeUserResponseoptionalexpandable직원 정보
유저 ID
유저 이름
유저 이메일
삭제 여부
직원 ID
직원명
직원 이메일
고용 형태
총급여
실질인정금액
지급일
비과세 식대
상여금
수당 합계
국민연금
건강보험
고용보험
장기요양보험
은행명
은행 계좌번호
실지급액
설명
고용 할인 유형
소득세
지방소득세
급여 지급 상태
명세서 email 발송 여부
email 발송 시각
메시지 개수
당월 근무 시간
미달 근무 시간
무급휴가 시간
근무 인정 시간
적용 비율 타입
적용 비율
▶taxExemptionsTitleAmount[]optionalexpandable비과세급 상세
항목명
금액
▶incentivesTitleAmount[]optionalexpandable인센티브 상세
항목명
금액
▶allowancesTitleAmount[]optionalexpandable수당 상세
항목명
금액
▶deductionsTitleAmount[]optionalexpandable공제 상세
항목명
금액
생성 시각
수정 시각
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 }]
}'{
"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": 30,
"shortfallHours": 0,
"unpaidLeaveHours": 0,
"recognizedWorkHours": 30,
"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/inventory-products
품목명, 단가, 통화, 추가 속성으로 구성된 품목 마스터를 조회합니다.
Request Fields
요청 body는 사용하지 않습니다.
직접 호출 시 `limit`, `lastSeenId` query string을 사용할 수 있습니다.
조회 건수 제한
페이지네이션 기준 ID
Response Fields
▶[]InventoryProductrequiredexpandableBE `/inventory-products` 원본 응답 배열의 각 원소
품목 ID
품목명
단가
통화 코드
▶additionalPropertiesInventoryAdditionalProperty[]optionalexpandable추가 속성 목록
추가 속성 ID
속성명
속성값
curl -X GET https://app.granter.biz/api/public-docs/inventory-products \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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을 사용할 수 있습니다.
조회 건수 제한
페이지네이션 기준 ID
Response Fields
▶[]InventoryStockrequiredexpandableBE `/inventories` 원본 응답 배열의 각 원소
재고 엔트리 ID
품목 ID
품목명
단가
현재 재고 수량
통화 코드
생성 시각
수정 시각
메시지 개수
▶additionalPropertiesInventoryAdditionalProperty[]optionalexpandable추가 속성 목록
추가 속성 ID
속성명
속성값
curl -X GET https://app.granter.biz/api/public-docs/inventories \ -H "Authorization: Basic <BASE64(API_KEY:)>"
[
{
"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`으로 근무/휴가를 구분할 수 있습니다.
조회 시작일
조회 종료일
조회 대상 유저 ID 목록
기록 타입 필터. WORK: 근무만, LEAVE: 휴가만, 미입력 시 전체
Response Fields
▶[]TimeCardRecordrequiredexpandable근무/휴가 기록 배열
▶timeCardTimeCardrequiredexpandable타임카드 정보
워크스페이스 ID
유저 ID
기준일
시작 일시
종료 일시
생성 일시
수정 일시
▶workRecordWorkRecord | nulloptionalexpandable근무 기록 (휴가인 경우 null)
근무 기록 ID
▶clockInLocationClockLocationrequiredexpandable출근 위치
IP 주소
주소
상세 주소
위도
경도
허용 반경 (m)
▶clockOutLocationClockLocation | nulloptionalexpandable퇴근 위치
IP 주소
주소
상세 주소
위도
경도
허용 반경 (m)
원격 근무 여부
기본 휴게 시작 일시
기본 휴게 종료 일시
▶additionalBreakTimesWorkBreakTime[]requiredexpandable추가 휴게시간 목록
추가 휴게 시작 일시
추가 휴게 종료 일시
▶leaveRecordLeaveRecord | nulloptionalexpandable휴가 기록 (근무인 경우 null)
휴가 기록 ID
결재자 유저 ID
휴가 사유
승인 상태
승인 일시
반려 일시
반려 사유
생성 일시
수정 일시
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"
}'[
{
"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`는 선택값이며, 미입력 시 백엔드 기본 기준일로 계산합니다.
잔여 연차를 계산할 기준일
Response Fields
▶[]LeaveBalancerequiredexpandable구성원별 잔여 연차 배열
워크스페이스 유저 ID
유저 ID
무제한 연차 여부. true이면 나머지 일수 필드는 null일 수 있습니다.
정책과 입사일 기준으로 계산한 이론적 발생 연차 일수
수동 조정, 사용, 소멸을 반영한 가감 일수 합계
입사일. 휴가 정책 승인자가 아니거나 급여 정보가 없으면 null입니다.
퇴사일. 휴가 정책 승인자가 아니거나 급여 정보가 없으면 null입니다.
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"
}'[
{
"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일 이하 구간으로 나눠 조회한 뒤 합쳐서 사용하세요.
휴가 사용, 사용 취소, 소멸, 수동 조정 내역이 함께 반환됩니다.
조회 시작일
조회 종료일
Response Fields
▶[]LeaveHistoryrequiredexpandable연차 변경 이력 배열
연차 변경 이력 ID
대상 유저 ID
변경을 요청한 유저 ID
변경 일수
연차 변경 유형
변경 발생일
소멸 예정일
연관 타임카드 ID
메모
생성 일시
수정 일시
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"
}'[
{
"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`는 필수입니다.
공공데이터포털 또는 대체 공휴일 소스에서 공휴일을 조회하며, 소스 장애 시 `enabled=false`로 응답합니다.
조회 시작일
조회 종료일
Response Fields
공휴일 조회 가능 여부
조회 실패 사유
공휴일 날짜 목록
▶holidaysHoliday[]requiredexpandable공휴일 상세 목록
공휴일 날짜
공휴일 이름
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"
}'{
"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 정수 정밀도 손실을 막기 위해 숫자만 포함한 문자열로 전달하세요.
카드 별칭/이름
카드사 enum. 수기 카드는 CUSTOM_CARD 권장
카드번호. 숫자만 포함한 문자열로 전달
Response Fields
▶[]AssetrequiredexpandableBE `/assets` 원본 응답 배열의 각 원소
자산 ID
자산 타입
자산 번호
워크스페이스 ID
자산명
별칭
금융기관 코드
금융기관명
업종
업종명
숨김 여부
활성 여부
휴면 여부
휴면 가능 여부
무료 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
자동 할당 여부
▶cardAssetCardInfooptionalexpandable카드 자산 정보
만료 연도
만료 월
한도 금액
사용 금액
잔여 한도
이전 카드 번호
▶bankAccountAssetBankAccountInfooptionalexpandable계좌 자산 정보
계좌 잔액
원본 계좌 잔액
통화 코드
조회 시작일
조회 종료일
계좌 번호
계좌명
별칭
계좌 유형
거래내역 보유 여부
▶homeTaxAccountAssetHomeTaxAccountInfooptionalexpandable홈택스 자산 정보
홈택스 자산 카테고리
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
연락처
업태
종목
▶securitiesAccountAssetSecuritiesAccountInfooptionalexpandable증권 자산 정보
총액(원화)
예수금(원화)
외화예수금(원화)
▶foreignDepositsForeignDeposit[]requiredexpandable외화예수금 보유 목록
외화예수금 ID
통화 코드
금액
생성 시각
보유 주식 평가액 합계(원화)
계좌번호
▶productsProduct[]requiredexpandable보유 투자상품
상품 ID
상품 유형 코드
상품 유형명
상품명
상품 코드
수량
통화 코드
현재 금액(원화)
현재 금액
평가 금액(원화)
평가 금액
평가 손익(원화)
평가 손익
수익률
생성 시각
▶customAssetAssetCustomInfooptionalexpandable커스텀 자산 정보
커스텀 자산 유형
자산 번호
금액
▶ecommerceAccountAssetEcommerceAccountInfooptionalexpandable이커머스 스토어 계정 정보
스토어 사용자명
OTP 인증 여부
생성 시각
수정 시각
비밀번호 보유 여부
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"
}'{
"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)로 처리됩니다.
은행 enum. 수기 계좌는 CUSTOM_BANK_ACCOUNT 권장
계좌명
계좌 별칭
계좌번호. 문자열이면 하이픈 포함 가능
초기 잔액
통화 코드. 기본 KRW
계좌 유형. DEPOSIT, FOREIGN, FUND, LOAN, INSURANCE, PENSION, CASH 등
Response Fields
▶[]AssetrequiredexpandableBE `/assets` 원본 응답 배열의 각 원소
자산 ID
자산 타입
자산 번호
워크스페이스 ID
자산명
별칭
금융기관 코드
금융기관명
업종
업종명
숨김 여부
활성 여부
휴면 여부
휴면 가능 여부
무료 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
자동 할당 여부
▶cardAssetCardInfooptionalexpandable카드 자산 정보
만료 연도
만료 월
한도 금액
사용 금액
잔여 한도
이전 카드 번호
▶bankAccountAssetBankAccountInfooptionalexpandable계좌 자산 정보
계좌 잔액
원본 계좌 잔액
통화 코드
조회 시작일
조회 종료일
계좌 번호
계좌명
별칭
계좌 유형
거래내역 보유 여부
▶homeTaxAccountAssetHomeTaxAccountInfooptionalexpandable홈택스 자산 정보
홈택스 자산 카테고리
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
연락처
업태
종목
▶securitiesAccountAssetSecuritiesAccountInfooptionalexpandable증권 자산 정보
총액(원화)
예수금(원화)
외화예수금(원화)
▶foreignDepositsForeignDeposit[]requiredexpandable외화예수금 보유 목록
외화예수금 ID
통화 코드
금액
생성 시각
보유 주식 평가액 합계(원화)
계좌번호
▶productsProduct[]requiredexpandable보유 투자상품
상품 ID
상품 유형 코드
상품 유형명
상품명
상품 코드
수량
통화 코드
현재 금액(원화)
현재 금액
평가 금액(원화)
평가 금액
평가 손익(원화)
평가 손익
수익률
생성 시각
▶customAssetAssetCustomInfooptionalexpandable커스텀 자산 정보
커스텀 자산 유형
자산 번호
금액
▶ecommerceAccountAssetEcommerceAccountInfooptionalexpandable이커머스 스토어 계정 정보
스토어 사용자명
OTP 인증 여부
생성 시각
수정 시각
비밀번호 보유 여부
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"
}'{
"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를 조회하세요.
대상 카드 자산 ID
카드 사용 내역 배열
결제 일시
가맹점명
결제 금액
결제 상태. 기본 NORMAL
오류 거래 표시
Response Fields
▶[]TicketrequiredexpandableBE `/tickets` 원본 응답 배열의 각 원소
티켓 ID
워크스페이스 ID
거래/증빙 내용
거래 금액
입출금 방향
거래 일시
수정 거래 일시
설명
▶expenseCategoryExpenseCategoryoptionalexpandable계정과목
계정과목 ID
계정과목명
부가 정보
설명
코드
카테고리 타입
숨김 여부
비용 유형
즐겨찾기 여부
워크스페이스 ID
기본 과세 유형
이상치 상태
티켓 상태
1차 태그명
1차 태그 ID
거래처명
거래처 ID
2차 태그명
2차 태그 ID
포함 여부
▶usersUserResponse[]requiredexpandable연결 유저 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶messagesMessage[]requiredexpandable메시지 목록
메시지 ID
티켓 ID
▶userUserResponserequiredexpandable작성자
유저 ID
유저 이름
유저 이메일
삭제 여부
작성자 ID
작성자 이름
메시지 내용
메시지 타입
생성 시각
삭제 시각
메시지 수
▶attachmentsAttachment[]requiredexpandable첨부파일 목록
첨부파일 ID
티켓 ID
파일명
업로드 URL
MIME 타입
첨부파일 수
조회 대상 티켓 타입
▶cardUsageCardUsageoptionalexpandable카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶purchaseUsageCardUsageoptionalexpandable매입 카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶bankTransactionBankTransactionoptionalexpandable계좌 거래 상세
은행거래 ID
워크스페이스 ID
거래 방향
설명
거래 후 잔액
원본 거래 후 잔액
거래 금액
원본 거래 금액
거래 일시
▶bankAccountTicketAssetrequiredexpandable계좌 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
거래 상대방
설명 분류
내용
지점
▶taxInvoiceTaxInvoiceoptionalexpandable세금계산서 상세
세금계산서 ID
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶issuerobjectrequiredexpandable발행자
이메일
유저 ID
삭제 여부
이름
▶trusteeTaxInvoiceUserrequiredexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
영수/청구 구분
대표 품목
비고
상태
세금계산서 종류
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
수정사유
원본 승인번호
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
결제 상태
다른 티켓과 연결되어 있는지 여부
연결된 티켓 수
세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부
생성 시각
부모 티켓 ID
분할 티켓 여부
매입 상태
소프트웨어 지출 여부
▶merchantCardTransactionMerchantCardTransactionoptionalexpandable가맹점 카드 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
할부개월
거래구분
거래일시
금액
▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable가맹점 매입 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
거래일시
매입일
매입 금액
총 수수료
가맹점 수수료
포인트 수수료
기타 수수료
지급 금액
지급 예정일
▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable포스기/CREFIA 정산 상세
정산 상세 ID
정산 ID
포스기/CREFIA 자산 ID
항목명
금액
입출금 방향
▶cashReceiptCashReceiptoptionalexpandable현금영수증 상세
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
▶manualTransactionManualTransactionoptionalexpandable수기거래 상세
수기거래 ID
통화 코드
수기거래 타입
▶tradeItemsManualTransactionTradeItem[]requiredexpandable거래 품목
품목명
수량
세액
단가
매입 취소 사용내역 보유 여부
▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable이커머스 정산 상세
▶assetobjectrequiredexpandable이커머스 스토어 자산
자산 ID
조직 (COUPANG, NAVER 등)
별칭
정산 ID
정산일
정산 비율
항목명
금액
정산 상세 타입
입출금 방향
추천 티켓 여부
과세 유형
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"
}
]
}'{
"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를 조회하세요.
대상 계좌 자산 ID
계좌 거래 배열
거래 일시
거래 방향
적요/거래 내용
거래 금액
거래 후 잔액
거래 상대방
오류 거래 표시
Response Fields
▶[]TicketrequiredexpandableBE `/tickets` 원본 응답 배열의 각 원소
티켓 ID
워크스페이스 ID
거래/증빙 내용
거래 금액
입출금 방향
거래 일시
수정 거래 일시
설명
▶expenseCategoryExpenseCategoryoptionalexpandable계정과목
계정과목 ID
계정과목명
부가 정보
설명
코드
카테고리 타입
숨김 여부
비용 유형
즐겨찾기 여부
워크스페이스 ID
기본 과세 유형
이상치 상태
티켓 상태
1차 태그명
1차 태그 ID
거래처명
거래처 ID
2차 태그명
2차 태그 ID
포함 여부
▶usersUserResponse[]requiredexpandable연결 유저 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶messagesMessage[]requiredexpandable메시지 목록
메시지 ID
티켓 ID
▶userUserResponserequiredexpandable작성자
유저 ID
유저 이름
유저 이메일
삭제 여부
작성자 ID
작성자 이름
메시지 내용
메시지 타입
생성 시각
삭제 시각
메시지 수
▶attachmentsAttachment[]requiredexpandable첨부파일 목록
첨부파일 ID
티켓 ID
파일명
업로드 URL
MIME 타입
첨부파일 수
조회 대상 티켓 타입
▶cardUsageCardUsageoptionalexpandable카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶purchaseUsageCardUsageoptionalexpandable매입 카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶bankTransactionBankTransactionoptionalexpandable계좌 거래 상세
은행거래 ID
워크스페이스 ID
거래 방향
설명
거래 후 잔액
원본 거래 후 잔액
거래 금액
원본 거래 금액
거래 일시
▶bankAccountTicketAssetrequiredexpandable계좌 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
거래 상대방
설명 분류
내용
지점
▶taxInvoiceTaxInvoiceoptionalexpandable세금계산서 상세
세금계산서 ID
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶issuerobjectrequiredexpandable발행자
이메일
유저 ID
삭제 여부
이름
▶trusteeTaxInvoiceUserrequiredexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
영수/청구 구분
대표 품목
비고
상태
세금계산서 종류
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
수정사유
원본 승인번호
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
결제 상태
다른 티켓과 연결되어 있는지 여부
연결된 티켓 수
세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부
생성 시각
부모 티켓 ID
분할 티켓 여부
매입 상태
소프트웨어 지출 여부
▶merchantCardTransactionMerchantCardTransactionoptionalexpandable가맹점 카드 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
할부개월
거래구분
거래일시
금액
▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable가맹점 매입 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
거래일시
매입일
매입 금액
총 수수료
가맹점 수수료
포인트 수수료
기타 수수료
지급 금액
지급 예정일
▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable포스기/CREFIA 정산 상세
정산 상세 ID
정산 ID
포스기/CREFIA 자산 ID
항목명
금액
입출금 방향
▶cashReceiptCashReceiptoptionalexpandable현금영수증 상세
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
▶manualTransactionManualTransactionoptionalexpandable수기거래 상세
수기거래 ID
통화 코드
수기거래 타입
▶tradeItemsManualTransactionTradeItem[]requiredexpandable거래 품목
품목명
수량
세액
단가
매입 취소 사용내역 보유 여부
▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable이커머스 정산 상세
▶assetobjectrequiredexpandable이커머스 스토어 자산
자산 ID
조직 (COUPANG, NAVER 등)
별칭
정산 ID
정산일
정산 비율
항목명
금액
정산 상세 타입
입출금 방향
추천 티켓 여부
과세 유형
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": "샘플 거래처"
}
]
}'{
"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를 보장하지 않으므로 빈 배열일 수 있습니다.
생성할 수기관리 전표 배열. 최대 100건
거래처 ID
매출/매입 방향
수기거래 유형
거래 일시
거래 금액
적요/거래 내용
통화 코드. 기본 KRW
추가 설명. 기본 빈 문자열
계정과목 ID
1차 태그 ID
2차 태그 ID
품목 배열
품목명
수량
단가
세액
Response Fields
수기관리 전표 생성 요청 성공 여부
생성을 요청한 전표 수
backend 생성 응답에서 확인된 수기관리 티켓 ID 목록. 응답 body가 없으면 빈 배열
▶ticketsTicket[]requiredexpandablebackend가 생성 티켓을 응답한 경우의 공개 티켓 목록. 응답 body가 없으면 빈 배열
▶[]TicketrequiredexpandableBE `/tickets` 원본 응답 배열의 각 원소
티켓 ID
워크스페이스 ID
거래/증빙 내용
거래 금액
입출금 방향
거래 일시
수정 거래 일시
설명
▶expenseCategoryExpenseCategoryoptionalexpandable계정과목
계정과목 ID
계정과목명
부가 정보
설명
코드
카테고리 타입
숨김 여부
비용 유형
즐겨찾기 여부
워크스페이스 ID
기본 과세 유형
이상치 상태
티켓 상태
1차 태그명
1차 태그 ID
거래처명
거래처 ID
2차 태그명
2차 태그 ID
포함 여부
▶usersUserResponse[]requiredexpandable연결 유저 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
▶messagesMessage[]requiredexpandable메시지 목록
메시지 ID
티켓 ID
▶userUserResponserequiredexpandable작성자
유저 ID
유저 이름
유저 이메일
삭제 여부
작성자 ID
작성자 이름
메시지 내용
메시지 타입
생성 시각
삭제 시각
메시지 수
▶attachmentsAttachment[]requiredexpandable첨부파일 목록
첨부파일 ID
티켓 ID
파일명
업로드 URL
MIME 타입
첨부파일 수
조회 대상 티켓 타입
▶cardUsageCardUsageoptionalexpandable카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶purchaseUsageCardUsageoptionalexpandable매입 카드 사용 상세
워크스페이스 ID
▶cardTicketAssetrequiredexpandable카드 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
결제일
가맹점명
가맹점 주소
사용 금액
취소 금액
할인 금액
부가세
할부 개월
결제 방식
결제 상태
승인번호
가맹점 사업자번호
원본 금액
통화 코드
환율
매입일
수수료
매입 여부
▶bankTransactionBankTransactionoptionalexpandable계좌 거래 상세
은행거래 ID
워크스페이스 ID
거래 방향
설명
거래 후 잔액
원본 거래 후 잔액
거래 금액
원본 거래 금액
거래 일시
▶bankAccountTicketAssetrequiredexpandable계좌 자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
거래 상대방
설명 분류
내용
지점
▶taxInvoiceTaxInvoiceoptionalexpandable세금계산서 상세
세금계산서 ID
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶issuerobjectrequiredexpandable발행자
이메일
유저 ID
삭제 여부
이름
▶trusteeTaxInvoiceUserrequiredexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
영수/청구 구분
대표 품목
비고
상태
세금계산서 종류
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
수정사유
원본 승인번호
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
결제 상태
다른 티켓과 연결되어 있는지 여부
연결된 티켓 수
세금계산서를 실제 티켓 연결 없이 완료 처리했는지 여부
생성 시각
부모 티켓 ID
분할 티켓 여부
매입 상태
소프트웨어 지출 여부
▶merchantCardTransactionMerchantCardTransactionoptionalexpandable가맹점 카드 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
할부개월
거래구분
거래일시
금액
▶merchantPurchaseTransactionMerchantPurchaseTransactionoptionalexpandable가맹점 매입 거래 상세
▶assetTicketAssetrequiredexpandable자산 정보
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
카드사
카드명
카드 타입
카드번호
승인번호
거래일시
매입일
매입 금액
총 수수료
가맹점 수수료
포인트 수수료
기타 수수료
지급 금액
지급 예정일
▶merchantSettlementDetailTransactionMerchantSettlementDetailTransactionoptionalexpandable포스기/CREFIA 정산 상세
정산 상세 ID
정산 ID
포스기/CREFIA 자산 ID
항목명
금액
입출금 방향
▶cashReceiptCashReceiptoptionalexpandable현금영수증 상세
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
▶manualTransactionManualTransactionoptionalexpandable수기거래 상세
수기거래 ID
통화 코드
수기거래 타입
▶tradeItemsManualTransactionTradeItem[]requiredexpandable거래 품목
품목명
수량
세액
단가
매입 취소 사용내역 보유 여부
▶ecommerceSettlementDetailTransactionEcommerceSettlementDetailTransactionoptionalexpandable이커머스 정산 상세
▶assetobjectrequiredexpandable이커머스 스토어 자산
자산 ID
조직 (COUPANG, NAVER 등)
별칭
정산 ID
정산일
정산 비율
항목명
금액
정산 상세 타입
입출금 방향
추천 티켓 여부
과세 유형
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
}
]
}
]
}'{
"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입니다. 안전한 재시도가 필요하면 호출 단위로 고정된 값을 직접 넣으세요.
삭제할 수기관리 티켓 ID 배열. 최대 100건
Response Fields
수기관리 전표 삭제 성공 여부
삭제된 수기관리 티켓 ID 목록
티켓에서 확인해 실제 upstream 삭제에 사용한 내부 수기거래 ID 목록
삭제된 전표 수
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]
}'{
"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 전달 전 숫자만 남깁니다.
발행 구분. 기본 정발행
과세 유형. 기본 TAX
공급받는 자 구분. 기본 BUSINESS
영수/청구 구분. 기본 RECEIPT
작성일자
공급가액
세액. 생략 시 과세 건은 공급가액의 10%
합계금액. 생략 시 공급가액 + 세액
비고
공급자 사업자등록번호
공급자 상호
공급자 대표자명. 생략 시 companyName 사용
공급자 이메일
공급받는 자 사업자등록번호
공급받는 자 상호
공급받는 자 대표자명. 생략 시 companyName 사용
공급받는 자 이메일
품목 배열. 생략 시 공급가액 기준 1건 자동 생성
Response Fields
세금계산서 ID
발행 요청 UUID
▶accountTicketAssetrequiredexpandable발행에 사용된 홈택스 자산
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶trusteeTaxInvoiceUser | nulloptionalexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
세금계산서 거래 타입
전자세금계산서 거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
총 건수
현금 금액
수표 금액
어음 금액
외상미수금 금액
영수/청구 구분
대표 품목
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
비고
발행 상태
발행 결과 코드
발행 결과 메시지
수입신고번호
통신 시작일
통신 종료일
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
수정사유
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": ""
}
]
}'{
"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 전달 전 숫자만 남깁니다.
거래일시. upstream에는 YYYY-MM-DDTHH:mm:ss로 정규화
거래 내용. 기본 현금영수증
용도. 기본 EXPENSE_PROOF
과세 형태. 기본 TAXABLE
총금액
공급가액. 생략 시 자동 계산
부가세. 생략 시 자동 계산
봉사료. 기본 0
발행자 사업자등록번호
발행자 상호
구매자 식별번호
구매자 이름/상호
Response Fields
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
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": "샘플 거래처"
}
}'{
"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)로 전달하세요.
`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` 응답의 필드 누락만으로 판단하지 마세요.
발행 타입. 일반적으로 `정발행`을 사용합니다.
과세 유형
▶허용 값
청구 방향. 일반적으로 `정과금`을 사용합니다.
작성일자. 반복발행이면 `null`입니다.
발행 스케줄 타입
▶허용 값
반복발행(RECURRING)일 때 필요한 발행 일자 (1~31)
반복발행(RECURRING)일 때 필요한 종료일
영수/청구 구분
▶허용 값
공급가액
세액
합계금액
현금 금액
수표 금액
어음 금액
외상미수금 금액. 결제수단 금액 합계는 totalAmount와 같아야 합니다.
세금계산서 상단 비고란에 표시되는 비고
공급받는자 유형
▶허용 값
강제 발행 여부
명세 작성 여부
그랜터 내부 메모. 세금계산서 품목/비고에는 표시되지 않습니다.
공급자 사업자등록번호
공급자 회사명
공급자 대표자명
공급자 이메일
공급자 보조 이메일
발행 세금계산서 담당자 연락처에 반영되는 공급자 연락처
기존 호환용 연락처 alias. tel 미입력 시 연락처로 사용되며, tel과 함께 보내면 tel이 우선됩니다.
공급자 업태
공급자 종목
공급자 사업장 주소
공급받는자 사업자등록번호
공급받는자 회사명
공급받는자 대표자명
공급받는자 이메일
공급받는자 보조 이메일
발행 세금계산서 담당자 연락처에 반영되는 공급받는자 연락처
기존 호환용 연락처 alias. tel 미입력 시 연락처로 사용되며, tel과 함께 보내면 tel이 우선됩니다.
공급받는자 업태
공급받는자 종목
공급받는자 사업장 주소
공급일자
세금계산서 품목란에 그대로 표시되는 품목명
규격
수량
단가
품목 공급가액
품목 세액
품목 행 비고란에 표시되는 비고
Response Fields
세금계산서 ID
발행 요청 UUID
▶accountTicketAssetrequiredexpandable발행에 사용된 홈택스 자산
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶trusteeTaxInvoiceUser | nulloptionalexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
세금계산서 거래 타입
전자세금계산서 거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
총 건수
현금 금액
수표 금액
어음 금액
외상미수금 금액
영수/청구 구분
대표 품목
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
비고
발행 상태
발행 결과 코드
발행 결과 메시지
수입신고번호
통신 시작일
통신 종료일
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
수정사유
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 발행 테스트"
}'{
"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에서 `기재사항 착오정정` 또는 `공급가액 변동`만 허용합니다.
`기재사항 착오정정`은 보통 `tax-invoices-cancel-issue`로 원본을 먼저 음수 취소발행한 뒤, 정정된 본문을 이 endpoint로 다시 발행합니다.
수정사유
▶허용 값
원본 승인번호
수정세금계산서 작성일자
정정 또는 차액 기준 품목 목록. 공급가액 변동은 차액을, 기재사항 착오정정은 정정본 내용을 전달합니다.
공급가액. 차액 수정이면 음수/양수 모두 가능
세액. 차액 수정이면 음수/양수 모두 가능
합계금액. 차액 수정이면 음수/양수 모두 가능
Response Fields
세금계산서 ID
발행 요청 UUID
▶accountTicketAssetrequiredexpandable발행에 사용된 홈택스 자산
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶trusteeTaxInvoiceUser | nulloptionalexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
세금계산서 거래 타입
전자세금계산서 거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
총 건수
현금 금액
수표 금액
어음 금액
외상미수금 금액
영수/청구 구분
대표 품목
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
비고
발행 상태
발행 결과 코드
발행 결과 메시지
수입신고번호
통신 시작일
통신 종료일
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
수정사유
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": "공급가액 변동 정정"
}'{
"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)여야 합니다.
`tradeItems[].taxItemName`은 발행된 취소 세금계산서의 품목란에 그대로 표시됩니다. 내부 추적용 문구는 `memo`를 사용하세요.
취소 사유
▶허용 값
원본 승인번호
취소발행 작성일자
음수 공급가액
음수 세액
음수 합계금액
음수 금액 기준 품목 목록
Response Fields
세금계산서 ID
발행 요청 UUID
▶accountTicketAssetrequiredexpandable발행에 사용된 홈택스 자산
자산 ID
워크스페이스 ID
자산명
자산 별칭
기관 코드
기관명
활성 여부
휴면 가능 여부
휴면 여부
자산 번호
▶ownersUserResponse[]requiredexpandable소유자 목록
유저 ID
유저 이름
유저 이메일
삭제 여부
고객 유형
업종 코드
업종명
유저 자동 할당 여부
카드 만료 연도
카드 만료 월
카드 한도 금액
카드 사용 금액
카드 잔여 한도
자동 승인 여부
이전 카드번호
계좌 잔액
원본 잔액
통화 코드
조회 시작일
조회 종료일
계좌 유형
거래내역 보유 여부
증권 총액
증권 예수금
외화예수금 상세 목록
외화예수금 합계
총 평가금액
계좌 번호
증권 보유 상품 목록
사업자등록번호
개업일자 코드
회사명
대표자명
주소
담당자명
담당자 이메일
연락처
업태
종목
홈택스 카테고리
생성 시각
수정 시각
조회 인증서 정보
발행 인증서 정보
▶supplierTaxInvoiceUserrequiredexpandable공급자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶contractorTaxInvoiceUserrequiredexpandable공급받는자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
▶trusteeTaxInvoiceUser | nulloptionalexpandable수탁자
사업자등록번호
회사명
대표자명
업태
종목
사업장 주소
이메일
보조 이메일
개업일자 코드
당사자 유형
관련 세금계산서
휴대전화
전화번호
승인번호
내용 타입
거래 타입
세금계산서 거래 타입
전자세금계산서 거래 타입
발행명
작성일자
전송일자
발행일자
공급가액
세액
합계금액
총 건수
현금 금액
수표 금액
어음 금액
외상미수금 금액
영수/청구 구분
대표 품목
▶tradeItemsTradeItem[]requiredexpandable품목 목록
공급일자
품목명
규격
수량
단가
공급가액
세액
비고
부가세 포함 여부
비고
발행 상태
발행 결과 코드
발행 결과 메시지
수입신고번호
통신 시작일
통신 종료일
▶issueOptionIssueOptionoptionalexpandable발행 옵션
발행 타입
과세 유형
청구 방향
권
호
공급받는자 유형
강제 발행 여부
명세 작성 여부
휴폐업 상태
휴폐업 일자
수정사유
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": "이중발급 취소"
}'{
"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)로 전달하세요.
발행에 사용할 홈택스 자산 ID
거래 일시
거래 내용
발행 용도
▶허용 값
과세 형태
▶허용 값
총금액
공급가액
부가세
봉사료
발행자 사업자등록번호
발행자 회사명
구매자 식별번호
구매자명
Response Fields
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
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": "홍길동"
}
}'{
"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)로 전달하세요.
취소 대상 현금영수증 ID
취소 거래 일시
취소 사유
▶허용 값
메모 또는 취소 내용
부분취소 여부
부분취소 총금액
부분취소 공급가액
부분취소 부가세
부분취소 봉사료
수신 이메일 목록
Response Fields
현금영수증 ID
워크스페이스 ID
영수증 구분
거래 일시
국세청 승인일자
거래구분
과세형태
공제여부
용도구분
발행구분
발행 상태
승인번호
총금액
공급가액
부가세
봉사료
거래 내용
국세청 결과 코드
▶issuerCashReceiptCounterPartyrequiredexpandable발행자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶buyerCashReceiptCounterPartyrequiredexpandable구매자
사업자번호
상호
유저 ID
식별번호
사용자명
이메일 목록
▶cancelOptionobjectoptionalexpandable취소 정보
취소 사유
원본 승인번호
원본 승인일자
원본 현금영수증 ID
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"]
}'{
"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
Aggregation Tips
{
"period": "monthly",
"filters": {
"ticketTypes": ["EXPENSE_TICKET", "BANK_TRANSACTION_TICKET"],
"startDate": "2026-02-01",
"endDate": "2026-02-28",
"isIncluded": true
},
"groupBy": "expenseCategoryId"
}[
{
"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
}
]{
"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": []
}
}