From 32952db5171281845689d434bd15d22d27c92092 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:21:43 +0000 Subject: [PATCH 01/15] Remove App management overview page for new dashboard release Add redirect from /docs/account/app to Account overview. Remove App management nav section and associated images. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/data/nav/platform.ts | 34 ------ .../content/screenshots/dash/create-app.png | Bin 22382 -> 0 bytes .../content/screenshots/dash/dash-tabs.png | Bin 17007 -> 0 bytes .../content/screenshots/dash/your-apps.png | Bin 23673 -> 0 bytes src/pages/docs/platform/account/app/index.mdx | 107 ------------------ src/pages/docs/platform/account/index.mdx | 1 + 6 files changed, 1 insertion(+), 141 deletions(-) delete mode 100644 src/images/content/screenshots/dash/create-app.png delete mode 100644 src/images/content/screenshots/dash/dash-tabs.png delete mode 100644 src/images/content/screenshots/dash/your-apps.png delete mode 100644 src/pages/docs/platform/account/app/index.mdx diff --git a/src/data/nav/platform.ts b/src/data/nav/platform.ts index 8e1df1417d..f9367f96cc 100644 --- a/src/data/nav/platform.ts +++ b/src/data/nav/platform.ts @@ -291,40 +291,6 @@ export default { name: 'Enterprise customization', link: '/docs/platform/account/enterprise-customization', }, - { - name: 'App management', - pages: [ - { - name: 'Overview', - link: '/docs/platform/account/app', - index: true, - }, - { - name: 'Stats', - link: '/docs/platform/account/app/stats', - }, - { - name: 'API keys', - link: '/docs/platform/account/app/api', - }, - { - name: 'Queues', - link: '/docs/platform/account/app/queues', - }, - { - name: 'Notifications', - link: '/docs/platform/account/app/notifications', - }, - { - name: 'Dev console', - link: '/docs/platform/account/app/console', - }, - { - name: 'Settings', - link: '/docs/platform/account/app/settings', - }, - ], - }, { name: 'Programmatic management using Control API', link: '/docs/platform/account/control-api', diff --git a/src/images/content/screenshots/dash/create-app.png b/src/images/content/screenshots/dash/create-app.png deleted file mode 100644 index acb9cea59b322ded5a961dfcd3c2799a17857f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22382 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 Jpp^Q569BhusQmx{ diff --git a/src/images/content/screenshots/dash/dash-tabs.png b/src/images/content/screenshots/dash/dash-tabs.png deleted file mode 100644 index 48b3a570e25a3cc282c489930b0eb5f1e3e2baa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17007 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 G|C;~+R01{t diff --git a/src/pages/docs/platform/account/app/index.mdx b/src/pages/docs/platform/account/app/index.mdx deleted file mode 100644 index 28d96d01f6..0000000000 --- a/src/pages/docs/platform/account/app/index.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: App management overview -meta_description: " Manage and monitor your applications on the Ably platform using the Ably dashboard. Create new apps, view existing ones, and configure settings from your browser." -meta_keywords: “Ably dashboard, manage applications, monitor apps, app creation, application settings, Ably platform” -redirect_from: - - /docs/account/app ---- - -Manage and monitor your applications on the Ably platform using the Ably dashboard. Create new apps, view existing ones, and configure settings from your browser. - -Begin by [logging](https://ably.com/login) in to Ably through your browser. Once you're logged in, you have access to the Ably [dashboard](https://ably.com/accounts), where you can [create a new app](#create) or [view your existing apps.](#view) - -## Create a new app - -The following image displays the Ably dashboard when no apps have been created yet. To get started, you can easily **Create new app**: - -![Create apps in the Ably dashboard](../../../../../images/content/screenshots/dash/create-app.png) - -## View your apps - -If you have created apps already, your dashboard will look similar to the one shown in the following image. Each app displayed is a link to its specific dashboard, where you can view and configure settings, as well as monitor usage and statistics: - -![Your apps in the Ably dashboard](../../../../../images/content/screenshots/dash/your-apps.png) - -### Environments - -Each Ably app acts as a sandboxed environment, isolated from other apps in your account. This makes it straightforward to set up separate environments for development, staging, and production by creating dedicated apps for each. - -For example, if you're building a product called "chat-app", you could create: - -- `chat-app-production` for your live production environment -- `chat-app-staging` for pre-production testing -- `chat-app-development` for ongoing development work - -This approach provides complete isolation between environments, ensuring that development activities don't interfere with production traffic. An alternative approach for complete resource isolation, consider using separate Ably accounts for development and production environments. This ensures development activities cannot impact production resources under any circumstances. - - - -## App overview - -Your app dashboard provides the following tabs for monitoring and configuring your app settings: - -![Your app dashboard tabs](../../../../../images/content/screenshots/dash/dash-tabs.png) - -### Stats - -Monitor and analyze your app's performance through a [stats](/docs/platform/account/app/stats) table and chart: - -* Track messages, presence events, and performance metrics to understand usage and capacity. -* Compare data over time to identify trends and optimize resources. -* Adjust chart views with zoom options and set specific time ranges for detailed insights. - -### Getting started - -Get started by connecting to Ably, and publishing your first message. - -### API keys - -Create, manage, and configure [API keys](/docs/platform/account/app/api) by setting capabilities: - -* Users can create a new API key, assigning a descriptive name for easy identification. -* Capabilities include permissions like publishing messages, subscribing to channels, retrieving message history, managing presence, and accessing statistics. -* Control access by defining whether the key has unrestricted access, channel-only, queue-only, or specific access to selected channels and queues. - -### Integrations - -[Integrate](/docs/platform/integrations) Ably with external services, enabling data to flow between Ably channels and third-party platforms: - -* Ably events can trigger webhook requests to external services, or external services can send data to Ably using incoming webhooks. -* Ably enables continuous streaming of events to external services like Amazon Kinesis or Kafka, or can receive inbound streams from external services. -* Ably supports various integration methods, including HTTP callbacks, cloud functions, and streaming services. - -### Queues - -View, monitor, and adjust Ably [queues:](/docs/platform/account/app/queues) - -* Queues provide access to manage existing queues, monitor data flow, and adjust settings such as TTL, max length, and region. -* Users can contact Ably support for assistance with increasing limits or customizing their queue settings. - -### Notifications - -Manage [notifications](/docs/platform/account/app/notifications) using Ably. Create, test, and send notifications to specific devices or channels, and enure everything works correctly. - -* Configure push notifications for devices using FCM for Android or APNs for iOS. -* Use the push inspector tool to test and debug notifications by sending them manually and reviewing device, client, and channel registrations. -* Use the push inspector widget below to browse and inspect channel subscriptions, device and client registrations. - -### Dev console - -Monitor your application's health in realtime using Ably's [dev console](/docs/platform/account/app/console) by -- tracking events like connection status changes and channel activity. Connect to channels, publish messages, manage presence, and view event logs for troubleshooting: - -* The dev console provides realtime insights into application-wide events like connection status changes, channel activity, and event logs. -* You can connect to channels, publish messages, and manage presence, tracking interactions within the channel through the console. -* The event log table displays detailed records of connection events, which can be used for troubleshooting and diagnosing application issues. -* Interact with Ably channels using command-line tools like cURL. - -### Settings - -Manage key aspects of your application [settings](/docs/platform/account/app/settings), including security, enabling or disabling the app, configuring rules for channels, and setting up protocol support for different SDKs: - -* Manage settings like App ID, name, security (TLS), and enable/disable the application, affecting its ability to accept connections and use Ably services. -* Create rules to enforce settings for specific channels, or channel namespaces, such as message persistence, TLS-only access, push notifications, and server-side batching. -* Enable compatibility with various protocols like Pusher, PubNub, and MQTT for communication between client libraries and Ably. -* Manage notifications for channel activity and occupancy to gain realtime insights into channel usage and performance. - diff --git a/src/pages/docs/platform/account/index.mdx b/src/pages/docs/platform/account/index.mdx index 98b7715222..1f28ce55f0 100644 --- a/src/pages/docs/platform/account/index.mdx +++ b/src/pages/docs/platform/account/index.mdx @@ -4,6 +4,7 @@ meta_description: "Manage all aspects of your account, from 2FA and billing to u meta_keywords: "Ably account, 2FA, billing, user management, personal preferences" redirect_from: - /docs/account + - /docs/account/app --- Manage all aspects of your account, from Two-factor authentication ([2FA](/docs/platform/account/2fa)) and billing to user management and personal preferences. From f9f314cae89b1c8fc846a71a1086529365bfb508 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:22:16 +0000 Subject: [PATCH 02/15] Remove App Settings page for new dashboard release Add redirects to Account overview. Update TLS/settings links in Encryption and Error codes pages. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../docs/channels/options/encryption.mdx | 2 +- .../docs/platform/account/app/settings.mdx | 50 ------------------- src/pages/docs/platform/account/index.mdx | 2 + src/pages/docs/platform/errors/codes.mdx | 2 +- 4 files changed, 4 insertions(+), 52 deletions(-) delete mode 100644 src/pages/docs/platform/account/app/settings.mdx diff --git a/src/pages/docs/channels/options/encryption.mdx b/src/pages/docs/channels/options/encryption.mdx index 645114aeb5..3886e880f9 100644 --- a/src/pages/docs/channels/options/encryption.mdx +++ b/src/pages/docs/channels/options/encryption.mdx @@ -32,7 +32,7 @@ Unencrypted communication with Ably is **disallowed** if any of the following co * You attempt to use [Basic Authentication](/docs/auth/basic) and thus transmit a private API key over an unencrypted connection. You are only permitted to use unencrypted connections with [Token Authentication](/docs/auth/token) as tokens expire, limiting the impact of token interception. -* You have specified that TLS is required in your [app settings](/docs/platform/account/app/settings). +* You have specified that TLS is required in your [app settings](https://ably.com/accounts/any/apps/any/edit). * A client using an unencrypted connection attempts to attach to a channel that is configured to be used with [TLS only](/docs/channels#rules). diff --git a/src/pages/docs/platform/account/app/settings.mdx b/src/pages/docs/platform/account/app/settings.mdx deleted file mode 100644 index ef1dc62212..0000000000 --- a/src/pages/docs/platform/account/app/settings.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Settings -meta_description: "Manage your Ably application settings including security, billing, authentication, and protocol support to optimize performance and enhance security." -meta_keywords: "Ably app settings, application management, security settings, two-factor authentication, billing management, protocol support, channel configuration, push notifications" -redirect_from: - - /docs/account/app/settings ---- - -Manage your Ably application settings including security, billing, authentication, and protocol support to optimize performance and enhance security. - -### Application settings overview - -The following provides an overview of your application settings. - -| Section | Description | -| ------ | ------------ | -| **App ID** | This ID is automatically generated by Ably when you create an application. It is a critical part of your application's identity and is included in every API key and token issued for your application. | -| **Name** | This is the user-defined name that you assigned when creating your application. It is helpful for quickly identifying the application among others in your dashboard, especially if you manage multiple applications. | -| **Security** | Enabled by default, this option enforces Transport Layer Security (TLS) for all connections to your application. TLS protocol ensures data encryption and secure communication between clients and servers. | -| **Enabled** | When an application is disabled, it no longer accepts new connections and deactivates all associated services. Clients cannot connect, send or receive messages, or use other Ably services. When enabled, the application allows new connections and activates all related services. | - -### Rule configuration - -The following explains the configuration rules for specific [namespaces](/docs/channels#namespaces) or [channels](/docs/channels): - -| Section | Description | -| ------- | ----------- | -| Namespace or channel ID | Identify the specific namespace or channel to which this rule will apply. | -| Persist last message | Stores the last message published on a channel for 365 days, accessible via the rewind mechanism. | -| Persist all messages | Ably stores all messages for two minutes by default. Depending on your account package, this can be increased to 24 or 72 hours. It is also possible to persist the last message sent to a channel for a year. | -| Identified | Requires clients to authenticate with a client ID to interact with channels in this namespace. | -| TLS only | Restricts access to channels within this namespace to clients connected using TLS. | -| Push notifications enabled | Enables publishing messages with a push payload, triggering native push notifications to registered devices. | -| Message interactions enabled | Enables unique time serial fields in messages, enabling typed references between messages (e.g., implementing 'Likes' in a chat). | -| Server-side batching enabled | Batches inbound messages on the server side before sending them to subscribers based on the configured policy. | -| Cancel | Discards changes and closes the dialog without saving the new rule.| - -### Protocol adapter settings - -The following explains the configuration support for various communication protocols ([Pusher](/docs/protocols/pusher), [PubNub](/docs/protocols/pubnub), [MQTT](/docs/protocols/mqtt)), enabling different client libraries to interact with Ably. - -| Settings | Description | -| --------- | ----------- | -| Pusher protocol support | Provides compatibility with the Pusher protocol. | -| PubNub protocol support | Provides compatibility with the PubNub protocol. | -| MQTT protocol support | Provides compatibility with the MQTT protocol. | - -### Actions - -**Delete this app now** to permanently delete your app including your message history, statistics and prevent access to Ably with any of the API keys assigned to this app. diff --git a/src/pages/docs/platform/account/index.mdx b/src/pages/docs/platform/account/index.mdx index 1f28ce55f0..3f1539b1f8 100644 --- a/src/pages/docs/platform/account/index.mdx +++ b/src/pages/docs/platform/account/index.mdx @@ -5,6 +5,8 @@ meta_keywords: "Ably account, 2FA, billing, user management, personal preference redirect_from: - /docs/account - /docs/account/app + - /docs/platform/account/app/settings + - /docs/account/app/settings --- Manage all aspects of your account, from Two-factor authentication ([2FA](/docs/platform/account/2fa)) and billing to user management and personal preferences. diff --git a/src/pages/docs/platform/errors/codes.mdx b/src/pages/docs/platform/errors/codes.mdx index 4227c886cb..519d9e612e 100644 --- a/src/pages/docs/platform/errors/codes.mdx +++ b/src/pages/docs/platform/errors/codes.mdx @@ -392,7 +392,7 @@ The following are example for this error: ## 40311: Operation requires TLS connection -By default, Ably apps require [TLS](/docs/platform/account/app/settings#channel-rule-configuration) for connections. This error occurs when a realtime SDK attempts to connect with TLS disabled (tls: false) while using token authentication. +By default, Ably apps require TLS for connections. This error occurs when a realtime SDK attempts to connect with TLS disabled (tls: false) while using token authentication. Resolution: The following steps can help resolve this issue: * Ensure that the `tls` [`ClientOption`](/docs/api/realtime-sdk?#client-options) is set to true when connecting. From b4dd19fdd279f5c0059b8af894ba9224ec88b410 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:23:10 +0000 Subject: [PATCH 03/15] Remove API keys dashboard page for new dashboard release Add redirects to Auth page. Update API key links in Error codes page. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/pages/docs/auth/index.mdx | 2 + src/pages/docs/platform/account/app/api.mdx | 67 --------------------- src/pages/docs/platform/errors/codes.mdx | 10 +-- 3 files changed, 7 insertions(+), 72 deletions(-) delete mode 100644 src/pages/docs/platform/account/app/api.mdx diff --git a/src/pages/docs/auth/index.mdx b/src/pages/docs/auth/index.mdx index 88058a1694..ccb7222bad 100644 --- a/src/pages/docs/auth/index.mdx +++ b/src/pages/docs/auth/index.mdx @@ -18,6 +18,8 @@ redirect_from: - /docs/general/authentication - /docs/general/_authentication_capabilities - /docs/ids-and-keys + - /docs/account/app/api + - /docs/platform/account/app/api --- All interactions between a client and the Ably service must be authenticated. diff --git a/src/pages/docs/platform/account/app/api.mdx b/src/pages/docs/platform/account/app/api.mdx deleted file mode 100644 index 611776924c..0000000000 --- a/src/pages/docs/platform/account/app/api.mdx +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: API keys -meta_description: “Manage Ably API keys by creating, updating, setting restrictions, and exploring integration options.” -meta_keywords: "API keys, Ably, create key, update key, key restrictions, integration, webhooks, authentication" -redirect_from: - - /docs/account/app/api ---- - -The API keys tab lists all API keys associated with your account and provides information on each key's capabilities and restrictions. You can [create a new API key](#create) and manage an existing one. - - - -## Create a new API key - -The following steps create a new API Key: - -* Click **Create a new API key**. - * Assign a friendly name. - * Give the new API key a descriptive name (e.g. chat app key) so it is easy to identify later. - -To manage an API key: set [capabilities](/docs/auth/capabilities), define resource restrictions, use revocable tokens for security, and adjust key settings as needed. - -### Capabilities - -[Capabilities](/docs/auth/capabilities) provide permissions required for managing message flow, user presence, notifications, channel information, and access controls, these depend on what you require the API key to have access to: - -| Capability | Description | -| ---------- | ----------- | -| **Publish** | Allow clients to publish messages to channels. | -| **Subscribe** | Allow clients to receive messages and presence state changes. | -| **History** | Allow clients to retrieve message and presence history. | -| **Presence** | Allow clients to register presence on a channel. | -| **Channel metadata** | Allow clients to query channel metadata. | -| **Push admin and push-subscribe** | Allow clients to manage and subscribe to push notifications. | -| **Statistics** | Allow clients to query usage statistics. | -| **Privileged headers** | Allow clients to set privileged headers, such as to skip rules. | - -### Set resource restrictions - -Set resource restrictions to control access to channels and queues, ranging from unrestricted access to specific, rule-based permissions: - -| Restriction | Description | -| ----------- | ----------- | -| None | No restrictions; access any channel or queue. | -| Only channels | Access any channel but not queues. | -| Only queues | Access any queue but not channels. | -| Selected channels and queues | Specify explicit rules for access. | - -When specifying selected channels and queues, you can provide a comma-separated list of resources. Each resource can match a single channel (e.g., `channel-name`) or multiple channels using wildcards (e.g., `namespace:*`). Queues use the prefix `[queue]` and meta channels use `[meta]`. See [capabilities documentation](/docs/auth/capabilities#wildcards) for detailed wildcard syntax. - - - -### Revocable tokens - -[Revocable tokens](/docs/auth/revocation#revocable-tokens) enhance security by allowing shorter token lifetimes and the ability to revoke tokens issued via the API key. - -| Option | Description | -| ------ | ----------- | -| Revocable tokens | Implement security measures by setting shorter token lifetimes and enabling the ability to revoke tokens issued by the API key. | - -### Change your API key settings - -Click **Settings** on the required API key to change its settings. The same settings apply as when creating a new API key. diff --git a/src/pages/docs/platform/errors/codes.mdx b/src/pages/docs/platform/errors/codes.mdx index 519d9e612e..496973e9be 100644 --- a/src/pages/docs/platform/errors/codes.mdx +++ b/src/pages/docs/platform/errors/codes.mdx @@ -57,8 +57,8 @@ Resolution: The following steps can help resolve this issue: * API key initialization: ** Ensure you are the account's **admin** or **owner**. -** In your [Ably dashboard](https://ably.com/accounts/any) to the **API keys** tab. -** Use one of these API keys instead of your current one or create a [new API key](/docs/platform/account/app/api#create) with the necessary permissions and privileges and use that to instance the SDK. +** In your [Ably dashboard](https://ably.com/accounts/any/apps/any/) to the **API keys** tab. +** Use one of these API keys instead of your current one or create a new API key with the necessary permissions and privileges and use that to instance the SDK. * Token initialization: ** If you are using [token authentication](/docs/auth/token), ensure you are correctly requesting a valid token before using it with Ably. @@ -292,14 +292,14 @@ This error occurs when the application has reached the maximum number of [integr ## 40127: Maximum number of keys per application exceeded -This error occurs when the application has reached the maximum number of [API keys](/docs/platform/account/app/api) set by the [limits](/docs/platform/pricing/limits#app-limits) for your current package. +This error occurs when the application has reached the maximum number of API keys set by the [limits](/docs/platform/pricing/limits#app-limits) for your current package. ## 40131: Key revoked This error occurs when the [Ably API key](/docs/auth#api-keys) used to initialize the SDK is no longer valid because it has been [revoked](/docs/auth/revocation) by an admin of the application. Resolution: The following steps can help resolve this issue: -* If you are an admin, go to the [API keys tab](/docs/platform/account/app/api) in the Ably dashboard to check for valid keys. Use an existing valid key or create a new one with the necessary permissions. +* If you are an admin, go to the [API keys tab](https://ably.com/accounts/any/apps/any/app_keys) in the Ably dashboard to check for valid keys. Use an existing valid key or create a new one with the necessary permissions. * If you are not an admin, request a new API key from an administrator or obtain a token request generated with a valid key. ## 40133: Wrong key; cannot revoke tokens with a different key than the one that issued them @@ -396,7 +396,7 @@ By default, Ably apps require TLS for connections. This error occurs when a real Resolution: The following steps can help resolve this issue: * Ensure that the `tls` [`ClientOption`](/docs/api/realtime-sdk?#client-options) is set to true when connecting. -* If using [API key](/docs/platform/account/app/api#create) authentication, note that this scenario will result in a [`40103`](#40103) error instead. +* If using API key authentication, note that this scenario will result in a [`40103`](#40103) error instead. ## 40330: Unable to activate account due to placement constraint (unspecified) From 2c5453c477ca4469d8972a2804b171927387c397 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:23:33 +0000 Subject: [PATCH 04/15] Remove Dev console dashboard page for new dashboard release Add redirects to Debugging page. Rename Dev console section to Web client. Update console link in Metadata subscribe page. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../metadata-stats/metadata/subscribe.mdx | 2 +- .../docs/platform/account/app/console.mdx | 79 ------------------- src/pages/docs/platform/errors/index.mdx | 8 +- 3 files changed, 6 insertions(+), 83 deletions(-) delete mode 100644 src/pages/docs/platform/account/app/console.mdx diff --git a/src/pages/docs/metadata-stats/metadata/subscribe.mdx b/src/pages/docs/metadata-stats/metadata/subscribe.mdx index dfddb17ba8..d9e90097bf 100644 --- a/src/pages/docs/metadata-stats/metadata/subscribe.mdx +++ b/src/pages/docs/metadata-stats/metadata/subscribe.mdx @@ -58,7 +58,7 @@ The `data` property of all events is a [`ChannelDetails`](/docs/api/realtime-sdk ### Regional channel activity -Seeing `channel.region.inactive` events in your [Dev Console](/docs/platform/account/app/console) logs is normal behavior. Channels become active in different regions globally according to where clients are located and Ably's internal placement rules. +Seeing `channel.region.inactive` events in your [Web Client](https://ably.com/accounts/any/apps/any/console) logs is normal behavior. Channels become active in different regions globally according to where clients are located and Ably's internal placement rules. A `channel.region.inactive` event indicates that a channel no longer has any clients in that specific region, or that the channel is shutting down altogether. This is part of Ably's normal operation to efficiently manage resources across its global infrastructure. diff --git a/src/pages/docs/platform/account/app/console.mdx b/src/pages/docs/platform/account/app/console.mdx deleted file mode 100644 index aec15bb350..0000000000 --- a/src/pages/docs/platform/account/app/console.mdx +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Dev console -meta_description: "Gain realtime insights into application-wide events, such as connection status changes, channel activity, and event logs.” -meta_keywords: “Ably dev console, realtime monitoring, connection status changes, channel activity, event logs" -redirect_from: - - /docs/account/app/console ---- - -The dev console tab provides realtime insights into application-wide events, such as connection status changes and channel activity. These features enable you to: - -* Observe changes in connection status across the application. -* View activity on specific channels, including message traffic and channel events. -* Examine event logs to troubleshoot your application. - -## Application-wide events interface - -The application-wide events interface allows you to monitor your application's health and activity in realtime. - -The following explains the realtime monitoring tools in the application-wide events interface: - -| Field | Description | -| ----- | ----------- | -| **API key** | The API key to access and view events within the app. | -| **Average application-wide events per second (p/s)** | This metric shows the average number of events occurring per second across your application. For example, if the current rate is 0, no active events are being processed. | -| **Event log table** | The event log table displays a record of events related to the current client's connection status. This table can be used to debug potential issues in your application. | - -## Message auditing and logging - -The dev console displays messages in realtime for debugging and testing purposes, but does not provide persistent message auditing or logging capabilities. Ably does not currently offer native functionality to view historical messages filtered by specific channels or client IDs for auditing purposes. - -If you need to audit or log messages by channel or client ID, implement this functionality on the application side. Consider using: - -- [Webhooks](/docs/platform/integrations/webhooks) to send message events to your logging system -- [Message queues](/docs/platform/integrations/queues) to process and store message data -- Client-side logging in your application code - -For native message auditing features, [contact support](mailto:support@ably.com) to discuss requirements. - -## Channels - -The following is a step-by-step instructions for connecting to a channel, publishing messages. - -### Connect to a channel - -The following explains how to connect to a channel: - -| Step | Action | -| ---- | ------ | -| **Enter a channel name** | In the channel name field, choose a name (e.g get-started). | -| **Attach to channel** | Click the **attach to channel** button. This connects you to the **get-started** channel, enabling you to start publishing or subscribing to messages. | -| **Monitor channel status** | The interface will display the channel status as **pending** and then **attached** once connected, confirming that the channel is ready for interaction.| - -### Publish a message - -The following explains how to publish a message: - -| Step | Action | -| ---- | ------ | -| **Message data** | In the **message data** field, type a message (e.g. example). | -| **Publish message** | Click the **publish message** button to send the message to the **get-started** channel. | -| **View the message** | If you have a subscriber , it will receive and display the message in the console. | - -The following explains how to interact with presence: - -| Step | Action | -| ---- | ------ | -| **Client ID** | Enter a unique client ID to simulate joining the presence of the channel. | -| **Enter presence** | Click **enter presence** to indicate that this client is now in the channel. | -| **Monitor presence** | The interface will list all clients in the channel under **presence members**. | - -### Control the channel - -The following explains how to control the channel in the dev console: - -| Step | Action | -| ---- | ------ | -| **Detach** | Click **detach** to disconnect from the channel. | -| **Pause** | Use **pause** to temporarily stop receiving messages. | -| **Clear** | Click **clear** to clear the channel data or logs from the interface. | diff --git a/src/pages/docs/platform/errors/index.mdx b/src/pages/docs/platform/errors/index.mdx index cd041ee816..aa972f8cd8 100644 --- a/src/pages/docs/platform/errors/index.mdx +++ b/src/pages/docs/platform/errors/index.mdx @@ -3,6 +3,8 @@ title: Debugging meta_description: "Debugging in Ably supported apps, including troubleshooting techniques, logging options, and tools for error analysis." redirect_from: - /docs/errors/ + - /docs/account/app/console + - /docs/platform/account/app/console --- Errors can occur in various scenarios when using Ably, such as invalid inputs in requests, authentication issues, or connection problems caused by network disruptions. Proper debugging is essential for building a reliable application and troubleshooting. @@ -212,15 +214,15 @@ The following is an example event published to the `[meta]log` channel as an [`E ``` -## Dev console +## Web client -The [Dev console](https://ably.com/accounts/any/apps/any/console) in your Ably dashboard is a quick and easy way to inspect errors. It provides a live stream of all events in your application, which is especially useful during early-stage development or low-traffic periods when events are easier to track: +The [web client](https://ably.com/accounts/any/apps/any/console) in your Ably dashboard is a quick and easy way to inspect errors. It provides a live stream of all events in your application, which is especially useful during early-stage development or low-traffic periods when events are easier to track: * Monitor all live events in your application for detailed insights. * Test publishing and subscribing to channels to identify and resolve issues with these functions. ## Support tickets From 0be1f7a906c6f620c8b0e237e6bcec1573aa83f6 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:23:41 +0000 Subject: [PATCH 05/15] Remove Notifications dashboard page for new dashboard release Add redirects to Push notifications page. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../platform/account/app/notifications.mdx | 75 ------------------- src/pages/docs/push/index.mdx | 2 + 2 files changed, 2 insertions(+), 75 deletions(-) delete mode 100644 src/pages/docs/platform/account/app/notifications.mdx diff --git a/src/pages/docs/platform/account/app/notifications.mdx b/src/pages/docs/platform/account/app/notifications.mdx deleted file mode 100644 index 6e17b52961..0000000000 --- a/src/pages/docs/platform/account/app/notifications.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Notifications -meta_description: Configure credentials for integrating Ably's push notification services with third-party services, send push notifications from the Ably dashboard, and inspect push notifications .” -meta_keywords: “Ably push notifications, configure FCM, configure APNs, Web Push setup, push inspector" -redirect_from: - - /docs/account/app/notifications ---- - -Before you can start using Ably's [push notification](/docs/push) services, you must configure the credentials for the third-party services you wish to integrate, such as FCM for Android devices, APNs for iOS devices, or Web Push for web browsers. - -### Configure FCM for Android devices - -* Go to the [Firebase Console.](https://firebase.google.com/) -* Click **add project** and follow the steps to **create and manage service account keys**. -* Download your service account **JSON file**. -* In your Ably [dashboard](https://ably.com/accounts), navigate to the **notifications** tab under your app settings. -* Go to **push notifications setup**, click **configure push**. -* Add your service account **JSON file** to the **setting up Firebase cloud messaging** section. - -### Configure APNs for iOS devices - -* Go to the [Apple Developer Program.](https://developer.apple.com/programs/) -* Use the Apple developer portal to create a **push notification** service certificate for your app. -* Export the certificate as a **.p12 file**. -* Next, you can either import the **.p12 cert** or create a **PEM file** and copy it into your Ably dashboard: - -* Import the **.p12 file**: - * In your Ably [dashboard](https://ably.com/accounts), navigate to the **Notifications** tab under your app settings. - * Go to **push notifications setup**, click **configure push** and scroll to the **setting up Apple push notification service** section. - * Select the **.p12 file** you exported and enter the password you created during the export process. - * Click **save**. You should receive confirmation that the certificate has been successfully imported. - * To further confirm the import, refresh the page and check if the **PEM cert** and **private key** text boxes are now populated with the imported key details. -* Create a **PEM file** from the **.p12 file**: - * Using [OpenSSL](https://www.openssl.org/), convert the recently exported **.p12 file** (`io.ably.test.p12`) to a **PEM file** with the following command: `$ openssl pkcs12 -in ./io.ably.test.p12 -out ./io.ably.test.pem -nodes -clcerts`. - * Open the **PEM file** in your text editor. - * Copy everything between and including `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`, and paste it into the **PEM cert** text box of the Apple push notification service section of your Ably notifications app [dashboard](https://ably.com/accounts). - * Similarly, copy everything between and including `-----BEGIN PRIVATE KEY-----` and `-----END PRIVATE KEY-----`, and paste it into the **PEM private key** text box of the same section. Then, click **Save**. - -## Push inspector - -The Push inspector tool enables you to manually send push notifications by specifying the required data and notification fields. This tool helps test and debug your notification setup before going live. - -### API key - -The [API Key](/docs/platform/account/app/api) authenticates your requests when sending push notifications. Choose from the list of API keys associated with your Ably account. Each key has different permissions and scopes, so ensure you select the correct one for your notification tasks. - -### Push notification title and body - -Define the content of your push notification using the fields below: - -| Field | Purpose | How to Use | -| ----- | ------- | ---------- | -| Notification title | A title for the push notification, which will appear as the headline on the user's device. | Enter a short, clear title that captures the essence of the notification. | -| Notification body | The main content of the notification to be displayed below the title. | Write the key information or message that you want the user to read. | -| Notification data | Optional JSON data that the app can use for specific actions upon receiving the notification. | Include any extra data needed for app functionality, such as custom metadata or instructions. | - -### Push notification target - -Direct your push notifications to specific targets within the Ably platform. Select the appropriate target according to your notification strategy: - -| Target | Purpose | How to Use | -| ------ | ------- | ---------- | -| Channel name | Push notifications to all subscribers of a specific channel. | Enter the channel name and click push to channel to notify all devices subscribed to that channel. | -| Device ID | Send a notification directly to a specific device. | Enter the Device ID and click push to device to target a single device with the notification. | -| Client ID | Notify a specific client registered with Ably. | Enter the Client ID and click push to client to send the notification to the chosen client. | - -## Push inspector widget - -The Push Inspector widget allows you to monitor and manage your push notification infrastructure directly from the Ably dashboard. It provides insights into channel subscriptions, device registrations, and client registrations, making it easier to debug and optimize your notification setup. - -| Section | Purpose | How to Use | -| ------- | ------- | ---------- | -| Channel subscriptions | View and inspect all channels currently subscribed to push notifications. | Click inspect channel to see detailed information about a specific channel, including the number of subscribers and recent activity. | -| Device registrations | Access a list of all devices registered to receive push notifications. | Click inspect device to view detailed information about a specific device, such as its registration status, platform, and recent notifications. | -| Client registrations | Get an overview of all clients registered for push notifications within the Ably account. | Click inspect client ID to see detailed information about a specific client, including its subscriptions and recent activity. | diff --git a/src/pages/docs/push/index.mdx b/src/pages/docs/push/index.mdx index 149cad093e..11d7950c22 100644 --- a/src/pages/docs/push/index.mdx +++ b/src/pages/docs/push/index.mdx @@ -13,6 +13,8 @@ redirect_from: - /docs/general/push-notifications - /docs/general/versions/v0.8/push-notifications - /docs/general/smart-notifications + - /docs/account/app/notifications + - /docs/platform/account/app/notifications --- Push notifications notify user devices or browsers regardless of whether an application is open and running. They deliver information, such as app updates, social media alerts, or promotional offers, directly to the user's screen. Ably sends push notifications to devices using [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) or [Apple Push Notification Service](https://developer.apple.com/notifications/), and to browsers using [Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API). Push notifications don't require a device or browser to stay connected to Ably. Instead, a device's or browser's operating system or web browser maintains its own battery-efficient transport to receive notifications. From 88ed09dacc498228db8adae00979d934ee91cea6 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:23:49 +0000 Subject: [PATCH 06/15] Remove Queues dashboard page for new dashboard release Add redirect to Integrations Queues page. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../docs/platform/account/app/queues.mdx | 34 ------------------- .../docs/platform/integrations/queues.mdx | 1 + 2 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 src/pages/docs/platform/account/app/queues.mdx diff --git a/src/pages/docs/platform/account/app/queues.mdx b/src/pages/docs/platform/account/app/queues.mdx deleted file mode 100644 index 4503803ca1..0000000000 --- a/src/pages/docs/platform/account/app/queues.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Queues -meta_description: Manage and configure Ably queues, monitor realtime data, and optimize performance.” -meta_keywords: “Ably Queues, realtime data, AMQP, STOMP, queue management, TTL, queue settings" -redirect_from: - - /docs/account/app/queues ---- - -Ably queues provide a way to consume realtime data using the [AMQP](/docs/platform/integrations/queues#consume-amqp) or [STOMP](/docs/platform/integrations/queues#consume-stomp) protocols. Find out more about using [Ably queues](/docs/platform/integrations/queues#what). - -## Manage your Ably queues - -The Ably queues tab enables you to: - -* Access a list of all your existing queues. -* Monitor realtime data flow and queue performance. -* Click on any queue to view and adjust its settings, such as TTL, maximum length, and region. - -### Provision a new queue - -When provisioning a new queue, you'll need to specify several things: - -| Field | Description | -| ----- | ----------- | -| **Name** | Choose a unique name for your queue. This will help you identify it within your dashboard and during application development. | -| **Region** | Select the geographic region where the queue will be hosted. This is important for optimizing latency and ensuring data residency aligns with your application's requirements. | -| **TTL (time to Live)** | Set the TTL, which determines how long messages remain in the queue before being automatically deleted if they are not consumed. The default account limit is 60 minutes. You can contact Ably support for assistance if you need a longer TTL. | -| **Max length** | Define the maximum number of messages the queue can hold at any given time. The default limit is 10,000 messages, but you can request an increase if your application requires more capacity. | - -### Set up queue rules - -Once you have provisioned a physical queue, you need to set up one or more queue rules to republish messages, presence events or channel events from pub/sub channels into a queue. Queue rules can either be used to publish to internal queues (hosted by Ably) or external external streams or queues (such as Amazon Kinesis and RabbitMQ). Publishing to external streams or queues is part of our [Ably Firehose servers](/docs/platform/integrations/streaming). - -Ably queue rules are setup in the **Integrations** tab found within your app **dashboard**. Find out more about setting up [queue rules](/docs/platform/integrations/queues#setup). diff --git a/src/pages/docs/platform/integrations/queues.mdx b/src/pages/docs/platform/integrations/queues.mdx index 8750aef3c9..9c34853ffc 100644 --- a/src/pages/docs/platform/integrations/queues.mdx +++ b/src/pages/docs/platform/integrations/queues.mdx @@ -8,6 +8,7 @@ redirect_from: - /docs/general/versions/v0.8/queues - /docs/general/queues - /docs/integrations/queues + - /docs/account/app/queues --- Ably Queues are traditional message queues that provide a mechanism for you to consume, process, store or reroute data from Ably to your servers. Queues provide an asynchronous machine-to-machine protocol, with each machine assuming one, or both, roles: From 3f5d4ee55d09caaf321d727621fc0130c95e800d Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:23:57 +0000 Subject: [PATCH 07/15] Remove Stats dashboard page for new dashboard release Remove page and associated screenshot images. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../content/screenshots/dash/stats-chart.png | Bin 25278 -> 0 bytes .../content/screenshots/dash/stats-table.png | Bin 34867 -> 0 bytes src/pages/docs/platform/account/app/stats.mdx | 48 ------------------ 3 files changed, 48 deletions(-) delete mode 100644 src/images/content/screenshots/dash/stats-chart.png delete mode 100644 src/images/content/screenshots/dash/stats-table.png delete mode 100644 src/pages/docs/platform/account/app/stats.mdx diff --git a/src/images/content/screenshots/dash/stats-chart.png b/src/images/content/screenshots/dash/stats-chart.png deleted file mode 100644 index ddf94f80d754407813163406b9d50ec0bfda000d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25278 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 T - -The statistics table provides a summary of your app's messaging and data usage patterns over different time frames, including the previous month, the current month, and more granular insights from the last hour and last minute: - -![Your stats table](../../../../../images/content/screenshots/dash/stats-table.png) - -The following explains the statistics table metrics: - -| Metric | Description | -|--------|-------------| -| Messages (billable) | Total number of messages used. | -| Messages published (REST & Realtime) | Number of messages sent via REST and Realtime. | -| Messages received (Realtime) | Number of messages received. | -| Messages persisted (history) | Number of messages retrieved from history. | -| Messages retrieved (history) | Number of messages retrieved from history. | -| Presence events (REST & Realtime) | Number of presence-related events via REST and Realtime. | -| Webhook / Function | Number of messages transferred through functions and webhooks. | -| Ably Queue | Number of messages transferred through queues. | -| Firehose | Number of messages transferred through Firehose. | -| Push notifications | Number of push notifications sent. | -| Data transferred | Amount of data transferred, in bytes. | -| Peak connections | Highest number of concurrent connections. | -| Peak channels | Highest number of concurrent channels. | - - - -## Statistics chart - -The Stats page also includes a chart that visualizes your app's data over time: - -![Your stats chart](../../../../../images/content/screenshots/dash/stats-chart.png) - -The following explains how to use the statistics chart: - -* **Duration**: Define a specific time range for the statistics you want to view. This enables you to focus on periods of particular interest. For example, set the time range from "2024-06-17 00:00" to "2024-08-06 11:18" to analyze data within that period. -* **Zoom**: Use preset zoom options (1h, 8h, 24h, 7d, 1m, 6m, 1y, all) to adjust the chart's view to different periods, enabling you to analyze data at various granularities. From a966f1c272a1a5921530a277841e6ffd0e066e45 Mon Sep 17 00:00:00 2001 From: Mark Hulbert <39801222+m-hulbert@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:24:17 +0000 Subject: [PATCH 08/15] Rename User management to Team for new dashboard release Rename users.mdx to team.mdx with updated content and redirects. Update all references across pricing pages and nav. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/data/nav/platform.ts | 4 +- src/pages/docs/platform/account/team.mdx | 119 +++++++++++++++++ src/pages/docs/platform/account/users.mdx | 127 ------------------- src/pages/docs/platform/pricing/billing.mdx | 4 +- src/pages/docs/platform/pricing/faqs.mdx | 4 +- src/pages/docs/platform/pricing/free.mdx | 6 +- src/pages/docs/platform/pricing/pro.mdx | 8 +- src/pages/docs/platform/pricing/standard.mdx | 8 +- 8 files changed, 136 insertions(+), 144 deletions(-) create mode 100644 src/pages/docs/platform/account/team.mdx delete mode 100644 src/pages/docs/platform/account/users.mdx diff --git a/src/data/nav/platform.ts b/src/data/nav/platform.ts index f9367f96cc..ea6fe4f7aa 100644 --- a/src/data/nav/platform.ts +++ b/src/data/nav/platform.ts @@ -272,8 +272,8 @@ export default { index: true, }, { - name: 'User management', - link: '/docs/platform/account/users', + name: 'Team', + link: '/docs/platform/account/team', }, { name: 'Organizations', diff --git a/src/pages/docs/platform/account/team.mdx b/src/pages/docs/platform/account/team.mdx new file mode 100644 index 0000000000..83f9aa14a0 --- /dev/null +++ b/src/pages/docs/platform/account/team.mdx @@ -0,0 +1,119 @@ +--- +title: Team +meta_description: "Manage users, roles, and team access in your Ably account." +meta_keywords: "Ably team, user management, roles, permissions, SSO, SCIM, access management" +redirect_from: + - /docs/platform/account/teams + - /docs/platform/account/users + - /docs/account/users +--- + +Manage who has access to your Ably account and what they can do. Invite users, assign roles, and configure team-based access for Enterprise accounts. + +Manage users through your [account dashboard](https://ably.com/accounts/any/users). + +## User roles + +The user that creates an Ably account is assigned the account owner role. An account can only have a single account owner. Users can be assigned multiple roles: + +- Developer +- Billing +- Admin +- Owner + +| Permission | Developer | Billing | Admin | Owner | +|---|---|---|---|---| +| View all apps | ✓ | ✓ | ✓ | ✓ | +| View app configuration | ✓ | - | ✓ | ✓ | +| View app settings | ✓ | - | ✓ | ✓ | +| View [app statistics](/docs/metadata-stats/stats#app) | ✓ | ✓ | ✓ | ✓ | +| View [account statistics](/docs/metadata-stats/stats#account) | ✓ | ✓ | ✓ | ✓ | +| Configure own [2FA](/docs/platform/account/2fa) | ✓ | - | ✓ | ✓ | +| [Invite new users](#invite) | - | - | ✓ | ✓ | +| [Remove existing users](#remove) | - | - | ✓ | ✓ | +| Manage [API keys](/docs/auth) | - | - | ✓ | ✓ | +| Manage app configuration | - | - | ✓ | ✓ | +| Manage app settings | - | - | ✓ | ✓ | +| Create apps | - | - | ✓ | ✓ | +| Receive [limit notifications](/docs/platform/pricing/limits) | - | - | ✓ | ✓ | +| Configure [single sign-on](/docs/platform/account/sso) | - | - | - | ✓ | +| Enforce [2FA](/docs/platform/account/2fa#enforce) | - | - | - | ✓ | +| View invoices | - | ✓ | - | ✓ | +| Update billing information | - | ✓ | - | ✓ | +| Manage [account package](https://ably.com/pricing) | - | - | - | ✓ | + +### Change user roles + +You must be an account owner or admin to change user roles: + +1. Log in to your [account](https://ably.com/accounts/any/users). +2. Click the checkboxes corresponding to the roles you want to add or remove. + + + +## Invite a new user + +You must be an account owner or admin to invite new users: + +1. Log in to your [account](https://ably.com/accounts/any/users). +2. Click "Invite new user". +3. Enter the user's first name and email address, then click "Invite". +4. The user can then follow the instructions emailed to them to join your account. + + + +## Remove users from an account + +You must be an account owner or admin to remove users: + +1. Log in to your [account](https://ably.com/accounts/any/users). +2. Click "Remove" next to the user to remove from the account. +3. Confirm the action when prompted. + +## Delete your profile or leave an account + +1. Log in to your [account](https://ably.com/accounts/any). +2. Go to [My Settings](https://ably.com/users/edit). +3. [Disconnect SSO provider](#sso) if you use SSO to log in. +4. Scroll to "Want to delete your profile?" +5. Click "Start" to remove yourself from this account. + + + +## Close your account + +You must be the account owner and have downgraded to the Free package: + +1. Log in to your [Ably account](https://ably.com/accounts/any). +2. Ensure you are the [account owner](#roles). +3. [Downgrade your current package](/docs/platform/pricing/free#downgrade) to Free. + + + +4. [Disconnect SSO provider](#sso) if you use SSO to log in. +5. Go to the [Account Settings](https://ably.com/accounts/any/settings) page. +6. Select **Delete account** and follow the prompts. + + + +### Disconnect SSO provider + +If you use SSO to log in, you must set a password and disconnect your SSO provider before closing your account: + +1. Log in to your [account](https://ably.com/accounts/any). +2. Navigate to Account then [My Settings](https://ably.com/users/edit). +3. In the Password section, click "Change your password". +4. Click "Update my personal settings" to save the changes. +5. Scroll to the Login provider section. +6. Click "remove connection" next to the SSO provider you want to disconnect. +7. Return to the instructions above to [close your account](#close). diff --git a/src/pages/docs/platform/account/users.mdx b/src/pages/docs/platform/account/users.mdx deleted file mode 100644 index ad020cdaba..0000000000 --- a/src/pages/docs/platform/account/users.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: User management -meta_description: "Learn how to manage users, user roles, and the permissions associated with each role." -meta_keywords: "users, user management, admin, owner, permission" -redirect_from: - - /docs/account/users ---- - -The user that creates an Ably account is assigned the account owner role. An account owner has permission to undertake any action within an account, such as inviting new users. There are two other account roles that inherit a subset of an account owner's permissions. An account can only have a single account owner. - -## User roles - -Users can be assigned to the following roles. Each user may be assigned multiple roles: - -* Developer -* Billing -* Admin -* Owner - -User roles have the following permissions: - -| Permission | Developer | Billing | Admin | Owner | -|------------|-----------|---------|-------|-------| -| View all apps | ✓ | ✓ | ✓ | ✓ | -| View app configuration | ✓ | - | ✓ | ✓ | -| View app settings | ✓ | - | ✓ | ✓ | -| View [app statistics](/docs/metadata-stats/stats#app) | ✓ | ✓ | ✓ | ✓ | -| View [account statistics](/docs/metadata-stats/stats#account) | ✓ | ✓ | ✓ | ✓ | -| Configure own [2FA](/docs/platform/account/2fa) | ✓ | - | ✓ | ✓ | -| [Invite new users](#invite) | - | - | ✓ | ✓ | -| [Remove existing users](#remove) | - | - | ✓ | ✓ | -| Manage [API keys](/docs/auth) | - | - | ✓ | ✓ | -| Manage app configuration | - | - | ✓ | ✓ | -| Manage app settings | - | - | ✓ | ✓ | -| Create apps | - | - | ✓ | ✓ | -| Receive [limit notifications](/docs/platform/pricing/limits) | - | - | ✓ | ✓ | -| Configure [single sign-on](/docs/platform/account/sso) | - | - | - | ✓ | -| Enforce [2FA](/docs/platform/account/2fa#enforce) | - | - | - | ✓ | -| View invoices | - | ✓ | - | ✓ | -| Update billing information | - | ✓ | - | ✓ | -| Manage [account package](https://ably.com/pricing) | - | - | - | ✓ | - -### Change user roles - -The following steps add or remove roles from a user within an Ably account. You must be an account owner or admin to change user roles: - -1. Log in to your [account](https://ably.com/accounts/any). -2. Select Users from the account navigation dropdown. -3. Click the checkboxes corresponding to the roles you want to add or remove. - - - -## Invite a new user - -The following steps invite a new user to your account. You must be an account owner or admin to invite new users: - -1. Log in to your [account](https://ably.com/accounts/any). -2. Select Users from the account navigation dropdown. -3. Click Invite new user. -4. Enter the user's first name and email address, then click Invite. -5. The user can then follow the instructions emailed to them to join your account. - - - -## Remove users from an account - -The following steps remove a user from your account. You must be an account owner or admin to remove users: - -1. Log in to your [account](https://ably.com/accounts/any). -2. Select Users from the account navigation dropdown. -3. Click the Remove button next to the user to remove from the account. -4. Confirm the action when prompted. - -## Delete your profile or leave an account - -The following steps delete your profile or remove yourself from an Ably account: - -1. Log in to your [account](https://ably.com/accounts/any). -2. Go to [My Settings](https://ably.com/users/edit). -3. [Disconnect SSO provider](#sso) if you use SSO to log in. -4. Scroll to Want to delete your profile? -5. Click Start to remove yourself from this account. - - - -## Close your account - -To close your Ably account, you must be the account owner and have downgraded to the Free package. The following steps outline the process to close your account: - -1. Log in to your [Ably account](https://ably.com/accounts/any). -2. Confirm that you are the [account owner](https://ably.com/docs/platform/account/users#roles). -3. Ensure you are the account [owner](/docs/platform/account/users#roles). -4. [Downgrade your current package](/docs/platform/pricing/free#downgrade) to Free. - - - -5. [Disconnect SSO provider](#sso) if you use SSO to log in. -6. Go to your [My Settings](https://ably.com/users/edit) page. -7. Scroll to Want to delete your profile? - - - -8. Click Start to proceed with permanently closing your account. -9. On the proceeding Close Your Ably Account page, review the accounts for closure. -10. Click Close Account to permanently deactivate your account. - -### Disconnect SSO provider - -If you use SSO (Single Sign-On) to log in to your Ably account, you must first set a password and disconnect your SSO provider before closing your account. The self-service account closure process requires a password to authenticate the closure request. The following steps set a password and disconnect your SSO provider: - -1. Log in to your [account](https://ably.com/accounts/any) using your current SSO method (Google or GitHub). -2. Navigate to Account then [My Settings.](https://ably.com/users/edit) -3. In the Password section, click Change your password. -4. Click Update my personal settings to save the changes. -5. Scroll to the Login provider section. -6. Click remove connection next to the SSO provider/s you want to disconnect. -7. After completing these steps, return to the instructions above to [close your account](#close). diff --git a/src/pages/docs/platform/pricing/billing.mdx b/src/pages/docs/platform/pricing/billing.mdx index 19a6f9945a..48b9e18b6f 100644 --- a/src/pages/docs/platform/pricing/billing.mdx +++ b/src/pages/docs/platform/pricing/billing.mdx @@ -31,7 +31,7 @@ The following details will appear on your credit card or bank statement when pay To update your billing details: -1. Ensure you are the account owner or have the billing [role](/docs/platform/account/users). +1. Ensure you are the account owner or have the billing [role](/docs/platform/account/team). 2. Log in to your [account](https://ably.com/login) and select *Billing* from the *Account* menu. You can update your payment details and view your invoices in this screen. @@ -45,7 +45,7 @@ Billing alerts notify you by email when your monthly spending exceeds a set amou The following steps guide you through setting up billing alerts: * Log in to your Ably [account.](https://ably.com/login) -* In the [Create new alert](https://ably.com/accounts/any/package#billing-alerts-section) section, select the email address from the dropdown list where you want to receive the alert. The available choices depend on your [user role](/docs/platform/account/users#roles). +* In the [Create new alert](https://ably.com/accounts/any/package#billing-alerts-section) section, select the email address from the dropdown list where you want to receive the alert. The available choices depend on your [user role](/docs/platform/account/team#roles). * If you are an owner: Yourself and billing users associated with the account. * If you are a user with a billing role: Yourself only. * Enter a value greater than your base package fee in the *Amount* field. This amount sets the threshold at which you will receive a notification. diff --git a/src/pages/docs/platform/pricing/faqs.mdx b/src/pages/docs/platform/pricing/faqs.mdx index 63c9765d42..dd08b3d1c4 100644 --- a/src/pages/docs/platform/pricing/faqs.mdx +++ b/src/pages/docs/platform/pricing/faqs.mdx @@ -152,7 +152,7 @@ Once production-level scale is needed, there's a simple path to upgrade to a sub Yes. -1. Ensure you are the [account owner](/docs/platform/account/users). +1. Ensure you are the [account owner](/docs/platform/account/team). 2. Log in to your [account](https://ably.com/login) and select Billing from the Account menu. 3. Select the package to upgrade or downgrade to. @@ -160,4 +160,4 @@ Upgrades take effect immediately, whilst downgrades will take effect at the begi ### Can I close my account at any time? -Yes. You can [close your account](/docs/platform/account/users#close) at any time by downgrading to the Free package. +Yes. You can [close your account](/docs/platform/account/team#close) at any time by downgrading to the Free package. diff --git a/src/pages/docs/platform/pricing/free.mdx b/src/pages/docs/platform/pricing/free.mdx index b685088efe..68a2b74494 100644 --- a/src/pages/docs/platform/pricing/free.mdx +++ b/src/pages/docs/platform/pricing/free.mdx @@ -38,7 +38,7 @@ Free package support includes Ably's best effort Service Level Objective (SLO) a To upgrade your account from a Free package to a Standard or Pro package: -1. Ensure you are the [account owner](/docs/platform/account/users). +1. Ensure you are the [account owner](/docs/platform/account/team). 2. Log in to your [account](https://ably.com/login) and select **Billing** from the **Account** menu. 3. Choose the plan you wish to upgrade to and follow the instructions. Upgrades take effect immediately. @@ -54,7 +54,7 @@ To upgrade your account from a Free package to an [Enterprise package](/docs/pla To downgrade your account to a Free package: -1. Ensure you are the [account owner](/docs/platform/account/users). +1. Ensure you are the [account owner](/docs/platform/account/team). 2. Log in to your [account](https://ably.com/login) and select **Billing** from the **Account** menu. 3. Click the **Downgrade** button. @@ -62,7 +62,7 @@ If you downgrade to the [Free package](/docs/platform/pricing/free), you will re ## Close your account -If you're using the Free package, you can [close your account](/docs/platform/account/users#close) at any time. +If you're using the Free package, you can [close your account](/docs/platform/account/team#close) at any time.