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

# Document Issuance

> Issue National Tax Service certificates such as a business registration proof or tax payment certificate from Hometax and download the original PDF.

## What you can issue

Issue National Tax Service certificates from Hometax and download the original PDF. Issuance does not finish within the request. Retrieve the result with the `issuanceKey` from the accepted response.

| Path                                      | Purpose                      |
| ----------------------------------------- | ---------------------------- |
| `POST /v1/documentIssuances`              | Request a document           |
| `GET /v1/documentIssuances/{issuanceKey}` | Retrieve the issuance result |

## Requirements

* You can issue documents only for the business that owns the API key.
* Register a joint certificate in the Bolta dashboard.
* Each document deducts **500 points**. A failed issuance deducts nothing.

## Supported documents

| `document.type`                      | Document                                  | Input                                         |
| ------------------------------------ | ----------------------------------------- | --------------------------------------------- |
| `BUSINESS_REGISTRATION_PROOF`        | Business registration proof               | `language`: `KO`, `EN`                        |
| `BUSINESS_REGISTRATION_CERTIFICATE`  | Business registration certificate reissue | `reason`: reissue reason, up to 10 characters |
| `TAX_PAYMENT_CERTIFICATE`            | Tax payment certificate                   | `purpose`: `PAYMENT_RECEIPT`, `OTHER`         |
| `VAT_TAX_BASE_PROOF`                 | VAT tax base proof                        | `from`, `to`: tax period `YYYY-MM`            |
| `STANDARD_FINANCIAL_STATEMENT_PROOF` | Standard financial statement proof        | `fiscalYearEnd`: fiscal year end `YYYY-MM`    |

* **Business registration certificate reissue**: Bolta prints `reason` as is on the certificate. Enter the actual reason, for example `분실` (lost). The API trims leading and trailing spaces. It returns `400 INVALID_REQUEST` if the reason is empty, longer than 10 characters, or contains control characters.
* **English business registration proof**: Bolta issues it with the English business information registered in Hometax. If that information is missing or malformed, the request ends as `FAILED` and deducts no points. To change the English details, update them in Hometax first.
* **Tax payment certificate**: Hometax does not issue it while national taxes are in arrears. The emigration purpose is not supported. The certificate is valid for 30 days from the issue date.
* **VAT tax base proof**: Set `from` to January or July and `to` to June or December. `from` cannot be later than `to`; otherwise the API returns `400 INVALID_REQUEST`. One request covers up to five years.
* **Standard financial statement proof**: For a corporation with a December year end, enter `2025-12` for fiscal year 2025. For a sole proprietor, only the year is used. Only fiscal years with a filed corporate or comprehensive income tax return can be issued.

## Request a document

```bash theme={"dark"}
curl -X POST https://xapi.bolta.io/v1/documentIssuances \
  -H "Authorization: Basic {apiKey}" \
  -H "Bolta-Client-Reference-Id: order-20260919-001" \
  -H "Content-Type: application/json" \
  -d '{
    "businessRegistrationNumber": "1234567890",
    "document": { "type": "BUSINESS_REGISTRATION_PROOF", "language": "KO" }
  }'
```

Set a new `Bolta-Client-Reference-Id` (1 to 255 characters) for each request. If you did not receive a response, resend the same value and body. The API returns the existing request.

The API returns `202 Accepted` with the response below.

```json theme={"dark"}
{
  "issuanceKey": "00000000-0000-4000-8000-000000000001",
  "clientReferenceId": "order-20260919-001",
  "type": "BUSINESS_REGISTRATION_PROOF",
  "language": "KO",
  "status": "ACCEPTED",
  "requestedAt": "2026-09-19T03:00:00Z",
  "issuedOn": null,
  "retentionExpiresAt": null,
  "downloadUrl": null,
  "downloadUrlExpiresAt": null
}
```

The response `language` is the language of the issued document. It is always `KO` for documents other than the business registration proof.

## Retrieve the result

```bash theme={"dark"}
curl https://xapi.bolta.io/v1/documentIssuances/{issuanceKey} \
  -H "Authorization: Basic {apiKey}"
```

Issuance usually finishes within 30 seconds. Poll every 5 to 10 seconds. Bolta processes one request at a time for each business. If you send several at once, each request starts after the previous one finishes.

| `status`          | Meaning                                      | Next step                                                                                                        |
| ----------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `ACCEPTED`        | Accepted                                     | Wait                                                                                                             |
| `SUBMITTED`       | Submitted to Hometax, waiting for the result | Wait                                                                                                             |
| `COMPLETED`       | Issued                                       | Download from `downloadUrl`                                                                                      |
| `FAILED`          | Issuance failed                              | Check the certificate, tax arrears, and filing status, then request again with a new `Bolta-Client-Reference-Id` |
| `ACTION_REQUIRED` | Bolta is checking the result                 | Do not request the same document again. It changes to `COMPLETED` or `FAILED` after the check                    |

A `COMPLETED` response fills in these fields.

| Field                  | Description                                          |
| ---------------------- | ---------------------------------------------------- |
| `issuedOn`             | Issue date printed on the original PDF, `YYYY-MM-DD` |
| `retentionExpiresAt`   | Retention end time. 30 days after issuance           |
| `downloadUrl`          | Original PDF URL. Valid for 5 minutes                |
| `downloadUrlExpiresAt` | URL expiry time                                      |

When the URL expires, retrieve the result again to get a new one. After the retention period, `downloadUrl` is `null`.

The downloaded file is named `{document name}_{business registration number}_{issue date}.pdf` with the Korean document name, for example `사업자등록증명_123-45-67890_20260919.pdf`. An English proof starts with `사업자등록증명(영문)_...`. Clients that do not support UTF-8 file names get an ASCII name such as `business-registration-proof_1234567890_20260919.pdf`. The same document downloaded more than once on the same day gets the same file name, so store the file together with its `issuanceKey`.

## Test key

Test keys do not submit to Hometax and deduct no points. They accept only the business registration numbers below.

| Business registration number | Result                 |
| ---------------------------- | ---------------------- |
| `1000000014`                 | `COMPLETED` right away |
| `1000000071`                 | `FAILED` right away    |

For `1000000014`, the `COMPLETED` result includes a sample PDF URL. The sample is not a real document and has the same content for every document type. Its issue date is fixed at January 1, 2026. The URL lifetime (5 minutes), retrieving again after expiry, and the file naming rule work the same as live issuance, so use a test key to check your download integration.

## Errors

| Status code | Error code                             | Condition                                                                                                                                |
| ----------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `400`       | `INVALID_REQUEST`                      | Invalid request format, or a test key request with a number outside the list                                                             |
| `401`       | -                                      | API key authentication failed. Empty response body                                                                                       |
| `402`       | `PAYMENT_REQUIRED`                     | Insufficient point balance. Top up in the Developer Center                                                                               |
| `403`       | `TARGET_NOT_ALLOWED`                   | Number that does not belong to the business that owns the API key                                                                        |
| `404`       | `DOCUMENT_ISSUANCE_NOT_FOUND`          | Unknown `issuanceKey`                                                                                                                    |
| `409`       | `CERTIFICATE_REQUIRED`                 | Joint certificate not registered or expired                                                                                              |
| `409`       | `IDEMPOTENCY_CONFLICT`                 | Different body for the same `Bolta-Client-Reference-Id`                                                                                  |
| `409`       | `POINT_RESERVED_BY_IN_FLIGHT_REQUESTS` | Balance is short once requests in progress are counted. Top up, or request again after they finish                                       |
| `429`       | `TOO_MANY_IN_FLIGHT`                   | Five requests are already in progress. Requests sent at the same time are also accepted only up to five. Request again after they finish |
