> ## 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.

# List Expenses

> Returns the expenses stored in Bolta in the order they changed in Bolta. Parameters, response, and cursor rules match List Revenues. An expense also moves back in the order when Bolta re-evaluates its payment status, so the same expense can arrive again with identical content. Overwrite it.

`hasMore` can be `true` even when `items` is empty, so decide whether to continue from `hasMore`. Expenses changed in the last 5 minutes are deferred to a later call. You need a Standard plan or higher, and the call deducts no points. [Revenue and expense guide](/en/api-introduction/revenue-expense)




## OpenAPI

````yaml /openapi.en.yaml get /v1/expenses
openapi: 3.1.0
info:
  title: Bolta API
  description: >
    The Bolta e-tax invoice API. [API Overview](/en/api-introduction/overview) |
    [Authentication guide](/en/api-introduction/authentication) | [Use
    cases](/en/api-introduction/usecase-b2b)
  version: 1.0.0
servers:
  - url: https://xapi.bolta.io
    description: Bolta API server
security:
  - basicAuth: []
tags:
  - name: Tax Invoice Issuance
    description: >
      Issue and amend e-tax invoices. [Calculating the issuance
      amount](/en/api-introduction/issuance-guide) | [Amendment
      types](/en/api-introduction/amendment-guide)
  - name: Tax Invoice Retrieval
    description: >
      Retrieve e-tax invoice results and request processing status, and download
      the PDF of an issued tax invoice. [Tax invoice PDF
      guide](/en/api-introduction/tax-invoice-pdf)
  - name: Reverse Issuance
    description: >
      Request and manage reverse issuance of e-tax invoices. [Email-approval
      reverse issuance](/en/api-introduction/usecase-reverse-email) |
      [Simple-approval reverse
      issuance](/en/api-introduction/usecase-reverse-simple)
  - name: Cash Receipt
    description: >
      Issue, cancel, and check the status of cash receipts. [Cash receipt
      guide](/en/api-introduction/cash-receipt-guide) | [Cash receipt
      webhooks](/en/api-introduction/webhook-cash-receipt)
  - name: Business Registration Status
    description: >
      Check the registration status and tax type of a business registration
      number. Look up one number or up to 100 numbers at once. This API requires
      no issuer registration and no certificate. [Business registration status
      guide](/en/api-introduction/business-registration-status)
  - name: Revenue and Expense
    description: >
      Retrieve the revenue and expense tax invoices of your own business in
      Bolta in the order they changed, and request a collection. Responses
      include documents issued through Bolta and documents collected from
      Hometax. You need a Standard plan or higher, and the calls deduct no
      points. Connect Hometax in the Bolta dashboard first. [Revenue and expense
      guide](/en/api-introduction/revenue-expense)
  - name: Bank Account Transactions
    description: >
      Retrieve the bank accounts and transactions connected to your own business
      in Bolta, and request a sync. You need a Standard plan or higher, and the
      calls deduct no points. Connect bank accounts in the Bolta dashboard
      first. [Bank account transactions
      guide](/en/api-introduction/bank-account-transactions)
  - name: Bank Account Holder
    description: >
      Look up account holder names with a bank code and an account number. One
      path takes a single account and the other takes up to 100 accounts at
      once. Each account that returns a holder name deducts 50 points. [Bank
      account holder guide](/en/api-introduction/bank-account-holder)
  - name: Document Issuance
    description: >
      Issue National Tax Service certificates from Hometax or a certified copy
      of corporate registry, and download the original PDF. Hometax documents
      are issued only for the business that owns the API key, and you must
      register a joint certificate in the Bolta dashboard. A corporate registry
      is issued for the corporation in `corporationNumber` and needs no joint
      certificate. Supported corporation types are stock company, limited
      company, general partnership company, limited partnership company, limited
      liability company, incorporated association, incorporated foundation,
      medical corporation, cooperative (including social cooperative), and other
      corporate entity (such as a patent corporation). Each document deducts 500
      points for Hometax documents, 1,000 points for a corporate registry view
      copy, and 1,500 points for a submission copy. [Document issuance
      guide](/en/api-introduction/document-issuance)
  - name: Issuer
    description: >
      Register and manage businesses that act as tax invoice issuers.
      Certificate requirements depend on the issuance type.
      [Glossary](/en/api-introduction/glossary) | [Delegated
      issuance](/en/api-introduction/usecase-delegated) | [Brokered Tax Invoice
      Issuance](/en/api-introduction/usecase-brokered)
  - name: Certificate
    description: >
      Register and manage issuer certificates. [Certificate
      registration](/en/api-introduction/certificate-registration)
paths:
  /v1/expenses:
    get:
      tags:
        - Revenue and Expense
      summary: List Expenses
      description: >
        Returns the expenses stored in Bolta in the order they changed in Bolta.
        Parameters, response, and cursor rules match List Revenues. An expense
        also moves back in the order when Bolta re-evaluates its payment status,
        so the same expense can arrive again with identical content. Overwrite
        it.


        `hasMore` can be `true` even when `items` is empty, so decide whether to
        continue from `hasMore`. Expenses changed in the last 5 minutes are
        deferred to a later call. You need a Standard plan or higher, and the
        call deducts no points. [Revenue and expense
        guide](/en/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: Lookup succeeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevenueExpenseListResponse'
              examples:
                Tax invoice collected from Hometax:
                  x-parity-id: expense-sample
                  summary: First page of a test key call with 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` or `to` is not in `YYYY-MM-DD` format, `from` is later than
            `to`, or `type` or `limit` is out of range. The response `code` is
            `INVALID_REQUEST`. When `cursor` is modified or malformed, `code` is
            `INVALID_CURSOR`. It is also `INVALID_CURSOR` when the path,
            filters, or key mode differ from when the cursor was issued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: API key authentication failed. The response has no body.
        '402':
          description: >-
            Your subscription is below the Standard plan. The response `code` is
            `PLAN_UPGRADE_REQUIRED`. Upgrade your plan from the billing menu in
            the Bolta dashboard, then call again.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: >-
            Internal server error. The response `code` is
            `INTERNAL_SERVER_ERROR`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >
            Records are temporarily unavailable. The response `code` is
            `FEED_UNAVAILABLE`. The cursor did not advance, so call again
            shortly with the same cursor. For a temporary internal API
            communication error, `code` is `SERVICE_UNAVAILABLE`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
components:
  parameters:
    RevenueExpenseFrom:
      name: from
      in: query
      description: >-
        Start of the transaction date range. A KST date in `YYYY-MM-DD` format,
        inclusive. Tax invoices are filtered by write date.
      required: false
      example: '2026-09-01'
      schema:
        type: string
        format: date
    RevenueExpenseTo:
      name: to
      in: query
      description: >-
        End of the transaction date range. A KST date in `YYYY-MM-DD` format,
        inclusive.
      required: false
      example: '2026-09-30'
      schema:
        type: string
        format: date
    RevenueExpenseTypeFilter:
      name: type
      in: query
      description: Evidence type
      required: false
      schema:
        $ref: '#/components/schemas/RevenueExpenseType'
    RevenueExpenseCursor:
      name: cursor
      in: query
      description: >-
        `nextCursor` from the previous response. Send it exactly as received. A
        cursor is bound to the path, filters (`from`, `to`, `type`), and key
        mode (test or live) it was issued for. After you change the filters or
        key mode, start over without a cursor.
      required: false
      schema:
        type: string
    RevenueExpenseLimit:
      name: limit
      in: query
      description: Maximum number of items per call
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 100
  schemas:
    RevenueExpenseListResponse:
      type: object
      description: Revenue or expense change list
      properties:
        items:
          type: array
          description: Items in the order they changed in Bolta, not by write date.
          items:
            $ref: '#/components/schemas/RevenueExpense'
        nextCursor:
          type: string
          description: >-
            Cursor to pass on the next call. It is filled even on the last page,
            so save it and pass it on your next collection.
        hasMore:
          type: boolean
          description: >-
            Whether more items are available right now. Can be `true` even when
            `items` is empty.
      required:
        - items
        - nextCursor
        - hasMore
    ErrorResponse:
      type: object
      description: The error response returned when an API request fails
      properties:
        code:
          type: string
          description: Error type identifier
        message:
          type: string
          description: Error description
        traceId:
          type: string
          description: Request trace identifier
      required:
        - code
        - message
        - traceId
    RevenueExpenseType:
      type: string
      enum:
        - HOMETAX_TAX_INVOICE
      description: >
        Evidence type. `HOMETAX_TAX_INVOICE`: A tax invoice or invoice
        registered with the NTS. Documents issued through Bolta and documents
        collected from Hometax use the same value. New values can be added, so
        skip items with an unknown value.
    RevenueExpense:
      description: >
        A revenue or expense item whose shape depends on `status`. `ACTIVE`
        carries `type` and the matching object; `REMOVED` carries only `status`
        and `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: >-
        A revenue or expense record visible in the Bolta dashboard. Overwrite
        the item with the same `id`, or add it if none exists.
      properties:
        status:
          type: string
          const: ACTIVE
          description: Item status
        id:
          type: string
          description: >-
            Revenue or expense identifier, unique within the path. Not a tax
            invoice identifier.
        type:
          $ref: '#/components/schemas/RevenueExpenseType'
        taxInvoice:
          $ref: '#/components/schemas/RevenueExpenseTaxInvoice'
      required:
        - status
        - id
        - type
        - taxInvoice
    RemovedRevenueExpense:
      type: object
      description: >-
        A revenue or expense record hidden from the dashboard because it was
        archived or deactivated. Delete the item with the same `id`, or ignore
        it if none exists.
      properties:
        status:
          type: string
          const: REMOVED
          description: Item status
        id:
          type: string
          description: Revenue or expense identifier
      required:
        - status
        - id
    RevenueExpenseTaxInvoice:
      type: object
      description: >
        The tax invoice. Revenue and expense share the same shape. When the
        detail lookup fails for good, the document carries list values only and
        an empty `items`. `ntsTransactionId`, `issuedAt`, and `invoiceType` are
        always set.
      properties:
        ntsTransactionId:
          type: string
          description: NTS approval number
        invoiceType:
          $ref: '#/components/schemas/RevenueExpenseInvoiceType'
        purpose:
          anyOf:
            - $ref: '#/components/schemas/RevenueExpensePurpose'
            - type: 'null'
        writtenDate:
          type: string
          format: date
          description: Write date (KST)
        issuedAt:
          type: string
          format: date-time
          description: >-
            Issuance time (UTC). For documents whose details cannot be filled,
            00:00 (KST) on the issuance date.
        supplier:
          $ref: '#/components/schemas/RevenueExpenseParty'
        supplied:
          $ref: '#/components/schemas/RevenueExpenseParty'
        trustee:
          description: Trustee. Set only on brokered documents.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseParty'
            - type: 'null'
        totalSupplyCost:
          type: integer
          format: int64
          description: Total supply cost (KRW). Can be negative on amended tax invoices.
        totalTax:
          type:
            - integer
            - 'null'
          format: int64
          description: Total tax (KRW). `null` for documents without tax, such as invoices.
        totalAmount:
          type: integer
          format: int64
          description: Total amount (KRW)
        paymentMeans:
          $ref: '#/components/schemas/RevenueExpensePaymentMeans'
        description:
          type:
            - string
            - 'null'
          description: Remarks
        amendReason:
          description: >-
            NTS amendment reason. `null` unless the document is an amended tax
            invoice.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseAmendReason'
            - type: 'null'
        importDeclaration:
          description: Import declaration. Set only on import tax invoices.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseImportDeclaration'
            - type: 'null'
        items:
          type: array
          description: Line items. Empty for documents whose details cannot be filled.
          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: >
        NTS document type. Brokered documents have `trustee` set. `TAX_INVOICE`:
        Electronic tax invoice. `ZERO_RATED_TAX_INVOICE`: Zero-rate electronic
        tax invoice. `INVOICE`: Electronic tax-exemption invoice.
        `IMPORT_TAX_INVOICE`: Import electronic tax invoice (including deferred
        payment).
    RevenueExpensePurpose:
      type: string
      enum:
        - RECEIPT
        - CLAIM
      description: |
        Receipt or claim. `RECEIPT`: Receipt. `CLAIM`: Claim.
    RevenueExpenseParty:
      type: object
      description: >
        Supplier, recipient, or trustee. For individuals and foreigners,
        `taxRegistrationId`, `businessType`, and `businessItem` are `null`.
      properties:
        identificationNumberType:
          $ref: '#/components/schemas/RevenueExpenseIdentificationNumberType'
        identificationNumber:
          type: string
          description: >-
            Identification number without hyphens. For `RESIDENT`, it is the raw
            resident registration number; encrypt it at rest and keep it out of
            your logs.
        taxRegistrationId:
          type:
            - string
            - 'null'
          description: Sub-business place code
        organizationName:
          type:
            - string
            - 'null'
          description: Company name
        representativeName:
          type:
            - string
            - 'null'
          description: Representative
        address:
          type:
            - string
            - 'null'
          description: Address
        businessType:
          type:
            - string
            - 'null'
          description: Business type
        businessItem:
          type:
            - string
            - 'null'
          description: Business item
        manager:
          description: >-
            Manager. When the recipient has two managers, this is the first.
            `null` when name, email, and phone are all missing.
          anyOf:
            - $ref: '#/components/schemas/RevenueExpenseManager'
            - type: 'null'
      required:
        - identificationNumberType
        - identificationNumber
        - taxRegistrationId
        - organizationName
        - representativeName
        - address
        - businessType
        - businessItem
        - manager
    RevenueExpensePaymentMeans:
      type: object
      description: Amount by payment method (KRW)
      properties:
        cash:
          type:
            - integer
            - 'null'
          format: int64
          description: Cash
        check:
          type:
            - integer
            - 'null'
          format: int64
          description: Check
        bankBill:
          type:
            - integer
            - 'null'
          format: int64
          description: Promissory note
        accountReceivable:
          type:
            - integer
            - 'null'
          format: int64
          description: Accounts receivable
      required:
        - cash
        - check
        - bankBill
        - accountReceivable
    RevenueExpenseAmendReason:
      type: string
      enum:
        - MISSPELLED
        - CHANGE_SUPPLY_COST
        - RETURNED
        - TERMINATION
        - LOCAL_LETTER_OF_CREDIT
        - DOUBLE_ISSUANCE
      description: >
        NTS amendment reason. For reasons issued as a cancelling and corrected
        pair, both documents carry the same value. `MISSPELLED`: Correction of
        Error in Entries. `CHANGE_SUPPLY_COST`: Change in Supply Cost.
        `RETURNED`: Return of Goods. `TERMINATION`: Cancellation of Contract.
        `LOCAL_LETTER_OF_CREDIT`: Local Letter of Credit Opened after Supply.
        `DOUBLE_ISSUANCE`: Double Issuance by Mistake.
    RevenueExpenseImportDeclaration:
      type: object
      description: Import declaration
      properties:
        declarationNumber:
          type:
            - string
            - 'null'
          description: Import declaration number
        periodStartDate:
          type:
            - string
            - 'null'
          format: date
          description: Start of the taxable period (KST)
        periodEndDate:
          type:
            - string
            - 'null'
          format: date
          description: End of the taxable period (KST)
        itemCount:
          type:
            - integer
            - 'null'
          format: int64
          description: Number of imports
      required:
        - declarationNumber
        - periodStartDate
        - periodEndDate
        - itemCount
    RevenueExpenseItem:
      type: object
      description: >-
        One line item. Quantity and unit price come without a decimal point when
        whole, and with their decimal places otherwise.
      properties:
        date:
          type:
            - string
            - 'null'
          format: date
          description: Item supply date (KST)
        name:
          type:
            - string
            - 'null'
          description: Item name
        specification:
          type:
            - string
            - 'null'
          description: Specification
        quantity:
          type:
            - number
            - 'null'
          description: Quantity
        unitPrice:
          type:
            - number
            - 'null'
          description: Unit price
        supplyCost:
          type: integer
          format: int64
          description: Supply cost (KRW)
        tax:
          type:
            - integer
            - 'null'
          format: int64
          description: Tax (KRW)
        description:
          type:
            - string
            - 'null'
          description: Remarks
      required:
        - date
        - name
        - specification
        - quantity
        - unitPrice
        - supplyCost
        - tax
        - description
    RevenueExpenseIdentificationNumberType:
      type: string
      enum:
        - BUSINESS
        - RESIDENT
        - FOREIGN
      description: >
        Party identification number type. The supplier and trustee are always
        `BUSINESS`. `BUSINESS`: 10-digit business registration number.
        `RESIDENT`: 13-digit resident registration number. `FOREIGN`: Foreigner
        identification number.
    RevenueExpenseManager:
      type: object
      description: Manager
      properties:
        name:
          type:
            - string
            - 'null'
          description: Name
        email:
          type:
            - string
            - 'null'
          description: Email
        telephone:
          type:
            - string
            - 'null'
          description: Phone number
      required:
        - name
        - email
        - telephone
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        Append a colon to your API key, Base64-encode it, and put it in the
        header. Enter the API key as the username and leave the password empty.

````