サブスクリプションを作成する

名前空間: microsoft.graph

重要

Microsoft Graph の /beta バージョンの API は変更される可能性があります。 実稼働アプリケーションでこれらの API を使用することは、サポートされていません。 v1.0 で API を使用できるかどうかを確認するには、Version セレクターを使用します。

変更の要求された種類が Microsoft Graph の指定されたリソースに発生したときに変更通知を受信するため、リスナー アプリケーションに登録します。

サブスクリプションを作成できるリソースとサブスクリプションの制限事項を特定するには、「 リソース データの変更に関する通知の設定: サポートされているリソース」を参照してください。

一部のリソースは、リッチ通知、つまりリソース データを含む通知をサポートします。 これらのリソースの詳細については、「 リソース データを含む変更通知のセットアップ: サポートされるリソース」を参照してください。

この API は、次の国内クラウド展開で使用できます。

グローバル サービス 米国政府機関 L4 米国政府機関 L5 (DOD) 21Vianet が運営する中国

アクセス許可

サブスクリプションを作成するには、リソースに対する読み取りアクセス許可が必要です。 たとえば、メッセージの変更通知を受け取るには、アプリに Mail.Read アクセス許可が必要です。

要求されたリソースとアクセス許可の種類 (委任およびアプリケーション) によっては、以下の表で指定されているアクセス許可がこの API を呼び出すために最小限必要な特権となります。 より多くの特権アクセス許可を選択する前に 注意する ことを含め、詳細については、[アクセス許可] で次のアクセス許可を検索してください。

注:

  • セキュリティ上の制限により、Microsoft Graph サブスクリプションでは、読み取りアクセス許可のみが必要な場合、書き込みアクセス許可はサポートされません。
  • 一部のリソースは複数のシナリオで変更通知をサポートしており、それぞれ異なるアクセス許可が必要な場合があります。 その場合は、リソース パスを使用してシナリオを区別します。
サポートされているリソース 委任 (職場または学校のアカウント) 委任 (個人用 Microsoft アカウント) アプリケーション
aiInsights
/copilot/users/{userId}/onlineMeetings/getAllAiInsights
特定のユーザーが参加している会議からの Copilot AI 分析情報。
OnlineMeetingAiInsight.Read.All サポートされていません。 OnlineMeetingAiInsight.Read.All
aiInsights
/copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights
特定の会議に関する Copilot AI 分析情報。
OnlineMeetingAiInsight.Read.All サポートされていません。 OnlineMeetingAiInsight.Read.All
aiInteraction
copilot/users/{userId}/interactionHistory/getAllEnterpriseInteractions
特定のユーザーが参加している Copilot AI 対話。
AiEnterpriseInteraction.Read サポートされていません。 AiEnterpriseInteraction.Read.All、AiEnterpriseInteraction.Read.User
aiInteraction
copilot/interactionHistory/getAllEnterpriseInteractions
organization における Copilot AI の対話。
サポートされていません。 サポートされていません。 AiEnterpriseInteraction.Read.All
approvalItems サポートされていません。 サポートされていません。 ApprovalSolution.ReadWrite.All
callRecord サポートされていません。 サポートされていません。 CallRecords.Read.All
callRecording
communications/onlineMeetings/getAllRecordings
すべてのレコーディングがテナントで利用可能になります。
サポートされていません。 サポートされていません。 OnlineMeetingRecording.Read.All
callRecording
communications/onlineMeetings/{onlineMeetingId}/recordings
任意の記録が特定の会議で利用可能になります。
OnlineMeetingRecording.Read.All サポートされていません。 OnlineMeetingRecording.Read.All
callRecording
users/{userId}/onlineMeetings/getAllRecordings
特定のユーザーによって開催された会議で利用可能になる通話録音。
OnlineMeetingRecording.Read.All サポートされていません。 OnlineMeetingRecording.Read.All
callRecording
appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings
特定の Teams アプリがインストールされている会議で利用可能になる通話録音。
サポートされていません。 サポートされていません。 OnlineMeetingRecording.Read.All、OnlineMeetingRecording.Read。Chat
callTranscript
communications/onlineMeetings/getAllTranscripts
トランスクリプトはすべてテナントで使用可能になります。
サポートされていません。 サポートされていません。 OnlineMeetingTranscript.Read.All
callTranscript
communications/onlineMeetings/{onlineMeetingId}/transcripts
任意のトランスクリプトが特定の会議で使用可能になります。
OnlineMeetingTranscript.Read.All サポートされていません。 OnlineMeetingTranscript.Read.All
callTranscript
users/{userId}/onlineMeetings/getAllTranscripts
特定のユーザーによって開催された会議で利用可能になる通話記録。
OnlineMeetingTranscript.Read.All サポートされていません。 OnlineMeetingTranscript.Read.All
callTranscript
appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts
特定の Teams アプリがインストールされている会議で利用可能になる通話記録。
サポートされていません。 サポートされていません。 OnlineMeetingTranscript.Read.All、OnlineMeetingTranscript.Read。Chat
channel
/teams/getAllChannels
all channels in a organization.
サポートされていません。 サポートされていません。 Channel.ReadBasic.All、ChannelSettings.Read.All
channel
/teams/{id}/channels
特定のチーム内のすべてのチャネル organization.
Channel.ReadBasic.All、ChannelSettings.Read.All サポートされていません。 Channel.ReadBasic.All、ChannelSettings.Read.All
チャット
/chats
organization 内のすべてのチャット。
サポートされていません。 サポートされていません。 Chat.ReadBasic.All、 Chat.Read.All、 Chat.ReadWrite.All
チャット
/chats/{id}
特定のチャット。
Chat.ReadBasic、 Chat.Read、 Chat.ReadWrite サポートされていません。 ChatSettings.Read です。Chat、ChatSettings.ReadWrite。Chat, Chat.管理.Chat, Chat.ReadBasic.All、Chat.Read.All、Chat.ReadWrite.All
チャット
/appCatalogs/teamsApps/{id}/installedToChats
特定の Teams アプリがインストールされている organization 内のすべてのチャット。
サポートされていません。 サポートされていません。 Chat.ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled
チャット
/users/{id}/chats
特定のユーザーが参加しているすべてのチャット。
Chat.ReadBasic、 Chat.Read、 Chat.ReadWrite サポートされていません。 Chat.ReadBasic.All、 Chat.Read.All、 Chat.ReadWrite.All
chatMessage
/teams/{id}/channels/{id}/messages
特定のチャネル内のすべてのメッセージと返信。
ChannelMessage.Read.All、Group.Read.All、Group.ReadWrite.All サポートされていません。 ChannelMessage.Read.Group、ChannelMessage.Read.All
chatMessage
/teams/getAllMessages
organization 内のすべてのチャネル メッセージ。
サポートされていません。 サポートされていません。 ChannelMessage.Read.All
chatMessage
/chats/{id}/messages
チャット内のすべてのメッセージ。
Chat.Read、Chat.ReadWrite サポートされていません。 Chat.Read.All
chatMessage
/chats/getAllMessages
organization 内のすべてのチャット メッセージ。
サポートされていません。 サポートされていません。 Chat.Read.All
chatMessage
/users/{id}/chats/getAllMessages
特定のユーザーが参加しているすべてのチャットのChatメッセージ。
Chat.Read、Chat.ReadWrite サポートされていません。 Chat.Read.All、Chat.ReadWrite.All
chatMessage
/appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
特定の Teams アプリがインストールされているorganization内のすべてのチャットに対してメッセージをChatします。
サポートされていません。 サポートされていません。 Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled
contact Contacts.Read Contacts.Read Contacts.Read
conversationMember
/chats/getAllMembers
organization 内のすべてのチャットのメンバー。
サポートされていません。 サポートされていません。 ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All
conversationMember
/chats/{id}/members
特定のチャットのメンバー。
ChatMember.Read, ChatMember.ReadWrite, Chat.ReadBasic, Chat.Read, Chat.ReadWrite サポートされていません。 ChatMember.Read.Chat, Chat.Manage.Chat, ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All
conversationMember
/appCatalogs/teamsApps/{id}/installedToChats/getAllMembers
特定の Teams アプリがインストールされているorganization内のすべてのチャットのメンバー Chat。
サポートされていません。 サポートされていません。 ChatMember.Read.WhereInstalled、ChatMember.ReadWrite.WhereInstalled、Chat。ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled
conversationMember
/teams/getAllMembers
organization 内のすべてのチームのメンバー。
サポートされていません。 サポートされていません。 TeamMember.Read.All, TeamMember.ReadWrite.All
conversationMember
/teams/{id}/members
特定のチームのメンバー。
TeamMember.Read.All サポートされていません。 TeamMember.Read.All
conversationMember
/teams/{id}/channels/getAllMembers
特定のチームのすべてのプライベート チャネルのメンバー。
サポートされていません。 サポートされていません。 ChannelMember.Read.All
conversationMember
/teams/getAllChannels/getAllMembers
サポートされていません。 サポートされていません。 ChannelMember.Read.All
driveItem (ユーザーの個人用 OneDrive) サポートされていません。 Files.ReadWrite サポートされていません。
driveItem (職場または学校の OneDrive) Files.ReadWrite.All サポートされていません。 Files.ReadWrite.All
イベント Calendars.Read Calendars.Read Calendars.Read
グループ Group.Read.All サポートされていません。 Group.Read.All
グループ会話 Group.Read.All サポートされていません。 サポートされていません。
Microsoft Entra Health 監視アラート
/reports/healthmonitoring/alerts
HealthMonitoringAlertConfig.ReadWrite.All サポートされていません。 HealthMonitoringAlertConfig.ReadWrite.All
リスト Sites.ReadWrite.All サポートされていません。 Sites.ReadWrite.All
メッセージ Mail.ReadBasic, Mail.Read Mail.ReadBasic, Mail.Read Mail.Read
offerShiftRequest
/teams/{id}/schedule/offerShiftRequests
チーム内のオファー シフト要求に対する変更。
Schedule.Read.All、Schedule.ReadWrite.All サポートされていません。 Schedule.Read.All、Schedule.ReadWrite.All
オンライン会議 サポートされていません。 サポートされていません。 OnlineMeetings.Read.All、OnlineMeetings.ReadWrite.All
openShiftChangeRequest
/teams/{id}/schedule/openShiftChangeRequests
チームの空きシフト要求に対する変更。
Schedule.Read.All、Schedule.ReadWrite.All サポートされていません。 Schedule.Read.All、Schedule.ReadWrite.All
プレゼンス Presence.Read.All サポートされていません。 サポートされていません。
printer サポートされていません。 サポートされていません。 Printer.Read.All, Printer.ReadWrite.All
printTaskDefinition サポートされていません。 サポートされていません。 PrintTaskDefinition.ReadWrite.All
セキュリティの警告 SecurityEvents.ReadWrite.All サポートされていません。 SecurityEvents.ReadWrite.All
シフト
/teams/{id}/schedule/shifts
チーム内のシフトに対する変更。
Schedule.Read.All、Schedule.ReadWrite.All サポートされていません。 Schedule.Read.All、Schedule.ReadWrite.All
swapShiftsChangeRequest
/teams/{id}/schedule/swapShiftsChangeRequests
チーム内のスワップ シフト要求に対する変更。
Schedule.Read.All、Schedule.ReadWrite.All サポートされていません。 Schedule.Read.All、Schedule.ReadWrite.All
team
/teams
All teams in a organization.
サポートされていません。 サポートされていません。 Team.ReadBasic.All、TeamSettings.Read.All
team
/teams/{id}
特定のチーム。
Team.ReadBasic.All、TeamSettings.Read.All サポートされていません。 Team.ReadBasic.All、TeamSettings.Read.All
timeOffRequest
/teams/{id}/schedule/timeOffRequests
チーム内の休暇要求に対する変更。
Schedule.Read.All、Schedule.ReadWrite.All サポートされていません。 Schedule.Read.All、Schedule.ReadWrite.All
todoTask Tasks.ReadWrite Tasks.ReadWrite Tasks.ReadWrite.All
ユーザー User.Read.All User.Read.All User.Read.All
virtualEventWebinar VirtualEvent.Read サポートされていません。 VirtualEvent.Read.All
virtualEventTownhall VirtualEvent.Read サポートされていません。 VirtualEvent.Read.All
baseTask (非推奨) Tasks.ReadWrite Tasks.ReadWrite サポートされていません。

注:

次のアクセス許可では、 リソース固有の同意が使用されます

  • OnlineMeetingRecording.Read.Chat
  • OnlineMeetingTranscript.Read.Chat
  • ChatSettings.Read.Chat
  • ChatSettings.ReadWrite.Chat
  • Chat.Manage.Chat
  • ChannelMessage.Read.Group
  • ChatMember.Read.Chat
  • AiEnterpriseInteraction.Read.User

chatMessage

リソース データを含めるように chatMessage サブスクリプションを指定することもできます (includeResourceDatatrue に設定)。 その場合、暗号化が必要であり、そのようなサブスクリプションに encryptionCertificate が指定されていないと、サブスクリプションの作成は失敗します。

Prefer: include-unknown-enum-members 要求ヘッダーを使用して、chatMessage messageTypeのエボルベブル列挙型で次の値を取得します。 /teams/{id}/channels/{id}/messages および /chats/{id}/messages リソースのsystemEventMessage

conversationMember

リソース データを含めるように conversationMember サブスクリプションを指定することができます (includeResourceDatatrue に設定)。 その場合、暗号化が必要であり、そのようなサブスクリプションに encryptionCertificate が指定されていないと、サブスクリプションの作成は失敗します。

チーム、チャネル、チャット

チームチャネルチャット のサブスクリプションにリソース データを含めるように指定できます (includeResourceDatatrue に設定)。 その場合、暗号化が必要であり、そのようなサブスクリプションに encryptionCertificate が指定されていないと、サブスクリプションの作成は失敗します。

notifyOnUserSpecificProperties クエリ文字列パラメーターは、特定のチャットまたはユーザー レベルで変更をサブスクライブするときに使用できます。 サブスクリプションの作成時にクエリ文字列パラメーター notifyOnUserSpecificPropertiestrue に設定すると、2 種類のペイロードがサブスクライバーに送信されます。 1 つのタイプにはユーザー固有のプロパティが含まれており、もう 1 つはユーザー固有のプロパティなしで送信されます。 詳細については、「 Microsoft Graph を使用してチャットの変更通知を取得する」を参照してください。

aiInsights

Copilot AI 分析情報のサブスクリプションには、次の Copilot サービス プランを含む有効な Copilot ライセンスが必要です:

  • Microsoft 365 Copilot Chat: 3f30311c-6b1e-48a4-ab79-725b469da960

aiInteraction

Copilot AI 対話のサブスクリプションには、次の Copilot サービス プランを含む有効な Copilot ライセンスが必要です:

  • Microsoft 365 Copilot Chat: 3f30311c-6b1e-48a4-ab79-725b469da960

特定のユーザーが参加している Copilot AI 対話を対象とするサブスクリプションの場合、リソース パス内のユーザーには、有効な状態で以前のサービス プランが割り当てられている必要があります。

テナント全体の Copilot AI 対話を対象とするサブスクリプションの場合、テナントには、以前のすべての Copilot サービス プランを含む有効なライセンスがプロビジョニングされている必要があります。

driveItem

OneDrive アイテムのサブスクリプションには、さらに多くの制限が適用されます。 この制限は、サブスクリプションの作成および管理 (取得、更新、削除) に適用されます。

個人用 OneDrive では、そのドライブのルート フォルダーまたは任意のサブフォルダーにサブスクライブできます。 職場または学校の OneDrive では、ルート フォルダーのみを購読できます。 サブスクライブしたフォルダー、またはその階層内のファイル、フォルダー、またはその他の driveItem インスタンスで要求された変更に対して、変更通知が送信されます。 個々のファイルなど、フォルダーではない drive または driveItem インスタンスをサブスクライブすることはできません。

職場または学校用 OneDrive と SharePoint は、 driveItem で発生したセキュリティ イベントのアプリケーション通知を送信するサポートをサポートします。 これらのイベントをサブスクライブするには、prefer:includesecuritywebhooks ヘッダーを要求に追加してサブスクリプションを作成します。 サブスクリプションが作成された後、アイテムに対するアクセス許可が変更されたときに通知を受け取ります。 このヘッダーは、職場または学校の SharePoint と OneDrive に適用されますが、コンシューマーの OneDrive アカウントには適用されません。

連絡先、イベント、メッセージ

Outlook の連絡先イベントまたはメッセージ リソースの変更をサブスクライブし、必要に応じて、暗号化されたリソース データを通知に含めるかどうかを POST 要求のペイロードで指定できます。

サブスクリプションの作成と管理 (取得、更新、および削除) には、リソースの読み取りスコープが必要です。 たとえば、メッセージに関する変更通知を受信するには、アプリに Mail.Read アクセス許可が必要です。 Outlook 変更通知は、委任されたアクセス許可スコープとアプリケーション アクセス許可スコープをサポートします。 次の制限がある点に注意してください。

  • 委任されたアクセス許可では、サインインしているユーザーのメールボックス内のフォルダーにあるアイテムのみをサブスクライブできます。 たとえば、委任されたアクセス許可 Calendars.Read を使用して、別のユーザーのメールボックス内のイベントをサブスクライブすることはできません。

  • 共有または委任フォルダーの Outlook 連絡先、イベント、メッセージの変更通知をサブスクライブするには、次のようにします。

    • 対応するアプリケーション アクセス許可を使用して、テナントの任意のユーザーのフォルダーまたはメールボックス内にあるアイテムの変更をサブスクライブします。
    • Outlook の共有アクセス許可 (Contacts.Read.Shared、Calendars.Read.Shared、Mail.Read.Shared、およびそれに相当する読み取り/書き込みアクセス許可) は、共有フォルダーまたは委任フォルダー内のアイテムの変更通知のサブスクライブをサポートし ていない ため、使用しないでください。

onlineMeetings, プレゼンス

onlineMeetingsプレゼンスのサブスクリプションでは、暗号化されたリソース データを含む通知のサブスクリプションを作成するときに、encryptionCertificate プロパティと encryptionCertificateId プロパティが必要です。 詳細については、「 リソース データを含めるように変更通知を設定する」を参照してください。 オンライン会議のサブスクリプションの詳細については、「 オンライン会議の変更通知を受け取る」を参照してください。

virtualEventWebinar と virtualEventTownhall

仮想イベントのサブスクリプションは、基本的な通知のみをサポートし、仮想イベントの少数のエンティティに制限されます。 サポートされているサブスクリプションの種類の詳細については、「 Microsoft Teams 仮想イベント更新プログラムの変更通知の取得」を参照してください。

HTTP 要求

POST /subscriptions

要求ヘッダー

名前 説明
Authorization string ベアラー {token}。 必須です。 認証と認可についての詳細をご覧ください。

要求本文

要求本文で、subscription オブジェクトの JSON 表記を指定します。

応答

成功した場合、このメソッドは 201 Created 応答コードと応答本文の サブスクリプション オブジェクトを返します。

エラーがどのように返されるかの詳細については、「エラー応答」を参照してください。

要求

要求本文で、subscription オブジェクトの JSON 表記を指定します。 clientStatelatestSupportedTlsVersion フィールドは省略可能です。

この要求は、現在サインインしているユーザーが受信した新しいメールに関する変更通知のサブスクリプションを作成します。

POST https://graph.microsoft.com/beta/subscriptions
Content-type: application/json

{
   "changeType": "created",
   "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
   "resource": "me/mailFolders('Inbox')/messages",
   "expirationDateTime":"2016-11-20T18:23:45.9356913Z",
   "clientState": "secretClientValue",
   "latestSupportedTlsVersion": "v1_2"
}

要求本文で、subscription オブジェクトの JSON 表記を指定します。 clientStatelatestSupportedTlsVersion フィールドは省略可能です。

サブスクリプションの重複動作

重複するサブスクリプションは許可されません。 サブスクリプション要求に、既存のサブスクリプションに含まれる同じ changeType および リソース の値が含まれている場合、要求は失敗し、HTTP エラー コードが 409 Conflictされ、エラー メッセージが Subscription Id <> already exists for the requested combinationされます。

リソースの例

リソース プロパティの有効な値を次に示します。

リソースの種類
approvalItems solution/approval/approvalItems
callRecord communications/callRecords
callRecording communications/onlineMeetings/getAllRecordings, communications/onlineMeetings/{onlineMeetingId}/recordings, users/{userId}/onlineMeetings/getAllRecordings, appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings
callTranscript communications/onlineMeetings/getAllTranscripts, communications/onlineMeetings/{onlineMeetingId}/transcripts, users/{userId}/onlineMeetings/getAllTranscripts, appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts
channel /teams/getAllChannels, /teams/{id}/channels
チャット /chats, /chats/{id}
chatMessage chats/{id}/messages, chats/getAllMessages, teams/{id}/channels/{id}/messages, teams/getAllMessages
contact me/contacts
conversationMember /chats/{id}/members, /chats/getAllMembers, /teams/{id}/members, /teams/getAllMembers, /teams/{id}/channels/getAllMembers
driveItem me/drive/root
イベント me/events
グループ groups
グループ会話 groups('{id}')/conversations
正常性監視アラート reports/healthmonitoring/alerts
リスト sites/{site-id}/lists/{list-id}
message me/mailfolders('inbox')/messages, me/messages
オンライン会議 /communications/onlineMeetings/?$filter=JoinWebUrl eq '{JoinWebUrl}'
プレゼンス /communications/presences/{id} (単一ユーザー)、/communications/presences?$filter=id in ('{id}','{id}',…) (複数のユーザー)
printer print/printers/{id}/jobs
printTaskDefinition print/taskDefinitions/{id}/tasks
team /teams, /teams/{id}
user users
todoTask /me/todo/lists/{todoTaskListId}/tasks
セキュリティの警告 security/alerts?$filter=status eq 'NewAlert'
baseTask (非推奨) /me/tasks/lists/{Id}/tasks

注:

me で始まる任意のパスは、meではなく users/{id} と一緒に使用して、現在のユーザーではなく特定のユーザーをターゲットにすることもできます。

応答

次の例は応答を示しています。

注: ここに示す応答オブジェクトは、読みやすさのために短縮されている場合があります。

HTTP/1.1 201 Created
Content-type: application/json

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#subscriptions/$entity",
  "id": "7f105c7d-2dc5-4530-97cd-4e7ae6534c07",
  "resource": "me/mailFolders('Inbox')/messages",
  "applicationId": "24d3b144-21ae-4080-943f-7067b395b913",
  "changeType": "created",
  "clientState": "secretClientValue",
  "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
  "expirationDateTime": "2016-11-20T18:23:45.9356913Z",
  "creatorId": "8ee44408-0679-472c-bc2a-692812af3437",
  "latestSupportedTlsVersion": "v1_2",
  "notificationContentType": "application/json"
}

例 2: Web プッシュ エンドポイントを対象とするサブスクリプションを作成する

次の例では、暗号化された変更通知をブラウザーネイティブの Web プッシュ エンドポイント ( web.push.apple.comfcm.googleapis.comupdates.push.services.mozilla.com など) に配信するサブスクリプションを作成します。

このサブスクリプションを作成する前に、ブラウザー ベースのアプリケーションで次の条件を満たしている必要があります。

  1. サブスクリプション コレクションで getVapidPublicKey 関数を呼び出して、Microsoft Graph の VAPID 公開キー (RFC 8292) を取得します。
  2. PushManager.subscribe({ applicationServerKey: <vapidPublicKey> }) を呼び出して、ブラウザーのプッシュ サービスに登録します。 ブラウザーは、endpointp256dhauth の値を含むPushSubscriptionを返します。

次に、アプリケーションは、 notificationUrl を最小プッシュ サービス エンドポイント URL に設定し、 vapidPublicKeywebPushEncryptionP256dhPublicKey、および webPushEncryptionSecret プロパティをブラウザによって返される値に設定してサブスクリプションを作成します。 作成後、Microsoft Graph は、格納されているキーを使用して RFC 8291 に従って各通知を暗号化し、プッシュ サービスに投稿する前に VAPID で要求に署名します。

要求

POST https://graph.microsoft.com/beta/subscriptions
Content-type: application/json

{
  "changeType": "created,updated",
  "notificationUrl": "https://web.push.apple.com/QKmFUwSBFK8g7iY4t1...",
  "resource": "me/mailFolders('Inbox')/messages",
  "expirationDateTime": "2026-12-31T11:00:00.0000000Z",
  "clientState": "secretClientValue",
  "vapidPublicKey": "BNKm...base64url-encoded-server-vapid-public-key...",
  "webPushEncryptionP256dhPublicKey": "BNcR...base64url-encoded-client-public-key...",
  "webPushEncryptionSecret": "tBHI...base64url-encoded-auth-secret..."
}

メモ:webPushEncryptionSecret プロパティは書き込み専用です。 GET応答で返されることはありません (nullとして返されます)。 値はシークレットとして扱います。

通知エンドポイントの検証

( notificationUrl プロパティで指定される) サブスクリプション通知エンドポイントは、「 ユーザー データの変更に関する通知の設定」で説明されているように検証要求に応答できる必要があります。 検証に失敗した場合、サブスクリプションを作成する要求は「400 要求が正しくありません」というエラーを返します。