세금계산서 PDF 조회
발행 완료한 세금계산서(정발행, 역발행, 수정세금계산서)의 PDF 다운로드 주소를 조회합니다. 발행을 요청한 API 키로 호출하세요. 포인트를 차감하지 않습니다. 첫 호출이 PDF 생성을 시작합니다. 202를 받으면 Retry-After 초 뒤 같은 요청을 다시 보내세요. 준비되면 API가 200과 5분 동안 유효한 주소를 반환합니다. 주소가 만료되면 다시 호출해 새 주소를 받으세요. 테스트 키는 바로 200과 샘플 PDF 주소를 반환합니다. 세금계산서 PDF 조회 가이드
GET
/
v1
/
taxInvoices
/
{issuanceKey}
/
pdf
세금계산서 PDF 조회
curl --request GET \
--url https://xapi.bolta.io/v1/taxInvoices/{issuanceKey}/pdf \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://xapi.bolta.io/v1/taxInvoices/{issuanceKey}/pdf"
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/taxInvoices/{issuanceKey}/pdf', 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/taxInvoices/{issuanceKey}/pdf",
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/taxInvoices/{issuanceKey}/pdf"
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/taxInvoices/{issuanceKey}/pdf")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://xapi.bolta.io/v1/taxInvoices/{issuanceKey}/pdf")
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": "8D529FAD3EBAE050B79CE943CCC7CEDE",
"status": "READY",
"downloadUrl": "https://example.com/tax-invoice-pdfs/8D529FAD3EBAE050B79CE943CCC7CEDE.pdf",
"downloadUrlExpiresAt": "2026-09-24T03:05:00Z",
"filename": "전자세금계산서_20260924_공급받는자 상호_20260924-10000000-00000001.pdf"
}{
"issuanceKey": "8D529FAD3EBAE050B79CE943CCC7CEDE",
"status": "PENDING",
"downloadUrl": null,
"downloadUrlExpiresAt": null,
"filename": null
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}인증
API 키 뒤에 콜론을 붙여 Base64로 인코딩해 헤더에 넣으세요. Username에 API 키를 입력하고 Password는 비워두세요.
경로 매개변수
발행 요청 응답의 issuanceKey
응답
PDF 준비 완료
세금계산서 PDF 준비 상태와 다운로드 주소
요청한 issuanceKey
PDF 준비 상태. PENDING은 생성 중, READY는 준비 완료입니다.
사용 가능한 옵션:
PENDING, READY PDF 주소. READY일 때만 채우며 5분 동안 유효합니다. 서명값이 들어 있으니 로그에 전체를 남기지 마세요. 테스트 키는 샘플 PDF 주소입니다.
downloadUrl 만료 시각(UTC)
내려받을 때 저장되는 파일 이름. {종류}_{작성일자}_{공급받는자 상호}_{승인번호}.pdf 형식입니다.
세금계산서 PDF 조회
curl --request GET \
--url https://xapi.bolta.io/v1/taxInvoices/{issuanceKey}/pdf \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://xapi.bolta.io/v1/taxInvoices/{issuanceKey}/pdf"
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/taxInvoices/{issuanceKey}/pdf', 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/taxInvoices/{issuanceKey}/pdf",
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/taxInvoices/{issuanceKey}/pdf"
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/taxInvoices/{issuanceKey}/pdf")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://xapi.bolta.io/v1/taxInvoices/{issuanceKey}/pdf")
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": "8D529FAD3EBAE050B79CE943CCC7CEDE",
"status": "READY",
"downloadUrl": "https://example.com/tax-invoice-pdfs/8D529FAD3EBAE050B79CE943CCC7CEDE.pdf",
"downloadUrlExpiresAt": "2026-09-24T03:05:00Z",
"filename": "전자세금계산서_20260924_공급받는자 상호_20260924-10000000-00000001.pdf"
}{
"issuanceKey": "8D529FAD3EBAE050B79CE943CCC7CEDE",
"status": "PENDING",
"downloadUrl": null,
"downloadUrlExpiresAt": null,
"filename": null
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"code": "<string>",
"message": "<string>",
"traceId": "<string>"
}