G2で5段階中5.0の評価
APIリファレンス
HummingDeckは、統合パートナーや自動化プラットフォーム向けにREST APIを提供しています。各エンドポイントはBearer tokenで認証し、JSONレスポンスを返します。
https://app.hummingdeck.com/api/v1認証
すべてのAPIリクエストは、AuthorizationヘッダーにBearer tokenを付けて送信します。2種類の認証情報に対応しており、それぞれ挙動が異なります。
メソッド
Bearer token
ヘッダー形式
Authorization: Bearer {access_token}
認証情報の種類
ワークスペースAPIトークン
Authorization: Bearer hd_api_...
REST APIへのアクセスはBusinessプランで申請でき、審査後にワークスペース単位で有効になります。その後、ワークスペースの所有者と管理者は、ワークスペース設定、連携、HummingDeck APIで名前付きのAPIキーを個別に作成できます。連携に必要な権限だけを選択してください。キーは作成時に一度だけ表示され、あとから取得できません。作成から1年で失効し、発行先のワークスペースに固定されるため、リクエスト側でワークスペースを選択したり変更したりすることはできません。
1つのワークスペースで有効にできるAPIキーは20個までです。キーを再発行すると、そのキーの以前のシークレットだけが直ちに無効になり、他のキーは引き続き使用できます。所有者と管理者は、個別のキーまたはすべてのキーをいつでも無効にできます。無効にしたシークレットは復元できません。
ワークスペースAPIキーが呼び出せるのは、選択された権限で許可された操作だけです。Webhookサブスクリプション用エンドポイントは利用できません。
Zapier OAuth
Authorization: Bearer {access_token}
ワークスペースがZapier連携を接続する際に、OAuth認証フローを通じて発行されます。アクセストークンは30日で失効します。有効期限90日のリフレッシュトークンを使うと、再認証なしで新しいアクセストークンを取得できます。
Webhookのサブスクリプションを作成・削除できるのは、この認証情報だけです。
権限
権限を1つ以上選択してください。書き込み権限には対応する読み取り権限も含まれます。キーを再発行するときに権限を変更できます。
rooms:readルーム、タブ、項目、リンク、ラベルを表示します。
rooms:writeルーム、タブ、項目、リンク、ラベルを作成・管理します。
plan:read相互アクションプランのフェーズとタスクを表示します。
plan:write相互アクションプランのフェーズとタスクを作成・管理します。
analytics:readエンゲージメント分析、アクティビティ、取得メールを表示します。
crm:readワークスペースの会社と連絡先を検索します。
crm:write会社、連絡先、リンクの対象者を作成・更新します。
documents:readドキュメントを検索し、メタデータを表示します。
documents:writeドキュメントをアップロードし、ドキュメントやURLをルームに追加します。
エンドポイント行の権限ラベルは、ワークスペースAPIキーに適用されます。「必須」は常に必要、「追加で必須」は主な権限と併せて必要、「条件付き」はリクエストで関連するフィルターやフィールドを使う場合だけ必要です。GET /me に権限は不要です。Zapier OAuth には固定された連携アクセスが適用されます。
リクエストが401を返す場合
キーが不明または不正な形式である、失効または無効化されている、APIアクセスが無効なワークスペースに属している、あるいは発行者がそのワークスペースの所有者または管理者ではなくなった場合、リクエストは401を返します。
接続のテスト
トークンが有効であることを確認し、認証済みユーザーのプロフィールを確認します。
/me現在のユーザーの名前、メールアドレス、チーム情報を返します。
APIキーの権限は不要
ドキュメント
ドキュメント(PDF、プレゼンテーション資料、提案書、その他のファイル)のアップロード、検索、管理を行います。
/decks新しいドキュメントをアップロードします。fileフィールド(PDF、PPTX、DOCX、XLSX、XLS、HTML)とtitleフィールドを含むmultipart/form-dataとして送信します。API経由のアップロード上限は30MBです。アップロード後も処理は続き、レスポンスにはprocessingStatusが含まれます。
documents:write/decks新しい順に最大20件の資料を一覧表示します。任意のクエリパラメーター title を使うと、大文字と小文字を区別せずにタイトルの一部で絞り込めます。
documents:readGET /decks レスポンスフィールド
| Field | Type | Description |
|---|---|---|
| id | string | ドキュメントID |
| title | string | ドキュメントタイトル |
| fileType | string | ドキュメントのMIMEタイプ |
| pageCount | integer | null | ページ数 |
| thumbnailUrl | string | null | サムネイル画像のURL |
| processingStatus | string | pending、processing、completed、failedのいずれか。処理中のドキュメントもルームに追加できます。ドキュメントへのリンクは、completedになってから送信してください。 |
| processingErrorCode | string | null | 処理が失敗した場合の理由 |
| createdAt | string | ISO 8601タイムスタンプ |
POST /decks レスポンスフィールド
| Field | Type | Description |
|---|---|---|
| id | string | ドキュメントID |
| title | string | ドキュメントタイトル |
| fileType | string | ドキュメントのMIMEタイプ |
| processingStatus | string | pending、processing、completed、failedのいずれか。処理中のドキュメントもルームに追加できます。ドキュメントへのリンクは、completedになってから送信してください。 |
| processingErrorCode | string | null | 処理が失敗した場合の理由 |
ルーム
ドキュメントと対象者向けリンクを備えたデジタルセールスルームを1回の呼び出しで作成し、ルームの検索、設定の変更、アーカイブと復元、タブと項目の整理を行います。ワークスペース API トークンでのみ利用でき、Zapier OAuth 認証情報は拒否されます。
/roomsルームを新しい順に一覧表示します。search、status(active、archived、all)、companyIdで絞り込めます。1ページは25件(limitで最大100件)です。次のページを取得するには、そのページのnextCursorをcursorとして渡します。
rooms:readcrm:read(Required when the companyId filter is present.)/roomsドキュメントと最初の対象者向けリンクを含むルームを1回の呼び出しで作成します。
rooms:writedocuments:write(Required when documentIds contains one or more document IDs.)crm:write(Required when the request supplies contactId, recipientName, recipientEmail, companyId, companyName, or when either primaryLink.allowedEmails or primaryLink.allowedDomains is non-empty.)/rooms/{roomId}ルームの設定、表示順のタブと項目、リンク数を返します。
rooms:read/rooms/{roomId}名前、ウェルカムメッセージ、担当者、会社、連絡先を変更します。
rooms:writecrm:write(Required when companyId or contactId is present, including null to detach the association.)/rooms/{roomId}/archiveルームをアーカイブします。ルームのリンクは機能しなくなります。
rooms:write/rooms/{roomId}/restoreアーカイブされたルームを復元します。リンクは再び機能します。
rooms:write/rooms/{roomId}/tabsタブを指定した位置または末尾に追加します。
rooms:write/rooms/{roomId}/tabs/{tabId}タブの名前を変更します。
rooms:write/rooms/{roomId}/tabs/orderすべてのタブを新しい順序に並べ替えます。
rooms:write/rooms/{roomId}/tabs/{tabId}項目を表示していないタブを削除します。
rooms:write/rooms/{roomId}/itemsタブにドキュメント、URL、埋め込み、セクション区切りを追加します。
rooms:writedocuments:write(Required when type is document or url.)/rooms/{roomId}/items/{itemId}/move項目を別のタブの末尾に移動します。
rooms:write/rooms/{roomId}/items/order1つのタブの項目を新しい順序に並べ替えます。
rooms:write/rooms/{roomId}/items/{itemId}項目をルームから外します。ライブラリには残ります。
rooms:write/rooms/{roomId}/linksルームのオーディエンス用リンクを新しい順に一覧表示します。制限付きリンクには有効な招待者も含まれます。
rooms:read/rooms/{roomId}/links有効なルームに、対象者情報を関連付けた公開リンクを作成します。
rooms:writecrm:write/rooms/{roomId}/links/{linkId}リンクの有効・無効を切り替え、有効期限を設定または解除し、アクセス許可リストを置き換えます。
rooms:writecrm:write(Required when allowedEmails or allowedDomains is present, including an empty array that clears the audience.)/rooms/{roomId}/action-planルームのアクションプランを返します。設定、フェーズ、タスク(社内限定を含む)、前提タスク、進捗が含まれます。
plan:read/rooms/{roomId}/action-planプランの設定を変更します。ルームを開いた人が自分のタスクを完了にできるかどうかも含みます。
plan:write/rooms/{roomId}/action-plan/phasesマイルストーンを追加します。colorを省略すると、フェーズは順にティール、ピーチ、ブルーになります。
plan:write/rooms/{roomId}/action-plan/phases/{phaseId}フェーズの名前、位置、日付、色を変更します。colorにnullを送ると自動のローテーションに戻ります。
plan:write/rooms/{roomId}/action-plan/phases/{phaseId}フェーズを削除します。modeは必須で、delete_tasksかmove_to_unphasedを指定します。タスクが意図せず消えることはありません。
plan:write/rooms/{roomId}/action-plan/tasksタスクを追加します。assigneeはnull、担当する会社を表すsideのみ、または担当者を指すsideとemailのいずれかです。
plan:write/rooms/{roomId}/action-plan/tasks/{taskId}タスクを更新します。assigneeを省略すると担当はそのまま、nullを送ると担当が外れます。
plan:write/rooms/{roomId}/action-plan/tasks/{taskId}タスクを削除します。サブタスクも一緒に削除されます。
plan:write/rooms/{roomId}/action-plan/tasks/{taskId}/statusワークスペースとしてタスクを完了または再開します。未完了の前提タスクがある場合は409 TASK_BLOCKEDを返します。
plan:write/rooms/{roomId}/analyticsルームの訪問数、ユニーク閲覧者、平均滞在時間、開かれたドキュメント数と総数、平均完了率を返します。ボットは除外されます。
analytics:read/rooms/{roomId}/activityルームで起きたことを新しい順に返します。ディスカッションの項目は送信者を示すだけで、本文は含みません。sinceで範囲を絞れます。
analytics:read/rooms/{roomId}/captured-emailsルームが集めたメールアドレスを返します。sourceは、ワンタイムリンクで確認済みならverify、入力しただけならaskです。
analytics:read/room-viewsワークスペース全体のルーム入室を新しい順に返します。入室を知る手段はほかになく、/viewsはドキュメントの閲覧のみを対象とします。
analytics:read/room-labelsワークスペースのルームラベルを、それぞれを使っているルーム数とともに一覧表示します。ルームにラベルを付ける前に、ここでIDを確認します。
rooms:read/room-labelsラベルを作成します。名前は大文字小文字を区別せずワークスペース内で一意です。colorは#RRGGBB形式の16進数です。
rooms:write/room-labels/{labelId}ラベルの名前、色、説明を変更します。
rooms:write/room-labels/{labelId}ラベルと、その割り当てを削除します。付いていたルーム自体はそのままで、レスポンスには何件から外れたかが含まれます。
rooms:write1回の呼び出しでルームを作成
各ファイルをPOST /decksでアップロードしてから、受信者の会社向けのルームを、閲覧すべき人だけが開ける制限付きリンク付きで作成します。会社、連絡先、ルーム、ドキュメント、リンクはまとめて作成されるため、呼び出しが拒否された場合は何も作成されません。ドキュメントは処理中でもルームに追加できます。ルームの項目はprocessingStatusを返すので、すべてのドキュメントがcompletedになってからリンクを送信してください。
{
"name": "Acme renewal",
"companyName": "Acme Inc",
"recipientName": "Pat Buyer",
"recipientEmail": "pat@acme.example",
"documentIds": [
"{documentId}",
"{documentId}"
],
"primaryLink": {
"accessMode": "verified-allowlist",
"allowedEmails": [
"pat@acme.example",
{
"email": "cfo@acme.example",
"name": "Sam Rivera"
}
],
"allowedDomains": [
"acme.example"
]
}
}accessModeは、open(URLを知っている全員)、verify-any(訪問者がワンタイムリンクでメールアドレスを確認)、verified-allowlist(allowedEmailsのアドレスと、allowedDomainsのドメインのアドレスを持つ人のみ)のいずれかです。APIが制限付きリンクに誰かを自動で追加することはないため、ルームをプレビューしたい場合は自分のアドレスも含めてください。プランに含まれないオプションを指定すると403 FEATURE_NOT_AVAILABLE、不明なフィールドを指定すると400が返るため、依頼とは異なる対象者にルームが公開されることはありません。
タブと項目を整理
まずルームの現在の状態を取得します。ルームを読み込むと、タブと項目が表示順で返され、各項目は所属するタブとその中での位置(0から数える)を示します。タブや項目を指定した位置に追加し、項目をタブ間で移動し、タブの新しい順序を全体として送信します。順序にはタブ内のすべての項目を1回ずつ含める必要があるため、途中で別の変更が入った場合はルームを読み込み直してください。タブは、項目を表示しなくなれば削除できます。
{
"type": "section",
"label": "Commercials",
"tabId": "{tabId}",
"position": 0
}対応している埋め込み提供元
埋め込みは共有リンクと埋め込みリンクのどちらも受け付け、提供元の埋め込み形式に正規化します。この一覧にないものは 400 EMBED_PROVIDER_NOT_SUPPORTED を返します。
| Field | Type | Description |
|---|---|---|
| 動画 | Loom, YouTube, Vimeo, Wistia, Vidyard | |
| 日程調整 | Calendly, Cal.com, SavvyCal, Google Calendar | |
| フォーム | Typeform, Tally, Google Forms, Jotform, Fillout | |
| デザイン | Figma, Miro, Canva, Whimsical | |
| ドキュメントと表 | Google Docs, Google Sheets, Notion, Coda, Airtable | |
| プレゼンテーション | Google Slides, Pitch, Gamma, Guideflow, Flipsnack, Prezi | |
| 音声 | Spotify, SoundCloud |
別のオーディエンス用リンクを追加
どのルームにも POST /rooms で作られたリンクが1つあります。帰属や権限を分けたい相手には、さらにリンクを追加してください。recipientName、recipientEmail、contactId、companyId、companyName のうち少なくとも1つを指定します。accessMode は primaryLink と同じ open、verify-any、verified-allowlist を取り、フィールドも同じです(requireEmail、allowedEmails、allowedDomains、label、expiresAt、allowDownloads)。プラン上限を含め、拒否された呼び出しはリンクも会社も連絡先も残しません。
{
"companyName": "Analytical Engines",
"accessMode": "verified-allowlist",
"allowedEmails": [
{
"email": "cfo@analytical.example",
"name": "Sam Rivera"
}
]
}リンクを更新
対象は4つのフィールドです。isActive、expiresAt、allowedEmails、allowedDomains(後者2つは verified-allowlist のリンクのみ)。accessMode とスラッグは変更できないため、新しいリンクを作成してください。リンクを再度有効にすると、プランのアクティブリンク数の上限が再確認されます。
{
"isActive": false
}アクションプランを組み立てる
どのルームにもプランはちょうど1つなので、プラン専用のIDはなくルームの下に置かれます。多くのタスクは個人ではなく会社に属します。sideだけを送ればプランはそれを会社として扱います。相手側の誰が作業するか分からないときは、これが適切です。担当者が分かっている場合にだけemailを追加してください。社内限定のタスクはルームに表示されないため、受信者側に割り当てることはできません。
{
"title": "Sign the NDA",
"assignee": {
"side": "buyer"
},
"dueDate": "2026-10-02"
}プランのrecipientCompletionEnabledが、ルームを開いた人が自分の側のタスクを完了にできるかどうかを決めます。既定値はtrueで、これが唯一の条件です。タスクを完了するために受信者のアドレスをAPIが求めることはありません。誰が完了にしたかは、ルームのアクセスモードに応じた確度で記録されます。
ルームにラベルを付ける
ラベルはワークスペース全体で共有されるので、一度作れば使い回せます。作成と同時にルームへ付けるにはPOST /roomsでlabelIdsを渡し、まとめて入れ替えるにはPATCH /rooms/{roomId}で渡します。空の配列はすべてのラベルを外し、フィールドを省略すると変更されません。1つのルームが持てるのは最大5件で、これは設定ではなく構造上の上限です。ルームを読み取るとラベルも返されます。
{
"labelIds": [
"{labelId}"
]
}何が起きたかを知る
まず/room-viewsでワークスペース全体の入室を取得し、次に個々のルームのアナリティクス、アクティビティ、収集したアドレスを読み取ります。続きを取得するにはページのnextCursorをcursorとして渡します。このAPIが発行していないカーソルは先頭に戻らず400を返すため、繰り返し取得になることはありません。sinceでアクティビティの期間を絞り込み、cursorでページを続けて取得します。 /room-views はアーカイブではなく期間です。since を省略すると直近30日が返り、90日より前は拒否されます。適用された期間は since として返るので、cursor と一緒に送れば同じ範囲を続けて取得できます。
会社と連絡先
既存のアカウント情報を一貫した条件で検索するか、新規作成します。会社名と連絡先メールアドレスは大文字と小文字を区別せず照合されます。
/companies?name={name}&domain={domain}完全一致する名前と任意のドメインで会社を検索します。
crm:read/companies大文字と小文字を区別せず名前で会社を検索または作成します。明示したドメインはレコードの情報補完にのみ使用されます。
crm:write/contacts?email={query}メールアドレスで連絡先を検索します。関連する会社とともに一致する連絡先を返します。
crm:read/contactsメールアドレスで連絡先を検索または作成し、必要に応じて会社に関連付けます。
crm:writePOST /companiesのリクエスト
| Field | Type | Description | |
|---|---|---|---|
| name | string | 必須 | 会社名 |
| domain | string | 任意 | 会社情報の補完に使用するドメイン。既存会社の照合には使用されません |
POST /contactsのリクエスト
| Field | Type | Description | |
|---|---|---|---|
| name | string | 条件付き | 氏名。firstNameがない場合は必須 |
| firstName | string | 条件付き | 名。nameがない場合は必須 |
| lastName | string | 任意 | 姓 |
| string | 必須 | 一意の照合に使用するメールアドレス | |
| title | string | 任意 | 役職 |
| companyId | UUID | 任意 | 認証済みワークスペースの既存の会社 |
| companyName | string | 任意 | 検索または作成する会社名 |
| companyDomain | string | 任意 | companyNameとともに使用する任意の情報補完ドメイン。会社の照合キーではありません |
会社のレスポンス
| Field | Type | Description |
|---|---|---|
| company.id | UUID | 会社ID |
| company.name | string | 会社名 |
| company.domain | string | null | 正規化された会社ドメイン |
| created | boolean | POSTリクエストで会社を作成した場合はtrue |
連絡先のレスポンス
| Field | Type | Description |
|---|---|---|
| contact.id | UUID | 連絡先ID |
| contact.firstName | string | 名 |
| contact.lastName | string | 姓 |
| contact.email | string | 正規化されたメールアドレス |
| contact.title | string | null | 役職 |
| contact.companyId | UUID | null | 関連付けられた会社ID |
| contact.companyName | string | null | 関連付けられた会社名 |
| created | boolean | POSTリクエストで連絡先を作成した場合はtrue |
| company | object | null | 解決された会社(存在する場合) |
| companyCreated | boolean | このリクエストで会社を作成した場合はtrue |
Webhook
REST Hooksを介してリアルタイムイベントにサブスクライブします。イベントが発生すると、HummingDeckはイベントペイロードとともに登録済みのHTTPS URLにPOSTリクエストを送信します。配信が失敗した場合は最大3回まで再試行されます(1秒、5秒、30秒の間隔)。 Webhookのサブスクリプションは Zapier 連携で管理され、ワークスペースAPIトークンでは利用できません。
/hooksイベントにサブスクライブします。HTTPS宛先URLとイベントタイプが必要です。サブスクリプションIDを返します。
Zapier OAuthのみ
/hooks/{id}サブスクリプションIDによってイベントのサブスクリプションを解除します。
Zapier OAuthのみ
イベントタイプ
| Event | Description |
|---|---|
| view.created | 実際の人物が共有ドキュメントを閲覧しました。ボットトラフィック(メールセキュリティスキャナー、クローラー)は自動的にフィルタリングされます。 |
| decision.made | 見込み客が提案に回答しました。承認、拒否、または変更要求を通知します。 |
| email_captured | 閲覧者がゲートコンテンツにアクセスするためにメールアドレスを入力しました。 |
ペイロードの例
view.created
{
"event": "view.created",
"data": {
"id": "view_abc123",
"deck_id": "deck_xyz789",
"deck_title": "Q4 Enterprise Proposal",
"viewer_email": "sarah@acme.com",
"viewer_name": "Sarah Wood",
"viewer_company": "Acme Corp",
"location": "San Francisco, CA",
"device": "Desktop",
"browser": "Chrome",
"pages_viewed": 8,
"total_pages": 12,
"duration_seconds": 272,
"completion_percent": 67,
"created_at": "2026-03-29T14:32:00Z"
}
}decision.made
{
"event": "decision.made",
"data": {
"share_slug": "proposal-2024",
"decision": "accepted",
"deck_title": "Q4 Enterprise Proposal",
"viewer_email": "sarah@acme.com",
"viewer_name": "Sarah Wood",
"decision_note": "Approved pending final review",
"decided_at": "2026-03-29T15:30:00Z"
}
}email_captured
{
"event": "email_captured",
"data": {
"email": "prospect@company.com",
"share_slug": "proposal-2024",
"deck_title": "Q4 Enterprise Proposal",
"view_id": "view_xyz789",
"captured_at": "2026-03-29T14:35:00Z"
}
}ビューとイベント
最近のエンゲージメントデータを取得するためのポーリングエンドポイントです。webhookがリアルタイムで配信するものと同じデータを返すため、バックフィル、テスト、フォールバックに利用できます。
/views最新のドキュメント閲覧100件をリストします。ボットセッションは除外されます。
analytics:read/decisions最近の提案決定(承認、拒否、変更要求)をリストします。
analytics:read/emailsゲートコンテンツからの最近のメールキャプチャをリストします。
analytics:readエラー処理
すべてのエラーは、何が問題だったかを示す error フィールドを含むJSONオブジェクトを返します。ほとんどのレスポンスには、PLAN_LIMIT_REACHED、FEATURE_NOT_AVAILABLE、ROOM_NOT_ACTIVE、TAB_NOT_EMPTY、INVALID_FORMAT、FILE_TOO_LARGE のようにプログラムで処理できる code フィールドも含まれます。HTTPステータスコードは一般的な慣例に従います。
| Status | Meaning |
|---|---|
| 400 | リクエスト不正:パラメータが欠落しているか無効です |
| 401 | 未認証:Bearer tokenが無効または期限切れです |
| 403 | 禁止:認証情報に必要なscopeがない、プランの上限に達している、必要なオプションがプランにない、またはこの認証情報の種類ではこのエンドポイントを利用できません |
| 404 | 見つかりません:リソースが存在しないか、チームに属していません |
| 409 | 競合:指定した識別子が一致しない、ルームがアーカイブされている、またはルームのタブの状態によりこの変更ができません |
| 413 | ペイロードが大きすぎます:リクエスト本文またはアップロードファイルがこのエンドポイントの上限を超えています |
| 429 | リクエストが多すぎます:キーまたはクライアントIPが現在の上限を超えました。Retry-Afterの時間後に再試行してください |
| 500 | サーバーエラー:リクエストを再試行してください |
レート制限
手動のワークスペースキーとZapier OAuth接続には認証情報ごとの制限があります。読み取りは5分あたり600回、書き込みは1分あたり120回、/room-viewsは1分あたり60回、アップロードは1時間あたり20回です。すべての認証情報を合わせたワークスペース単位では、読み取りは5分あたり1,200回、書き込みは1分あたり240回、/room-viewsは1分あたり120回、アップロードは1時間あたり40回です。Bearer認証の失敗と無効なOAuthクライアント認証は、それぞれクライアントIPごとに5分あたり60回までです。チームあたりアクティブなwebhookサブスクリプションは最大50件です。
このAPIは現在、当社のZapier統合で使用されています。将来的には追加の統合プラットフォームがサポートされる可能性があります。