What you can retrieve
Retrieve the revenue and expense records of your own business in Bolta, in the same units as the revenue and expense lists in the dashboard. Each API key covers the one business it belongs to. You can also ask Bolta to collect sooner.
Responses carry tax invoices and invoices (
type is HOMETAX_TAX_INVOICE). They include both documents issued through Bolta and documents collected from Hometax. Cash receipts are not included, even those issued through Bolta.
Requirements
These calls deduct no points. Instead, you need a Standard plan or higher. A free trial also qualifies when the trial plan is Standard or higher. When your plan does not qualify, all four paths return402 with PLAN_UPGRADE_REQUIRED. Upgrade your plan from the billing menu in the Bolta dashboard, then call again.
Connect Hometax revenue and expense collection in the Bolta dashboard first.
Bolta-Client-Reference-Id. Send Basic {apiKey} in the Authorization header. See the authentication guide.
Key limits
Revenue and expense lists
Both paths take the same parameters and return the same shape. The path decides whether an item is revenue or expense.
Without a date range, the API returns every stored record.
The example below is the test key’s revenue response without a cursor, with
102 and 103 omitted.
status.
id identifies one revenue or expense record, not the tax invoice.
HOMETAX_TAX_INVOICE means a tax invoice or invoice registered with the National Tax Service (NTS). Documents issued through Bolta use the same value.
Tax invoice
taxInvoice has the same shape for revenue and expense.
Amounts are integers in KRW and can be negative on amended tax invoices. Quantity and unit price come without a decimal point when they are whole numbers, and with their decimal places otherwise.
Parties
supplier, supplied, and trustee share the same shape.
The supplier and trustee are always
BUSINESS. Only the recipient can be RESIDENT or FOREIGN, and then taxRegistrationId, businessType, and businessItem are null. When the recipient has two managers, manager holds the first.
Document types
Brokered documents have no separate type. A document is a brokered document when
trustee is set.
Amendment reasons
Correction of Error in Entries and Local Letter of Credit Opened after Supply amendments are issued as a pair: a cancelling document and a corrected document. The API sends both with the same reason.
Documents in the response
The API does not return documents whose details are still being filled. For documents collected from Hometax, Bolta receives the approval number, parties, and amounts first, and fills the issuance time, addresses, business types, managers, and line items later. Tax invoices issued through Bolta appear right away. Documents collected from Hometax appear after their details are filled, newest write date first, so with many past documents the older ones keep arriving later. When the detail lookup fails for good, the API sends the document with list values only and an emptyitems. Addresses, business types, business items, and managers can also be null. If the details are filled later, the document arrives again with the same id. ntsTransactionId, issuedAt, and invoiceType are always set.
Management data that exists only in Bolta, such as payment status, memos, labels, and assignees, is not included.
Order and cursor
The API returns records in the order they changed in Bolta, not by write date or collection order. Follow this order so you do not miss past-dated documents, detail updates, archiving, or unarchiving that happen later. To show records by write date, sort bywrittenDate after you receive them.
The same id can arrive more than once. Apply items by id in the order you receive them.
ACTIVE: Overwrite the item with the sameid, or add it if none exists.REMOVED: Delete the item with the sameid, or ignore it if none exists.
Collection steps
- Call without a cursor, then keep calling with
nextCursoruntilhasMoreisfalse. - Save the last
nextCursor. The API fillsnextCursoreven whenhasMoreisfalse. Save separate cursors for revenue, expense, and each set of filters. - On your next collection, call with the saved cursor. You receive only the records that changed since then.
400 with INVALID_CURSOR. A cursor issued with type and one issued without it count as different filters. After you change the filters or move from a test key to a live key, start over without a cursor. You can change limit on any page.
Handling new values
Bolta can add newtype values, new fields, and new invoiceType or amendReason values without notice. New evidence types such as cash receipts arrive on the same paths with a new type and a matching object.
- Skip items with an unknown
typeand keep processing. - Ignore unknown fields.
- Keep processing when you receive an unknown enum value.
REMOVED arrives without type, so apply it by id as usual.
Sync request
Bolta collects revenue and expense records periodically, and starts the first collection as soon as you connect in the dashboard. Request a sync only when you need a document just registered with the NTS.
The API only accepts the request with
202 Accepted, and the collection runs asynchronously. There is no path to check collection status. Instead of waiting for it to finish, continue fetching the list with your saved cursor. See Key limits for the request limits. Requests rejected with 409 or 422 do not count toward the limit. nextAvailableAt reflects only the 30-minute interval, not the 24-hour count.
Test key
Test keys return fixed samples regardless of your subscription, without the 5-minute delay. Sync requests do not collect anything, only return an accepted response, and use no quota. The sample’s own business is주식회사 볼타테스트 (1234567890).
Revenue (GET /v1/revenues)
101: Tax invoice issued through Bolta, with two line items102: Zero-rate tax invoice collected from Hometax103: Change in Supply Cost amendment (amendReasonisCHANGE_SUPPLY_COST). Negative amounts, andquantityandunitPricearenullon the line item104: Revenue archived in the dashboard. It changed at the same time as103and comes after it byid
GET /v1/expenses)
201: Tax invoice collected from Hometax202: Tax-exemption invoice.totalTaxand the line itemtaxarenull203: Tax invoice whose details cannot be filled. Address, business type, business item, andmanagerarenull, anditemsis empty
limit=2 to see cursor paging across two pages. Date filters and cursors follow the same rules as with a live key.
Errors
See Error codes for the full list.
