Google Tasks APIとWebhooks、Zapier連携:上級ユーザー向け公開API
フォームが送信されるたびにGoogle Tasksにタスクを作成したい。チームメンバーが共有のリリースリストでタスクを完了したらSlackに通知したい。期限切れタスクを毎晩スプレッドシートに記録したい。
GoogleにはTasks APIがありますが、webhookがなく「タスク完了時」の検知には定期的なポーリングが必要です。ラベルや担当者、ボード機能もありません。さらに、スクリプト作成にはGoogle Cloudプロジェクトの設定やOAuth認証画面、トークン更新処理が必須です。
TasksBoardはGoogle Tasksデータを扱うREST APIを公開しました。個人APIキー、HMAC署名付きwebhook、Zapier連携が可能です。このガイドでは、APIの機能概要、キー取得方法、主要エンドポイント、webhookとポーリングの仕組み、適したユースケースを解説します。このAPIはTeamプランの機能です。
TasksBoard APIがGoogle Tasksに追加する機能
このAPIはGmailやGoogle Tasksアプリで表示されるのと同じリストとタスクを読み書きします。全てのリストIDとタスクIDはGoogle TasksのIDそのままなので、他のGoogle Tasks連携ツールとも互換性が保たれます。
さらに、TasksBoardが追加する機能も利用可能です:
- ラベルと担当者を専用フィールドとして扱えます。Google Tasksはタイトル、メモ、期日しか保存しませんが、TasksBoardはメモ内にラベル(1行目)と
👤 Assigned to <メール>形式で担当者を保持します。APIではlabelsとassigneeとして読み書きでき、メモ本文はボード上でそのまま表示されます - ボード:各TasksBoardボードが表示するリスト
- 共有リスト:各リストの
sharedフラグと、共同編集者によるタスク変更時のイベント task.created、task.updated、task.completed、task.deletedに対応するwebhook
ベースURL:https://api.tasksboard.com/v1。レスポンスはdataキー下のJSONで返されます。エラーは{ "error": { "code", "message", "details" } }形式で、codeは固定値、detailsは422時に無効なフィールド名を返します。
APIキーの作成方法
キーは個人ごとに発行されます。キーは発行者の権限で動作し、Google Tasksで可能な全ての操作が実行できます。
- TasksBoardでアバターをクリックし、Team → APIタブを開く(または直接
/team?tab=apiにアクセス) - キー作成をクリック。書き込み権限の有無を選択(書き込み不可のキーは全ての書き込み操作で
403 forbidden) - キーをコピー(
tb_live_で始まり、一度しか表示されません) - リクエストごとにBearerトークンとして送信:
curl https://api.tasksboard.com/v1/lists \
-H "Authorization: Bearer tb_live_…"
同じタブでキーの権限確認、無効化、webhookの管理が可能です。キーが漏洩した場合は即座に無効化し、数秒で新しいキーを発行できます。
主要エンドポイント
主要リソースの簡単な紹介です。完全なリファレンスはOpenAPI定義から生成され、ヘルプセンターで公開されています:TasksBoard APIリファレンス
アカウント
GET /me:キーに紐づくアカウント情報とプラン、キーの権限
リスト
GET /lists:Google Tasksリスト一覧(sharedとboardId付き)POST /lists:リスト作成(title必須)GET /lists/{listId}:単一リストの詳細
タスク
GET /lists/{listId}/tasks:デフォルトで未完了タスク。status=completedまたはall、updatedAfter、dueBefore、dueAfter、includeDeletedでフィルタ可能POST /lists/{listId}/tasks:title、notes、due、labels、assignee、parent(サブタスク化)、previous(兄弟タスク後に挿入)でタスク作成GET /tasks/{taskId}?listId=:単一タスク(Google TasksはリストIDとタスクIDで特定するためlistId必須)PATCH /tasks/{taskId}:部分更新。nullでnotes、due、labels、assigneeをクリア可能。status: "open"で完了タスクを再開POST /tasks/{taskId}/complete:タスク完了DELETE /tasks/{taskId}?listId=:タスク削除
ボード
GET /boards:所有ボードと各ボードが表示するリストID(メインボードが常に最初)
Webhook
GET、POST /webhooks、GET、PATCH、DELETE /webhooks/{webhookId}
ラベルと担当者付きでタスクを作成する例:
curl -X POST https://api.tasksboard.com/v1/lists/LIST_ID/tasks \
-H "Authorization: Bearer tb_live_…" \
-H "Content-Type: application/json" \
-d '{"title": "Q3レポート送付", "due": "2026-10-24",
"labels": ["❗️重要"], "assignee": "bob@example.com"}'
担当者はリストの共同編集者(または自分自身)である必要があります。リストエンドポイントはデータが多い場合meta.nextCursorを返すので、同じフィルタと共にcursorパラメータで続きを取得できます。
- キーごとに1分あたり60リクエスト。 レスポンスにX-RateLimit-LimitとX-RateLimit-Remainingを含み、429時はRetry-After(秒)を返します。Google Tasks自体のクォータも別途適用
- 期日は日付のみ。 Google Tasksは時刻を保持しないため、due値は常にUTC深夜として扱われます
- アカウントあたり10webhookまで、 HTTPS URLのみ対応
- Teamプラン必須。 プランから脱退したユーザーのキーは403 team_plan_requiredを返します
Webhook:タスク変更時の通知
Google Tasks APIの弱点であるポーリングを、webhookで解決します。タスク作成・更新・完了・削除時に指定URLへ通知します。
- 必要なイベントを指定してwebhook登録:
curl -X POST https://api.tasksboard.com/v1/webhooks \
-H "Authorization: Bearer tb_live_…" \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.example.com/tasksboard",
"events": ["task.created", "task.completed"]}'
- レスポンスの
secretを保存(この時のみ返却。独自のシークレットも指定可能) - 各配信に10秒以内で200番台で応答
各配信には3つのヘッダーが含まれます:X-TasksBoard-Event(イベント名)、X-TasksBoard-Delivery(配信ID)、X-TasksBoard-Signature。本文にはイベント種別、createdAtタイムスタンプ、試行回数、data.task下に完全なタスクデータ、変更元(api:REST呼び出し、sync:共有リスト経由の変更、poll:後述の15分間隔ポーリング)が含まれます。
署名の検証
署名ヘッダーはt=<UNIX秒>,v1=<16進数>形式で、v1はシークレットを使った"<t>.<生ボディ>"のHMAC-SHA256です。JSON解析前の生リクエストボディに対してHMACを計算し、古すぎるタイムスタンプは拒否します:
const crypto = require("crypto")
function verify(secret, rawBody, header, toleranceSeconds = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")))
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > toleranceSeconds) return false
const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex")
return crypto.timingSafeEqual(Buffer.from(parts.v1, "hex"), Buffer.from(expected, "hex"))
}
再試行と無効化
配信失敗時は最大3回までバックオフ間隔で再試行します。20回連続失敗するとwebhookは無効化(active: false)され、PATCH /webhooks/{id}で"active": trueを送信するまで復旧しません。TeamページのAPIタブでは各webhookのURL、イベント種別、有効/無効ステータスが一目で確認できます。
非共有リストのポーリング
webhookイベントは3つの源から発生します:API自身の書き込み、共有リスト経由の変更、そして有効にした場合のその他リストのポーリングです。
最後のポーリングが重要です。共有されていないリストでの変更(GmailやGoogle Tasksアプリ経由)は、リストが監視されない限りTasksBoardに検知されません。APIタブで15分間隔でリストをポーリングを有効にすると、TasksBoardが定期的にリストをチェックしsource: "poll"のイベントを発行します。無効時は共有リストとAPI書き込みのみがイベント源となります。
チームの共有リストのみの変更で十分な場合は、ポーリングをオフのままにできます。
Zapier連携
コーディング不要な自動化も可能です。TasksBoardのZapierアプリは同じ個人APIキーで認証し、以下を提供します:
- トリガー:新規タスク、タスク完了(共に
updatedAfter付きでGET /lists/{listId}/tasksをポーリング。自作スクリプトと同じ仕組み) - アクション:タスク作成、タスク完了、リスト作成
Zapier連携は公開準備中です。公開後はZapierでTasksBoardを検索し、キーを貼り付けてリストを選択するだけです。それまではREST APIとwebhookで同等の機能が利用可能で、上記トリガー/アクションが参考になります。さらに広範な自動化オプションについてはGoogle Tasks連携ガイドをご覧ください。
普段使っているGoogle Tasksに、共有リスト、役割分担、アクティビティログ、webhook付きREST APIを追加。チーム全体を1つの請求書で。
プランを見る →適したユースケース
このAPIはTeamプランの機能で、特に以下に適しています:
- 共有リストを信頼できる情報源とするチーム。
source: "sync"付きのtask.completedwebhookは、共同編集者がどのアプリを使っていてもタスク完了時に発火します。Slack通知、Sheetsへの記録、チケット更新のトリガーに最適 - ツール連携を担当するオペレーションスタッフ。フォーム、CRM、サポートデスクからラベルと担当者付きでタスク作成可能。指定者のボードとGoogle Tasksアプリに即時反映
- Google Tasks APIを試して断念した開発者。ポーリング、OAuth設定、担当者機能不足で諦めた方へ。1キー、1ヘッダー、Google純正のID体系
GoogleのAPI全体を置き換える用途には向きません。個人スクリプトで自分のタスクのみ扱い、既にOAuthクライアントがある場合はGoogleの無料APIで十分です。単発のエクスポートにはGoogle Tasksエクスポートガイドをご参照ください。
よくある質問
まとめ
Google TasksにはAPIがありますが、webhook・ラベル・担当者機能がなく、小規模な自動化でも初期設定の手間が障壁になります。TasksBoard APIはGoogleのID体系を保持しつつ、不足機能を補完します:1分で作成可能な個人キー、リスト/タスク/ボード用エンドポイント、検証可能なwebhook、非共有リスト用のポーリング、近日公開のZapier連携。
TeamページのAPIタブでキーを作成し、GET /listsを1回呼び出すだけで開始できます。詳細はAPIリファレンスでご確認ください。


