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

# Error Codes

> A reference for Bolta API error codes.

## Tax invoice issuance API

| Status code | Error code                  | Message                                            |
| ----------- | --------------------------- | -------------------------------------------------- |
| `400`       | `NOT_FOUND_CERTIFICATE`     | No certificate is registered.                      |
| `400`       | `INVALID_TRUSTEE_BUSINESS`  | Invalid trustee business registration number.      |
| `400`       | `INVALID_SUPPLIER_BUSINESS` | No issuer is registered under the current API key. |

## Tax invoice issuance webhook

| Error code                  | Message                                                                          |
| --------------------------- | -------------------------------------------------------------------------------- |
| `INVALID_SUPPLIER_BUSINESS` | The supplier's business registration number is invalid (unregistered or closed). |
| `INVALID_SUPPLIED_BUSINESS` | The recipient's business registration number is invalid.                         |
| `INVALID_TRUSTEE_BUSINESS`  | The trustee's business registration number is invalid (unregistered or closed).  |
| `INTERNAL_SERVER_ERROR`     | An error occurred on the Bolta server.                                           |
| `INVALID_CERTIFICATE`       | The registered certificate is invalid (expired or revoked).                      |

## Issuer registration API

| Status code | Error code                  | Message                               |
| ----------- | --------------------------- | ------------------------------------- |
| `400`       | `INVALID_SUPPLIER_BUSINESS` | Invalid business registration number. |

## Cash receipt API

| Status code | Error code              | Condition                                                                                              |
| ----------- | ----------------------- | ------------------------------------------------------------------------------------------------------ |
| `400`       | `INVALID_REQUEST`       | Request validation or cancellation eligibility failed                                                  |
| `401`       | -                       | API key authentication failed. Empty response body                                                     |
| `403`       | `FORBIDDEN`             | The client does not have access to the issuer                                                          |
| `409`       | `IDEMPOTENCY_CONFLICT`  | Idempotency conflict, cancellation before issuance processing starts, or duplicate active cancellation |
| `500`       | `INTERNAL_SERVER_ERROR` | Internal server error                                                                                  |
| `503`       | `SERVICE_UNAVAILABLE`   | Internal API communication error during issuance or cancellation                                       |

## Cash receipt webhook

When cash receipt issuance or cancellation fails, the API includes one of the following codes in `data.cause.code` in the webhook payload and `failure.code` in the status response.

| Error code                      | Payload message                          |
| ------------------------------- | ---------------------------------------- |
| `INVALID_ISSUER`                | 공급자 정보 또는 현금영수증 발행 등록 상태를 확인해주세요.        |
| `INVALID_RECIPIENT_IDENTIFIER`  | 현금영수증 발급 수단 정보를 확인해주세요.                  |
| `ORIGINAL_ISSUANCE_FAILED`      | 원본 현금영수증 발행이 실패해 취소 요청을 처리할 수 없습니다.      |
| `CANCELLATION_TARGET_NOT_FOUND` | 이미 취소되었거나 취소할 수 없는 거래입니다.                |
| `UNKNOWN`                       | 현금영수증 처리에 실패했습니다. 문제가 계속되면 고객센터로 문의해주세요. |

`ORIGINAL_ISSUANCE_FAILED` and `CANCELLATION_TARGET_NOT_FOUND` are returned only with `CASH_RECEIPT_CANCEL_FAILED`.

* `ORIGINAL_ISSUANCE_FAILED`: Bolta accepted the cancellation request while the original issuance was in progress, but the original issuance later failed
* `CANCELLATION_TARGET_NOT_FOUND`: The cancellation target could not be found, was already canceled, or already had a cancellation request

## Tax invoice issuance deadline API

| Status code | Error code        | Condition                                                                                                                |
| ----------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `400`       | `INVALID_REQUEST` | `date` is missing, is not in `YYYY-MM-DD` format or is not a real date, or falls in a month without a supported deadline |
| `401`       | -                 | API key authentication failed. Empty response body                                                                       |

See [Tax Invoice Issuance Deadline](/en/docs/api-introduction/tax-invoice-issue-due-date) for details.

## Business registration status API

| Status code | Error code                             | Condition                                                                                                                                                                                   |
| ----------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | `INVALID_REQUEST`                      | Missing business registration number, input that is not ten digits, or a test key looking up a number outside the documented list. For bulk lookup, an empty array or more than 100 numbers |
| `400`       | `INVALID_BUSINESS_REGISTRATION_NUMBER` | Business registration number with an invalid checksum                                                                                                                                       |
| `401`       | -                                      | API key authentication failed. Empty response body                                                                                                                                          |
| `402`       | `PAYMENT_REQUIRED`                     | Insufficient balance on a live key                                                                                                                                                          |
| `403`       | `FORBIDDEN`                            | No access to the requested resource                                                                                                                                                         |
| `429`       | `RATE_LIMITED`                         | Partner call quota or Bolta's service-wide lookup limit exceeded. The `Retry-After` header carries the seconds remaining                                                                    |
| `500`       | `INTERNAL_SERVER_ERROR`                | Internal server error                                                                                                                                                                       |
| `503`       | `LOOKUP_UNAVAILABLE`                   | Cannot check the business registration status. For bulk lookup, no number could be checked                                                                                                  |
| `503`       | `SERVICE_UNAVAILABLE`                  | Temporary internal API communication error                                                                                                                                                  |

When a bulk lookup cannot check only some numbers, the API returns `200` instead of an error and sets `status` to `null` for those items. See [Business Registration Status](/en/docs/api-introduction/business-registration-status) for details.

## Revenue and expense API

| Status code | Error code              | Condition                                                                                              |
| ----------- | ----------------------- | ------------------------------------------------------------------------------------------------------ |
| `400`       | `INVALID_REQUEST`       | Invalid date format, `from` later than `to`, or an invalid `type` or `limit`                           |
| `400`       | `INVALID_CURSOR`        | Modified or malformed cursor, or the path, filters, or key mode differ from when the cursor was issued |
| `401`       | -                       | API key authentication failed. Empty response body                                                     |
| `402`       | `PLAN_UPGRADE_REQUIRED` | Plan below Standard (not an insufficient point balance)                                                |
| `409`       | `SYNC_IN_PROGRESS`      | A collection for the same path is already running                                                      |
| `422`       | `NO_SOURCE_CONNECTED`   | No revenue or expense connection                                                                       |
| `429`       | `SYNC_RATE_LIMITED`     | Sync request limit exceeded. The `Retry-After` header carries the seconds remaining                    |
| `500`       | `INTERNAL_SERVER_ERROR` | Internal server error                                                                                  |
| `503`       | `FEED_UNAVAILABLE`      | Records temporarily unavailable. Call again with the same cursor                                       |
| `503`       | `SYNC_UNAVAILABLE`      | Temporarily unable to evaluate the sync request                                                        |
| `503`       | `SERVICE_UNAVAILABLE`   | Temporary internal API communication error                                                             |

See [Revenue and Expense](/en/docs/api-introduction/revenue-expense) for details.

## Bank account transactions API

| Status code | Error code                   | Condition                                                                                  |
| ----------- | ---------------------------- | ------------------------------------------------------------------------------------------ |
| `400`       | `INVALID_REQUEST`            | Invalid date format, `from` later than `to`, or an invalid `transactionType` or `limit`    |
| `400`       | `INVALID_CURSOR`             | Modified or malformed cursor, or filters or API key differ from when the cursor was issued |
| `401`       | -                            | API key authentication failed. Empty response body                                         |
| `402`       | `PLAN_UPGRADE_REQUIRED`      | Plan below Standard (not an insufficient point balance)                                    |
| `404`       | `BANK_ACCOUNT_NOT_FOUND`     | `bankAccountId` that does not exist or belongs to another business                         |
| `409`       | `SYNC_IN_PROGRESS`           | A sync is already running                                                                  |
| `422`       | `BANK_ACCOUNT_NOT_CONNECTED` | No bank account is connected                                                               |
| `429`       | `SYNC_RATE_LIMITED`          | Sync request limit exceeded. The `Retry-After` header carries the seconds remaining        |
| `500`       | `INTERNAL_SERVER_ERROR`      | Internal server error                                                                      |
| `503`       | `SYNC_UNAVAILABLE`           | Temporarily unable to evaluate the sync request                                            |
| `503`       | `SERVICE_UNAVAILABLE`        | Temporary internal API communication error                                                 |

See [Bank Account Transactions](/en/docs/api-introduction/bank-account-transactions) for details.

## Bank account holder API

When a holder lookup fails, a single inquiry returns HTTP 400, while a bulk inquiry returns the item error in `results[].error` with HTTP 200.

| Status code | Error code                             | Condition                                                                                            |
| ----------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `400`       | `INVALID_REQUEST`                      | Invalid request format, more than 100 accounts, or a test key request outside the fixed account list |
| `400`       | `ACCOUNT_NOT_VERIFIED`                 | The account could not be verified                                                                    |
| `400`       | `ACCOUNT_NOT_AVAILABLE`                | The virtual account cannot accept deposits                                                           |
| `400`       | `AMOUNT_REQUIRED`                      | The virtual account has a fixed deposit amount but `amount` is missing                               |
| `400`       | `AMOUNT_MISMATCH`                      | The `amount` sent differs from the amount fixed on the virtual account                               |
| `400`       | `AMOUNT_VERIFICATION_UNAVAILABLE`      | The fixed-amount virtual account cannot be looked up right now                                       |
| `400`       | `UNSUPPORTED_BANK`                     | Bank code that does not support account holder lookup                                                |
| `401`       | -                                      | API key authentication failed. Empty response body                                                   |
| `402`       | `PAYMENT_REQUIRED`                     | Insufficient point balance                                                                           |
| `403`       | `FORBIDDEN`                            | No access to the requested resource                                                                  |
| `409`       | `POINT_RESERVED_BY_IN_FLIGHT_REQUESTS` | Balance is short once requests in progress are counted                                               |
| `429`       | `RATE_LIMITED`                         | Daily lookup limit exceeded. The `Retry-After` header carries the seconds remaining                  |
| `500`       | `INTERNAL_SERVER_ERROR`                | Internal server error                                                                                |
| `503`       | `BANK_UNAVAILABLE`                     | Bank maintenance or a connection error                                                               |
| `503`       | `LOOKUP_UNAVAILABLE`                   | Unable to evaluate the lookup protection limit                                                       |
| `503`       | `SERVICE_UNAVAILABLE`                  | Temporary internal API communication error                                                           |

See [Bank Account Holder](/en/docs/api-introduction/bank-account-holder) for details.

## Document issuance API

| Status code | Error code                             | Condition                                                                                                                                                                                                                                                 |
| ----------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | `INVALID_REQUEST`                      | Invalid request format, missing `language` for a business registration proof, invalid corporation registration number, missing `cancelledEntries` for a corporate registry, or a test key request with a corporation registration number outside the list |
| `400`       | `PERIOD_NOT_CLOSED`                    | The fiscal year of the standard financial statement proof has not ended                                                                                                                                                                                   |
| `401`       | -                                      | API key authentication failed. Empty response body                                                                                                                                                                                                        |
| `402`       | `PAYMENT_REQUIRED`                     | Insufficient point balance                                                                                                                                                                                                                                |
| `404`       | `DOCUMENT_ISSUANCE_NOT_FOUND`          | Unknown `issuanceKey`, or a request accepted under another partner or with a key of the other mode                                                                                                                                                        |
| `409`       | `CERTIFICATE_REQUIRED`                 | Joint certificate not registered or expired. Hometax documents only                                                                                                                                                                                       |
| `409`       | `IDEMPOTENCY_CONFLICT`                 | Different body for the same `Bolta-Client-Reference-Id`                                                                                                                                                                                                   |
| `409`       | `OUTSIDE_SERVICE_HOURS`                | Requested outside the document's [request hours](/en/docs/api-introduction/document-issuance#issuance-hours)                                                                                                                                              |
| `409`       | `TARGET_BUSY`                          | Another request is issuing the same corporate registry document with the same `cancelledEntries` for the same corporation                                                                                                                                 |
| `409`       | `POINT_RESERVED_BY_IN_FLIGHT_REQUESTS` | Balance is short once requests in progress are counted                                                                                                                                                                                                    |
| `429`       | `TOO_MANY_IN_FLIGHT`                   | Five requests are already in progress                                                                                                                                                                                                                     |
| `500`       | `INTERNAL_SERVER_ERROR`                | Internal server error                                                                                                                                                                                                                                     |
| `503`       | `DOCUMENT_ISSUANCE_UNAVAILABLE`        | Bolta cannot issue the document right now. Request again shortly                                                                                                                                                                                          |
| `503`       | `SERVICE_UNAVAILABLE`                  | Temporary internal API communication error                                                                                                                                                                                                                |

See [Document Issuance](/en/docs/api-introduction/document-issuance) for details.

## Tax invoice PDF API

| Status code | Error code                           | Condition                                                                                           |
| ----------- | ------------------------------------ | --------------------------------------------------------------------------------------------------- |
| `400`       | `TAX_INVOICE_RETRIEVE_NOT_AVAILABLE` | Issuance not finished or failed. For reverse issuance, not yet approved or rejected by the supplier |
| `400`       | `INVALID_DOCUMENT`                   | The PDF cannot be generated from the document data stored in Bolta                                  |
| `401`       | -                                    | API key authentication failed. Empty response body                                                  |
| `403`       | `FORBIDDEN`                          | Not the API key that requested the issuance                                                         |
| `404`       | `NOT_FOUND`                          | Unknown `issuanceKey`                                                                               |
| `429`       | `TOO_MANY_IN_FLIGHT`                 | 10 PDFs in progress for the same business or 20 for the same API key                                |
| `500`       | `INTERNAL_SERVER_ERROR`              | Internal server error                                                                               |
| `503`       | `PDF_GENERATION_FAILED`              | The PDF could not be generated after several attempts                                               |
| `503`       | `SERVICE_UNAVAILABLE`                | Temporary internal API communication error                                                          |

See [Tax Invoice PDF](/en/docs/api-introduction/tax-invoice-pdf) for details.

## Common errors

| Status code | Error code              | Message                                                                                                                                                             |
| ----------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | `INVALID_REQUEST`       | The request could not be processed. This response is returned when a required parameter is missing or a parameter format is invalid. Check your request parameters. |
| `404`       | `NOT_FOUND`             | The requested resource does not exist. Double-check the API address you requested.                                                                                  |
| `500`       | `INTERNAL_SERVER_ERROR` | An error occurred on the Bolta server.                                                                                                                              |
