서류 발급 결과 조회
발급 요청의 상태를 조회합니다. 홈택스 서류는 보통 30초 안에 끝나니 5~10초 간격으로 조회하세요. 법인등기는 몇 분이 걸립니다. 같은 사업자의 홈택스 서류를 여러 건 보내면 뒤 요청은 앞 요청이 끝난 뒤 시작합니다. 기다리는 시간이 1시간을 넘기면 FAILED로 바뀌고 포인트를 차감하지 않습니다. COMPLETED가 되면 downloadUrl로 원본 PDF를 내려받으세요. 주소는 홈택스 서류 5분, 법인등기 1분(테스트 키 샘플 주소는 5분) 동안 유효하고, 만료되면 다시 조회해 새 주소를 받으세요. 파일 이름은 {서류명}_{사업자등록번호}_{발급일}.pdf이고 법인등기는 사업자등록번호 대신 법인등록번호를 씁니다. 서류 발급 가이드
curl --request GET \
--url https://xapi.bolta.io/v1/documentIssuances/{issuanceKey} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"issuanceKey": "00000000-0000-4000-8000-000000000001",
"clientReferenceId": "order-20260919-001",
"type": "BUSINESS_REGISTRATION_PROOF",
"language": "KO",
"status": "COMPLETED",
"requestedAt": "2026-09-19T03:00:00Z",
"issuedOn": "2026-09-19",
"retentionExpiresAt": "2026-10-19T03:00:30Z",
"downloadUrl": "https://example.com/documents/00000000-0000-4000-8000-000000000001.pdf",
"downloadUrlExpiresAt": "2026-09-19T03:05:30Z"
}인증
API 키 뒤에 콜론을 붙여 Base64로 인코딩해 헤더에 넣으세요. Username에 API 키를 입력하고 Password는 비워두세요.
경로 매개변수
발급 요청 응답의 issuanceKey
응답
조회 성공
서류 발급 요청과 결과
발급 요청 식별자
요청에 사용한 Bolta-Client-Reference-Id
서류 종류
BUSINESS_REGISTRATION_PROOF, BUSINESS_REGISTRATION_CERTIFICATE, TAX_PAYMENT_CERTIFICATE, VAT_TAX_BASE_PROOF, STANDARD_FINANCIAL_STATEMENT_PROOF, CORPORATE_REGISTRY_VIEW, CORPORATE_REGISTRY_ISSUANCE 발급한 서류의 언어. 사업자등록증명이 아닌 서류는 항상 KO입니다.
KO, EN 발급 상태
ACCEPTED: 접수, 기관 신청 전SUBMITTED: 기관 신청 완료, 결과 대기COMPLETED: 발급 완료FAILED: 발급 실패. 포인트를 차감하지 않습니다. 홈택스 서류는 인증서, 체납, 신고 여부를 확인하세요. 법인등기는 법인등록번호와 법인의 종류, 상태를 확인하세요. 문제가 없으면 잠시 뒤 다시 요청하세요. 다시 요청할 때는 새Bolta-Client-Reference-Id를 쓰세요ACTION_REQUIRED: 볼타가 결과 확인 중. 같은 서류를 다시 요청하지 말고COMPLETED또는FAILED로 바뀔 때까지 기다리세요
ACCEPTED, SUBMITTED, COMPLETED, FAILED, ACTION_REQUIRED 요청을 접수한 시각(UTC)
원본 PDF에 적힌 발급일. 법인등기는 열람일 또는 발급일입니다. COMPLETED에서만 채웁니다.
보관 만료 시각(UTC). 발급 후 30일입니다. COMPLETED에서만 채웁니다.
원본 PDF 주소. 홈택스 서류는 5분, 법인등기는 1분 동안 유효합니다. COMPLETED이고 보관 기간 안일 때만 채웁니다. 테스트 키는 서류 종류와 관계없이 5분 동안 유효한 샘플 PDF 주소입니다.
downloadUrl 만료 시각(UTC)
curl --request GET \
--url https://xapi.bolta.io/v1/documentIssuances/{issuanceKey} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://xapi.bolta.io/v1/documentIssuances/{issuanceKey}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"issuanceKey": "00000000-0000-4000-8000-000000000001",
"clientReferenceId": "order-20260919-001",
"type": "BUSINESS_REGISTRATION_PROOF",
"language": "KO",
"status": "COMPLETED",
"requestedAt": "2026-09-19T03:00:00Z",
"issuedOn": "2026-09-19",
"retentionExpiresAt": "2026-10-19T03:00:30Z",
"downloadUrl": "https://example.com/documents/00000000-0000-4000-8000-000000000001.pdf",
"downloadUrlExpiresAt": "2026-09-19T03:05:30Z"
}