メインコンテンツまでスキップ

API クイックスタート

Re:port Flow APIへようこそ!

Re:port Flow は、日本語の請求書・見積書などにネイティブ対応した国産のPDF生成サービスです。REST API と MCP サーバーの両方から呼び出せて、無料プラン(PDF出力 月30ページまで)から試せます。このドキュメントでは、5分でPDF生成を始める方法を説明します。

⚡ 5分でPDFを生成するには?​

アプリケーションキーとテンプレート IDの2つを控えて、POST /v1/file/sync/single に投げるだけです。管理画面での準備が約2分、cURL 1本でのPDF生成が約3分で終わります。以下のステップを上から順に実行してください。

アカウントをお持ちでない場合

APIキーの取得には Re:port Flow のアカウントが必要です。まだお持ちでない場合は、無料でアカウントを登録してから進めてください。

ステップ1: APIキーを取得(1分)​

Re:port Flow管理画面にアクセスして、以下の情報を取得します:

  1. ワークスペース設定 → API連携 へ移動
  2. 以下をコピー:
    • アプリケーションキー: ak_xxxxxxxxxxxxxxxx

ステップ2: テンプレート IDを確認(1分)​

  1. デザイン管理 へ移動
  2. 使用するテンプレートを選択
  3. テンプレート ID をコピー(例: 0eUDdgAjNXrrItA2。16文字の英数字で、UUID ではありません)

ステップ2.5: パラメータ構造を確認(1分、オプション)​

テンプレートが必要とするパラメータの構造を確認します:

curl -X GET https://api.re-port-flow.com/v1/file/design/parameter/0eUDdgAjNXrrItA2 \
-H "appkey: your-app-key"

レスポンス例:

[
{ "name": "customerName", "type": "text", "label": "顧客名" },
{ "name": "invoiceNumber", "type": "text", "label": "請求書番号" },
{ "name": "amount", "type": "number", "label": "金額" }
]

レスポンスはパラメータ定義の配列です。name が PDF 生成時に params へ渡すキー、label は画面表示用の名前です。テンプレートによっては name が日本語(例: "顧客名")のこともあるので、name の値を変換せずそのままキーに使ってください。

ヒント

パラメータ構造の詳細は テンプレートのパラメータ取得ガイド を参照してください。

ステップ3: 最初のPDFを生成(3分)​

以下のcURLコマンドをターミナルで実行します:

curl -X POST https://api.re-port-flow.com/v1/file/sync/single \
-H "Content-Type: application/json" \
-H "appkey: your-app-key" \
-d '{
"designId": "0eUDdgAjNXrrItA2",
"version": 1,
"content": {
"fileName": "invoice.pdf",
"params": {
"customerName": "山田太郎",
"invoiceNumber": "INV-2024-001",
"amount": 10000
}
}
}' \
--output my-first-pdf.pdf
success

成功すると my-first-pdf.pdf がカレントディレクトリに保存されます!

🎯 Re:port Flow API はどんなときに使う?​

「アプリの画面からその場でPDFを落とさせたい」「月末に全顧客ぶんのPDFを一括生成してメール送信したい」「保存する前に仕上がりを確認させたい」——この3つが代表的な用途です。それぞれで使うエンドポイントを併記しているので、近いものから読んでください。

ユースケース1: 請求書の即時生成​

ユーザーがボタンをクリックしたときに、即座にPDFをダウンロードさせる。

使用エンドポイント: 単一PDF同期生成

この例ではブラウザは自社サーバーを呼び、自社サーバーが Re:port Flow API を呼びます。

// 自社サーバー側(appkey はここにだけ置く)。generatePDF は「単一PDF同期生成」のサンプル(戻り値の data が PDF 本体)
app.get('/api/invoices/:id/pdf', requireLogin, async (req, res) => {
// ログイン中の利用者がこの請求書を見てよいかを確かめる(他人の ID を指定されても返さない)
if (!(await canViewInvoice(req.user, req.params.id))) return res.status(404).end();
const pdf = await generatePDF({
designId: 'invoice-template',
version: 1,
fileName: `invoice_${req.params.id}.pdf`,
data: await getInvoiceData(req.params.id)
});

res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', `attachment; filename="invoice_${req.params.id}.pdf"`);
res.send(pdf.data);
});

// ブラウザ側: ボタンクリック時に自社サーバーの URL を開く
function downloadInvoice(invoiceId) {
window.location.href = `/api/invoices/${invoiceId}/pdf`;
}

ユースケース2: 月次PDFの一括生成​

毎月末に全顧客のPDFを一括生成してメール送信。

使用エンドポイント: 複数PDF非同期生成

// バッチ処理
async function generateMonthlyReports(customers) {
const contents = customers.map(customer => ({
fileName: `report_${customer.id}.pdf`,
params: customer.data
}));

const result = await generateMultiplePDFsAsync('report-template', contents);

// 各顧客にメール送信
await sendEmailsWithPDFs(result);
}

ユースケース3: プレビュー機能​

テンプレートの編集画面でリアルタイムプレビュー。

使用エンドポイント: 単一PDF同期生成

// 自社サーバー側(appkey はここにだけ置く)。generatePDF は「単一PDF同期生成」のサンプル(戻り値の data が PDF 本体)
// 認証なしで designId / params を中継すると、appkey と同じ権限を誰にでも渡すことになる。
// 自社の認証(requireLogin)と、受け付ける designId の許可リストを必ず入れる。
const PREVIEW_DESIGN_IDS = new Set(['0eUDdgAjNXrrItA2']);

app.post('/api/preview', requireLogin, async (req, res) => {
if (!PREVIEW_DESIGN_IDS.has(req.body.designId)) return res.status(400).end();
const pdf = await generatePDF({
designId: req.body.designId,
version: 1,
fileName: 'preview.pdf',
data: req.body.params
});

res.setHeader('Content-Type', 'application/pdf');
res.send(pdf.data);
});

// ブラウザ側: プレビューボタンクリック時
async function showPreview(designId, params) {
const res = await fetch('/api/preview', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ designId, params })
});
const url = URL.createObjectURL(await res.blob());
window.open(url, '_blank');
}

🧭 API概要​

PDF生成エンドポイント​

エンドポイント用途タイムアウトレスポンス
POST /file/sync/single単一PDF同期生成60秒PDFファイル
POST /file/async/single単一PDF非同期生成なしURL + fileId
POST /file/sync/multiple複数PDF同期生成60秒ZIPファイル
POST /file/async/multiple複数PDF非同期生成なしURL + fileId

その他のエンドポイント​

エンドポイント説明
GET /file/status/{requestId}生成リクエストの状態確認(非同期生成のポーリング用)
GET /file/download/{requestId}ZIP一括ダウンロード
GET /file/download/{requestId}/{fileId}個別PDFダウンロード
GET /file/design/parameter/{designId}テンプレートのパラメータ取得
GET /file/designsワークスペース内のテンプレート一覧(30 件ずつのページ送り。ID・名称・最新バージョンなど)

🧪 Postmanで試す​

APIをすぐに試したい場合は、公式のPostmanコレクションを使用できます:

Postman Public Workspace​

Run in Postman

公式のPostmanコレクションには以下が含まれています:

  • ✅ 主要エンドポイントの実行可能なリクエスト
  • ✅ 認証設定(アプリケーションキー)の自動適用
  • ✅ 実行可能なサンプルパラメータ
  • ✅ レスポンス検証の自動テストスクリプト
  • ✅ エラーケース(412、401、400)のサンプル

すべてのエンドポイントを含むコレクションは、OpenAPI 仕様から生成した https://doc.re-port-flow.com/openapi/content-service.postman_collection.json を Postman にインポートして使えます(仕様と同時に更新されます)。

📚 次のステップ​

🔧 制限事項​

詳細は 制限事項ページ を参照してください。

主な制限​

  • リクエストサイズ: 最大50MB(Base64エンコード後、実質約37MB相当)
  • タイムアウト: 同期エンドポイント60秒、非同期は制限なし
  • Rate Limit: Workspace単位で適用(同期30 req/min、非同期100 req/min)
  • ファイル名: / \ : * ? " < > | および制御文字以外は使用可能
  • 認証: アプリケーションキー(appkey ヘッダー)が必須
  • HTTPS通信: 必須(HTTP通信は自動的にHTTPSへリダイレクトされます)

💡 サンプルコード​

JavaScript (Node.js)​

import axios from 'axios';

async function generatePDF() {
const response = await axios.post(
'https://api.re-port-flow.com/v1/file/sync/single',
{
designId: '0eUDdgAjNXrrItA2',
version: 1,
content: {
fileName: 'invoice.pdf',
params: {
customerName: '山田太郎',
invoiceNumber: 'INV-2024-001',
amount: 10000
}
}
},
{
headers: {
'appkey': 'your-app-key'
},
responseType: 'arraybuffer'
}
);

return response.data;
}

Python​

import requests

def generate_pdf():
url = 'https://api.re-port-flow.com/v1/file/sync/single'
headers = {
'appkey': 'your-app-key',
'Content-Type': 'application/json'
}
data = {
'designId': '0eUDdgAjNXrrItA2',
'version': 1,
'content': {
'fileName': 'invoice.pdf',
'params': {
'customerName': '山田太郎',
'invoiceNumber': 'INV-2024-001',
'amount': 10000
}
}
}

response = requests.post(url, headers=headers, json=data)
return response.content

インテグレーション​

API を直接叩かなくても、以下のツールから Re:port Flow を呼び出せます。どれを使うかは インテグレーション概要 の比較表で選べます。

🆘 サポート​

質問やサポートが必要な場合は、以下までお問い合わせください: