コンテンツにスキップ

SDK(Python / TypeScript)と REST

SDK は REST の薄い皮です(すべてのメソッドが 1 エンドポイントに対応)。共通の振る舞い:

  • すべての変異呼び出しに Idempotency-Key を自動付与(リトライ安全)
  • 429 / 5xx は指数バックオフで自動リトライ。409(楽観ロック)はリトライしません — 再読込して再適用するのがコントラクト
  • エラーは problem+json の suggested_fix 込みで例外化(LLM がそのまま読める)
  • 実務ヘルパ: jobs.wait() / tables.iter_rows() / webhooks.verify_signature()
Terminal window
pip install d2b-sdk
from d2b import D2BClient, ConflictError
client = D2BClient(api_key="d2b_pat_...", base_url="https://d2b.dev")
wb = client.workbooks.create(title="monthly")["id"]
client.sources.upload(wb, "sales.xlsx", wait=True)
page = client.tables.rows(wb, "sales")
try:
client.tables.upsert_rows(wb, "sales", rows=[{"product": "apple", "qty": 3}],
expected_version=page["edit_version"])
except ConflictError:
page = client.tables.rows(wb, "sales") # 再読込 → 再適用

リソース: workbooks / sources / tables / query / transforms / versions / jobs / reviews / sheets / charts / export / webhooks。

Terminal window
npm install d2b-sdk
import { D2BClient } from "d2b-sdk";
const client = new D2BClient({ apiKey: "d2b_pat_...", baseUrl: "https://d2b.dev" });
const wb = (await client.workbooks.create({ title: "monthly" })).id as string;
await client.sources.upload(wb, fileBlob, { filename: "sales.xlsx", wait: true });
const grid = await client.tables.a1(wb, "売上明細", "A1:D10"); // Excel 座標で読む
await client.sheets.put(wb, "summary", [
{ kind: "heading", text: "月次サマリー" },
{ kind: "table_view", table: "売上明細" },
]);
const xlsx = await client.sheets.render(wb, "summary");
パッケージソース・Issue
Python + CLId2b-sdk on PyPIgithub.com/600/d2b-sdk(python/)
TypeScriptd2b-sdk on npmgithub.com/600/d2b-sdk(typescript/)

配布名は両レジストリとも d2b-sdk です。Python の import パッケージとコマンドは d2b(PyPI の d2b は無関係のプロジェクト)なので、uvx では uvx --from d2b-sdk d2b … と書きます。GitHub のリポジトリは読み取り専用のミラーで(開発は D2B 本体のリポジトリ)、Pull Request は受け付けませんが Issue は歓迎します。リリースごとに同じタグ(sdk-py-v* / sdk-ts-v*)がミラーに同期され、そこから両レジストリへ公開されます(npm は provenance 付き)。

  • ベース URL: https://d2b.dev(パスは /api/v1/...、テナント管理は /api/control/...)
  • 認証: Authorization: Bearer <PAT>(/api/v1)、Account API key(/api/control)
  • 変異系は Idempotency-Key ヘッダ対応(同一キー + 同一ボディで初回応答を再生)
  • OpenAPI 3.1: openapi.json — API リファレンスはここから生成されます