複数PDF非同期生成
POST /file/async/multiple エンドポイントは、指定されたデザインと複数のパラメータから複数のPDFファイルを非同期的に生成します。
エンドポイント情報
- URL:
https://api.re-port-flow.com/v1/file/async/multiple - メソッド:
POST - 認証:
appkeyヘッダーが必要 - タイムアウト: なし(非同期処理)
- リクエストサイズ上限: 50MB(Base64エンコード後、実質約37MB相当)
使用例
cURL
curl -X POST https://api.re-port-flow.com/v1/file/async/multiple \
-H "appkey: your-application-key" \
-H "Content-Type: application/json" \
-d '{
"designId": "550e8400-e29b-41d4-a716-446655440000",
"version": 1,
"contents": [
{
"fileName": "invoice_001.pdf",
"shareType": "01",
"passcodeEnabled": false,
"params": { "customerName": "山田太郎", "invoiceNumber": "INV-001" }
},
{
"fileName": "invoice_002.pdf",
"shareType": "01",
"passcodeEnabled": false,
"params": { "customerName": "佐藤花子", "invoiceNumber": "INV-002" }
}
]
}'
リクエストパラメータ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
designId | string (UUID) | ✓ | デザインID |
version | integer | ✓ | バージョン番号 |
contents | array | ✓ | ContentDtoの配列(最小1件) |
contents[].fileName | string | ✓ | ファイル名(/ \\ : * ? " < > | および制御文字以外は使用可能。配列内で一意であること(大文字・小文字は区別 しない)) |
contents[].shareType | string | - | 共有タイプ(リクエストは数値コード)。"01"=ワークスペース内共有(デフォルト) / "02"=招待者共有 / "03"=公開URL共有。レスポンスの share.shareType は workspace / invited / public の人間可読な名前で返ります |
contents[].passcodeEnabled | boolean | - | パスコード保護(デフォルト: false) |
contents[].passthrough | object | - | レスポンスの files[].passthrough に透過する任意のメタデータ(例: { "pageId": "abc123" }) |
contents[].params | object | ✓ | パラメータ(デザインパラメータ取得APIで構造を確認可能) |
レスポンス
成功時 (202 Accepted)
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://api.re-port-flow.com/v1/file/download/{requestId}",
"files": [
{
"fileName": "invoice_001.pdf",
"fileId": "aaa111",
"passthrough": { "pageId": "abc123" },
"share": {
"shareType": "workspace",
"url": "https://app.re-port-flow.com/file/{requestId}/aaa111",
"passcodeEnabled": false
}
},
{
"fileName": "invoice_002.pdf",
"fileId": "bbb222",
"share": {
"shareType": "workspace",
"url": "https://app.re-port-flow.com/file/{requestId}/bbb222",
"passcodeEnabled": false
}
}
]
}
| フィールド | 型 | 説明 |
|---|---|---|
requestId | string (UUID) | リクエストID(ZIPダウンロードエンドポイントで使用) |
url | string (URI) | ZIPダウンロードURL |
files | array | 各PDFファイルの情報 |
files[].fileName | string | PDFファイル名 |
files[].fileId | string | 個別ファイルID(個別ダウンロードエンドポイントで使用) |
files[].passthrough | object | リクエスト時に指定した contents[].passthrough の値(指定時のみ) |
files[].share.shareType | string | 共有タイプ(workspace / invited / public) |
files[].share.url | string | ファイル表示URL |
files[].share.passcodeEnabled | boolean | パスコード有効フラグ |
files[].share.passcode | string | サーバー生成パスコード(passcodeEnabled=true かつ生成直後のみ) |
passthrough の使い所
ReportFlow はセキュリティとペイロードサイズの観点から、レスポンスや
Webhook 通知に params(生成データ)を返しません。
受信側で「どの業務レコードに対する PDF か」を識別したい場合は、
リクエスト時に passthrough に自社DBのIDなどを入れてください。
レスポンスや Webhook でそのまま返却されます。
{
"fileName": "invoice.pdf",
"passthrough": { "invoiceId": "INV-001", "tenantId": "acme" },
"params": { "customerName": "山田太郎", "amount": 10000 }
}
Webhook 受信時に passthrough の値がそのまま返るため、invoiceId
から DB を引いて該当レコードを更新する、といった処理が組めます。
params(顧客名や金額)は外部に送信されません。
エラー時
単一PDF同期生成と同様のエラーレスポンスに加え、以下のエラーが返される場合があります。
400 Bad Request(fileName 重複)
{
"statusCode": 400,
"message": [
"contents 内の fileName が重複しています(大文字・小文字は区別されません)。各ファイルには一意の名前を指定してください。"
],
"error": "Bad Request"
}
原因: contents 配列内に同じ fileName(大文字・小文字の違いのみを含む)が複数存在する
ユースケース
大量請求書の一括生成
async function generateBulkInvoices(invoices) {
const batchSize = 100;
const batches = chunkArray(invoices, batchSize);
const results = [];
for (const [index, batch] of batches.entries()) {
console.log(`バッチ ${index + 1}/${batches.length} 処理中...`);
const contents = batch.map(invoice => ({
fileName: `invoice_${invoice.number}.pdf`,
shareType: '01',
passcodeEnabled: false,
params: invoice
}));
const response = await axios.post(
'https://api.re-port-flow.com/v1/file/async/multiple',
{ designId: 'template-id', version: 1, contents },
{ headers: { 'appkey': process.env.APP_KEY } }
);
results.push(response.data);
if (index < batches.length - 1) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
return results;
}
次のステップ
- ZIP一括ダウンロード - 生成されたZIPファイルのダウンロード
- 非同期ワークフロー - 大量生成のベストプラクティス