📦 需給引当計算 ❓ 使い方

API ベータ

プログラムから、CSVの取り込み・計算・各照会画面の結果の取得ができます。社内システムとの連携や、毎日の自動実行に使えます。

ベータ版・無料 API は現在ベータ版として、すべてのアカウントで無料でご利用いただけます。今後、Pro プラン(有料)の機能として提供する予定です。移行する場合は事前にお知らせします。 仕様は今後変更することがあります。ご意見・ご要望は お問い合わせ からどうぞ。

1. 利用を始める

  1. 現在はベータ期間のため、すべてのアカウントで無料で利用できます(将来は Pro プランの機能になる予定です)。
  2. ログインして アカウント画面 の「API」で キーを発行します。キーは発行時に1回だけ表示されるので、安全な場所に保管してください。
  3. キーが漏れた場合は、同じ画面で再発行(古いキーは無効)または無効化してください。

API で扱うデータは画面と共通です(API で取り込んだデータは画面でも見られ、その逆も同じです)。

2. 認証

すべてのリクエストに、次のどちらかのヘッダーで API キーを付けます。

Authorization: Bearer jk_xxxxxxxxxxxxxxxxxxxxxxxxxxxx X-API-Key: jk_xxxxxxxxxxxxxxxxxxxxxxxxxxxx

ベースURL: https://supply-demand-adjustment.duckdns.org/api/v1 通信は HTTPS のみです。

3. 基本の流れ

# ① 需要・供給の CSV を取り込んで、そのまま計算(?calculate=1) curl -X PUT "https://supply-demand-adjustment.duckdns.org/api/v1/data/mixed?calculate=1" -H "Authorization: Bearer $KEY" -F "file=@mixed.csv" # ② 遅延・欠品の最上位需要を取得 curl "https://supply-demand-adjustment.duckdns.org/api/v1/results/tops?status=遅延" -H "Authorization: Bearer $KEY" # ③ 供給番号から最上位需要を照会 curl "https://supply-demand-adjustment.duckdns.org/api/v1/lookup/supply?no=PO-M01,PO-M02" -H "Authorization: Bearer $KEY"

CSV の形式は画面と同じです(CSVの作り方)。応答は JSON(UTF-8)で、表形式の結果は format=csv を付けると CSV(Excel 用の BOM 付き UTF-8)で受け取れます。

4. API 一覧

メソッド・URL内容
GET /meアカウント情報(プラン・API の利用状態 api_access・登録件数・最終計算日時・制限値)

データの取り込み

メソッド・URL内容
PUT /data/mixed需要・供給が混在した CSV を取り込む(両方とも置き換え)。数量プラス=供給、マイナス=需要
PUT /data/supply
PUT /data/demand
供給だけ/需要だけを取り込む(その種類だけ置き換え)
CSV は multipart の file フィールド、または本文そのもの(Content-Type: text/csv)で送ります。 ?calculate=1 を付けると取り込み後に続けて計算します。POST でも同じです。 CSV に問題があるとエラー 422 invalid_csv(details に「○行目: …」)を返し、データは変更しません。
DELETE /data/{supply|demand|all}登録データを削除
GET /priorities優先度テーブルを取得
PUT /priorities優先度テーブルを置き換え。JSON [{"code":"A","rank":1,"note":"特急"}] または CSV(優先コード,順位,説明)

計算

メソッド・URL内容
POST /calculate登録データで計算する。応答: calculated_at, stats(最上位需要数・納期内・遅延・欠品), warnings

計算結果を返す API の応答には calculated_at(計算日時)と stale(計算後にデータが変更されていれば true)が付きます。

計算結果(画面「計算結果」)

メソッド・URL内容
GET /results/tops最上位需要サマリ(充足見込日・遅れ日数・判定)。status=納期内|遅延|欠品|部品欠品|欠品・部品欠品
GET /results/allocations直接引当・欠品・余剰。status=引当|欠品|余剰
共通パラメータ: q(番号・品目の検索。空白区切りで複数語), page, per(1ページの件数。最大 5,000、既定 1,000), format=csv(条件に合う全件を CSV で)。 JSON 応答: {"total", "page", "per", "items": [...]}
GET /results/traces全経路(供給 → 最上位需要)。件数が多いため format=csv(既定)または format=ndjson(1行1件の JSON)で順次送ります

照会(各照会画面)

メソッド・URL内容
GET /lookup/supply?no=…供給番号照会。供給番号(カンマ区切りで最大500件)→ 需要番号・必要日・最上位需要番号・最上位必要日・経路。not_found, surplus(余剰数量)も返す
GET /lookup/tree?demand_no=…構成展開。需要番号 → 引き当たる供給と部品の供給(depth が階層)。max_rows(既定 5,000、最大 50,000)
GET /lookup/expedite?demand_no=…&date=…前倒し計算。date(希望日。省略時は需要の必要日)→ 前倒しが必要な供給と日数(rows)、数量不足(shortages)

照会の表は format=csv でも取得できます。

5. エラー

{"error": {"code": "invalid_csv", "message": "CSV に問題があるため…", "details": ["3行目: 需要の数量はマイナスで…"]}}
HTTPcode意味
400bad_requestパラメータが不正
401unauthorizedキーが無い・正しくない・無効
403plan_requiredAPI 対応プランではない(ベータ期間終了後、Pro プラン以外の場合)
404not_found / demand_not_foundURL または指定した番号が無い
409not_calculated / no_data計算結果が無い(先に計算)/データが無い
413too_largeファイルが大きすぎる
422invalid_csv / invalid_prioritiesCSV・優先度の内容に問題(details に詳細)
429rate_limitedリクエストが多すぎる(Retry-After 秒後に再実行)
503busy計算が混み合っている(しばらくして再実行)

6. 制限

  • リクエスト数: キーごとに 1分あたり 120 回
  • アップロード: 1回 50MB・50万行まで。保存できるのは需要・供給あわせて 300,000 行まで
  • 計算は全利用者で同時に2件まで(混雑時は最大60秒待ち、その後 503)
  • API の利用(日時・API・件数)は記録され、アカウント画面で今月の利用状況を確認できます

7. サンプルコード

Python

import requests BASE = "https://supply-demand-adjustment.duckdns.org/api/v1" H = {"Authorization": "Bearer jk_xxxxxxxx"} # 取り込み+計算 with open("mixed.csv", "rb") as f: r = requests.put(f"{BASE}/data/mixed", params={"calculate": 1}, headers=H, files={"file": f}) r.raise_for_status() print(r.json()["calculation"]["stats"]) # 遅延している最上位需要(全ページ) page = 1 while True: r = requests.get(f"{BASE}/results/tops", params={"status": "遅延", "page": page, "per": 1000}, headers=H).json() for t in r["items"]: print(t["demand_no"], t["need_date"], t["expected_date"], t["delay_days"]) if page * r["per"] >= r["total"]: break page += 1 # 前倒し計算 plan = requests.get(f"{BASE}/lookup/expedite", params={"demand_no": "SO-001"}, headers=H).json() for row in plan["rows"]: if row["expedite_days"] > 0: print(row["supply_no"], row["expedite_days"], "日前倒し")

PowerShell

$H = @{ Authorization = "Bearer jk_xxxxxxxx" } $base = "https://supply-demand-adjustment.duckdns.org/api/v1" Invoke-RestMethod -Method Put -Uri "$base/data/mixed?calculate=1" -Headers $H -InFile "mixed.csv" -ContentType "text/csv" Invoke-WebRequest -Uri "$base/results/tops?format=csv" -Headers $H -OutFile "tops.csv"
処理中です…
データ量によっては数十秒かかります。画面を閉じずにお待ちください。