{"openapi":"3.1.0","info":{"title":"MagicBell API","description":"OpenAPI 3.1.0 Specification for MagicBell API.","contact":{"name":"MagicBell","url":"https://wwww.magicbell.com"},"version":"2.0.0"},"jsonSchemaDialect":"http://json-schema.org/draft-07/schema#","servers":[{"url":"https://api.magicbell.com/v2","description":"MagicBell API (v2) Base URL"}],"paths":{"/broadcasts":{"summary":"Broadcast lifecycle","description":"Broadcasts let you fan out an announcement to every relevant user or topic. Use these APIs to create announcements, inspect their status, and audit how they generated notifications and deliveries across your project.\n\nRelated guides: [Broadcast Primitive](https://www.magicbell.com/docs/primitive/broadcast) ","get":{"summary":"List all broadcasts","description":"Retrieves a paginated list of broadcasts for the project. Returns basic information about each broadcast including its creation time and status.","operationId":"list_broadcasts","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastCollection"}}}}},"x-magicbell-auth-jwt-type":"project"},"post":{"summary":"Create a broadcast","description":"Creates a new broadcast. When a broadcast is created, it generates individual notifications for relevant users within the project.","operationId":"create_broadcast","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Broadcast"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Broadcast"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"project"}},"/broadcasts/{broadcast_id}":{"summary":"Single broadcast detail","description":"Endpoints scoped to one broadcast instance. Use them to inspect configuration, track execution timestamps, and debug why a send behaved a certain way.","get":{"summary":"Fetch a broadcast","description":"Retrieves detailed information about a specific broadcast by its ID. Includes the broadcast's configuration and current status.","operationId":"fetch_broadcast","parameters":[{"name":"broadcast_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Broadcast"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/channels":{"summary":"Channel configurations","description":"Channels represent the mediums such as Email, Push, SMS, Slack, through which deliveries happen. These routes configure how each channel behaves inside a project, ensuring every notification honors user preferences and branding.\n\nRelated guides: [Channel Primitive](https://www.magicbell.com/docs/primitive/channel)","put":{"summary":"Save a channels config","description":"Save the channels configuration for a given key.","operationId":"save_channels_config","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDeliveryConfig"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDeliveryConfig"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/channels/in_app/inbox/tokens":{"summary":"Inbox token","description":"Scoped APIs for Inbox (`inbox`).","get":{"tags":["in_app","inbox"],"summary":"List all Inbox tokens","description":"Lists all Inbox tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_inbox_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxTokenResponseCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["in_app","inbox"],"summary":"Save an Inbox token","description":"Saves the Inbox token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_inbox_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxToken"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxToken"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/in_app/inbox/tokens/{token_id}":{"summary":"Inbox token","description":"Scoped APIs for Inbox (`inbox`).","get":{"tags":["in_app","inbox"],"summary":"Fetch an Inbox token","description":"Fetches details of a specific Inbox token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_inbox_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxTokenResponse"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["in_app","inbox"],"summary":"Delete an Inbox token","description":"Deletes one of the authenticated user's Inbox tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_inbox_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/mobile_push/apns/tokens":{"summary":"APNs token","description":"Scoped APIs for APNs (`apns`).","get":{"tags":["mobile_push","apns"],"summary":"List all APNs tokens","description":"Lists all APNs tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_apns_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["mobile_push","apns"],"summary":"Save an APNs token","description":"Saves the APNs token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_apns_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSTokenPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/mobile_push/apns/tokens/{token_id}":{"summary":"APNs token","description":"Scoped APIs for APNs (`apns`).","get":{"tags":["mobile_push","apns"],"summary":"Fetch an APNs token","description":"Fetches details of a specific APNs token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_apns_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["mobile_push","apns"],"summary":"Delete an APNs token","description":"Deletes one of the authenticated user's APNs tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_apns_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/mobile_push/expo/tokens":{"summary":"Expo token","description":"Scoped APIs for Expo (`expo`).","get":{"tags":["mobile_push","expo"],"summary":"List all Expo tokens","description":"Lists all Expo tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_expo_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["mobile_push","expo"],"summary":"Save an Expo token","description":"Saves the Expo token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_expo_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoTokenPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/mobile_push/expo/tokens/{token_id}":{"summary":"Expo token","description":"Scoped APIs for Expo (`expo`).","get":{"tags":["mobile_push","expo"],"summary":"Fetch an Expo token","description":"Fetches details of a specific Expo token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_expo_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["mobile_push","expo"],"summary":"Delete an Expo token","description":"Deletes one of the authenticated user's Expo tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_expo_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/mobile_push/fcm/tokens":{"summary":"FCM token","description":"Scoped APIs for FCM (`fcm`).","get":{"tags":["mobile_push","fcm"],"summary":"List all FCM tokens","description":"Lists all FCM tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_fcm_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["mobile_push","fcm"],"summary":"Save a FCM token","description":"Saves the FCM token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_fcm_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMTokenPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/mobile_push/fcm/tokens/{token_id}":{"summary":"FCM token","description":"Scoped APIs for FCM (`fcm`).","get":{"tags":["mobile_push","fcm"],"summary":"Fetch a FCM token","description":"Fetches details of a specific FCM token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_fcm_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["mobile_push","fcm"],"summary":"Delete a FCM token","description":"Deletes one of the authenticated user's FCM tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_fcm_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/slack/magicbell_slackbot/tokens":{"summary":"MagicBell SlackBot token","description":"Scoped APIs for MagicBell SlackBot (`magicbell_slackbot`).","get":{"tags":["slack","magicbell_slackbot"],"summary":"List all MagicBell SlackBot tokens","description":"Lists all MagicBell SlackBot tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_magicbell_slackbot_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["slack","magicbell_slackbot"],"summary":"Save a MagicBell SlackBot token","description":"Saves the MagicBell SlackBot token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_magicbell_slackbot_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenPayload"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"user"}},"/channels/slack/magicbell_slackbot/tokens/{token_id}":{"summary":"MagicBell SlackBot token","description":"Scoped APIs for MagicBell SlackBot (`magicbell_slackbot`).","get":{"tags":["slack","magicbell_slackbot"],"summary":"Fetch a MagicBell SlackBot token","description":"Fetches details of a specific MagicBell SlackBot token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_magicbell_slackbot_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["slack","magicbell_slackbot"],"summary":"Delete a MagicBell SlackBot token","description":"Deletes one of the authenticated user's MagicBell SlackBot tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_magicbell_slackbot_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/slack/tokens":{"summary":"Slack tokens","description":"Tokens tie a user to their Slack destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["slack"],"summary":"List all Slack tokens","description":"Lists all Slack tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_slack_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["slack"],"summary":"Save a Slack token","description":"Saves the Slack token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_slack_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenPayload"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"user"}},"/channels/slack/tokens/{token_id}":{"summary":"Slack tokens","description":"Tokens tie a user to their Slack destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["slack"],"summary":"Fetch a Slack token","description":"Fetches details of a specific Slack token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_slack_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["slack"],"summary":"Delete a Slack token","description":"Deletes one of the authenticated user's Slack tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_slack_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/teams/tokens":{"summary":"Teams tokens","description":"Tokens tie a user to their Teams destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["teams"],"summary":"List all Teams tokens","description":"Lists all Teams tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_teams_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["teams"],"summary":"Save a Teams token","description":"Saves the Teams token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_teams_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsTokenPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/teams/tokens/{token_id}":{"summary":"Teams tokens","description":"Tokens tie a user to their Teams destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["teams"],"summary":"Fetch a Teams token","description":"Fetches details of a specific Teams token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_teams_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["teams"],"summary":"Delete a Teams token","description":"Deletes one of the authenticated user's Teams tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_teams_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/user_preferences":{"summary":"Channel preferences","description":"Manages each user's opt-outs and per-channel overrides so every notification respects personal choices across devices and mediums.","get":{"summary":"Fetch channel preferences","description":"Fetch a user's channel delivery preferences.","operationId":"fetch_user_preferences","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPreferences"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"summary":"Save channel preferences","description":"Save a user's channel preferences.","operationId":"save_user_preferences","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPreferences"}}}},"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/channels/web_push/tokens":{"summary":"Web Push tokens","description":"Tokens tie a user to their Web Push destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["web_push"],"summary":"List all Web Push tokens","description":"Lists all Web Push tokens belonging to the authenticated user. Returns a paginated list of tokens, including their status, creation dates, and associated metadata.","operationId":"list_web_push_tokens","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"user"},"put":{"tags":["web_push"],"summary":"Save a Web Push token","description":"Saves the Web Push token for the authenticated user. This token serves as a credential for accessing channel-specific functionality. Each token is unique to the user and channel combination, allowing for direct communication with the user via the channel.","operationId":"save_web_push_token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushTokenPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/web_push/tokens/{token_id}":{"summary":"Web Push tokens","description":"Tokens tie a user to their Web Push destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["web_push"],"summary":"Fetch a Web Push token","description":"Fetches details of a specific Web Push token belonging to the authenticated user. Returns information about the token's status, creation date, and any associated metadata. Users can only access their own tokens.","operationId":"fetch_web_push_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushToken"}}}}},"x-magicbell-auth-jwt-type":"user"},"delete":{"tags":["web_push"],"summary":"Delete a Web Push token","description":"Deletes one of the authenticated user's Web Push tokens. This permanently invalidates the specified token, preventing it from being used for future channel access. This action cannot be undone. Users can only revoke their own tokens.","operationId":"delete_web_push_token","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/channels/{key}":{"summary":"Channel configurations","description":"Channels represent the mediums such as Email, Push, SMS, Slack, through which deliveries happen. These routes configure how each channel behaves inside a project, ensuring every notification honors user preferences and branding.\n\nRelated guides: [Channel Primitive](https://www.magicbell.com/docs/primitive/channel)","get":{"summary":"Fetch a channels config","description":"Fetches the channels config for a given key.","operationId":"fetch_channels_config","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDeliveryConfig"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/events":{"summary":"Notification event log","description":"Events capture everything that happens across deliveries. Query this stream to audit what occurred, troubleshoot delivery issues, and power observability dashboards.\n\nRelated guides: [Delivery Primitive](https://www.magicbell.com/docs/primitive/delivery)","get":{"summary":"List all events","description":"Retrieves a paginated list of events for the project.","operationId":"list_events","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/events/{event_id}":{"summary":"Notification event log","description":"Events capture everything that happens across deliveries. Query this stream to audit what occurred, troubleshoot delivery issues, and power observability dashboards.\n\nRelated guides: [Delivery Primitive](https://www.magicbell.com/docs/primitive/delivery)","get":{"summary":"Fetch an event","description":"Fetches a project event by its ID.","operationId":"fetch_event","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/integrations":{"summary":"Integration catalog","description":"Integrations connect MagicBell to external providers for delivery, data ingestion, and automation. Use these grouped APIs to configure providers, run installation flows, and receive incoming events.\n\nRelated guides: [Integration Primitive](https://www.magicbell.com/docs/primitive/integration)","get":{"summary":"List all integrations","description":"Lists all available and configured integrations for the project. Returns a summary of each integration including its type, status, and basic configuration information.","operationId":"list_integrations","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/integrations/apns":{"summary":"Apple Push Notification service","description":"Upload APNs credentials to deliver native iOS, iPadOS, and macOS push notifications.","get":{"tags":["apns","channel/mobile_push"],"summary":"List all APNs integrations","description":"Retrieves the current APNs integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_apns_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"APNs","name":"apns"}},"put":{"tags":["apns","channel/mobile_push"],"summary":"Save an APNs integration","description":"Updates or creates the APNs integration for the project.","operationId":"save_apns_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"APNs","name":"apns"}},"delete":{"tags":["apns","channel/mobile_push"],"summary":"Delete an APNs integration","description":"Deletes the APNs integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_apns_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"APNs","name":"apns"}}},"/integrations/eventsource":{"summary":"Event Source","description":"Generic integration for piping arbitrary event feeds into MagicBell when no dedicated provider exists.","get":{"tags":["eventsource"],"summary":"List all EventSource integrations","description":"Retrieves the current EventSource integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_eventsource_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"EventSource","name":"eventsource"}},"put":{"tags":["eventsource"],"summary":"Save an EventSource integration","description":"Updates or creates the EventSource integration for the project.","operationId":"save_eventsource_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSourceConfigPayload"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"EventSource","name":"eventsource"}},"delete":{"tags":["eventsource"],"summary":"Delete an EventSource integration","description":"Deletes the EventSource integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_eventsource_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"EventSource","name":"eventsource"}}},"/integrations/expo":{"summary":"Expo push","description":"Send Expo push notifications to React Native apps with zero extra plumbing.","get":{"tags":["expo","channel/mobile_push"],"summary":"List all Expo integrations","description":"Retrieves the current Expo integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_expo_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"Expo","name":"expo"}},"put":{"tags":["expo","channel/mobile_push"],"summary":"Save an Expo integration","description":"Updates or creates the Expo integration for the project.","operationId":"save_expo_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"Expo","name":"expo"}},"delete":{"tags":["expo","channel/mobile_push"],"summary":"Delete an Expo integration","description":"Deletes the Expo integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_expo_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"Expo","name":"expo"}}},"/integrations/fcm":{"summary":"Firebase Cloud Messaging","description":"Connect FCM to reach Android devices and browsers that rely on Google's messaging infrastructure.","get":{"tags":["fcm","channel/mobile_push"],"summary":"List all FCM integrations","description":"Retrieves the current FCM integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_fcm_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"FCM","name":"fcm"}},"put":{"tags":["fcm","channel/mobile_push"],"summary":"Save a FCM integration","description":"Updates or creates the FCM integration for the project.","operationId":"save_fcm_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"FCM","name":"fcm"}},"delete":{"tags":["fcm","channel/mobile_push"],"summary":"Delete a FCM integration","description":"Deletes the FCM integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_fcm_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"mobile_push","displayName":"FCM","name":"fcm"}}},"/integrations/github":{"summary":"GitHub events","description":"Subscribe to issues, pull requests, and deployments to keep teams informed inside MagicBell.","get":{"tags":["github"],"summary":"List all GitHub integrations","description":"Retrieves the current GitHub integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_github_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"GitHub","name":"github"}},"put":{"tags":["github"],"summary":"Save a GitHub integration","description":"Updates or creates the GitHub integration for the project.","operationId":"save_github_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubConfigPayload"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"GitHub","name":"github"}},"delete":{"tags":["github"],"summary":"Delete a GitHub integration","description":"Deletes the GitHub integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_github_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"GitHub","name":"github"}}},"/integrations/inbox":{"summary":"Inbox surfaces","description":"Manage integrations that sync data into the MagicBell Inbox surfaces, including hosted widgets and embeddable inboxes.","get":{"tags":["inbox","channel/in_app"],"summary":"List all Inbox integrations","description":"Retrieves the current Inbox integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_inbox_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"in_app","displayName":"Inbox","name":"inbox"}},"put":{"tags":["inbox","channel/in_app"],"summary":"Save an Inbox integration","description":"Updates or creates the Inbox integration for the project.","operationId":"save_inbox_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"in_app","displayName":"Inbox","name":"inbox"}},"delete":{"tags":["inbox","channel/in_app"],"summary":"Delete an Inbox integration","description":"Deletes the Inbox integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_inbox_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"in_app","displayName":"Inbox","name":"inbox"}}},"/integrations/inbox/installations":{"summary":"Installation flow","description":"High-level entry point for integrations that require multi-step authorization.","put":{"tags":["inbox"],"summary":"Save an Inbox installation","description":"Creates a new installation of a Inbox integration for a user. This endpoint is used when an integration needs to be set up with user-specific credentials or configuration.","operationId":"save_inbox_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/inbox/installations/start":{"summary":"Start installation","description":"Begins the OAuth or credentials handshake for an integration, returning URLs or payloads needed to obtain user consent.","post":{"tags":["inbox"],"summary":"Start an Inbox installation","description":"Initiates the installation flow for an Inbox integration. This is the first step in a multi-step installation process where user authorization or external service configuration may be required.","operationId":"start_inbox_installation","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/magicbell_slackbot":{"summary":"MagicBell-managed Slackbot","description":"Provision the hosted Slackbot that delivers actionable notifications into Slack without you maintaining an app. Ideal when you want a turnkey shared Slack experience.","get":{"tags":["magicbell_slackbot","channel/slack"],"summary":"List all MagicBell SlackBot integrations","description":"Retrieves the current MagicBell SlackBot integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_magicbell_slackbot_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackBotConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"slack","displayName":"MagicBell SlackBot","name":"magicbell_slackbot"}},"put":{"tags":["magicbell_slackbot","channel/slack"],"summary":"Save a MagicBell SlackBot integration","description":"Updates or creates the MagicBell SlackBot integration for the project.","operationId":"save_magicbell_slackbot_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackBotConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackBotConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"slack","displayName":"MagicBell SlackBot","name":"magicbell_slackbot"}},"delete":{"tags":["magicbell_slackbot","channel/slack"],"summary":"Delete a MagicBell SlackBot integration","description":"Deletes the MagicBell SlackBot integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_magicbell_slackbot_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"slack","displayName":"MagicBell SlackBot","name":"magicbell_slackbot"}}},"/integrations/magicbell_slackbot/installations":{"summary":"Installation flow","description":"High-level entry point for integrations that require multi-step authorization.","put":{"tags":["magicbell_slackbot"],"summary":"Save a MagicBell SlackBot installation","description":"Creates a new installation of a MagicBell SlackBot integration for a user. This endpoint is used when an integration needs to be set up with user-specific credentials or configuration.","operationId":"save_magicbell_slackbot_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallation"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallation"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/magicbell_slackbot/installations/finish":{"summary":"Finish installation","description":"Completes the installation handshake after the user authorizes access, persisting tokens and validating the external connection.","post":{"tags":["magicbell_slackbot"],"summary":"Finish a MagicBell SlackBot installation","description":"Completes the installation flow for the MagicBell SlackBot integration. This endpoint is typically called after the user has completed any required authorization steps with MagicBell SlackBot.","operationId":"finish_magicbell_slackbot_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackFinishInstallResponse"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallation"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/magicbell_slackbot/installations/start":{"summary":"Start installation","description":"Begins the OAuth or credentials handshake for an integration, returning URLs or payloads needed to obtain user consent.","post":{"tags":["magicbell_slackbot"],"summary":"Start a MagicBell SlackBot installation","description":"Initiates the installation flow for a MagicBell SlackBot integration. This is the first step in a multi-step installation process where user authorization or external service configuration may be required.","operationId":"start_magicbell_slackbot_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackStartInstall"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackStartInstallResponseContent"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"user"}},"/integrations/mailgun":{"summary":"Mailgun email","description":"Connect Mailgun so you can deliver notifications using your existing domains, routes, and analytics.","get":{"tags":["mailgun","channel/email"],"summary":"List all Mailgun integrations","description":"Retrieves the current Mailgun integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_mailgun_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailgunConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Mailgun","name":"mailgun"}},"put":{"tags":["mailgun","channel/email"],"summary":"Save a Mailgun integration","description":"Updates or creates the Mailgun integration for the project.","operationId":"save_mailgun_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailgunConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailgunConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Mailgun","name":"mailgun"}},"delete":{"tags":["mailgun","channel/email"],"summary":"Delete a Mailgun integration","description":"Deletes the Mailgun integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_mailgun_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Mailgun","name":"mailgun"}}},"/integrations/ping_email":{"summary":"Ping email diagnostics","description":"Synthetic email integration that helps you validate deliverability SLAs by periodically sending canary messages.","get":{"tags":["ping_email","channel/email"],"summary":"List all Ping Email integrations","description":"Retrieves the current Ping Email integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_ping_email_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Ping Email","name":"ping_email"}},"put":{"tags":["ping_email","channel/email"],"summary":"Save a Ping Email integration","description":"Updates or creates the Ping Email integration for the project.","operationId":"save_ping_email_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PingConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Ping Email","name":"ping_email"}},"delete":{"tags":["ping_email","channel/email"],"summary":"Delete a Ping Email integration","description":"Deletes the Ping Email integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_ping_email_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Ping Email","name":"ping_email"}}},"/integrations/sendgrid":{"summary":"SendGrid email","description":"Configure SendGrid credentials so MagicBell can fan out transactional emails with your templates and domain.","get":{"tags":["sendgrid","channel/email"],"summary":"List all SendGrid integrations","description":"Retrieves the current SendGrid integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_sendgrid_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendgridConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"SendGrid","name":"sendgrid"}},"put":{"tags":["sendgrid","channel/email"],"summary":"Save a SendGrid integration","description":"Updates or creates the SendGrid integration for the project.","operationId":"save_sendgrid_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendgridConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendgridConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"SendGrid","name":"sendgrid"}},"delete":{"tags":["sendgrid","channel/email"],"summary":"Delete a SendGrid integration","description":"Deletes the SendGrid integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_sendgrid_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"SendGrid","name":"sendgrid"}}},"/integrations/ses":{"summary":"Amazon SES","description":"Integrate Amazon SES to reuse verified identities, bounce handling, and CloudWatch metrics.","get":{"tags":["ses","channel/email"],"summary":"List all Amazon SES integrations","description":"Retrieves the current Amazon SES integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_ses_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SESConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Amazon SES","name":"ses"}},"put":{"tags":["ses","channel/email"],"summary":"Save an Amazon SES integration","description":"Updates or creates the Amazon SES integration for the project.","operationId":"save_ses_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SESConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SESConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Amazon SES","name":"ses"}},"delete":{"tags":["ses","channel/email"],"summary":"Delete an Amazon SES integration","description":"Deletes the Amazon SES integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_ses_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"Amazon SES","name":"ses"}}},"/integrations/slack":{"summary":"Slack workspace integration","description":"Configure Slack so broadcasts can post rich updates into channels or DMs. The flow covers OAuth installation, workspace selection, and webhook delivery setup.","get":{"tags":["slack","channel/slack"],"summary":"List all Slack integrations","description":"Retrieves the current Slack integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_slack_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"slack","displayName":"Slack","name":"slack"}},"put":{"tags":["slack","channel/slack"],"summary":"Save a Slack integration","description":"Updates or creates the Slack integration for the project.","operationId":"save_slack_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"slack","displayName":"Slack","name":"slack"}},"delete":{"tags":["slack","channel/slack"],"summary":"Delete a Slack integration","description":"Deletes the Slack integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_slack_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"slack","displayName":"Slack","name":"slack"}}},"/integrations/slack/installations":{"summary":"Installation flow","description":"High-level entry point for integrations that require multi-step authorization.","put":{"tags":["slack"],"summary":"Save a Slack installation","description":"Creates a new installation of a Slack integration for a user. This endpoint is used when an integration needs to be set up with user-specific credentials or configuration.","operationId":"save_slack_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallation"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallation"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/slack/installations/finish":{"summary":"Finish installation","description":"Completes the installation handshake after the user authorizes access, persisting tokens and validating the external connection.","post":{"tags":["slack"],"summary":"Finish a Slack installation","description":"Completes the installation flow for the Slack integration. This endpoint is typically called after the user has completed any required authorization steps with Slack.","operationId":"finish_slack_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackFinishInstallResponse"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackInstallation"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/slack/installations/start":{"summary":"Start installation","description":"Begins the OAuth or credentials handshake for an integration, returning URLs or payloads needed to obtain user consent.","post":{"tags":["slack"],"summary":"Start a Slack installation","description":"Initiates the installation flow for a Slack integration. This is the first step in a multi-step installation process where user authorization or external service configuration may be required.","operationId":"start_slack_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackStartInstall"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackStartInstallResponseContent"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"user"}},"/integrations/smtp":{"summary":"Custom SMTP","description":"Bring any SMTP server for outbound email, ideal for on-prem or region-specific compliance.","get":{"tags":["smtp","channel/email"],"summary":"List all SMTP integrations","description":"Retrieves the current SMTP integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_smtp_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SMTPConfigObjectCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"SMTP","name":"smtp"}},"put":{"tags":["smtp","channel/email"],"summary":"Save a SMTP integration","description":"Updates or creates the SMTP integration for the project.","operationId":"save_smtp_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SMTPConfig"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SMTPConfig"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"SMTP","name":"smtp"}},"delete":{"tags":["smtp","channel/email"],"summary":"Delete a SMTP integration","description":"Deletes the SMTP integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_smtp_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"email","displayName":"SMTP","name":"smtp"}}},"/integrations/stripe":{"summary":"Stripe events","description":"Listen to Stripe's billing, dispute, and subscription events to trigger broadcasts or workflows.","get":{"tags":["stripe"],"summary":"List all Stripe integrations","description":"Retrieves the current Stripe integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_stripe_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"Stripe","name":"stripe"}},"put":{"tags":["stripe"],"summary":"Save a Stripe integration","description":"Updates or creates the Stripe integration for the project.","operationId":"save_stripe_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeConfigPayload"}}}}},"x-forbid-unknown-cookie":true,"x-forbid-unknown-header":true,"x-forbid-unknown-path":true,"x-forbid-unknown-query":true,"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"Stripe","name":"stripe"}},"delete":{"tags":["stripe"],"summary":"Delete a Stripe integration","description":"Deletes the Stripe integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_stripe_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"displayName":"Stripe","name":"stripe"}}},"/integrations/twilio":{"summary":"Twilio SMS","description":"Wire Twilio to deliver SMS, WhatsApp, or voice notifications as part of your delivery planner.","get":{"tags":["twilio","channel/sms"],"summary":"List all Twilio integrations","description":"Retrieves the current Twilio integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_twilio_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwilioConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"sms","displayName":"Twilio","name":"twilio"}},"put":{"tags":["twilio","channel/sms"],"summary":"Save a Twilio integration","description":"Updates or creates the Twilio integration for the project.","operationId":"save_twilio_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwilioConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwilioConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"sms","displayName":"Twilio","name":"twilio"}},"delete":{"tags":["twilio","channel/sms"],"summary":"Delete a Twilio integration","description":"Deletes the Twilio integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_twilio_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"sms","displayName":"Twilio","name":"twilio"}}},"/integrations/web_push":{"summary":"Web Push integration","description":"Connect browser push providers so you can reach users on the open web. Handles VAPID keys, service-worker registration, and token lifecycles.","get":{"tags":["web_push","channel/web_push"],"summary":"List all Web Push integrations","description":"Retrieves the current Web Push integration configurations for a specific integration type in the project. Returns configuration details and status information.","operationId":"list_web_push_integrations","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebpushConfigCollection"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"web_push","displayName":"Web Push","name":"web_push"}},"put":{"tags":["web_push","channel/web_push"],"summary":"Save a Web Push integration","description":"Updates or creates the Web Push integration for the project.","operationId":"save_web_push_integration","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebpushConfigPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebpushConfigPayload"}}}}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"web_push","displayName":"Web Push","name":"web_push"}},"delete":{"tags":["web_push","channel/web_push"],"summary":"Delete a Web Push integration","description":"Deletes the Web Push integration configuration from the project. This will disable the integration's functionality within the project.","operationId":"delete_web_push_integration","parameters":[{"name":"id","in":"query","description":"the unique identifier of the integration to be deleted","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project","x-meta":{"channel":"web_push","displayName":"Web Push","name":"web_push"}}},"/integrations/web_push/installations":{"summary":"Installation flow","description":"High-level entry point for integrations that require multi-step authorization.","put":{"tags":["web_push"],"summary":"Save a Web Push installation","description":"Creates a new installation of a Web Push integration for a user. This endpoint is used when an integration needs to be set up with user-specific credentials or configuration.","operationId":"save_web_push_installation","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushTokenPayload"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushTokenPayload"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/integrations/web_push/installations/start":{"summary":"Start installation","description":"Begins the OAuth or credentials handshake for an integration, returning URLs or payloads needed to obtain user consent.","post":{"tags":["web_push"],"summary":"Start a Web Push installation","description":"Initiates the installation flow for a Web Push integration. This is the first step in a multi-step installation process where user authorization or external service configuration may be required.","operationId":"start_web_push_installation","responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushStartInstallationResponse"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/notifications":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","get":{"summary":"List all notifications","description":"Lists all notifications for a user.","operationId":"list_notifications","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"filter notifications by their read state, one of 'unread' | 'read' | 'archived'","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","description":"filter notifications by their category","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","description":"filter notifications by their topic","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationCollection"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/archive":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","post":{"summary":"Archive all notifications","description":"Archive all notifications.","operationId":"archive_all_notifications","parameters":[{"name":"category","in":"query","description":"filter notifications by their category","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","description":"filter notifications by their topic","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/read":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","post":{"summary":"Mark all notifications read","description":"Marks all notifications as read.","operationId":"mark_all_notifications_read","parameters":[{"name":"category","in":"query","description":"filter notifications by their category","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","description":"filter notifications by their topic","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/unread/count":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","get":{"summary":"Count unread notifications","description":"Returns the count of unread notifications for a user. Supports filtering by category and topic.","operationId":"fetch_unread_notifications_count","parameters":[{"name":"category","in":"query","description":"filter notifications by their category","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","description":"filter notifications by their topic","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountResponse"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/{notification_id}":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","get":{"summary":"Fetch a notification","description":"Gets a notification by ID.","operationId":"fetch_notification","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Notification"}}}}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/{notification_id}/archive":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","post":{"summary":"Archive a notification","description":"Archive a notification.","operationId":"archive_notification","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/{notification_id}/read":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","post":{"summary":"Mark a notification read","description":"Marks a notification as read.","operationId":"mark_notification_read","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/{notification_id}/unarchive":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","post":{"summary":"Unarchive a notification","description":"Unarchives a notification.","operationId":"unarchive_notification","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/notifications/{notification_id}/unread":{"summary":"User notifications","description":"Notifications are the per-recipient records created from broadcasts. These endpoints let a user list, fetch, and manage the notifications that drive their inbox experience.\n\nRelated guides: [Notification Primitive](https://www.magicbell.com/docs/primitive/notification)","post":{"summary":"Mark a notification unread","description":"Marks a notification as unread.","operationId":"mark_notification_unread","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"user"}},"/users":{"summary":"User primitive","description":"Users are the recipients of every notification. These endpoints let you list users, upsert profiles, and remove users while keeping identifiers aligned with your product database.\n\nRelated guides: [User Primitive](https://www.magicbell.com/docs/primitive/user)","get":{"summary":"List all users","description":"Lists all users in the project.","operationId":"list_users","parameters":[{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"filter users by their email address or external ID","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCollection"}}}}},"x-magicbell-auth-jwt-type":"project"},"put":{"summary":"Save a user","description":"Creates or updates a user with the provided details. The user will be associated with the project specified in the request context.","operationId":"save_user","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}":{"summary":"User primitive","description":"Users are the recipients of every notification. These endpoints let you list users, upsert profiles, and remove users while keeping identifiers aligned with your product database.\n\nRelated guides: [User Primitive](https://www.magicbell.com/docs/primitive/user)","delete":{"summary":"Delete a user","description":"Removes a user and all associated data from the project.","operationId":"delete_user","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/in_app/inbox/tokens":{"summary":"Inbox token","description":"Scoped APIs for Inbox (`inbox`).","get":{"tags":["in_app","inbox"],"summary":"List an user's Inbox tokens","description":"Lists all Inbox tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_inbox_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxTokenResponseCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/in_app/inbox/tokens/{token_id}":{"summary":"Inbox token","description":"Scoped APIs for Inbox (`inbox`).","get":{"tags":["in_app","inbox"],"summary":"Fetch a user's Inbox token","description":"Fetches a specific Inbox token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_inbox_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InboxTokenResponse"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["in_app","inbox"],"summary":"Delete an user's Inbox token","description":"Deletes a specific user's Inbox token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_inbox_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/mobile_push/apns/tokens":{"summary":"APNs token","description":"Scoped APIs for APNs (`apns`).","get":{"tags":["mobile_push","apns"],"summary":"List an user's APNs tokens","description":"Lists all APNs tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_apns_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/mobile_push/apns/tokens/{token_id}":{"summary":"APNs token","description":"Scoped APIs for APNs (`apns`).","get":{"tags":["mobile_push","apns"],"summary":"Fetch a user's APNs token","description":"Fetches a specific APNs token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_apns_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APNSToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["mobile_push","apns"],"summary":"Delete an user's APNs token","description":"Deletes a specific user's APNs token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_apns_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/mobile_push/expo/tokens":{"summary":"Expo token","description":"Scoped APIs for Expo (`expo`).","get":{"tags":["mobile_push","expo"],"summary":"List an user's Expo tokens","description":"Lists all Expo tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_expo_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/mobile_push/expo/tokens/{token_id}":{"summary":"Expo token","description":"Scoped APIs for Expo (`expo`).","get":{"tags":["mobile_push","expo"],"summary":"Fetch a user's Expo token","description":"Fetches a specific Expo token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_expo_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpoToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["mobile_push","expo"],"summary":"Delete an user's Expo token","description":"Deletes a specific user's Expo token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_expo_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/mobile_push/fcm/tokens":{"summary":"FCM token","description":"Scoped APIs for FCM (`fcm`).","get":{"tags":["mobile_push","fcm"],"summary":"List an user's FCM tokens","description":"Lists all FCM tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_fcm_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/mobile_push/fcm/tokens/{token_id}":{"summary":"FCM token","description":"Scoped APIs for FCM (`fcm`).","get":{"tags":["mobile_push","fcm"],"summary":"Fetch a user's FCM token","description":"Fetches a specific FCM token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_fcm_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FCMToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["mobile_push","fcm"],"summary":"Delete an user's FCM token","description":"Deletes a specific user's FCM token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_fcm_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/slack/magicbell_slackbot/tokens":{"summary":"MagicBell SlackBot token","description":"Scoped APIs for MagicBell SlackBot (`magicbell_slackbot`).","get":{"tags":["slack","magicbell_slackbot"],"summary":"List an user's MagicBell SlackBot tokens","description":"Lists all MagicBell SlackBot tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_magicbell_slackbot_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/slack/magicbell_slackbot/tokens/{token_id}":{"summary":"MagicBell SlackBot token","description":"Scoped APIs for MagicBell SlackBot (`magicbell_slackbot`).","get":{"tags":["slack","magicbell_slackbot"],"summary":"Fetch a user's MagicBell SlackBot token","description":"Fetches a specific MagicBell SlackBot token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_magicbell_slackbot_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["slack","magicbell_slackbot"],"summary":"Delete an user's MagicBell SlackBot token","description":"Deletes a specific user's MagicBell SlackBot token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_magicbell_slackbot_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/slack/tokens":{"summary":"Slack tokens","description":"Tokens tie a user to their Slack destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["slack"],"summary":"List an user's Slack tokens","description":"Lists all Slack tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_slack_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/slack/tokens/{token_id}":{"summary":"Slack tokens","description":"Tokens tie a user to their Slack destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["slack"],"summary":"Fetch a user's Slack token","description":"Fetches a specific Slack token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_slack_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["slack"],"summary":"Delete an user's Slack token","description":"Deletes a specific user's Slack token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_slack_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/teams/tokens":{"summary":"Teams tokens","description":"Tokens tie a user to their Teams destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["teams"],"summary":"List an user's Teams tokens","description":"Lists all Teams tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_teams_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/teams/tokens/{token_id}":{"summary":"Teams tokens","description":"Tokens tie a user to their Teams destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["teams"],"summary":"Fetch a user's Teams token","description":"Fetches a specific Teams token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_teams_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["teams"],"summary":"Delete an user's Teams token","description":"Deletes a specific user's Teams token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_teams_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/web_push/tokens":{"summary":"Web Push tokens","description":"Tokens tie a user to their Web Push destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["web_push"],"summary":"List an user's Web Push tokens","description":"Lists all Web Push tokens associated with a specific user. This endpoint is available to project administrators and returns a paginated list of tokens, including both active and revoked tokens.","operationId":"list_user_web_push_tokens","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"defines the maximum number of items to return per page (default: 50)","required":false,"schema":{"type":"integer"}},{"name":"starting_after","in":"query","description":"a cursor for use in pagination, points to the last ID in previous page","required":false,"schema":{"type":"string"}},{"name":"ending_before","in":"query","description":"a cursor for use in pagination, points to the first ID in next page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushTokenCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/users/{user_id}/channels/web_push/tokens/{token_id}":{"summary":"Web Push tokens","description":"Tokens tie a user to their Web Push destination—devices, inboxes, or workspaces. Register them at login, list them for debugging, and revoke stale entries to keep delivery healthy.","get":{"tags":["web_push"],"summary":"Fetch a user's Web Push token","description":"Fetches a specific Web Push token by its ID for a given user. This endpoint is available to project administrators and requires project-level authentication. Use this to inspect token details including its status, creation date, and associated metadata.","operationId":"fetch_user_web_push_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebPushToken"}}}}},"x-magicbell-auth-jwt-type":"project"},"delete":{"tags":["web_push"],"summary":"Delete an user's Web Push token","description":"Deletes a specific user's Web Push token. This endpoint is available to project administrators and permanently invalidates the specified token. Once revoked, the token can no longer be used to access channel features. This action cannot be undone.","operationId":"delete_user_web_push_token","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"token_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscardResult"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/workflows":{"summary":"Workflow automation","description":"Workflows let you orchestrate multi-step reactions to events, fan out to broadcasts, enrich data, or call external services. These routes manage definitions and runs so you can iterate on automation safely.","get":{"summary":"List workflow definitions","description":"Retrieves all workflow definitions for the project","operationId":"fetch_workflows","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowList"}}}}},"x-magicbell-auth-jwt-type":"project"},"put":{"summary":"Save workflow definition","description":"Creates or updates a workflow definition for the project","operationId":"save_workflow","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowDefinition"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowDefinition"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/workflows/*":{"summary":"Workflow automation","description":"Workflows let you orchestrate multi-step reactions to events, fan out to broadcasts, enrich data, or call external services. These routes manage definitions and runs so you can iterate on automation safely.","get":{"summary":"Fetch workflow definition","description":"Retrieves a workflow definition by key","operationId":"fetch_workflow","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowDefinition"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/workflows/runs":{"summary":"Workflow automation","description":"Workflows let you orchestrate multi-step reactions to events, fan out to broadcasts, enrich data, or call external services. These routes manage definitions and runs so you can iterate on automation safely.","post":{"summary":"Execute workflow","description":"Executes a workflow with the provided input parameters","operationId":"create_workflow_run","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteWorkflowRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunResponse"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/workflows/runs/{run_id}":{"summary":"Workflow automation","description":"Workflows let you orchestrate multi-step reactions to events, fan out to broadcasts, enrich data, or call external services. These routes manage definitions and runs so you can iterate on automation safely.","get":{"summary":"Get workflow run status","description":"Retrieves the status and details of a workflow run","operationId":"fetch_workflow_run","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRunResponse"}}}}},"x-magicbell-auth-jwt-type":"project"}},"/workflows/{workflow_key}/runs":{"summary":"Workflow automation","description":"Workflows let you orchestrate multi-step reactions to events, fan out to broadcasts, enrich data, or call external services. These routes manage definitions and runs so you can iterate on automation safely.","get":{"summary":"List workflow runs","description":"Retrieves all runs for a specific workflow","operationId":"list_workflow_runs","parameters":[{"name":"workflow_key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowRunCollection"}}}}},"x-magicbell-auth-jwt-type":"project"}}},"components":{"schemas":{"APNSConfig":{"properties":{"config":{"$ref":"#/components/schemas/APNSConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"APNSConfigCollection":{"examples":[{"data":[{"config":{"app_id":"com.example.myapp","badge":"unread","certificate":"-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgHnr4B2P+by++FGu/th0a44E8chJl5v5Vo4gq0YHw6e6gCgYIKoZIzj0DAQehRANCAARCg1MRibnfyeX5mx6+Rtfzzn7UhJP/oaqL4RzSmDuTsd3BTX33cuQ0gWHe20R2m1bLAkI1wrp+zbWOlAOAD7KX\n-----END PRIVATE KEY-----","key_id":"ABCD1234EF","team_id":"ABCD1234EF"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/APNSConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"APNSConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"app_id":"com.example.myapp","badge":"unread","certificate":"-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgHnr4B2P+by++FGu/th0a44E8chJl5v5Vo4gq0YHw6e6gCgYIKoZIzj0DAQehRANCAARCg1MRibnfyeX5mx6+Rtfzzn7UhJP/oaqL4RzSmDuTsd3BTX33cuQ0gWHe20R2m1bLAkI1wrp+zbWOlAOAD7KX\n-----END PRIVATE KEY-----","key_id":"ABCD1234EF","team_id":"ABCD1234EF"}],"properties":{"app_id":{"description":"The default bundle identifier of the application that is configured with this project. It can be overriden on a per token basis, when registering device tokens.","pattern":"^[a-zA-Z0-9]+(.[a-zA-Z0-9]+)*$","type":"string"},"badge":{"description":"Controls whether the app icon badge counts unread or unseen notifications.","enum":["unread","unseen"],"type":"string"},"certificate":{"description":"The APNs certificate in P8 format. Generate it at [developer.apple.com](https://developer.apple.com/account/resources/authkeys/add) with the 'Apple Push Notification service (APNs)' option selected.","pattern":"^-+?\\s?BEGIN PRIVATE KEY-+\\n([A-Za-z0-9+/\\r\\n]+={0,2})\\n-+\\s?END PRIVATE KEY+-+\\n?$","type":"string","x-ui":{"tagName":"textarea"}},"key_id":{"description":"The 10-character Key ID from your Apple Developer account used with the P8 certificate.","maxLength":10,"minLength":10,"type":"string"},"payload_version":{"default":"2","description":"Internal payload format version used by MagicBell.","enum":["1","2"],"type":"string","x-ui":{"type":"hidden"}},"team_id":{"description":"The Apple Developer Team ID that owns the configured key.","maxLength":10,"minLength":10,"type":"string"}},"required":["app_id","certificate","key_id","team_id","badge"],"type":"object"},"APNSToken":{"examples":[{"created_at":"2021-01-01T00:00:00Z","device_token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","discarded_at":"2021-01-01T00:00:00Z","id":"123","installation_id":"development","updated_at":"2021-01-01T00:00:00Z"}],"properties":{"app_id":{"description":"The bundle identifier of the application registering this token. Use this to override the default identifier configured on the APNs integration.","pattern":"^[a-zA-Z0-9]+(.[a-zA-Z0-9]+)*$","type":"string"},"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"device_token":{"description":"The APNs device token to register with MagicBell.","minLength":64,"type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"id":{"description":"The unique identifier for the token.","type":"string"},"installation_id":{"description":"The APNs environment this token belongs to. If omitted we assume it targets `production`.","enum":["development","production"],"type":"string"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]}},"required":["created_at","device_token","id"],"type":"object"},"APNSTokenCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","device_token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","discarded_at":"2021-01-01T00:00:00Z","id":"123","installation_id":"development","updated_at":"2021-01-01T00:00:00Z"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/APNSToken"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"APNSTokenPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"device_token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","installation_id":"development"}],"properties":{"app_id":{"description":"The bundle identifier of the application registering this token. Use this to override the default identifier configured on the APNs integration.","pattern":"^[a-zA-Z0-9]+(.[a-zA-Z0-9]+)*$","type":"string"},"device_token":{"description":"The APNs device token to register with MagicBell.","minLength":64,"type":"string"},"installation_id":{"description":"The APNs environment this token belongs to. If omitted we assume it targets `production`.","enum":["development","production"],"type":"string"}},"required":["device_token"],"type":"object"},"Broadcast":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"examples":[{"action_url":"https://example.com","category":"example","content":"I come from broadcast","custom_attributes":{},"id":"d1b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b","overrides":{},"recipients":[{"custom_attributes":{"plan":"enterprise","preferred_pronoun":"They","pricing_version":"v10"},"email":"test@example.com","external_id":"83d987a-83fd034","first_name":"Person","last_name":"Doe","phone_numbers":["+1 5005550001"]}],"title":"Hello, World!","topic":"example"}],"properties":{"action_url":{"description":"The URL recipients will be directed to when interacting with the broadcast.","maxLength":2048,"type":["null","string"]},"category":{"description":"The label used to group broadcasts.","maxLength":255,"pattern":"^[A-Za-z0-9_\\.\\-/:]+$","type":["string","null"]},"content":{"description":"The body content delivered with the broadcast.","maxLength":10485760,"type":["null","string"]},"created_at":{"description":"The timestamp when the broadcast was created.","format":"date-time","readOnly":true,"type":"string"},"custom_attributes":{"description":"Arbitrary custom data associated with the broadcast.","type":["null","object"]},"id":{"description":"The unique id for this broadcast.","format":"uuid","type":"string"},"overrides":{"additionalProperties":false,"description":"Channel- or provider-specific values that override the defaults.","properties":{"channels":{"additionalProperties":false,"description":"Overrides that are scoped to individual delivery channels.","properties":{"email":{"description":"Overrides for email notifications.","properties":{"action_url":{"description":"The link associated with the channel-specific notification.","maxLength":2048,"type":["null","string"]},"content":{"description":"The channel-specific content.","maxLength":1048576,"type":"string"},"title":{"description":"The channel-specific title.","maxLength":255,"minLength":1,"type":"string"}},"type":"object"},"in_app":{"description":"Overrides for in-app notifications.","properties":{"action_url":{"description":"The link associated with the channel-specific notification.","maxLength":2048,"type":["null","string"]},"content":{"description":"The channel-specific content.","maxLength":1048576,"type":"string"},"title":{"description":"The channel-specific title.","maxLength":255,"minLength":1,"type":"string"}},"type":"object"},"mobile_push":{"description":"Overrides for mobile push notifications.","properties":{"action_url":{"description":"The link associated with the channel-specific notification.","maxLength":2048,"type":["null","string"]},"content":{"description":"The channel-specific content.","maxLength":1048576,"type":"string"},"title":{"description":"The channel-specific title.","maxLength":255,"minLength":1,"type":"string"}},"type":"object"},"sms":{"description":"Overrides for SMS notifications.","properties":{"action_url":{"description":"The link associated with the channel-specific notification.","maxLength":2048,"type":["null","string"]},"content":{"description":"The channel-specific content.","maxLength":1048576,"type":"string"},"title":{"description":"The channel-specific title.","maxLength":255,"minLength":1,"type":"string"}},"type":"object"}},"type":"object"},"providers":{"additionalProperties":false,"description":"Overrides that are scoped to specific providers for a channel.","properties":{"apns":{"description":"Provider-specific overrides for Apple Push Notification service.","type":"object"},"expo":{"description":"Provider-specific overrides for Expo push notifications.","type":"object"},"fcm":{"description":"Provider-specific overrides for Firebase Cloud Messaging.","type":"object"},"mailgun":{"description":"Provider-specific overrides for Mailgun.","type":"object"},"sendgrid":{"description":"Provider-specific overrides for Sendgrid.","type":"object"},"ses":{"description":"Provider-specific overrides for AWS SES.","type":"object"},"slack":{"description":"Provider-specific overrides for Slack.","type":"object"},"teams":{"description":"Provider-specific overrides for Microsoft Teams.","type":"object"},"twilio":{"description":"Provider-specific overrides for Twilio.","type":"object"},"web_push":{"description":"Provider-specific overrides for the web push provider.","type":"object"}},"type":"object"}},"type":["object","null"]},"recipients":{"description":"A collection of users or filters that determine who receives the broadcast.","items":{"description":"The recipient specification for the broadcast.","oneOf":[{"$ref":"#/components/schemas/User"}]},"maxItems":1000,"minItems":1,"type":["null","array"]},"status":{"description":"The runtime state of the broadcast execution.","properties":{"errors":{"description":"A list of errors encountered while processing the broadcast.","items":{"properties":{"message":{"description":"The details about the processing error.","type":"string"}},"type":"object"},"type":["array","null"]},"status":{"description":"The overall processing status of the broadcast.","enum":["enqueued","processing","processed"],"readOnly":true,"type":"string"},"summary":{"description":"The summary counts for total recipients and failures.","properties":{"failures":{"description":"The number of failures while processing the broadcast.","readOnly":true,"type":"integer"},"total":{"description":"The number of recipients that the broadcast was sent to.","readOnly":true,"type":"integer"}},"required":["total","failures"],"type":"object"}},"required":["status","summary","errors"],"type":"object"},"title":{"description":"The subject or headline that will be shown to recipients.","maxLength":255,"minLength":1,"type":"string"},"topic":{"description":"The topic that further classifies the broadcast.","maxLength":255,"pattern":"^[A-Za-z0-9_\\.\\-/:]+$","type":["string","null"]}},"required":["title","recipients"],"type":"object"},"BroadcastCollection":{"examples":[{"data":[{"action_url":"https://example.com","category":"example","content":"I come from broadcast","custom_attributes":{},"id":"d1b3b3b3-3b3b-3b3b-3b3b-3b3b3b3b3b3b","overrides":{},"recipients":[{"custom_attributes":{"plan":"enterprise","preferred_pronoun":"They","pricing_version":"v10"},"email":"test@example.com","external_id":"83d987a-83fd034","first_name":"Person","last_name":"Doe","phone_numbers":["+1 5005550001"]}],"title":"Hello, World!","topic":"example"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/Broadcast"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"CategoryDeliveryConfig":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"channels":[{"channel":"in_app"},{"channel":"email","if":"{{notification.unseen}} == false"}],"key":"project"}],"properties":{"channels":{"description":"Ordered channel steps the delivery planner should execute.","items":{"properties":{"channel":{"description":"Name of the channel used for this step.","enum":["in_app","slack","web_push","mobile_push","teams","email","sms"],"type":"string"},"delay":{"description":"Delay in seconds to wait after the previous step.","minimum":0,"type":"integer"},"if":{"description":"Conditional expression evaluated before running the step.","type":["string","null"]}},"required":["channel"],"type":"object"},"type":"array"},"disabled":{"default":false,"description":"Disables the plan so it cannot be executed.","type":"boolean"},"key":{"description":"Unique identifier for this delivery plan.","minLength":3,"pattern":"^[A-Za-z0-9_.\\-:/]+$","type":"string"}},"required":["channels","key"],"type":"object"},"CountResponse":{"examples":[{"count":5}],"properties":{"count":{"description":"The count of notifications matching the query.","type":"integer"}},"required":["count"],"type":"object"},"CreateRunResponse":{"examples":[{"id":"123e4567-e89b-12d3-a456-426614174000"}],"properties":{"id":{"description":"Identifier of the workflow run that was created.","format":"uuid","type":"string"}},"required":["id"],"type":"object"},"DiscardResult":{"examples":[{"discarded_at":"2021-01-01T00:00:00Z","id":"123"}],"properties":{"discarded_at":{"description":"The timestamp when the token was discarded.","type":"string"},"id":{"description":"The unique identifier for the discarded token.","type":"string"}},"type":"object"},"Event":{"examples":[{"id":"123","timestamp":"2021-01-01T00:00:00Z","type":"example_type"}],"properties":{"code":{"description":"The numeric code that categorizes the event.","type":"integer"},"context":{"description":"Additional contextual attributes for the event.","type":["object","null"]},"id":{"description":"The unique identifier for the event.","type":"string"},"level":{"description":"The severity level assigned to the event.","type":"string"},"log":{"description":"A human-readable log message.","type":["string","null"]},"payload":{"description":"The raw payload delivered by the event source.","type":["object","null"]},"timestamp":{"description":"The time at which the event was recorded.","format":"date-time","type":"string"},"type":{"description":"The type of event that occurred.","type":"string"}},"required":["id","type","timestamp"],"type":"object"},"EventCollection":{"examples":[{"data":[{"id":"123","timestamp":"2021-01-01T00:00:00Z","type":"example_type"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/Event"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"EventSourceConfig":{"properties":{"config":{"$ref":"#/components/schemas/EventSourceConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"EventSourceConfigCollection":{"examples":[{"data":[{"config":{"source":"backend"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/EventSourceConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"EventSourceConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"examples":[{"source":"backend"}],"properties":{"source":{"type":"string"}},"required":["source"],"type":"object"},"ExecuteWorkflowRequest":{"examples":[{"input":{"user":{"id":"123","name":"John Doe"}},"key":"magicbell:signup"}],"properties":{"input":{"description":"Optional JSON payload that will be passed as the workflow input context.","type":["object","null"]},"key":{"description":"The unique workflow key to execute (e.g. integration.stripe.charge.succeeded).","pattern":"^[A-Za-z0-9\\_\\.\\-\\:]+$","type":"string"}},"required":["key"],"type":"object"},"ExpoConfig":{"properties":{"config":{"$ref":"#/components/schemas/ExpoConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"ExpoConfigCollection":{"examples":[{"data":[{"config":{"access_token":"expo_access_token"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/ExpoConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"ExpoConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"access_token":"expo_access_token"}],"properties":{"access_token":{"description":"The Expo access token used to authenticate push notifications.","minLength":1,"type":"string"}},"required":["access_token"],"type":"object"},"ExpoToken":{"examples":[{"created_at":"2021-01-01T00:00:00Z","device_token":"ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]","discarded_at":"2021-01-01T00:00:00Z","id":"123","updated_at":"2021-01-01T00:00:00Z"}],"properties":{"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"device_token":{"description":"The Expo push token returned by the Expo client.","minLength":1,"type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"id":{"description":"The unique identifier for the token.","type":"string"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]}},"required":["created_at","device_token","id"],"type":"object"},"ExpoTokenCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","device_token":"ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]","discarded_at":"2021-01-01T00:00:00Z","id":"123","updated_at":"2021-01-01T00:00:00Z"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/ExpoToken"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"ExpoTokenPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"device_token":"ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]"}],"properties":{"device_token":{"description":"The Expo push token returned by the Expo client.","minLength":1,"type":"string"}},"required":["device_token"],"type":"object"},"FCMConfig":{"properties":{"config":{"$ref":"#/components/schemas/FCMConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"FCMConfigCollection":{"examples":[{"data":[{"config":{"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","auth_uri":"https://accounts.google.com/o/oauth2/auth","client_email":"firebase-adminsdk-qwhtp@platform-development.iam.gserviceaccount.com","client_id":"117893100789081023083","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-qwhtp%40magicbell-development.iam.gserviceaccount.com","private_key":"-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7/GBHM4AK4/8c\nZyvJfdzjBzfA48tV9T3N4hBCb4E66jIz+oztH9oSngEfIVO/L1dWjK1OlN0cqJ0f\nQaKq1eycSjmwfTR3HGNjQQyoGQ4BFBdyqT5rRDDZLPI2LoR0dtQXcBtiFpJF2t8e\niDmpl3d/ipuKMtBRzjYPqzP0qv3YkPmw2v5FqKK9EIaHRtOhd2R28F5FE+kF1dvB\nt7fEeVtKcQJcSwDUQ8HEshlWSx6azGd4jxf9jHRXWumXYfTA6NMA7EUTDJVus3vU\ny9MCv2KwZO/dzlQygY0BM9FHPSzZRIiHUx+DH6gYl2uWJatluHz58lj3r5mo/Ssc\nyP3TrqOnAgMBAAECggEAWAnDe0UCt9b8QGyPBK/V1VspgMQOE+UlOzkenUaEUreg\nqFg0TM8ofaSS6OXeR0DgGdALUCyGeyf6YcuG55QFWlKmvuF8QzY/05mA2G7XcKjc\nrF3Xtju61tLmYnqZnMOT46AkquTgPyfYa3+n5aVimRAsdOYESvOUvPTUgcbc2GGK\nC2h2MUCoRKuhzbGx847XJmINRE+xaht4hDMhzhMBVrgGGyQ3sIdbCxpbiQR6QH2H\npITrSnd4hlKRPREWS/D4FUKP/ucXdORP9SUi0R64NRZ3GvT1HvpVZ9fOXwIACdAG\n9fpIQbsmIgxhgZ5ZjuGz/nFi2KQ2Y8rEycQmnHd4QQKBgQD4LVFL93E4qwr7Eruj\nFjyxGYYi2PhVxvrpiSD6ziK3HUjAxat6OcoElJx7WEFWHmi7KRgehqcl40A8Coav\n9DGBwnSM2AYKgzOqMqzjK71TFOQsJdGEYThnhiL2FoQeptgskVS7J9MMBPTnyl7D\nYObINwGbg9auVp66rj5W+dymZwKBgQDB6VdpxJpU9hXBW+8nJESduhzpYiHoe1kN\nyka90dQDOe2b/R7bnF1Ggte6Ll1dMs3xLhN1Mm2XTcX2zmzM15C0E4+1t1LXXzAo\nO2P+riEmCIUc1i0yNMVgEKXiOBBYgKauE3fT88c4dw2JAT0QlifJ0h8kRPNhUaq9\nespjleNQwQKBgHUzwZ7knn2qmSb1M9PTHppseWJfoPexXrGHZyHK064ykDcpos+4\nFuWO4U+G4GQxPDiXMaLI6IsGBUHVnsHdyruC/9O7+S5hw7Zu9CLcdy6TQSZwPcAM\nwbxyJnSdMYvgM1roz2ELb6nPdXE5qwMN8i8/euzcmDgBBDkZLKuamE+lAoGBAKb7\nvd7DAvPvBkUAWi2mub/pqUQA0ZpVvhZ1/f0wWBZ/J/KQQqZzPI+f1Q3rJ1M+kMIE\nH5Vo257TxooGsQKlD2NDBRpCx//XZK0Al9eVM86Av8BZX4pAj0dujqsEBG9yOhbl\nhObsor4pJ2q3ulIyPAk7/L1K8xr3LMUGnIqtZJcBAoGAEQffqGbnaOG8Ue3++bLP\nN6XlAyt5UajAd1CycIHgDvbW0CkWoI70Bg7QNqMYJe6DareH4vRpdB3tw6zNP7qN\n0Bd04L8+zUYN+VqNJ70d7Xn+k2rY7STlgU3vwOzHFwu4wK2A7e+aAZ8AjC+Sr0ZM\nps+wuWO8MN5yQTBZvAEIfQs=\n-----END PRIVATE KEY-----\n","private_key_id":"1935e74178f6ef0bbc23fb3538255f8281093bf2","project_id":"platform-development","token_uri":"https://oauth2.googleapis.com/token","type":"service_account","universe_domain":"googleapis.com"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/FCMConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"FCMConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","auth_uri":"https://accounts.google.com/o/oauth2/auth","client_email":"firebase-adminsdk-qwhtp@platform-development.iam.gserviceaccount.com","client_id":"117893100789081023083","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-qwhtp%40magicbell-development.iam.gserviceaccount.com","private_key":"-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7/GBHM4AK4/8c\nZyvJfdzjBzfA48tV9T3N4hBCb4E66jIz+oztH9oSngEfIVO/L1dWjK1OlN0cqJ0f\nQaKq1eycSjmwfTR3HGNjQQyoGQ4BFBdyqT5rRDDZLPI2LoR0dtQXcBtiFpJF2t8e\niDmpl3d/ipuKMtBRzjYPqzP0qv3YkPmw2v5FqKK9EIaHRtOhd2R28F5FE+kF1dvB\nt7fEeVtKcQJcSwDUQ8HEshlWSx6azGd4jxf9jHRXWumXYfTA6NMA7EUTDJVus3vU\ny9MCv2KwZO/dzlQygY0BM9FHPSzZRIiHUx+DH6gYl2uWJatluHz58lj3r5mo/Ssc\nyP3TrqOnAgMBAAECggEAWAnDe0UCt9b8QGyPBK/V1VspgMQOE+UlOzkenUaEUreg\nqFg0TM8ofaSS6OXeR0DgGdALUCyGeyf6YcuG55QFWlKmvuF8QzY/05mA2G7XcKjc\nrF3Xtju61tLmYnqZnMOT46AkquTgPyfYa3+n5aVimRAsdOYESvOUvPTUgcbc2GGK\nC2h2MUCoRKuhzbGx847XJmINRE+xaht4hDMhzhMBVrgGGyQ3sIdbCxpbiQR6QH2H\npITrSnd4hlKRPREWS/D4FUKP/ucXdORP9SUi0R64NRZ3GvT1HvpVZ9fOXwIACdAG\n9fpIQbsmIgxhgZ5ZjuGz/nFi2KQ2Y8rEycQmnHd4QQKBgQD4LVFL93E4qwr7Eruj\nFjyxGYYi2PhVxvrpiSD6ziK3HUjAxat6OcoElJx7WEFWHmi7KRgehqcl40A8Coav\n9DGBwnSM2AYKgzOqMqzjK71TFOQsJdGEYThnhiL2FoQeptgskVS7J9MMBPTnyl7D\nYObINwGbg9auVp66rj5W+dymZwKBgQDB6VdpxJpU9hXBW+8nJESduhzpYiHoe1kN\nyka90dQDOe2b/R7bnF1Ggte6Ll1dMs3xLhN1Mm2XTcX2zmzM15C0E4+1t1LXXzAo\nO2P+riEmCIUc1i0yNMVgEKXiOBBYgKauE3fT88c4dw2JAT0QlifJ0h8kRPNhUaq9\nespjleNQwQKBgHUzwZ7knn2qmSb1M9PTHppseWJfoPexXrGHZyHK064ykDcpos+4\nFuWO4U+G4GQxPDiXMaLI6IsGBUHVnsHdyruC/9O7+S5hw7Zu9CLcdy6TQSZwPcAM\nwbxyJnSdMYvgM1roz2ELb6nPdXE5qwMN8i8/euzcmDgBBDkZLKuamE+lAoGBAKb7\nvd7DAvPvBkUAWi2mub/pqUQA0ZpVvhZ1/f0wWBZ/J/KQQqZzPI+f1Q3rJ1M+kMIE\nH5Vo257TxooGsQKlD2NDBRpCx//XZK0Al9eVM86Av8BZX4pAj0dujqsEBG9yOhbl\nhObsor4pJ2q3ulIyPAk7/L1K8xr3LMUGnIqtZJcBAoGAEQffqGbnaOG8Ue3++bLP\nN6XlAyt5UajAd1CycIHgDvbW0CkWoI70Bg7QNqMYJe6DareH4vRpdB3tw6zNP7qN\n0Bd04L8+zUYN+VqNJ70d7Xn+k2rY7STlgU3vwOzHFwu4wK2A7e+aAZ8AjC+Sr0ZM\nps+wuWO8MN5yQTBZvAEIfQs=\n-----END PRIVATE KEY-----\n","private_key_id":"1935e74178f6ef0bbc23fb3538255f8281093bf2","project_id":"platform-development","token_uri":"https://oauth2.googleapis.com/token","type":"service_account","universe_domain":"googleapis.com"}],"properties":{"auth_provider_x509_cert_url":{"description":"URL for Google's OAuth provider x509 certificates used to validate tokens.","type":"string"},"auth_uri":{"description":"OAuth authorization endpoint used when exchanging Firebase credentials.","type":"string"},"client_email":{"description":"The client email address from the Firebase service account.","type":"string"},"client_id":{"description":"The numeric client identifier for the Firebase service account.","type":"string"},"client_x509_cert_url":{"description":"URL to the public x509 certificate for this service account.","type":"string"},"private_key":{"description":"The PEM encoded service account private key used to sign Firebase credentials.","pattern":"^-+?\\s?BEGIN[A-Z ]+-+\\n([A-Za-z0-9+/\\r\\n]+={0,2})\\n-+\\s?END[A-Z ]+-+\\n?$","type":"string","x-ui":{"tagName":"textarea"}},"private_key_id":{"description":"Identifier of the private key inside the downloaded service account JSON.","type":"string"},"project_id":{"description":"The Firebase project ID associated with this service account.","type":"string"},"token_uri":{"description":"OAuth token endpoint used to mint access tokens for FCM.","type":"string"},"type":{"description":"Indicates the kind of Google credential. Service accounts always use the `service_account` type.","enum":["service_account"],"type":"string"},"universe_domain":{"description":"The Google Cloud universe domain hosting the Firebase APIs.","type":"string"}},"required":["type","project_id","private_key_id","private_key","client_email","client_id","auth_uri","token_uri","auth_provider_x509_cert_url","client_x509_cert_url","universe_domain"],"type":"object"},"FCMToken":{"examples":[{"created_at":"2021-01-01T00:00:00Z","device_token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","discarded_at":"2021-01-01T00:00:00Z","id":"123","installation_id":"development","updated_at":"2021-01-01T00:00:00Z"}],"properties":{"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"device_token":{"description":"The Firebase Cloud Messaging device registration token to associate with the user.","minLength":64,"type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"id":{"description":"The unique identifier for the token.","type":"string"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]}},"required":["created_at","device_token","id"],"type":"object"},"FCMTokenCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","device_token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","discarded_at":"2021-01-01T00:00:00Z","id":"123","installation_id":"development","updated_at":"2021-01-01T00:00:00Z"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/FCMToken"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"FCMTokenPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"device_token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","installation_id":"development"}],"properties":{"device_token":{"description":"The Firebase Cloud Messaging device registration token to associate with the user.","minLength":64,"type":"string"}},"required":["device_token"],"type":"object"},"GetRunResponse":{"examples":[{"created_at":"2024-01-01T00:00:00Z","id":"01234567-89ab-cdef-0123-456789abcdef","input":{"description":"","payload":{"action":"in_progress"},"type":"workflow_job"},"status":{"next_step":1,"started_at":"2024-01-01T00:00:00Z","state":2},"workflow_key":"integration.stripe.charge.succeeded"}],"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"input":{"type":"object"},"status":{"properties":{"completed_at":{"format":"date-time","type":"string"},"error":{"type":"string"},"next_step":{"type":"integer"},"started_at":{"format":"date-time","type":"string"},"state":{"type":"integer"}},"type":"object"},"workflow_key":{"type":"string"}},"type":"object"},"GithubConfig":{"properties":{"config":{"$ref":"#/components/schemas/GithubConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"GithubConfigCollection":{"examples":[{"data":[{"config":{"webhook_signing_secret":"whsec_e5cf4458caae49ae72d8f275deb9b63bdd41dd5c932c27c9346d428fb9e1d0a0"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/GithubConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"GithubConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"examples":[{"webhook_signing_secret":"whsec_e5cf4458caae49ae72d8f275deb9b63bdd41dd5c932c27c9346d428fb9e1d0a0"}],"properties":{"webhook_signing_secret":{"description":"The signing secret to verify incoming requests from Github","maxLength":100,"minLength":1,"type":"string"}},"required":["webhook_signing_secret"],"type":"object"},"InboxConfig":{"properties":{"config":{"$ref":"#/components/schemas/InboxConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"InboxConfigCollection":{"examples":[{"data":[{"config":{"images":{"emptyInboxUrl":""},"locale":"de","theme":{"banner":{"backgroundColor":"#F8F5FF","fontSize":"14px","textColor":"#3A424D"},"dialog":{"accentColor":"#5225C1","backgroundColor":"#F5F5F5","textColor":"#313131"},"footer":{"backgroundColor":"#FFFFFF","borderRadius":"16px","fontFamily":"inherit","fontSize":"15px","textColor":"#5225C1"},"header":{"backgroundColor":"#FFFFFF","borderRadius":"16px","fontFamily":"inherit","fontSize":"15px","textColor":"#5225C1"},"icon":{"borderColor":"#EDEDEF","width":"24px"},"unseenBadge":{"backgroundColor":"#F80808"}}},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/InboxConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"InboxConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"images":{"emptyInboxUrl":""},"locale":"de","theme":{"banner":{"backgroundColor":"#F8F5FF","fontSize":"14px","textColor":"#3A424D"},"dialog":{"accentColor":"#5225C1","backgroundColor":"#F5F5F5","textColor":"#313131"},"footer":{"backgroundColor":"#FFFFFF","borderRadius":"16px","fontFamily":"inherit","fontSize":"15px","textColor":"#5225C1"},"header":{"backgroundColor":"#FFFFFF","borderRadius":"16px","fontFamily":"inherit","fontSize":"15px","textColor":"#5225C1"},"icon":{"borderColor":"#EDEDEF","width":"24px"},"unseenBadge":{"backgroundColor":"#F80808"}}}],"properties":{"images":{"description":"Image overrides for assets used in the inbox UI.","minProperties":1,"properties":{"emptyInboxUrl":{"description":"URL for the illustration shown when the inbox is empty.","type":"string"}},"required":["emptyInboxUrl"],"type":["object","null"]},"locale":{"description":"Locale code (ISO language tag) used to localize built-in strings.","minLength":2,"type":["string","null"]},"theme":{"description":"Visual customization options for the hosted inbox widget.","minProperties":1,"properties":{"banner":{"description":"Top banner styling options.","properties":{"backgroundColor":{"description":"Banner background color.","type":"string"},"backgroundOpacity":{"description":"Opacity applied to the banner background.","type":"number"},"fontSize":{"description":"Font size for banner text.","type":"string"},"textColor":{"description":"Banner text color.","type":"string"}},"required":["fontSize","backgroundColor","textColor"],"type":"object"},"dialog":{"description":"Styling for confirmation and action dialogs.","properties":{"accentColor":{"description":"Accent color for dialog buttons and highlights.","type":"string"},"backgroundColor":{"description":"Dialog background color.","type":"string"},"textColor":{"description":"Dialog text color.","type":"string"}},"required":["backgroundColor","textColor","accentColor"],"type":"object"},"footer":{"description":"Footer styling for the inbox modal.","properties":{"backgroundColor":{"description":"Footer background color.","type":"string"},"borderRadius":{"description":"Border radius applied to the footer container.","type":"string"},"fontSize":{"description":"Font size used in the footer.","type":"string"},"textColor":{"description":"Footer text color.","type":"string"}},"required":["fontSize","backgroundColor","textColor","borderRadius"],"type":"object"},"header":{"description":"Header styling for the inbox modal.","properties":{"backgroundColor":{"description":"Header background color.","type":"string"},"borderRadius":{"description":"Border radius applied to the header container.","type":"string"},"fontFamily":{"description":"CSS font family for the header title.","type":"string"},"fontSize":{"description":"Font size used in the header.","type":"string"},"textColor":{"description":"Header text color.","type":"string"}},"required":["fontFamily","fontSize","backgroundColor","textColor","borderRadius"],"type":"object"},"icon":{"description":"Launcher icon styling overrides.","properties":{"borderColor":{"description":"CSS color used for the icon border.","type":"string"},"width":{"description":"Width of the launcher icon (any CSS length).","type":"string"}},"required":["borderColor","width"],"type":"object"},"notification":{"description":"Styling overrides for notification list items.","properties":{"default":{"description":"Base styles applied to every notification item.","properties":{"backgroundColor":{"description":"Background color for notifications in their default state.","type":"string"},"borderRadius":{"description":"Border radius applied to each notification card.","type":"string"},"fontFamily":{"description":"Font family for notification text.","type":"string"},"fontSize":{"description":"Font size for notification text.","type":"string"},"hover":{"description":"Styles applied when a notification is hovered.","properties":{"backgroundColor":{"description":"Background color on hover.","type":"string"}},"required":["backgroundColor"],"type":"object"},"margin":{"description":"CSS margin applied around each notification card.","type":"string"},"state":{"description":"Accent colors for notification state indicators.","properties":{"color":{"description":"Color used for the state indicator.","type":"string"}},"required":["color"],"type":"object"},"textColor":{"description":"Default text color for notifications.","type":"string"}},"required":["fontFamily","fontSize","textColor","borderRadius","backgroundColor","margin"],"type":"object"},"unread":{"description":"Overrides for unread notifications.","properties":{"backgroundColor":{"description":"Background color applied to unread notifications.","type":"string"},"hover":{"description":"Hover styles for unread notifications.","properties":{"backgroundColor":{"description":"Background color on hover for unread notifications.","type":"string"}},"required":["backgroundColor"],"type":"object"},"state":{"description":"State indicator styling for unread notifications.","properties":{"color":{"description":"Color for the unread state indicator.","type":"string"}},"required":["color"],"type":"object"},"textColor":{"description":"Text color used when a notification is unread.","type":"string"}},"required":["textColor","backgroundColor"],"type":"object"},"unseen":{"description":"Overrides for unseen notifications.","properties":{"backgroundColor":{"description":"Background color applied to unseen notifications.","type":"string"},"hover":{"description":"Hover styles for unseen notifications.","properties":{"backgroundColor":{"description":"Background color on hover for unseen notifications.","type":"string"}},"required":["backgroundColor"],"type":"object"},"state":{"description":"State indicator styling for unseen notifications.","properties":{"color":{"description":"Color for the unseen state indicator.","type":"string"}},"required":["color"],"type":"object"},"textColor":{"description":"Text color used when a notification is unseen.","type":"string"}},"required":["textColor","backgroundColor"],"type":"object"}},"required":["default","unseen","unread"],"type":"object"},"unseenBadge":{"description":"Badge styling for unseen notification counts.","properties":{"backgroundColor":{"description":"Badge background color.","type":"string"}},"required":["backgroundColor"],"type":"object"}},"type":["object","null"]}},"required":["theme","locale","images"],"type":"object"},"InboxToken":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt"}],"properties":{"connection_id":{"description":"Realtime connection ID to restrict delivery to a specific Ably connection.","type":["string","null"]},"token":{"description":"The in-app inbox token generated for this user.","minLength":64,"type":"string"}},"required":["token"],"type":"object"},"InboxTokenResponse":{"examples":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","id":"123","token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","updated_at":"2021-01-01T00:00:00Z"}],"properties":{"connection_id":{"description":"Realtime connection ID to restrict delivery to a specific Ably connection.","type":["string","null"]},"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"id":{"description":"The unique identifier for the token.","type":"string"},"token":{"description":"The in-app inbox token generated for this user.","minLength":64,"type":"string"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]}},"required":["created_at","id","token"],"type":"object"},"InboxTokenResponseCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","id":"123","token":"eH0fLhuiRj2Np7UQ-opXAm:APA91bGtC-wH4sgW1jWkMKIZf7FYkm_RTQb7Jid7DfSJnCgivGYoRzhLrGxpcIF6yPjmbzAr6CKF-6phZkBasFUUfZmfdgcqfA_ZlZdVk6pSnon3LGzMumCzEJE0zgWoo_RUmVUVJUAt","updated_at":"2021-01-01T00:00:00Z"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/InboxTokenResponse"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"IntegrationConfig":{"properties":{"config":{"$ref":"#/components/schemas/IntegrationConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"IntegrationConfigCollection":{"examples":[{"data":[{"config":{"webhook_url":"https://example.com/webhook"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/IntegrationConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"IntegrationConfigPayload":{"type":"object"},"Links":{"properties":{"first":{"type":"string"},"next":{"type":["string","null"]},"prev":{"type":["string","null"]}},"type":"object"},"MailgunConfig":{"properties":{"config":{"$ref":"#/components/schemas/MailgunConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"MailgunConfigCollection":{"examples":[{"data":[{"config":{"api_key":"key-3ax6xnjp29jd6fds4gc373sgvjxteol0","domain":"example.com","from":{"email":"hello@example.com","name":"Example"},"region":"us"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/MailgunConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"MailgunConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"api_key":"key-3ax6xnjp29jd6fds4gc373sgvjxteol0","domain":"example.com","from":{"email":"hello@example.com","name":"Example"},"region":"us"}],"properties":{"api_key":{"minLength":1,"type":"string"},"domain":{"minLength":1,"type":"string"},"from":{"properties":{"email":{"description":"The email address to send from","format":"email","type":"string"},"name":{"description":"The name to send from","type":["string","null"]}},"required":["email"],"type":"object"},"region":{"enum":["us","eu"],"type":"string"}},"required":["api_key","region","domain"],"type":"object"},"Notification":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"aasm_state":"unseen","action_url":null,"archived_at":null,"category_id":null,"created_at":"2024-09-11T11:14:42.165Z","custom_attributes":{"key":"value","obj_key":{"one":"two"}},"discarded_at":null,"id":"4b6efd21-f0f6-4051-8922-cc8c90a3dc5d","in_app":true,"metadata":{},"notification_broadcast_id":"6a8b1e23-f54b-4c65-95b2-78f288d7f247","overrides":{},"project_id":7,"read_at":null,"seen_at":null,"title":"Example Notification","topic_id":null,"updated_at":"2024-09-11T11:14:42.165Z","user_id":"d4121424-097e-40b0-9cc8-357060d004b2"}],"properties":{"action_url":{"description":"The link associated with the notification.","maxLength":2048,"type":["null","string"]},"archived_at":{"description":"The timestamp when the notification was archived.","format":"date-time","type":["null","string"]},"category":{"description":"The category grouping for the notification.","maxLength":100,"type":["null","string"]},"content":{"description":"The body content of the notification.","maxLength":10485760,"type":["null","string"]},"created_at":{"description":"The timestamp when the notification was created.","format":"date-time","type":["string"]},"custom_attributes":{"description":"The custom data stored with the notification.","type":["null","object"]},"discarded_at":{"description":"The timestamp when the notification was discarded.","format":"date-time","type":["null","string"]},"id":{"description":"The unique identifier for the notification.","format":"uuid","type":"string"},"read_at":{"description":"The timestamp when the notification was marked as read.","format":"date-time","type":["null","string"]},"seen_at":{"description":"The timestamp when the notification was seen.","format":"date-time","type":["null","string"]},"sent_at":{"description":"The timestamp when the notification was sent.","format":"date-time","type":["null","string"]},"title":{"description":"The title that is displayed to recipients.","maxLength":255,"minLength":1,"type":"string"},"topic":{"description":"The topic for additional classification.","maxLength":100,"type":["null","string"]},"updated_at":{"description":"The timestamp when the notification was last updated.","format":"date-time","type":["string"]},"user_id":{"description":"The user that should receive the notification.","format":"uuid","type":"string"}},"required":["id","title","created_at","updated_at","user_id"],"type":"object"},"NotificationCollection":{"examples":[{"data":[{"aasm_state":"unseen","action_url":null,"archived_at":null,"category_id":null,"created_at":"2024-09-11T11:14:42.165Z","custom_attributes":{"key":"value","obj_key":{"one":"two"}},"discarded_at":null,"id":"4b6efd21-f0f6-4051-8922-cc8c90a3dc5d","in_app":true,"metadata":{},"notification_broadcast_id":"6a8b1e23-f54b-4c65-95b2-78f288d7f247","overrides":{},"project_id":7,"read_at":null,"seen_at":null,"title":"Example Notification","topic_id":null,"updated_at":"2024-09-11T11:14:42.165Z","user_id":"d4121424-097e-40b0-9cc8-357060d004b2"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/Notification"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"PingConfig":{"properties":{"config":{"$ref":"#/components/schemas/PingConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"PingConfigCollection":{"examples":[{"data":[{"config":{"url":"https://example.com/webhook"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/PingConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"PingConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"url":"https://example.com/webhook"}],"properties":{"url":{"description":"URL to ping","format":"uri","maxLength":100,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"SESConfig":{"properties":{"config":{"$ref":"#/components/schemas/SESConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"SESConfigCollection":{"examples":[{"data":[{"config":{"from":{"email":"company@example.com","name":"Company Name"},"key_id":"MY_FAKE_AWS_ACCESS_KEY_ID","region":"eu-west-1","secret_key":"MY_FAKE_AWS_SECRET_KEY"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/SESConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"SESConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"from":{"email":"company@example.com","name":"Company Name"},"key_id":"MY_FAKE_AWS_ACCESS_KEY_ID","region":"eu-west-1","secret_key":"MY_FAKE_AWS_SECRET_KEY"}],"properties":{"from":{"properties":{"email":{"description":"The email address to send from","format":"email","type":"string"},"name":{"description":"The name to send from","type":["string","null"]}},"required":["email"],"type":"object"},"key_id":{"description":"AWS Access Key ID","minLength":1,"type":"string"},"region":{"description":"AWS Region","minLength":1,"type":"string"},"secret_key":{"description":"AWS Secret Key","minLength":1,"type":"string"}},"required":["key_id","secret_key","region"],"type":"object"},"SMTPConfig":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"from":{"email":"notifications@example.com","name":"Example Notifications"},"host":"smtp.gmail.com","password":"your-app-password","port":587,"reply_to":{"email":"support@example.com","name":"Example Support"},"security":"starttls","username":"user@example.com"}],"properties":{"from":{"description":"Default sender email address","properties":{"email":{"description":"Sender email address","format":"email","type":"string"},"name":{"description":"Sender name","type":"string"}},"required":["email"],"type":"object"},"host":{"description":"SMTP server hostname","examples":["smtp.gmail.com","smtp.example.com"],"type":"string"},"password":{"description":"SMTP authentication password","type":"string"},"port":{"description":"SMTP server port","examples":[25,465,587],"maximum":65535,"minimum":1,"type":"integer"},"reply_to":{"description":"Reply-to email address","properties":{"email":{"description":"Reply-to email address","format":"email","type":"string"},"name":{"description":"Reply-to name","type":"string"}},"required":["email"],"type":"object"},"security":{"default":"starttls","description":"SMTP security/encryption method","enum":["none","ssl","starttls"],"examples":["starttls"],"type":"string"},"username":{"description":"SMTP authentication username","type":"string"}},"required":["host","port","username","password","from"],"title":"SMTPConfig","type":"object"},"SMTPConfigObject":{"properties":{"config":{"$ref":"#/components/schemas/SMTPConfig"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"SMTPConfigObjectCollection":{"examples":[{"data":[{"config":{"from":{"email":"notifications@example.com","name":"Example Notifications"},"host":"smtp.gmail.com","password":"your-app-password","port":587,"reply_to":{"email":"support@example.com","name":"Example Support"},"security":"starttls","username":"user@example.com"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/SMTPConfigObject"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"SendgridConfig":{"properties":{"config":{"$ref":"#/components/schemas/SendgridConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"SendgridConfigCollection":{"examples":[{"data":[{"config":{"api_key":"SG.1234567890","from":{"email":"company@example.com","name":"Company Name"},"reply_to":{"email":"reply-to@example.com","name":"Reply to Company"}},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/SendgridConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"SendgridConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"api_key":"SG.1234567890","from":{"email":"company@example.com","name":"Company Name"},"reply_to":{"email":"reply-to@example.com","name":"Reply to Company"}}],"properties":{"api_key":{"description":"The API key for Sendgrid","type":"string"},"from":{"properties":{"email":{"description":"The email address to send from","format":"email","type":"string"},"name":{"description":"The name to send from","type":["string","null"]}},"required":["email"],"type":"object"},"reply_to":{"properties":{"email":{"description":"The email address to reply to","format":"email","type":"string"},"name":{"description":"The name to reply to","type":["string","null"]}},"required":["email"],"type":"object"}},"required":["api_key"],"type":"object"},"SlackBotConfig":{"properties":{"config":{"$ref":"#/components/schemas/SlackBotConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"SlackBotConfigCollection":{"examples":[{"data":[{"config":{"enabled":true},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/SlackBotConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"SlackBotConfigPayload":{"examples":[{"enabled":true}],"properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"type":"object"},"SlackConfig":{"properties":{"config":{"$ref":"#/components/schemas/SlackConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"SlackConfigCollection":{"examples":[{"data":[{"config":{"app_id":"12345678901","client_id":"1.0","client_secret":"12345678901234567890123456789012","signing_secret":"12345678901234567890123456789012"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/SlackConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"SlackConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"app_id":"12345678901","client_id":"1.0","client_secret":"12345678901234567890123456789012","signing_secret":"12345678901234567890123456789012"}],"properties":{"app_id":{"description":"The Slack app ID that can be found in the app's settings page of the Slack API dashboard.","pattern":"^[0-9A-Z]+$","type":"string"},"client_id":{"description":"The Slack client ID that can be found in the app's settings page of the Slack API dashboard.","pattern":"^[0-9]+\\.[0-9]+$","type":"string"},"client_secret":{"description":"The Slack client secret that can be found in the app's settings page of the Slack API dashboard.","maxLength":32,"minLength":32,"type":"string"},"signing_secret":{"description":"The Slack signing secret that can be found in the app's settings page of the Slack API dashboard.","maxLength":32,"minLength":32,"type":"string"}},"required":["app_id","client_id","client_secret","signing_secret"],"type":"object"},"SlackFinishInstallResponse":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"app_id":"12345678901","code":"string","redirect_url":"string"}],"properties":{"app_id":{"description":"The app ID of the Slack app that was originally configured at the project-level.","type":"string"},"code":{"description":"The code that was returned from the OAuth flow, and found in the query string of the redirect URL.","type":"string"},"redirect_url":{"type":"string"}},"required":["app_id","code"],"type":"object"},"SlackInstallation":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"access_token":"xoxb-123456789012-1234567890123-12345678901234567890abcdef123456","app_id":"A12345678","authed_user":{"id":"U12345678","scope":"identify,commands"},"bot_user_id":"U12345678","enterprise_id":"E12345678","enterprise_name":"Enterprise Grid, Inc.","id":"A12345678-T123","incoming_webhook":{"channel":"C12345678","channel_id":"C12345678","configuration_url":"https://teamname.slack.com/services/B12345678","url":"https://hooks.slack.com/services/T12345678/B12345678/123456789012345678901234"},"scope":"identify,commands,bot","team":{"id":"T123","name":"Team Installing Your App"},"team_id":"T12345678","team_name":"Team Installing Your App"}],"properties":{"access_token":{"description":"Bot token returned from the Slack OAuth exchange.","type":"string"},"app_id":{"description":"Slack app identifier for the installed app.","type":"string"},"authed_user":{"properties":{"access_token":{"description":"User token returned from the OAuth exchange.","type":"string"},"expires_in":{"description":"Seconds until the user token expires.","type":"integer"},"id":{"description":"Slack user ID for the installer.","type":"string"},"refresh_token":{"description":"Refresh token for the authed user.","type":"string"},"scope":{"description":"Space-delimited OAuth scopes granted to the user token.","type":"string"},"token_type":{"description":"Token type value provided by Slack.","type":"string"}},"required":["id"],"type":"object"},"bot_user_id":{"description":"Slack user ID of the installed bot.","type":"string"},"enterprise":{"properties":{"id":{"description":"Enterprise grid identifier.","type":"string"},"name":{"description":"Enterprise grid name.","type":"string"}},"required":["name","id"],"type":"object"},"expires_in":{"description":"Seconds until the bot access token expires.","type":"integer"},"id":{"description":"Unique identifier MagicBell assigns to the Slack installation.","pattern":"^[A-Z0-9]+-.*$","type":"string"},"incoming_webhook":{"properties":{"channel":{"description":"Human readable name for the webhook channel.","type":"string"},"configuration_url":{"description":"URL users can visit to manage the webhook.","type":"string"},"url":{"description":"Webhook URL that Slack posts events to.","type":"string"}},"required":["channel","configuration_url","url"],"type":"object"},"is_enterprise_install":{"description":"Indicates whether the installation occurred on an enterprise grid.","type":"boolean"},"refresh_token":{"description":"Refresh token for regenerating the bot access token.","type":"string"},"scope":{"description":"Space-delimited OAuth scopes granted to the bot token.","type":"string"},"team":{"properties":{"id":{"description":"Workspace ID where the app was installed.","type":"string"},"name":{"description":"Workspace name where the app was installed.","type":"string"}},"required":["id"],"type":"object"},"token_type":{"description":"Type of bot token returned by Slack.","type":"string"}},"required":["access_token","authed_user","team","app_id"],"type":"object"},"SlackStartInstall":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"examples":[{"app_id":"12345678901","auth_url":"https://example.com/auth","extra_scopes":["scope1","scope2"],"redirect_url":"https://example.com/redirect"}],"properties":{"app_id":{"description":"Slack app ID that the installation flow should use.","type":"string"},"auth_url":{"description":"Optional override for the authorization URL returned to the client.","type":"string"},"extra_scopes":{"description":"Additional OAuth scopes to request during installation.","items":{"type":"string"},"type":"array"},"redirect_url":{"description":"Custom redirect URL to use after OAuth completes.","type":"string"}},"required":["app_id"],"type":"object"},"SlackStartInstallResponseContent":{"examples":[{"app_id":"app-id","auth_url":"https://slack.com/oauth/v2/authorize?client_id=app-id\u0026scope=channels:read,chat:write","scopes":["channels:read","chat:write"]}],"properties":{"app_id":{"type":"string"},"auth_url":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"}},"type":"object"},"SlackToken":{"examples":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","id":"123","updated_at":"2021-01-01T00:00:00Z","webhook":{"url":"https://example.com/webhook"}}],"properties":{"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"id":{"description":"The unique identifier for the token.","type":"string"},"oauth":{"properties":{"channel_id":{"description":"The ID of the Slack channel this installation is associated with","type":"string"},"installation_id":{"description":"A unique identifier for this Slack workspace installation","type":"string"},"scope":{"description":"The OAuth scope granted during installation","type":"string"}},"required":["channel_id","installation_id"],"type":"object"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]},"webhook":{"description":"Obtained directly from the incoming_webhook object in the installation response from the Slack API.","properties":{"url":{"description":"The URL for the incoming webhook from Slack","format":"uri","minLength":1,"type":"string"}},"required":["url"],"type":"object"}},"required":["created_at","id"],"type":"object"},"SlackTokenCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","id":"123","updated_at":"2021-01-01T00:00:00Z","webhook":{"url":"https://example.com/webhook"}}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/SlackToken"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"SlackTokenPayload":{"$id":"slackToken","$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"examples":[{"webhook":{"url":"https://example.com/webhook"}}],"minProperties":1,"properties":{"oauth":{"properties":{"channel_id":{"description":"The ID of the Slack channel this installation is associated with","type":"string"},"installation_id":{"description":"A unique identifier for this Slack workspace installation","type":"string"},"scope":{"description":"The OAuth scope granted during installation","type":"string"}},"required":["channel_id","installation_id"],"type":"object"},"webhook":{"description":"Obtained directly from the incoming_webhook object in the installation response from the Slack API.","properties":{"url":{"description":"The URL for the incoming webhook from Slack","format":"uri","minLength":1,"type":"string"}},"required":["url"],"type":"object"}},"type":"object"},"StripeConfig":{"properties":{"config":{"$ref":"#/components/schemas/StripeConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"StripeConfigCollection":{"examples":[{"data":[{"config":{"webhook_signing_secret":"whsec_e5cf4458caae49ae72d8f275deb9b63bdd41dd5c932c27c9346d428fb9e1d0a0"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/StripeConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"StripeConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"examples":[{"webhook_signing_secret":"whsec_e5cf4458caae49ae72d8f275deb9b63bdd41dd5c932c27c9346d428fb9e1d0a0"}],"properties":{"id":{"description":"The unique identifier for this configuration","format":"uuid","type":"string"},"webhook_signing_secret":{"description":"The signing secret to verify incoming requests from Stripe","maxLength":100,"minLength":1,"type":"string"}},"required":["webhook_signing_secret"],"type":"object"},"TeamsToken":{"examples":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","id":"123","updated_at":"2021-01-01T00:00:00Z"}],"properties":{"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"id":{"description":"The unique identifier for the token.","type":"string"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]},"webhook":{"properties":{"url":{"type":"string"}},"type":"object"}},"required":["created_at","id"],"type":"object"},"TeamsTokenCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","id":"123","updated_at":"2021-01-01T00:00:00Z"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/TeamsToken"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"TeamsTokenPayload":{"examples":[{}],"properties":{"webhook":{"properties":{"url":{"type":"string"}},"type":"object"}},"type":"object"},"TwilioConfig":{"properties":{"config":{"$ref":"#/components/schemas/TwilioConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"TwilioConfigCollection":{"examples":[{"data":[{"config":{"account_sid":"ACXXXXXXXX","api_key":"SKXXXXXXXX","api_secret":"your_api_secret","from":"+15017122661"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/TwilioConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"TwilioConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"account_sid":"ACXXXXXXXX","api_key":"SKXXXXXXXX","api_secret":"your_api_secret","from":"+15017122661"}],"properties":{"account_sid":{"description":"The SID for your Twilio account","maxLength":100,"minLength":1,"type":"string"},"api_key":{"description":"A US1 API key for Twilio-  - https://www.twilio.com/docs/iam/api-keys","maxLength":100,"minLength":1,"type":"string"},"api_secret":{"description":"The API Secret for Twilio","maxLength":100,"minLength":1,"type":"string"},"from":{"description":"The phone number to send from, in E.164 format","maxLength":100,"minLength":1,"pattern":"^\\+[0-9]{1,14}$","type":"string"}},"required":["account_sid","api_key","api_secret","from"],"type":"object"},"User":{"examples":[{"custom_attributes":{"key":"value"},"email":"dan@example.com","external_id":"external-id","first_name":"Dan","id":"8a038704-acc1-47f9-81b0-7523886cbeae","last_name":"Example"}],"properties":{"created_at":{"description":"The timestamp when the user was created.","format":"date-time","type":["string","null"]},"custom_attributes":{"description":"Arbitrary custom values stored on the user.","type":["object","null"]},"email":{"description":"The primary email address of the user.","type":["string","null"]},"external_id":{"description":"The user identifier from an external system.","type":["string","null"]},"first_name":{"description":"The first name of the user.","type":["string","null"]},"id":{"description":"The unique identifier for the user.","format":"uuid","type":"string"},"last_name":{"description":"The last name of the user.","type":["string","null"]},"last_notified_at":{"description":"The timestamp when the user last received a notification.","format":"date-time","type":["string","null"]},"last_seen_at":{"description":"The timestamp when the user last opened the inbox.","format":"date-time","type":["string","null"]},"updated_at":{"description":"The timestamp when the user was last updated.","format":"date-time","type":["string","null"]}},"type":"object"},"UserCollection":{"examples":[{"data":[{"custom_attributes":{"key":"value"},"email":"dan@example.com","external_id":"external-id","first_name":"Dan","id":"8a038704-acc1-47f9-81b0-7523886cbeae","last_name":"Example"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/User"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"UserPreferences":{"$id":"https://magicbell.com/schemas/delivery.json","$schema":"http://json-schema.org/draft-07/schema#","examples":[{"categories":[{"channels":[{"enabled":true,"label":"Email","name":"email"}],"key":"category_1","label":"Category 1"}]}],"properties":{"categories":{"items":{"properties":{"channels":{"items":{"properties":{"enabled":{"type":"boolean"},"name":{"type":"string"}},"type":"object"},"type":"array"},"key":{"maxLength":255,"pattern":"^[A-Za-z0-9_\\.\\-/:]+$","type":"string"},"label":{"maxLength":255,"type":["string","null"]}},"type":"object"},"type":"array"}},"type":"object"},"WebPushStartInstallationResponse":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"auth_token":"eyGhb...GA2Bw","public_key":"BHaJd...gRHDk"}],"properties":{"auth_token":{"description":"Auth secret returned from PushSubscription.getKey('auth').","minLength":8,"type":"string"},"public_key":{"description":"VAPID public key generated for this web push installation.","maxLength":128,"minLength":8,"type":"string"}},"required":["public_key","auth_token"],"type":"object"},"WebPushToken":{"examples":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","endpoint":"https://fcm.googleapis.com/fcm/send/fZhR0fsr0zw:APA91bE4pM-qo1KBJDU_Zp2N9nDP-Jdmwugm-v4KNL_NlJvYCrJeJUzPXmMyAXqAE0m6BFOrkSWT0ArGbUjEEpxQEYZLado8JeW1PZA5CHB8R6C7HT6-MD6Qs8ZaCn8_ffLGGU7WuvtN","id":"123","keys":{"auth":"GoIO2ulhtQuyBM64lZuFuw","p256dh":"BICAe4KtLhhPNFvynlqMRxjvpRnr94881QeuTCr8kCwJf-Fssj3FLIlnfFMjj7T1yNg5l6cn14350323_NSGZh0"},"updated_at":"2021-01-01T00:00:00Z"}],"properties":{"created_at":{"description":"The timestamp when the token was created.","format":"date-time","type":"string"},"discarded_at":{"description":"The timestamp when the token was discarded, if applicable.","format":"date-time","type":["string","null"]},"endpoint":{"description":"The push subscription URL obtained from PushSubscription.endpoint after calling registration.pushManager.subscribe(). This is the unique URL for this device that push messages will be sent to.","format":"uri","type":"string"},"id":{"description":"The unique identifier for the token.","type":"string"},"keys":{"description":"The encryption keys from the PushSubscription.getKey() method, needed to encrypt push messages for this subscription.","properties":{"auth":{"contentEncoding":"base64","description":"The authentication secret obtained from PushSubscription.getKey('auth'). Used to encrypt push messages for this subscription.","type":"string"},"p256dh":{"contentEncoding":"base64","description":"The P-256 ECDH public key obtained from PushSubscription.getKey('p256dh'). Used to encrypt push messages for this subscription.","type":"string"}},"required":["p256dh","auth"],"type":"object"},"updated_at":{"description":"The timestamp when the token metadata last changed.","format":"date-time","type":["string","null"]}},"required":["created_at","endpoint","id","keys"],"type":"object"},"WebPushTokenCollection":{"examples":[{"data":[{"created_at":"2021-01-01T00:00:00Z","discarded_at":"2021-01-01T00:00:00Z","endpoint":"https://fcm.googleapis.com/fcm/send/fZhR0fsr0zw:APA91bE4pM-qo1KBJDU_Zp2N9nDP-Jdmwugm-v4KNL_NlJvYCrJeJUzPXmMyAXqAE0m6BFOrkSWT0ArGbUjEEpxQEYZLado8JeW1PZA5CHB8R6C7HT6-MD6Qs8ZaCn8_ffLGGU7WuvtN","id":"123","keys":{"auth":"GoIO2ulhtQuyBM64lZuFuw","p256dh":"BICAe4KtLhhPNFvynlqMRxjvpRnr94881QeuTCr8kCwJf-Fssj3FLIlnfFMjj7T1yNg5l6cn14350323_NSGZh0"},"updated_at":"2021-01-01T00:00:00Z"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/WebPushToken"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"WebPushTokenPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"endpoint":"https://fcm.googleapis.com/fcm/send/fZhR0fsr0zw:APA91bE4pM-qo1KBJDU_Zp2N9nDP-Jdmwugm-v4KNL_NlJvYCrJeJUzPXmMyAXqAE0m6BFOrkSWT0ArGbUjEEpxQEYZLado8JeW1PZA5CHB8R6C7HT6-MD6Qs8ZaCn8_ffLGGU7WuvtN","keys":{"auth":"GoIO2ulhtQuyBM64lZuFuw","p256dh":"BICAe4KtLhhPNFvynlqMRxjvpRnr94881QeuTCr8kCwJf-Fssj3FLIlnfFMjj7T1yNg5l6cn14350323_NSGZh0"}}],"properties":{"endpoint":{"description":"The push subscription URL obtained from PushSubscription.endpoint after calling registration.pushManager.subscribe(). This is the unique URL for this device that push messages will be sent to.","format":"uri","type":"string"},"keys":{"description":"The encryption keys from the PushSubscription.getKey() method, needed to encrypt push messages for this subscription.","properties":{"auth":{"contentEncoding":"base64","description":"The authentication secret obtained from PushSubscription.getKey('auth'). Used to encrypt push messages for this subscription.","type":"string"},"p256dh":{"contentEncoding":"base64","description":"The P-256 ECDH public key obtained from PushSubscription.getKey('p256dh'). Used to encrypt push messages for this subscription.","type":"string"}},"required":["p256dh","auth"],"type":"object"}},"required":["endpoint","keys"],"type":"object"},"WebpushConfig":{"properties":{"config":{"$ref":"#/components/schemas/WebpushConfigPayload"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","id","config"],"type":"object"},"WebpushConfigCollection":{"examples":[{"data":[{"config":{"private_key":"y56TIPdEzrQ0Ku_uQbGGkB84mYdF9pJl5IHvmAZ_fVs","public_key":"BNKZeSrRX_c3QfqzOvv1oshpj1qPbDcUJHKET6Ahs2u9-F4HgllPYxtgaGvGSqfytuALumX5NYZPLD8YmCwBxcw"},"id":"123","name":"\u003cprovider-name\u003e"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/WebpushConfig"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"},"WebpushConfigPayload":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"private_key":"y56TIPdEzrQ0Ku_uQbGGkB84mYdF9pJl5IHvmAZ_fVs","public_key":"BNKZeSrRX_c3QfqzOvv1oshpj1qPbDcUJHKET6Ahs2u9-F4HgllPYxtgaGvGSqfytuALumX5NYZPLD8YmCwBxcw"}],"properties":{"private_key":{"description":"VAPID private key.","maxLength":128,"minLength":8,"type":"string"},"public_key":{"description":"VAPID public key - read more at https://magicbell.com/tools/vapid-keys.","maxLength":128,"minLength":8,"type":"string"}},"required":["public_key","private_key"],"type":"object"},"WorkflowDefinition":{"$schema":"http://json-schema.org/draft-07/schema#","examples":[{"key":"project","steps":[{"command":"broadcast","input":{"channel":"in_app"}},{"command":"broadcast","if":"{{data.paying}} == true","input":{"channel":"email"}}]}],"properties":{"disabled":{"default":false,"description":"When true, prevents the workflow from being triggered.","type":"boolean"},"key":{"description":"Unique identifier for this workflow definition.","minLength":3,"pattern":"^[A-Za-z0-9\\_\\.\\-\\:]+$","type":"string"},"steps":{"description":"Ordered list describing each action that will run inside the workflow.","items":{"properties":{"command":{"description":"Command to execute (e.g., broadcast, pause, wait, abort)","pattern":"^[a-z_]+$","type":"string"},"if":{"description":"JMESPath condition that must evaluate truthy for the step to run.","type":["string","null"]},"input":{"description":"Optional payload passed to the command when it executes.","type":["object","null"]}},"required":["command"],"type":"object"},"type":"array"}},"required":["steps","key"],"type":"object"},"WorkflowList":{"examples":[{"items":[{"disabled":false,"key":"integration.stripe.charge.succeeded","steps":[{"command":"broadcast","if":"event.amount \u003e 1000","input":{"category":"billing","template":"payment_received"}}]}]}],"properties":{"items":{"items":{"properties":{"disabled":{"default":false,"type":"boolean"},"key":{"minLength":3,"pattern":"^[A-Za-z0-9\\_\\.\\-\\:]+$","type":"string"},"steps":{"items":{"properties":{"command":{"description":"Command to execute (e.g., broadcast, pause, wait, abort)","pattern":"^[a-z_]+$","type":"string"},"if":{"type":["string","null"]},"input":{"type":["object","null"]}},"required":["command"],"type":"object"},"type":"array"}},"required":["steps","key"],"type":"object"},"type":"array"}},"type":"object"},"WorkflowRun":{"properties":{"created_at":{"format":"date-time","type":"string"},"id":{"format":"uuid","type":"string"},"status":{"properties":{"completed_at":{"format":"date-time","type":"string"},"error":{"type":"string"},"next_step":{"type":"integer"},"started_at":{"format":"date-time","type":"string"},"state":{"type":"integer"}},"type":"object"},"workflow_key":{"type":"string"}},"type":"object"},"WorkflowRunCollection":{"examples":[{"data":[{"created_at":"2024-01-01T00:00:00Z","id":"01234567-89ab-cdef-0123-456789abcdef","status":{"next_step":1,"started_at":"2024-01-01T00:00:00Z","state":2},"workflow_key":"integration.stripe.charge.succeeded"}],"links":{"first":"https://api.magicbell.com/v1/example","next":"https://api.magicbell.com/v1/example?page_next=abc","prev":null}}],"properties":{"data":{"items":{"$ref":"#/components/schemas/WorkflowRun"},"type":"array"},"links":{"$ref":"#/components/schemas/Links"}},"type":"object"}}},"tags":[{"name":"apns"},{"name":"channel/email"},{"name":"channel/in_app"},{"name":"channel/mobile_push"},{"name":"channel/slack"},{"name":"channel/sms"},{"name":"channel/web_push"},{"name":"eventsource"},{"name":"expo"},{"name":"fcm"},{"name":"github"},{"name":"in_app"},{"name":"inbox"},{"name":"magicbell_slackbot"},{"name":"mailgun"},{"name":"mobile_push"},{"name":"ping_email"},{"name":"sendgrid"},{"name":"ses"},{"name":"slack"},{"name":"smtp"},{"name":"stripe"},{"name":"teams"},{"name":"twilio"},{"name":"web_push"}]}