Skip to main content

Processing flow

Cash receipt issuance and cancellation are asynchronous. The API first returns 202 Accepted and an issuanceKey. Check the final result via webhook or the status API.
  1. Webhook - the API sends a result event to your registered URL. Register a webhook to receive results without polling.
  2. Status API - query the current status with Bolta-Client-Reference-Id.
202 means that the API accepted the request. It does not confirm issuance or cancellation. Always check the final result via webhook or the status API.
Final status and webhook timing depend on the key and the processing result.
  • Test key - You can retrieve the final status as soon as the request is processed. The automatic webhook is sent no sooner than 10 seconds after the API accepts the request.
  • Live key - Some results are finalized quickly. A request that remains in progress or needs its issuance result confirmed can be finalized after 17:00 KST on the following day.
Bolta sends the result webhook after the final status changes, so it does not guarantee receipt exactly at 17:00 KST. For exact timing, see Webhook Delivery Time.

Issuance

To issue a cash receipt, call POST /v1/cashReceipts.
Register the supplier with the Register Issuer API, then register its certificate. See Certificate Registration Integration.
If the same API key retries with the same client reference ID, request content, and request type, the API returns 202 Accepted with the existing request’s issuanceKey. If the request content or type differs, the API returns 409 Conflict with IDEMPOTENCY_CONFLICT. This rule applies to both issuance and cancellation requests.
The API returns an issuance key (issuanceKey). Store it for cancellation requests.

Recipient types

Set recipient.value based on recipient.type.
Do not set value for SELF. Provide a valid value for PHONE and BUSINESS_REGISTRATION_NUMBER.

Supplier information

Amount

Set each field in amount to no more than 9,999,999,999. The total (supplyAmount + vatAmount + taxFreeAmount) must also be no greater than 9,999,999,999 and greater than 0. If you omit taxFreeAmount, the API treats it as 0.

Status

Query the processing status with the Bolta-Client-Reference-Id used in the issuance or cancellation request.
Use status to determine success or failure. If the request failed, check failure for details. With a test key, the status can become final after the request is processed before the automatic webhook arrives at least 10 seconds later. After successful issuance, the API also returns the cash receipt approval number in cashReceiptApprovalNumber. Do not resubmit a live-key request just because it remains PENDING or REQUEST_SUCCESS. A request that remains in progress or needs its issuance result confirmed can be finalized after 17:00 KST on the following day. Check the final result via the status API or webhook.

Cancellation

You can fully cancel a cash receipt whose issuance processing was accepted. You can cancel it before its Hometax issuance is final, but not while the original request is PENDING. Partial cancellation is not supported. Set {issuanceKey} in the path to the issuanceKey from the issuance response.
Set the cancellation request’s Bolta-Client-Reference-Id to a different value from the issuance request. Check the final result via webhook or the status API.

Reproducing a failure webhook (testing)

When calling the issuance or cancellation API with a test key, set the Bolta-Webhook-Test-Code header to a failure code. The API sends the corresponding failure webhook. Do not use this header in production (live).
For the list of failure codes, see Error codes.