> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bolta.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 매입 내역 조회

> 볼타에 쌓인 매입을 볼타에서 바뀐 순서로 반환합니다. 파라미터, 응답, cursor 규칙은 매출 내역 조회와 같습니다. 매입은 볼타가 지급 완료 여부를 다시 판정할 때도 순서가 뒤로 옮겨지므로 내용이 같은 매입이 한 번 더 올 수 있습니다. 덮어쓰면 됩니다.

`items`가 비어 있어도 `hasMore`가 `true`일 수 있으니 `hasMore`를 보고 이어 호출하세요. 최근 5분 안에 바뀐 매입은 다음 호출로 미룹니다. 스탠다드 플랜 이상을 구독해야 하며 포인트는 차감하지 않습니다. [매출/매입 내역 조회 가이드](/docs/api-introduction/revenue-expense)




## OpenAPI

````yaml /openapi.yaml get /v1/expenses
openapi: 3.1.0
info:
  title: 볼타 API
  description: >
    볼타 전자세금계산서 API입니다. [API 소개](/docs/api-introduction/overview) | [인증
    가이드](/docs/api-introduction/authentication) | [사용
    사례](/docs/api-introduction/usecase-b2b)
  version: 1.0.0
servers:
  - url: https://xapi.bolta.io
    description: 볼타 API 서버
security:
  - basicAuth: []
tags:
  - name: 세금계산서 발행
    description: >
      전자(세금)계산서를 정발행하거나 수정발행합니다. [발행 금액
      계산](/docs/api-introduction/issuance-guide) | [수정발행
      유형](/docs/api-introduction/amendment-guide)
  - name: 세금계산서 조회
    description: >
      전자(세금)계산서의 발행 결과와 요청 처리 상태를 조회하고, 발행 완료한 세금계산서의 PDF를 내려받습니다. [세금계산서 PDF 조회
      가이드](/docs/api-introduction/tax-invoice-pdf)
  - name: 세금계산서 역발행
    description: >
      전자(세금)계산서 역발행 요청 및 관리. [이메일 승인
      역발행](/docs/api-introduction/usecase-reverse-email) | [간편 승인
      역발행](/docs/api-introduction/usecase-reverse-simple)
  - name: 현금영수증
    description: >
      현금영수증을 발행하거나 취소하고 처리 상태를 조회합니다. [현금영수증 발행
      가이드](/docs/api-introduction/cash-receipt-guide) | [현금영수증
      웹훅](/docs/api-introduction/webhook-cash-receipt)
  - name: 사업자등록 상태 조회
    description: >
      사업자등록번호의 등록 상태와 과세유형을 단건 또는 최대 100건 일괄로 조회합니다. 발급자 등록과 공동인증서가 필요 없습니다.
      [사업자등록 상태 조회 가이드](/docs/api-introduction/business-registration-status)
  - name: 매출/매입 내역 조회
    description: >
      볼타에 쌓인 내 사업자의 매출과 매입 세금계산서를 바뀐 순서로 조회하고 수집을 요청합니다. 볼타에서 발행한 문서와 홈택스에서 수집한
      문서가 모두 실립니다. 스탠다드 플랜 이상을 구독해야 하며 포인트는 차감하지 않습니다. 홈택스 연동은 볼타 대시보드에서 먼저 하세요.
      [매출/매입 내역 조회 가이드](/docs/api-introduction/revenue-expense)
  - name: 입출금내역 조회
    description: >
      볼타에 연결한 내 사업자의 입출금 계좌와 입출금내역을 조회하고 동기화를 요청합니다. 스탠다드 플랜 이상을 구독해야 하며 포인트는
      차감하지 않습니다. 계좌는 볼타 대시보드에서 먼저 연결하세요. [입출금내역 조회
      가이드](/docs/api-introduction/bank-account-transactions)
  - name: 예금주 조회
    description: >
      은행코드와 계좌번호로 예금주명을 조회합니다. 한 계좌씩 묻는 경로와 최대 100개를 한 번에 묻는 경로가 있습니다. 예금주를 돌려준
      계좌마다 50포인트를 차감합니다. [예금주 조회
      가이드](/docs/api-introduction/bank-account-holder)
  - name: 서류 발급
    description: >
      홈택스 국세 증명 서류와 법인등기사항전부증명서를 발급하고 원본 PDF를 내려받습니다. 홈택스 서류는 API 키가 속한 사업자의 서류만
      발급하며, 볼타 대시보드에 공동인증서를 등록해야 합니다. 법인등기는 `corporationNumber`의 법인 등기부를 발급하고
      공동인증서가 필요 없습니다. 지원하는 법인 종류는 주식회사, 유한회사, 합명회사, 합자회사, 유한책임회사, 사단법인, 재단법인,
      의료법인, 협동조합(사회적협동조합 포함), 기타법인(특허법인 등)입니다. 한 건에 홈택스 서류 500포인트, 법인등기 열람용
      1,000포인트, 제출용 1,500포인트를 차감합니다. [서류 발급
      가이드](/docs/api-introduction/document-issuance)
  - name: 발급자
    description: >
      세금계산서 발행 주체인 발급자를 등록하고 관리합니다. 발행 방식에 따라 공동인증서 필요 여부가 다릅니다. [용어
      정리](/docs/api-introduction/glossary) | [대리
      정발행](/docs/api-introduction/usecase-delegated) | [위수탁
      발행](/docs/api-introduction/usecase-brokered)
  - name: 인증서
    description: >
      발급자 공동인증서 등록 및 관리. [인증서
      등록](/docs/api-introduction/certificate-registration)
paths:
  /v1/expenses:
    get:
      tags:
        - 매출/매입 내역 조회
      summary: 매입 내역 조회
      description: >
        볼타에 쌓인 매입을 볼타에서 바뀐 순서로 반환합니다. 파라미터, 응답, cursor 규칙은 매출 내역 조회와 같습니다. 매입은
        볼타가 지급 완료 여부를 다시 판정할 때도 순서가 뒤로 옮겨지므로 내용이 같은 매입이 한 번 더 올 수 있습니다. 덮어쓰면
        됩니다.


        `items`가 비어 있어도 `hasMore`가 `true`일 수 있으니 `hasMore`를 보고 이어 호출하세요. 최근 5분
        안에 바뀐 매입은 다음 호출로 미룹니다. 스탠다드 플랜 이상을 구독해야 하며 포인트는 차감하지 않습니다. [매출/매입 내역 조회
        가이드](/docs/api-introduction/revenue-expense)
      parameters:
        - $ref: '#/components/parameters/RevenueExpenseFrom'
        - $ref: '#/components/parameters/RevenueExpenseTo'
        - $ref: '#/components/parameters/RevenueExpenseTypeFilter'
        - $ref: '#/components/parameters/RevenueExpenseCursor'
        - $ref: '#/components/parameters/RevenueExpenseLimit'
      responses:
        '200':
          description: 조회 성공
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueExpenseListResponse'
              examples:
                홈택스에서 수집한 세금계산서:
                  x-parity-id: expense-sample
                  summary: 테스트 키로 limit=1을 보낸 첫 페이지
                  value:
                    items:
                      - status: ACTIVE
                        id: '201'
                        type: HOMETAX_TAX_INVOICE
                        taxInvoice:
                          ntsTransactionId: 20260901-20000000-00000201
                          invoiceType: TAX_INVOICE
                          purpose: CLAIM
                          writtenDate: '2026-09-01'
                          issuedAt: '2026-09-01T02:00:00Z'
                          supplier:
                            identificationNumberType: BUSINESS
                            identificationNumber: '3333333333'
                            taxRegistrationId: null
                            organizationName: 주식회사 테스트공급
                            representativeName: 테스트대표
                            address: 경기도 테스트시 샘플로 2
                            businessType: 도매
                            businessItem: 도소매
                            manager:
                              name: 이공급
                              email: seller@example.com
                              telephone: 02-1111-1111
                          supplied:
                            identificationNumberType: BUSINESS
                            identificationNumber: '1234567890'
                            taxRegistrationId: null
                            organizationName: 주식회사 볼타테스트
                            representativeName: 정대표
                            address: 서울특별시 테스트구 테스트로 1
                            businessType: 서비스
                            businessItem: 소프트웨어 개발
                            manager:
                              name: 홍길동
                              email: tax@example.com
                              telephone: null
                          trustee: null
                          totalSupplyCost: 100000
                          totalTax: 10000
                          totalAmount: 110000
                          paymentMeans:
                            cash: null
                            check: null
                            bankBill: null
                            accountReceivable: 110000
                          description: null
                          amendReason: null
                          importDeclaration: null
                          items:
                            - date: '2026-09-01'
                              name: 사무용품
                              specification: null
                              quantity: 5
                              unitPrice: 20000
                              supplyCost: 100000
                              tax: 10000
                              description: null
                    nextCursor: djI6MTc4ODI1MzIwMDAwMDAwMDoyMDE6NGg4c2x6
                    hasMore: true
          headers: {}
        '400':
          description: >
            `from`이나 `to`가 `YYYY-MM-DD` 형식이 아니거나, `from`이 `to`보다 늦거나, `type`이나
            `limit` 값이 허용 범위를 벗어났습니다. 이때 응답의 `code`는 `INVALID_REQUEST`입니다.
            `cursor`를 변조했거나 형식이 틀리면 `code`가 `INVALID_CURSOR`입니다. cursor를 받을 때와
            경로, 조건, 키 모드가 달라도 `INVALID_CURSOR`입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: API 키 인증 실패. 응답 본문이 없습니다.
        '402':
          description: >-
            스탠다드 플랜 미만을 구독 중입니다. 응답의 `code`는 `PLAN_UPGRADE_REQUIRED`입니다. 볼타
            대시보드의 결제 메뉴에서 플랜을 업그레이드한 뒤 다시 호출하세요.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: 서버 내부 오류. 응답의 `code`는 `INTERNAL_SERVER_ERROR`입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >
            일시적으로 내역을 불러올 수 없습니다. 응답의 `code`는 `FEED_UNAVAILABLE`입니다. cursor가
            넘어가지 않았으니 잠시 후 같은 cursor로 다시 호출하세요. 일시적인 내부 API 통신 오류일 때는
            `SERVICE_UNAVAILABLE`입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
components:
  parameters:
    RevenueExpenseFrom:
      name: from
      in: query
      description: 거래일 시작. `YYYY-MM-DD` 형식의 KST 날짜이며 이 날을 포함합니다. 세금계산서는 작성일자로 거릅니다.
      required: false
      example: '2026-09-01'
      schema:
        type: string
        format: date
    RevenueExpenseTo:
      name: to
      in: query
      description: 거래일 끝. `YYYY-MM-DD` 형식의 KST 날짜이며 이 날을 포함합니다.
      required: false
      example: '2026-09-30'
      schema:
        type: string
        format: date
    RevenueExpenseTypeFilter:
      name: type
      in: query
      description: 증빙 종류
      required: false
      schema:
        $ref: '#/components/schemas/RevenueExpenseType'
    RevenueExpenseCursor:
      name: cursor
      in: query
      description: >-
        이전 응답의 `nextCursor`. 받은 값을 그대로 보내세요. cursor는 받을 때의 경로, 조건(`from`, `to`,
        `type`), 키 모드(테스트, 라이브)에 묶입니다. 조건이나 키 모드를 바꿨다면 cursor 없이 처음부터 다시 조회하세요.
      required: false
      schema:
        type: string
    RevenueExpenseLimit:
      name: limit
      in: query
      description: 한 번에 받을 최대 건수
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 100
  schemas:
    RevenueExpenseListResponse:
      type: object
      description: 매출 또는 매입 변경 내역 조회 결과
      properties:
        items:
          type: array
          description: 볼타에서 매출이나 매입이 바뀐 순서대로 담은 항목. 작성일자 순서가 아닙니다.
          items:
            $ref: '#/components/schemas/RevenueExpense'
        nextCursor:
          type: string
          description: 다음 호출에 넘길 cursor. 마지막 페이지에서도 채워지니 저장해 두었다가 다음 수집 때 넘기세요.
        hasMore:
          type: boolean
          description: 지금 바로 이어 받을 내역이 더 있는지 여부. `items`가 비어 있어도 `true`일 수 있습니다.
      required:
        - items
        - nextCursor
        - hasMore
    ErrorResponse:
      type: object
      description: API 요청 실패 시 반환되는 에러 응답
      properties:
        code:
          type: string
          description: 에러 타입 식별자
        message:
          type: string
          description: 에러 설명
        traceId:
          type: string
          description: 요청 추적 식별자
      required:
        - code
        - message
        - traceId
    RevenueExpenseType:
      type: string
      enum:
        - HOMETAX_TAX_INVOICE
      description: >
        증빙 종류. `HOMETAX_TAX_INVOICE`: 국세청에 등록된 세금계산서와 계산서. 볼타에서 발행한 문서와 홈택스에서
        수집한 문서가 같은 값을 씁니다. 새 값이 더해질 수 있으니 모르는 값의 항목은 건너뛰세요.
    RevenueExpense:
      description: >
        `status`에 따라 모양이 다른 매출이나 매입 항목. `ACTIVE`는 `type`과 그에 맞는 하위 객체를,
        `REMOVED`는 `status`와 `id`만 담습니다.
      oneOf:
        - $ref: '#/components/schemas/ActiveRevenueExpense'
        - $ref: '#/components/schemas/RemovedRevenueExpense'
      discriminator:
        propertyName: status
        mapping:
          ACTIVE:
            $ref: '#/components/schemas/ActiveRevenueExpense'
          REMOVED:
            $ref: '#/components/schemas/RemovedRevenueExpense'
    ActiveRevenueExpense:
      type: object
      description: 볼타 대시보드에 보이는 매출이나 매입. 같은 `id`가 있으면 덮어쓰고, 없으면 추가하세요.
      properties:
        status:
          type: string
          const: ACTIVE
          description: 항목 상태
        id:
          type: string
          description: 매출 또는 매입 식별자. 세금계산서 식별자가 아니며 경로 안에서 유일합니다.
        type:
          $ref: '#/components/schemas/RevenueExpenseType'
        taxInvoice:
          $ref: '#/components/schemas/RevenueExpenseTaxInvoice'
      required:
        - status
        - id
        - type
        - taxInvoice
    RemovedRevenueExpense:
      type: object
      description: 보관하거나 비활성이 되어 대시보드에서 안 보이게 된 매출이나 매입. 같은 `id`가 있으면 지우고, 없으면 무시하세요.
      properties:
        status:
          type: string
          const: REMOVED
          description: 항목 상태
        id:
          type: string
          description: 매출 또는 매입 식별자
      required:
        - status
        - id
    RevenueExpenseTaxInvoice:
      type: object
      description: >
        세금계산서 원문. 매출과 매입이 같은 모양입니다. 상세 조회가 끝내 실패한 문서는 목록 조회 값만 싣고 `items`를 비웁니다.
        `ntsTransactionId`, `issuedAt`, `invoiceType`은 항상 채워져 있습니다.
      properties:
        ntsTransactionId:
          type: string
          description: 국세청 승인번호
        invoiceType:
          $ref: '#/components/schemas/RevenueExpenseInvoiceType'
        purpose:
          anyOf:
            - $ref: '#/components/schemas/RevenueExpensePurpose'
            - type: 'null'
        writtenDate:
          type: string
          format: date
          description: 작성일자(KST)
        issuedAt:
          type: string
          format: date-time
          description: 발급 시각(UTC). 상세를 채울 수 없는 문서는 발급일 00:00(KST)입니다.
        supplier:
          $ref: '#/components/schemas/RevenueExpenseParty'
        supplied:
          $ref: '#/components/schemas/RevenueExpenseParty'
        trustee:
          description: 수탁자. 위수탁 문서일 때만 채워집니다.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseParty'
            - type: 'null'
        totalSupplyCost:
          type: integer
          format: int64
          description: 공급가액 합계(원). 수정세금계산서는 음수일 수 있습니다.
        totalTax:
          type:
            - integer
            - 'null'
          format: int64
          description: 세액 합계(원). 계산서처럼 세액이 없는 문서는 `null`입니다.
        totalAmount:
          type: integer
          format: int64
          description: 합계 금액(원)
        paymentMeans:
          $ref: '#/components/schemas/RevenueExpensePaymentMeans'
        description:
          type:
            - string
            - 'null'
          description: 비고
        amendReason:
          description: 국세청 수정 사유. 수정세금계산서가 아니면 `null`입니다.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseAmendReason'
            - type: 'null'
        importDeclaration:
          description: 수입신고 정보. 수입 세금계산서일 때만 채워집니다.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseImportDeclaration'
            - type: 'null'
        items:
          type: array
          description: 품목. 상세를 채울 수 없는 문서는 빈 배열입니다.
          items:
            $ref: '#/components/schemas/RevenueExpenseItem'
      required:
        - ntsTransactionId
        - invoiceType
        - purpose
        - writtenDate
        - issuedAt
        - supplier
        - supplied
        - trustee
        - totalSupplyCost
        - totalTax
        - totalAmount
        - paymentMeans
        - description
        - amendReason
        - importDeclaration
        - items
    RevenueExpenseInvoiceType:
      type: string
      enum:
        - TAX_INVOICE
        - ZERO_RATED_TAX_INVOICE
        - INVOICE
        - IMPORT_TAX_INVOICE
      description: >
        국세청 문서 구분. 위수탁 문서는 `trustee`가 채워져 있습니다. `TAX_INVOICE`: 전자세금계산서.
        `ZERO_RATED_TAX_INVOICE`: 영세율 전자세금계산서. `INVOICE`: 전자계산서(면세).
        `IMPORT_TAX_INVOICE`: 수입 전자세금계산서(납부유예 포함).
    RevenueExpensePurpose:
      type: string
      enum:
        - RECEIPT
        - CLAIM
      description: |
        영수, 청구 구분. `RECEIPT`: 영수. `CLAIM`: 청구.
    RevenueExpenseParty:
      type: object
      description: >
        공급자, 공급받는자, 수탁자. 개인과 외국인은 `taxRegistrationId`, `businessType`,
        `businessItem`이 `null`입니다.
      properties:
        identificationNumberType:
          $ref: '#/components/schemas/RevenueExpenseIdentificationNumberType'
        identificationNumber:
          type: string
          description: 하이픈 없는 식별번호. `RESIDENT`는 주민등록번호 원문이니 암호화해 저장하고 로그에 남기지 마세요.
        taxRegistrationId:
          type:
            - string
            - 'null'
          description: 종사업장번호
        organizationName:
          type:
            - string
            - 'null'
          description: 상호
        representativeName:
          type:
            - string
            - 'null'
          description: 대표자
        address:
          type:
            - string
            - 'null'
          description: 주소
        businessType:
          type:
            - string
            - 'null'
          description: 업태
        businessItem:
          type:
            - string
            - 'null'
          description: 종목
        manager:
          description: 담당자. 공급받는자에게 담당자가 둘이면 첫 번째입니다. 이름, 이메일, 전화번호가 모두 없으면 `null`입니다.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseManager'
            - type: 'null'
      required:
        - identificationNumberType
        - identificationNumber
        - taxRegistrationId
        - organizationName
        - representativeName
        - address
        - businessType
        - businessItem
        - manager
    RevenueExpensePaymentMeans:
      type: object
      description: 결제 수단별 금액(원)
      properties:
        cash:
          type:
            - integer
            - 'null'
          format: int64
          description: 현금
        check:
          type:
            - integer
            - 'null'
          format: int64
          description: 수표
        bankBill:
          type:
            - integer
            - 'null'
          format: int64
          description: 어음
        accountReceivable:
          type:
            - integer
            - 'null'
          format: int64
          description: 외상미수금
      required:
        - cash
        - check
        - bankBill
        - accountReceivable
    RevenueExpenseAmendReason:
      type: string
      enum:
        - MISSPELLED
        - CHANGE_SUPPLY_COST
        - RETURNED
        - TERMINATION
        - LOCAL_LETTER_OF_CREDIT
        - DOUBLE_ISSUANCE
      description: >
        국세청 수정 사유. 취소분과 수정분 두 장이 한 쌍으로 발급되는 사유는 두 장 모두 같은 값으로 옵니다. `MISSPELLED`:
        기재사항 착오 정정. `CHANGE_SUPPLY_COST`: 공급가액 변동. `RETURNED`: 환입.
        `TERMINATION`: 계약의 해제. `LOCAL_LETTER_OF_CREDIT`: 내국신용장 사후 개설.
        `DOUBLE_ISSUANCE`: 착오에 의한 이중발급.
    RevenueExpenseImportDeclaration:
      type: object
      description: 수입신고 정보
      properties:
        declarationNumber:
          type:
            - string
            - 'null'
          description: 수입신고번호
        periodStartDate:
          type:
            - string
            - 'null'
          format: date
          description: 과세기간 시작일(KST)
        periodEndDate:
          type:
            - string
            - 'null'
          format: date
          description: 과세기간 종료일(KST)
        itemCount:
          type:
            - integer
            - 'null'
          format: int64
          description: 수입 건수
      required:
        - declarationNumber
        - periodStartDate
        - periodEndDate
        - itemCount
    RevenueExpenseItem:
      type: object
      description: 품목 한 줄. 수량과 단가는 정수면 소수점 없이, 소수면 소수 자리까지 옵니다.
      properties:
        date:
          type:
            - string
            - 'null'
          format: date
          description: 공급일자(KST)
        name:
          type:
            - string
            - 'null'
          description: 품목명
        specification:
          type:
            - string
            - 'null'
          description: 규격
        quantity:
          type:
            - number
            - 'null'
          description: 수량
        unitPrice:
          type:
            - number
            - 'null'
          description: 단가
        supplyCost:
          type: integer
          format: int64
          description: 공급가액(원)
        tax:
          type:
            - integer
            - 'null'
          format: int64
          description: 세액(원)
        description:
          type:
            - string
            - 'null'
          description: 비고
      required:
        - date
        - name
        - specification
        - quantity
        - unitPrice
        - supplyCost
        - tax
        - description
    RevenueExpenseIdentificationNumberType:
      type: string
      enum:
        - BUSINESS
        - RESIDENT
        - FOREIGN
      description: >
        당사자 식별번호 종류. 공급자와 수탁자는 항상 `BUSINESS`입니다. `BUSINESS`: 사업자등록번호 10자리.
        `RESIDENT`: 주민등록번호 13자리. `FOREIGN`: 외국인 식별번호.
    RevenueExpenseManager:
      type: object
      description: 담당자
      properties:
        name:
          type:
            - string
            - 'null'
          description: 이름
        email:
          type:
            - string
            - 'null'
          description: 이메일
        telephone:
          type:
            - string
            - 'null'
          description: 전화번호
      required:
        - name
        - email
        - telephone
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        API 키 뒤에 콜론을 붙여 Base64로 인코딩해 헤더에 넣으세요. Username에 API 키를 입력하고 Password는
        비워두세요.

````