# PDF 파일 합치기



PDF 파일 두 개 이상을 올린 순서대로 이어 붙여 PDF 파일 하나로 돌려줍니다. 응답은 JSON이 아닌 PDF 파일입니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/pdf_merge 응답 필드

## API 요청: POST /rest/pdf_merge



### 입력

- `pdf1` (file, 필수): 결과에서 가장 앞에 올 PDF 파일입니다. multipart/form-data로 전송하며, 파일 경로가 아니라 파일 본문을 첨부합니다.

- `pdf2` (file, 필수): 두 번째로 이어 붙일 PDF 파일입니다. multipart/form-data로 전송하며, 파일 경로가 아니라 파일 본문을 첨부합니다.

- `pdf3` (file, 선택): 세 번째 PDF 파일입니다. 더 합치려면 pdf4, pdf5 … 처럼 번호를 이어서 보냅니다.



### 응답 명세

```json

{
  "type": "string",
  "format": "binary"
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/pdf_merge' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'pdf1=@./cover.pdf' \
  --form 'pdf2=@./body.pdf' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

### Node.js (서버 ESM)

```javascript

import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("pdf1", new Blob([await readFile("./cover.pdf")]), "cover.pdf");
form.append("pdf2", new Blob([await readFile("./body.pdf")]), "body.pdf");
const response = await fetch("https://apick.app/rest/pdf_merge", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
if ((response.headers.get("content-type") || "").includes("json")) {
  throw new Error(JSON.stringify(await response.json()));
}
const { writeFile } = await import("node:fs/promises");
await writeFile("result.bin", new Uint8Array(await response.arrayBuffer()));

```

### python

```python

import os
import requests
parts = [
    ("pdf1", ("cover.pdf", open("./cover.pdf", "rb"))),
    ("pdf2", ("body.pdf", open("./body.pdf", "rb"))),
]
response = requests.request("POST", "https://apick.app/rest/pdf_merge",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120), stream=True)
response.raise_for_status()
if "json" in response.headers.get("Content-Type", ""):
    raise RuntimeError(response.json())
with open("result.bin", "wb") as output:
    for chunk in response.iter_content(65536):
        output.write(chunk)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'pdf1' => new CURLFile('./cover.pdf'),
    'pdf2' => new CURLFile('./body.pdf'),
];
$curl = curl_init('https://apick.app/rest/pdf_merge');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE) ?: "";
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
if (strpos($type, "json") !== false) { throw new RuntimeException($body); }
file_put_contents('result.bin', $body);

```

## 사용 예시 1. 두 PDF를 하나로

표지와 본문처럼 따로 만든 PDF를 순서대로 합칩니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/pdf_merge' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'pdf1=@./cover.pdf' \
  --form 'pdf2=@./body.pdf' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 응답 `Content-Type`이 `application/pdf`이면 `output.pdf`로 저장합니다.

- 응답 헤더 `cost`는 합친 전체 페이지 수 × 페이지당 요금입니다.

## 사용 예시 2. 세 개 이상 합치기

첨부 서류까지 붙일 때는 `pdf3`, `pdf4` … 처럼 번호를 빠짐없이 이어서 보냅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/pdf_merge' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form 'pdf1=@./cover.pdf' \
  --form 'pdf2=@./body.pdf' \
  --form 'pdf3=@./appendix.pdf' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 번호가 중간에 빠지면 그 뒤 파일은 합쳐지지 않습니다. 결과 페이지 수로 확인하세요.

## 코드·오류

## 상세 기능·요금

업로드 용량 제한: 1GB multipart/form-data 요청에 포함된 첨부파일 합계는 최대 1GB입니다. 처리시간은 재생시간, 페이지 수와 파일 형식에 따라 늘어날 수 있습니다. 제한을 초과하면 HTTP 413과 REQUEST_TOO_LARGE 오류가 반환되며 과금되지 않습니다. 이용 전 확인 표지·본문·첨부 서류처럼 따로 만든 PDF를 제출용 파일 하나로 묶을 때 사용합니다. 파일 필드는 pdf1, pdf2, pdf3 … 처럼 1부터 빠짐없이 번호를 붙입니다. pdf1과 pdf2는 필수이고, 번호 순서대로 합쳐집니다. 번호가 중간에 빠지면 그 뒤의 파일은 합치지 않습니다. 요금은 합친 결과의 전체 페이지당 2P입니다(3페이지 + 5페이지 = 8페이지분). 실패·시간 초과 응답은 과금되지 않습니다. 실제 차감액은 응답 헤더 cost로 확인하세요.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/pdf_merge 인증 헤더Authorization: Bearer 내 계정의 API 인증키 본문 형식multipart/form-data 요청 예시 form-data 전체 예제 보기

## 상세 응답

성공하면 합쳐진 PDF 본문이 바로 옵니다. 내려받기 파일명은 output.pdf입니다. 응답 헤더 필드타입설명 successinteger1이면 합치기에 성공한 것입니다. costinteger이번 요청에서 차감된 포인트입니다(전체 페이지 수 × 페이지당 요금). msinteger처리 시간(밀리초)입니다. Content-Typestringapplication/pdf

## 상세 코드·정책

오류와 대처 실패하면 PDF 대신 JSON이 옵니다. HTTP 상태와 Content-Type을 먼저 확인하고, JSON이면 data.error 문구를 기록하세요. 실패 응답의 api.cost는 0입니다. HTTPdata.error대처 424첨부파일이 없습니다.pdf1과 pdf2를 모두 보냈는지 확인하세요. 424알 수 없는 이유로 실패했습니다.PDF가 아니거나 손상된 파일이 섞여 있습니다. 각 파일을 다시 저장해 요청하세요. 408처리 시간 초과로 실패했습니다.data.success가 3입니다. 파일 수를 줄여 나눠 합친 뒤 결과를 다시 합치세요.

## 상세 예제

호출 예시 파일 2개를 함께 올리는 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다. JavaScript 예시 form-data 전체 예제 보기 Python 예시 form-data 전체 예제 보기
