ドキュメント
API リファレンス
DocRelay はhttps://api.docrelay.jp です。
帳票の発行
POST /v1/renders でwait 秒200)、202 でRender をwait に
curl https://api.docrelay.jp/v1/renders \
-H "Authorization: Bearer $DOCRELAY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: inv_88" \
-d '{
"template": "請求書",
"format": "pdf",
"data": { "customer": { "name": "株式会社サンプル" }, "total": 128000 },
"wait": 10
}' \
-o 請求書.pdfconst res = await fetch('https://api.docrelay.jp/v1/renders', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.DOCRELAY_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': 'inv_88',
},
body: JSON.stringify({
template: '請求書',
format: 'pdf',
data: { customer: { name: '株式会社サンプル' }, total: 128000 },
wait: 10,
}),
});
if (res.status === 200) {
const pdf = Buffer.from(await res.arrayBuffer()); // x-render-id・x-content-sha256 ヘッダーも返却
} else if (res.status === 202) {
const render = await res.json(); // { id: 'rnd_…', status: 'queued', … } → 完了時に render.succeeded を Webhook で通知
}| メソッド | パス | 内容 |
|---|---|---|
| POST | / | 帳票を200)。Accept: application/ またはlink のRender。202 とRender |
| GET | / | 発行履歴template_id・status・since で |
| GET | / | 1 件のRender |
| GET | / | 帳票本体。410 gone、409 |
| POST | / | 有効期限expires_in・max_downloads。 |
| GET | / | 有効期限404、410 |
type RenderRequest = {
template: string; // テンプレートの ID または名前
version?: number; // 省略時は本番環境で公開中、テスト環境で最新
format?: 'pdf' | 'xlsx' | 'docx' | 'csv'; // 省略時は先頭の形式
data?: object; // 1 件分のデータ
items?: object[]; // 1〜1,000 件。zip で返却
merge?: boolean; // レイアウトのみ: 1 つの PDF に結合
wait?: number; // 秒。0〜25(既定 25)
keep_for?: number; // 保存期間(秒。既定 86,400)
link?: true | { expires_in?: number; max_downloads?: number }; // 有効期限付き URL
metadata?: Record<string, string>; // 20 個まで。Webhook にも含める
csv?: { // CSV の書き出し方(format が csv のときだけ)
newline?: 'crlf' | 'lf'; // 既定 crlf
trailing_newline?: boolean; // 最後の行のあとの改行(既定 true)
bom?: boolean; // UTF-8 の BOM(既定 true)
encoding?: 'utf-8' | 'shift_jis'; // 既定 utf-8
quote?: 'minimal' | 'all'; // minimal は必要なときだけ、all はすべて囲む
};
};
type Render = {
id: string; // rnd_…
status: 'queued' | 'rendering' | 'succeeded' | 'failed' | 'expired';
template_id: string; version: number; format: string;
filename: string; size: number | null; sha256: string | null; item_count: number;
error: { code: string; message: string } | null;
ledger: { seq: number } | null;
link: { url: string; expires_at: number } | null;
metadata: Record<string, string>;
created_at: number; completed_at: number | null; expires_at: number | null;
};- その
場で 返却する ときの ヘッダー: content-type、content-disposition(日本語の ファイル名に 対応)、 x-render-id、x-content-sha256。 Idempotency-Keyヘッダー(任意) を 指定すると、 24 時間以内の 同じ キーに よる 再送には 同じ 発行結果を 返します。 - リクエスト本文は
5MB までです。 - 本番環境の
発行は、 帳票 1 件ごとに 月間発行数に 含みます (一括発行は 件数分)。 テスト環境の 発行と プレビューは 含みません。 - 応答には
Server-Timing(認証・テンプレートの 読み込み・フォント・描画などの 段ごとの ms) を 付けます。 X-DocRelay-Timing: cpuを付けると、 描画の CPU 時間 cpuも返します。
テンプレート
| メソッド | パス | 内容 |
|---|---|---|
| GET | / | テンプレートの |
| POST | / | JSON の{ name, layout? } でlayout 省略時はfilename で |
| GET・PATCH・DELETE | / | 取得・変更:id には |
| PUT | / | レイアウトを |
| POST | / | 同じ |
| POST | / | バージョンを |
| POST | / | プレビュー。data 省略時はx-missing-fields ヘッダーで |
レイアウト
テンプレートエディターでPUT /v1/templates/:id/layout でget_layout_guide でも
| 要素 | 内容 |
|---|---|
text | 文字。rotateopacity |
line | 線 |
rect | 矩形 |
image | 画像data: または |
table | 明細テーブル。 |
flow | 本文。 |
明細テーブルと本文の表
wrap: trueでセルの 文字を 列の 幅で 折り返し、 行の 高さを 最も 高い セルに 合わせます。 ページに 入らない 行は、 セルの 中の 行の 単位で 次の ページに 分けます。 - 行の
データの _span(列を またぐ) ・ _align(寄せ) ・ _bold(太字) で、 行ごとに 見た目を 変えられます。 - 列の
richに指定した 項目 ( [{ text, bold?, color?, underline? }])で、 一部の 文字だけ太字・色・下線を 変えられます。 本文の Markdown では **太字**・<u>下線</u>を使えます。 headerBold(見出しの 行の 太字) ・ padding(セルの 内側の 余白) ・ lineHeight(セルの 行の 高さ) を 指定できます。 - 本文の
表の セルには、 段落・箇条書き・表を 1 段まで 入れ子に できます (データの ブロックのみ)。
そのほかの指定
follow: { id, gap? }: 表・本文の実際の 終わりに 合わせて、 合計欄などの 要素を 詰めて 置きます。 入りきらなければ次の ページに 送ります。 repeat: 表と本文以外の 要素を、 最初の ページ・すべての ページ・ 最後の ページの どれに 描くかを 指定します。 watermark: { text, size?, color?, opacity?, angle?, tile?, gap? }: すべてのページに 半透明の 文字を 重ねます。 tile: trueでページ全体に くり返します。 - 差し込み項目:
{{a.b}}・{{x | number}}・{{d | date:YYYY年M月D日}}・{{#list}}…{{/list}}・{{^x}}…{{/x}}・{{_page}}・{{_pages}}。 - レイアウトの
形式の 誤りは 422 invalidで、fieldsにelements[3].wのような項目ごとの 説明を 返します。
完了通知(Webhook)
イベントはrender.succeeded・render.failed の{ type, data: Render } です。
{
"type": "render.succeeded",
"data": {
"id": "rnd_…", "status": "succeeded", "filename": "invoice_1024.pdf",
"sha256": "a3f9…", "item_count": 1, "link": null, …
}
}保存期間
帳票のkeep_for
改ざん検知ログ
ブロックチェーン技術を
| メソッド | パス | 内容 |
|---|---|---|
| GET | / | そのhead がnull) |
| POST | / | 帳票ファイルまたは{ sha256 } を |
| GET | / | 公開中のdate 省略時は |
type LedgerEntry = {
seq: number; // 通し番号
render_id: string; sha256: string; template_id: string; version: number;
at: number;
prev_hash: string; // 1 つ前の記録の entry_hash
// prev_hash・seq・sha256・render_id・at を "\n" でつないだ SHA-256
entry_hash: string;
};
type DailyHead = { date: string; seq: number; entry_hash: string; published_at: number };API キーのスコープ
| スコープ | 操作 |
|---|---|
templates:read | テンプレートの |
templates:write | テンプレートの |
renders:create | 帳票の |
renders:read | 発行履歴・帳票ファイル・有効期限 |
GET /v1/whoami は、
レート制限とエラー
- レート制限は
環境単位で、 1 分 あたりの 上限は プランに よって 異なります (Free 60 回・Starter 300 回・Pro 1,200 回・Business 3,000 回)。 すべての レスポンスに x-ratelimit-limit・x-ratelimit-remaining・x-ratelimit-resetを付けます。 上限を 超えると 429 rate_limitedとretry-afterを返します。 - エラーは
{ error, message, fields?, request_id }の形式で 返します。 入力の 誤りは 422 invalidで、fieldsに項目ごとの 説明を 含みます。 - 失敗した
リクエストは、 管理画面の API ログで 30 日間確認できます。