ドキュメント

API リファレンス

REST API でプログラムから PDF を生成する。

クイックスタート

  1. サインインして ダッシュボードから API キーを発行
  2. 下記の curl サンプルを叩いてジョブ ID を取得
  3. ジョブ状態を polling し、完了したら署名 URL から PDF をダウンロード

API ベース URL

https://api.jobundo.jp

認証

各 API 呼び出しには HTTP ヘッダー Authorization: Bearer <APIキー> を付与してください。API キーは lf_live_… 形式で、 ダッシュボード「API キー」セクションで発行します。発行時に 一度だけ表示されるトークンを安全に保管してください。

POST /v1/format (非同期 PDF 生成)

Markdown を渡してジョブを enqueue します。202 で job_id が返り、 実際の生成は worker が非同期に処理します。Markdown 自体の書き方は Markdown 記法リファレンス を参照してください。

curl -X POST https://api.jobundo.jp/v1/format \
  -H "Authorization: Bearer lf_live_xxx_yyy" \
  -H "Content-Type: application/json" \
  -d '{
    "markdown": "---\ntitle: テスト規程\ndoc_type: regulation\n---\n# 第 1 章 総則\n### 第 1 条(目的)\n1. 本規程は、…",
    "config": {
      "doc_type": "regulation",
      "numbering": {"paragraph": "fullwidth_arabic", "item": "kanji", "subitem": "katakana"}
    }
  }'

レスポンス:

{
  "job_id": "job_xxxxxxxxxxxx",
  "status": "pending",
  "status_url": "/v1/jobs/job_xxxxxxxxxxxx",
  "created_at": "2026-06-03T10:00:00Z"
}

GET /v1/jobs/{job_id} (状態取得)

ジョブの状態と、完了している場合は 15 分有効の署名 URL を返します。status が done になるまで 1〜2 秒間隔で polling してください。

curl https://api.jobundo.jp/v1/jobs/job_xxxxxxxxxxxx \
  -H "Authorization: Bearer lf_live_xxx_yyy"

# status=done のレスポンス例
{
  "id": "job_xxxxxxxxxxxx",
  "status": "done",
  "created_at": "...",
  "completed_at": "...",
  "pages": 3,
  "pdf_url": "https://jobundo-pdf-....s3.amazonaws.com/...?X-Amz-...",
  "pdf_url_expires_at": "...",
  "warnings": []
}

POST /v1/validate (PDF 生成なしの構文チェック)

Markdown を解析し、欠番・参照切れなどの warnings を返します。 PDF は生成せず、課金されません。

curl -X POST https://api.jobundo.jp/v1/validate \
  -H "Authorization: Bearer lf_live_xxx_yyy" \
  -H "Content-Type: application/json" \
  -d '{"markdown": "..."}'

POST /v1/parse (Markdown → 構造 JSON)

Markdown を解析して、編・章・条・項・号の木構造を JSON で返します。 PDF は生成せず、課金されません。条文を機械的に扱いたいとき (既存文書の取り込み、条文一覧の抽出、独自エディタの実装など)に使います。

curl -X POST https://api.jobundo.jp/v1/parse \
  -H "Content-Type: application/json" \
  -d '{"markdown": "### 第1条(目的)\n1. 本規程は…"}'

レスポンスは document(構造の木)、numbering(doc_type とフロントマターから解決済みの番号書式)、warnings、has_dropped_content の 4 つです。has_dropped_content が true のときは、 条の外に書かれていて構造に取り込めなかった行があります — 取り込み後にその内容は失われるため、必ず利用者に提示してください。

{
  "document": {
    "title": "個人情報保護規程",
    "doc_type": "regulation",
    "children": [
      { "type": "division", "kind": "章", "number": 1, "title": "総則",
        "children": [
          { "type": "article", "number": 1, "branch_number": null,
            "title": "目的",
            "paragraphs": [
              { "type": "paragraph", "number": 1, "text": "…", "items": [] }
            ] }
        ] }
    ]
  },
  "numbering": { "paragraph": "fullwidth_arabic", "item": "kanji",
                 "subitem": "katakana" },
  "warnings": [],
  "has_dropped_content": false
}

入力の上限は 512 KB です。超えると 413 を返します。 各ノードの source_line は、フロントマターを除いた 本文の先頭を 1 行目とした行番号です。

レート制限とクォータ

  • フリープラン: 月 20 ページまで。生成 PDF に「SAMPLE」ウォーターマーク。 超過時は 402 Payment Required
  • 従量プラン: ¥10/ページ、ウォーターマークなし、上限なし
  • Playground (/playground): 認証不要。 入力 5 KB / 1 分 3 回 / 1 日 10 回まで
  • サーバが過負荷の場合: 503 Service Unavailable + Retry-After ヘッダ

エラーの形

{
  "detail": "Monthly free-plan page quota exhausted. Upgrade to paid plan.",
  "plan": "free",
  "quota": 20,
  "used": 20
}

サポート

不明な挙動・要望は jobundo-support@jobundo.jp までご連絡ください。