コンテンツにスキップ

API クイックスタート

このページを完了すると、API キーを bearer トークンに交換し、認証情報が操作できる組織とチームを確認して、スレッドを作成し、そのイベント履歴とともに読み戻せるようになります。

以下の各言語の手順は、どちらも完全かつ独立しています。すべての要素は使用前に定義されており、もう一方の手順を参照する必要はありません。タブを 1 つ選び、そのまま進めてください。

次のものが必要です。

  • Service Account API キー。組織管理者が発行します。個人用 API キーは存在しません。まだキーがない場合は、認証と API キーを参照してください。
  • Service Account が書き込み先チームのメンバーであること。 スレッドを作成するには、選択したチームの現在のメンバーである必要があります。どのチームにも所属していない組織レベルの認証情報は、/api/v1/me を読み取れますが、記録は作成できません。手順 3 で 403 FORBIDDEN が返された場合は、管理者にチームへの追加を依頼してください。
  • curl の手順: curl と jq(例では JSON の解析に使用します。jq をインストールしない場合は、レスポンスから値を手動でコピーしてください)。
  • TypeScript の手順: TypeScript を直接実行でき、グローバルな fetch を備えたランタイム。Node.js 22.18 以降、Bun、または Deno を使用できます。Node.js 18 または 20 では、代わりに tsx などのローダーを使ってファイルを実行してください。パッケージをインストールする必要はありません。例では標準の fetch のみを使用します。型付きクライアントも別途利用できます。TypeScript クライアントを参照してください。

すべてのリクエストは https://apid.dustid.io に送信します。その他のサービス URL については、環境を参照してください。

  1. Terminal window
    export APID_URL="https://apid.dustid.io"
    export DUST_API_KEY="your-service-account-key" # read this from your secrets manager
  2. API キーを bearer トークンに交換する

    Section titled “API キーを bearer トークンに交換する”

    API キーを /api/v1/* エンドポイントに送信することはありません。x-api-key ヘッダーでキーを渡して、GET /api/auth/token で一度トークンに交換します。その後のすべての呼び出しでは、取得した JWT を Authorization: Bearer <token> として送信します。

    Terminal window
    curl -fsS "$APID_URL/api/auth/token" -H "x-api-key: $DUST_API_KEY"
    { "token": "eyJhbGciOi...", "expiresIn": 900, "expiresAt": "2026-09-20T22:40:00.000Z" }
    Terminal window
    export DUST_TOKEN="$(
    curl -fsS "$APID_URL/api/auth/token" -H "x-api-key: $DUST_API_KEY" | jq -r '.token'
    )"

    レスポンスには token が含まれます。また、JWT 自体に有効期限のクレームがある場合は、expiresIn(残り秒数)と expiresAt(ISO 8601)も含まれます。有効期間をハードコードせず、レスポンスから読み取ってください。現在、トークンの有効期間は短く(約 15 分)、リフレッシュトークンはありません。そのため、長時間実行するジョブでは、実行中にキーを再交換する必要があります。有効期間に関する完全な仕様、キャッシュの実装、および 401 時に一度だけ更新するパターンについては、認証 → トークンの有効期限と更新を参照してください。

  3. GET /api/v1/me は、コンテキストヘッダーが不要な数少ないエンドポイントの 1 つです。プリンシパル、所属する組織、アクティブな組織など、認証情報そのものについての情報を返します。

    Terminal window
    curl -fsS "$APID_URL/api/v1/me" -H "Authorization: Bearer $DUST_TOKEN"
    {
    "userId": "6a1f…",
    "email": "sap-connector@example.com",
    "name": "SAP Connector",
    "activeOrganizationId": "b2c7…",
    "organizations": [
    { "id": "b2c7…", "name": "Anchor Electronics", "slug": "anchor-electronics", "roles": ["member"] }
    ]
    }
    Terminal window
    # Prefer the active organization; fall back to the first membership.
    export DUST_ORG_ID="$(
    curl -fsS "$APID_URL/api/v1/me" -H "Authorization: Bearer $DUST_TOKEN" \
    | jq -er '.activeOrganizationId // .organizations[0].id'
    )"
    echo "Organization: $DUST_ORG_ID"
  4. 記録は、組織内のチームに属します。サポートされている選択肢は 2 つあります。

    • 何もしない。 Dust-Ctx-Team-Id を省略すると、API は組織のルートチームで動作します。チームが 1 つだけの組織では、これで手順 4 は完了です。手順 5 の例もこの方法を使用します。
    • チームを指定する。 GET /api/v1/teams は、認証情報がメンバーになっているチームを { "teams": [ … ], "total": n } の形式で一覧表示します。各チームには teamId、orgId、name が含まれます。使用するチームを Dust-Ctx-Team-Id として送信してください。
    Terminal window
    curl -fsS "$APID_URL/api/v1/teams?pageSize=50" \
    -H "Authorization: Bearer $DUST_TOKEN" \
    -H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
    | jq '.teams[] | { teamId, name }'
    { "teamId": "b2c7…", "name": "Anchor Electronics" }
    { "teamId": "4e90…", "name": "Line 3 Receiving" }
    Terminal window
    # Optional. Leave DUST_TEAM_ID unset to use the organization's root Team.
    export DUST_TEAM_ID="4e90…"

    以下のすべてのリクエストでは、-H "Dust-Ctx-Team-Id: ${DUST_TEAM_ID:-}" を渡します。空の値は、ヘッダーを省略した場合とまったく同じように扱われ、組織のルートチームが使用されます。そのため、この変数を設定した場合も設定しない場合も、同じスクリプトを実行できます。

  5. スレッドは、1 つのアセットまたはアイテムに対応する記録です。type: "single" を指定して POST /api/v1/threads を呼び出すと、スレッドが 1 つ作成されます。必須フィールドは thread.name のみで、任意の data 配列には型付きフィールドを格納します。

    Terminal window
    curl -fsS "$APID_URL/api/v1/threads" \
    -H "Authorization: Bearer $DUST_TOKEN" \
    -H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
    -H "Dust-Ctx-Team-Id: ${DUST_TEAM_ID:-}" \
    -H "Content-Type: application/json" \
    -d '{
    "type": "single",
    "thread": {
    "name": "Tire SZ3J-11-ZJ17",
    "description": "Production asset"
    },
    "data": [
    { "name": "Serial Number", "type": "text", "value": { "text": "SZ3J-11-ZJ17" } },
    { "name": "Max PSI", "type": "number", "value": { "number": 51 } }
    ]
    }' | tee /tmp/created.json | jq '.created[0] | { threadId, name }'
    { "threadId": "0f13c0de-2f1a-4a2e-9f60-6d2f7b9f0a11", "name": "Tire SZ3J-11-ZJ17" }
    Terminal window
    export THREAD_ID="$(jq -r '.created[0].threadId' /tmp/created.json)"

    ステータスは 201 Created で、ボディーは { "created": [ … ], "uploadResponses": [] } です。同じエンドポイントでは type: "list" または type: "raw" を指定して複数のスレッドを一度に作成できるため、バッチ形式になっています。created の各エントリーは、生成された threadId を含む完全なスレッド記録です。

    フィールドのエントリーには type と value が必要です。value の形式は型に従い、text の場合は { "text": "…" }、number の場合は { "number": 51 } となります。name はフィールドのラベルです。フィールド型の完全な一覧については、スレッドガイドを参照してください。

  6. GET /api/v1/threads/{thread_id} は、スレッドとそのイベント履歴を返します。すべての書き込みが記録されるため、監査証跡は作成時点から始まります。

    Terminal window
    curl -fsS "$APID_URL/api/v1/threads/$THREAD_ID" \
    -H "Authorization: Bearer $DUST_TOKEN" \
    -H "Dust-Ctx-Org-Id: $DUST_ORG_ID" \
    -H "Dust-Ctx-Team-Id: ${DUST_TEAM_ID:-}" \
    | jq '{ name: .thread.name, fields: [.thread.data[]?.name], events: (.events | length) }'
    { "name": "Tire SZ3J-11-ZJ17", "fields": ["Serial Number", "Max PSI"], "events": 1 }

    レスポンスの形式は { "thread": { … }, "events": [ … ] } です。正確なイベント数は仕様として保証されません。少なくとも 1 件あることを前提にしてください。

表示された内容意味
交換時の 401 UNAUTHORIZEDAPI キーが誤っている、取り消されている、または Service Account キーではありません。個人用キーでは認証できません。
/api/v1/* 呼び出し時の 401 UNAUTHORIZEDbearer トークンの有効期限が切れています(有効期間は短く設定されています)。再交換して、一度だけ再試行してください。
400 ORG_ID_REQUIRED組織を範囲とするエンドポイントで Dust-Ctx-Org-Id を省略しています。
ヘッダーを示す 400 INVALID_REQUESTコンテキストヘッダーが UUID ではありません。ヘッダーはエンドポイントが実行される前に検証されます。
作成時の 403 FORBIDDENService Account が選択したチームのメンバーではありません。管理者に追加を依頼してください。
読み戻し時の 404通常は記録が存在しないのではなく、コンテキストが誤っています。スレッドは、そのスレッドを所有している、または共有された組織とチームでのみ表示できます。

すべてのエラーボディーは { code, message, status, detail? } 形式です。また、すべてのレスポンスには、ログに記録する価値のある x-request-id ヘッダーが含まれます。完全なコード一覧、スキャン結果の表、再試行に関するガイダンスについては、エラーとスキャン結果を参照してください。

  • リクエスト規則 — コンテキストヘッダー、ページネーション、ローカライズ。
  • エラーとスキャン結果 — エラー仕様の全体。
  • スレッド — フィールド型、更新、アーカイブ、一覧表示、検索。
  • 識別子 — 物理的な識別子をスレッドにバインドして検証する方法(/api/v1/tags/* エンドポイント)。
  • ファイル — 証拠ファイルをスレッドに添付する方法。
  • チームと共有 — チーム間のアクセス。
  • TypeScript クライアント — 標準の fetch に代わる型付きの方法。
  • 完全な API リファレンス — OpenAPI 仕様から生成されたすべてのエンドポイント。API サーバーは、https://apid.dustid.io/api/docs でインタラクティブなリファレンスを、/api/openapi.json で未加工の仕様も提供しています。