workspaces について
非公開の REST API を使って Domo ワークスペースを管理するためのリバースエンジニアリング資料です。ワークスペースのコンテンツを整理する開発者向けに、追加、削除、一覧表示、検索のエンドポイントを説明します。
主な機能
- 01カードなどのコンテンツを追加
- 02元の項目を削除せずにワークスペースから除外
- 03ワークスペースの内容とメタデータを一覧表示
- 04アクセス可能なワークスペースを一覧表示
- 05ワークスペース内を検索
活用シーン
- 01ワークスペース内のカードを整理
- 02ワークスペースの内容やタイトルを確認
- 03項目をワークスペースから除外
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ stahura/ domo-ai-vibe-rules --skill workspacesインストール後、Claude Code で/workspacesを入力して読み込まれたか確認します。
詳細
Domo ワークスペース API(リバースエンジニアリング)
CLI と API:Java CLI にはワークスペースのコマンドがありません。すべてのワークスペース操作には、curl 経由で REST API を使用する必要があります。
ステータス:2026 年 3 月時点で未公開の情報をリバースエンジニアリング ベース URL:
https://<instance>.domo.com認証:X-DOMO-Developer-Tokenヘッダー
概要
Domo のワークスペースは、関連するコンテンツ(カード、ページ、データセット、アプリなどのアセット)をまとめ、ナビゲーション可能な 1 つのコレクションにするための組織用コンテナーです。ワークスペース API は Domo によって公開ドキュメント化されていません。これらのエンドポイントは Domo のウェブクライアントからリバースエンジニアリングし、テストで検証しました。
サポートされる操作:
- コンテンツ(カード、ページ、データセット)をワークスペースに追加
- ワークスペースからコンテンツを削除
- ワークスペース内のすべてのコンテンツを一覧表示
- ワークスペース内で特定のコンテンツを検索
エンドポイント
1. ワークスペースにコンテンツを追加(推奨)
1 つのコンテンツ項目をワークスペースに追加します。これは動作が確認されているエンドポイントです。
| 項目 | 値 |
|---|---|
| メソッド | POST |
| パス | /nav/v1/workspaces/:guid/contents |
| Content-Type | application/json |
リクエストボディ:
{
"entityId": "728638278",
"entityType": "CARD"
}
レスポンス(成功時):
{
"id": 6,
"entityType": "CARD",
"entityId": "728638278",
"addedAt": "2026-03-04 16:37:52",
"addedBy": 149955692
}
サポートされる entityType の値:CARD、PAGE、DATASET、DATA_APP、WORKSPACE_URL
検証済み:2026 年 3 月にこのエンドポイントをテストし、22 個のカードをワークスペースに追加しました。22 個すべてが成功しました。
1b. ワークスペースにコンテンツを追加(一括 - 信頼性に難あり)
一括エンドポイントは存在しますが、すべての形式のバリエーションでテストした結果、400 Bad Request が返されました。代わりに、上記の単一項目用エンドポイントを使用してください。
| 項目 | 値 |
|---|---|
| メソッド | POST |
| パス | /nav/v1/workspaces/bulk/execute |
| Content-Type | application/json |
リクエストボディ(ドキュメント化されていますが、信頼性に難あり):
{
"operations": [
{
"operation": "ADD",
"workspace": "99bf62b4-21f8-474b-985b-9bb83c773998",
"contents": [
{
"id": "CARD_OR_CONTENT_ID",
"type": "CARD"
}
]
}
]
}
警告:2026 年 3 月のテストでは、
id/entityIdの形式、文字列/数値の型、コンテンツタイプの値(CARD、card、KPI_CARD)にかかわらず、このエンドポイントから 400 エラーが返されました。単一項目用の/contentsエンドポイントが信頼できる代替手段です。
2. ワークスペースからコンテンツを削除
コンテンツを Domo から削除せずに、ワークスペースから削除します。カード/データセットの ID ではなく、コンテンツのワークスペース内部 id(追加時に返される数値 ID、またはワークスペースのコンテンツ一覧から取得した ID)を使用してください。
| 項目 | 値 |
|---|---|
| メソッド | DELETE |
| パス | /nav/v1/workspaces/:guid/contents/:contentId |
:contentId はワークスペース内部の数値 ID です(一覧/追加レスポンスの id フィールド)。
代替手段(一括エンドポイント - 信頼性に難がある可能性があります。セクション 1b の注記を参照してください):
| 項目 | 値 |
|---|---|
| メソッド | POST |
| パス | /nav/v1/workspaces/bulk/execute |
| Content-Type | application/json |
{
"operations": [
{
"operation": "REMOVE",
"workspace": "99bf62b4-21f8-474b-985b-9bb83c773998",
"contents": [
{
"id": "CARD_OR_CONTENT_ID",
"type": "CARD"
}
]
}
]
}
3. ワークスペースのコンテンツを一覧表示
詳細情報を任意で含めて、ワークスペース内のすべてのコンテンツオブジェクトを返します。
| 項目 | 値 |
|---|---|
| メソッド | GET |
| パス | /nav/v1/workspaces/:guid/walk?includeDetails=true |
パスパラメーター:
:guid-- ワークスペースの GUID(例:99bf62b4-21f8-474b-985b-9bb83c773998)
クエリパラメーター:
includeDetails(ブール値)--trueの場合、各コンテンツ項目の完全なメタデータを返します
レスポンスの構造:
{
"current": null,
"pins": [],
"sorts": [],
"folders": [],
"contents": [
{
"id": 6,
"entityType": "CARD",
"entityId": "728638278",
"addedAt": "2026-03-04 16:37:52",
"addedBy": 149955692,
"attributes": {
"entityType": "card",
"databaseId": "728638278",
"winnerText": "Revenue by Department",
...
}
}
]
}
各コンテンツ項目の主なフィールド:
id-- ワークスペース内部の数値 ID(削除操作に使用)entityType--CARD、DATA_APP、WORKSPACE_URLなどentityId-- Domo エンティティ ID(カード ID、データセット ID など)attributes.winnerText-- 表示名/タイトル
3b. すべてのワークスペースを一覧表示
認証済みユーザーがアクセスできるすべてのワークスペースを返します。
| 項目 | 値 |
|---|---|
| メソッド | GET |
| パス | /nav/v1/workspaces |
レスポンスの構造:
{
"results": [
{
"guid": "579394f2-5ec2-4152-b2b7-7e2c6c7a1305",
"name": "Claude",
"createdAt": "2026-03-04 16:31:32",
"createdBy": 149955692,
"icon": "ai",
"iconColor": "#e4715d",
"members": [...],
"contents": [],
"folders": []
}
]
}
4. ワークスペースのコンテンツを検索する
ワークスペース内で、クエリに一致するコンテンツを検索します。
| フィールド | 値 |
|---|---|
| メソッド | POST |
| パス | /nav/v1/workspaces/:guid/addContentQuery |
| Content-Type | application/json |
パスパラメーター:
:guid-- ワークスペースの GUID
例:
POST /nav/v1/workspaces/99bf62b4-21f8-474b-985b-9bb83c773998/addContentQuery
認証
すべてのリクエストでは、ヘッダーで Domo Developer Token を渡す必要があります。
X-DOMO-Developer-Token: your_token_here
Domo UI の Admin > Security > Access Tokens からトークンを生成します。
コード例
Python (requests)
import requests
DOMO_BASE = "https://your-instance.domo.com/api"
TOKEN = "your_domo_developer_token"
WORKSPACE_GUID = "579394f2-5ec2-4152-b2b7-7e2c6c7a1305"
headers = {
"X-DOMO-Developer-Token": TOKEN,
"Content-Type": "application/json",
}
def add_card_to_workspace(card_id: str) -> dict:
"""Add a single card to the workspace (confirmed working)."""
url = f"{DOMO_BASE}/nav/v1/workspaces/{WORKSPACE_GUID}/contents"
body = {"entityId": card_id, "entityType": "CARD"}
resp = requests.post(url, json=body, headers=headers)
resp.raise_for_status()
return resp.json()
def add_multiple_cards_to_workspace(card_ids: list[str]) -> list[dict]:
"""Add multiple cards one at a time."""
results = []
for card_id in card_ids:
result = add_card_to_workspace(card_id)
results.append(result)
return results
def list_workspace_contents() -> dict:
"""List all contents of the workspace with details."""
url = f"{DOMO_BASE}/nav/v1/workspaces/{WORKSPACE_GUID}/walk"
params = {"includeDetails": "true"}
resp = requests.get(url, params=params, headers=headers)
resp.raise_for_status()
return resp.json()
def list_all_workspaces() -> dict:
"""List all workspaces the user has access to."""
url = f"{DOMO_BASE}/nav/v1/workspaces"
resp = requests.get(url, headers=headers)
resp.raise_for_status()
return resp.json()
def search_workspace(query_body: dict) -> dict:
"""Search for content within the workspace."""
url = f"{DOMO_BASE}/nav/v1/workspaces/{WORKSPACE_GUID}/addContentQuery"
resp = requests.post(url, json=query_body, headers=headers)
resp.raise_for_status()
return resp.json()
curl
ワークスペースにカードを追加する(動作確認済み):
curl -X POST "https://your-instance.domo.com/api/nav/v1/workspaces/WORKSPACE_GUID/contents" \
-H "X-DOMO-Developer-Token: $DOMO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"entityId": "123456789", "entityType": "CARD"}'
すべてのワークスペースを一覧表示する:
curl -X GET "https://your-instance.domo.com/api/nav/v1/workspaces" \
-H "X-DOMO-Developer-Token: $DOMO_TOKEN"
ワークスペースのコンテンツを一覧表示する:
curl -X GET "https://your-instance.domo.com/api/nav/v1/workspaces/WORKSPACE_GUID/walk?includeDetails=true" \
-H "X-DOMO-Developer-Token: $DOMO_TOKEN"
ワークスペースを検索する:
curl -X POST "https://your-instance.domo.com/api/nav/v1/workspaces/WORKSPACE_GUID/addContentQuery" \
-H "X-DOMO-Developer-Token: $DOMO_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
注意点と既知の問題
| 問題 | 詳細 |
|---|---|
| 一括エンドポイントが 400 を返す | /nav/v1/workspaces/bulk/execute エンドポイントは、2026 年 3 月のテストで、あらゆる形式(id/entityId、文字列/数値、CARD/card/KPI_CARD)において 400 Bad Request を返しました。代わりに /nav/v1/workspaces/:guid/contents を使用してください。こちらは動作確認済みです。 |
/bulk/execute ではなく /contents を使用する | コンテンツを追加するには、{"entityId": "...", "entityType": "CARD"} を指定した単一アイテム用の POST /nav/v1/workspaces/:guid/contents エンドポイントが確実な方法です。1 回のセッションで 22 枚のカードを使って検証済みです。 |
entityType の値 | 既存のワークスペースデータで確認済みの値は CARD、DATA_APP、WORKSPACE_URL です。ドキュメントには PAGE、DATASET も記載されています。 |
| 未公開の API | これらのエンドポイントは、Domo の公式 API ドキュメントには記載されていません。Domo のウェブクライアントからリバースエンジニアリングしたものであり、予告なく変更される可能性があります。 |
| GUID の形式 | ワークスペース識別子には、数値 ID ではなく UUID/GUID 形式(例:579394f2-5ec2-4152-b2b7-7e2c6c7a1305)が使用されます。 |
| レスポンスに内部 ID が含まれる | コンテンツを追加すると、レスポンスには id フィールド(例:6)が含まれます。これはワークスペース内部のコンテンツ ID であり、カード/データセット ID とは異なります。削除操作にはこの ID を使用してください。 |
URL に /api プレフィックスが必要 | ワークスペースのエンドポイントでは、/api/nav/v1/... パスを使用します。/api を省略すると 404 が返されます。 |