{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Ably Account Statistics Message",
  "type": "object",
  "properties": {
    "accountId": {
      "type": "string",
      "description": "The ID of the Ably account the statistics are for."
    },
    "intervalId": {
      "type": "string",
      "description": "time period for statistics in date-time format yyyy-mm-dd:hh:mm:ss"
    },
    "unit": {
      "type": "string",
      "description": "Unit of time for these statistics from the intervalId forwards.",
      "enum": ["minute", "hour", "day", "month"]
    },
    "schema": {
      "type": "string",
      "description": "URI to this schema."
    },
    "entries": {
      "type": "object",
      "description": "Statistics entries.",
      "properties": {
        "messages.all.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of successfully-sent messages, summed over all message types and transports."
        },
        "messages.all.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total message size of all messages successfully sent, summed over all message types and transports."
        },
        "messages.all.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed message size, excluding delta compression https://ably.com/docs/channels/options/deltas."
        },
        "messages.all.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejected by an external integration target, or a service issue on Ably's side)"
        },
        "messages.all.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.all.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total message count, excluding presence messages."
        },
        "messages.all.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total message size, excluding presence messages."
        },
        "messages.all.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejected by an external integration target, or a service issue on Ably's side)"
        },
        "messages.all.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejected by an external integration target, or a service issue on Ably's side)"
        },
        "messages.all.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages excluding presence messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.all.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total presence message count."
        },
        "messages.all.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total presence message size."
        },
        "messages.all.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas."
        },
        "messages.all.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of presence messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejected by an external integration target, or a service issue on Ably's side)"
        },
        "messages.all.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of presence messages excluding presence messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.realtime.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound realtime message count (received by the Ably service from clients)."
        },
        "messages.inbound.realtime.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound realtime message size (received by the Ably service from clients)."
        },
        "messages.inbound.realtime.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound realtime message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients."
        },
        "messages.inbound.realtime.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound realtime messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.realtime.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound realtime messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.realtime.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound realtime message count (received by the Ably service from clients), excluding presence messages."
        },
        "messages.inbound.realtime.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound realtime message size (received by the Ably service from clients), excluding presence messages."
        },
        "messages.inbound.realtime.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound realtime message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients, excluding presence messages."
        },
        "messages.inbound.realtime.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound realtime messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejected by an external integration target, or a service issue on Ably's side)"
        },
        "messages.inbound.realtime.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound realtime messages excluding presence messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.realtime.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound realtime presence message count (received by the Ably service from clients)."
        },
        "messages.inbound.realtime.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound realtime presence message size (received by the Ably service from clients)."
        },
        "messages.inbound.realtime.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound realtime presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients."
        },
        "messages.inbound.realtime.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound realtime presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.realtime.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound realtime presence messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.rest.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound REST message count (received by the Ably service from clients)."
        },
        "messages.inbound.rest.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound REST message size (received by the Ably service from clients)."
        },
        "messages.inbound.rest.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound REST message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients."
        },
        "messages.inbound.rest.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound REST messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.rest.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound REST messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.rest.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound REST message count (received by the Ably service from clients), excluding presence messages."
        },
        "messages.inbound.rest.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound REST message size (received by the Ably service from clients), excluding presence messages."
        },
        "messages.inbound.rest.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound REST message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients, excluding presence messages."
        },
        "messages.inbound.rest.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound REST presence message count (received by the Ably service from clients)."
        },
        "messages.inbound.rest.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound REST presence message size (received by the Ably service from clients)."
        },
        "messages.inbound.rest.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound REST presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients."
        },
        "messages.inbound.rest.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound REST presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.rest.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound REST presence messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.all.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound message count (received by the Ably service from clients)."
        },
        "messages.inbound.all.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound message size (received by the Ably service from clients)."
        },
        "messages.inbound.all.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients."
        },
        "messages.inbound.all.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.all.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.inbound.all.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound message count (received by the Ably service from clients), excluding presence messages."
        },
        "messages.inbound.all.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound message size (received by the Ably service from clients), excluding presence messages."
        },
        "messages.inbound.all.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients, excluding presence messages."
        },
        "messages.inbound.all.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.all.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound presence message count (received by the Ably service from clients)."
        },
        "messages.inbound.all.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total inbound presence message size (received by the Ably service from clients)."
        },
        "messages.inbound.all.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed inbound presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, received by the Ably service from clients."
        },
        "messages.inbound.all.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.inbound.all.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of inbound presence messages that were refused by Ably (eg due to a rate limit, a malformed message, or incorrect permissions on the client's part)"
        },
        "messages.outbound.realtime.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound realtime message count (sent from the Ably service to clients)."
        },
        "messages.outbound.realtime.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound realtime message size (sent from the Ably service to clients)."
        },
        "messages.outbound.realtime.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound realtime message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients)."
        },
        "messages.outbound.realtime.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound realtime messages that failed (which did not succeed for some reason other than Ably rejecting it, such as being rejected by an external integration target)"
        },
        "messages.outbound.realtime.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound realtime messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.realtime.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound realtime message count (sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.realtime.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound realtime message size (sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.realtime.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound realtime message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.realtime.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound realtime messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.outbound.realtime.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound realtime messages excluding presence messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.realtime.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound realtime presence message count (sent from the Ably service to clients)."
        },
        "messages.outbound.realtime.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound realtime presence message size (sent from the Ably service to clients)."
        },
        "messages.outbound.realtime.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound realtime presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients)."
        },
        "messages.outbound.realtime.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound realtime presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as a service issue on Ably's side)"
        },
        "messages.outbound.realtime.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound realtime presence messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.rest.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound REST message count (sent from the Ably service to clients)."
        },
        "messages.outbound.rest.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound REST message size (sent from the Ably service to clients)."
        },
        "messages.outbound.rest.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound REST message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients)."
        },
        "messages.outbound.rest.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound REST message count (sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.rest.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound REST message size (sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.rest.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound REST message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.rest.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound REST presence message count (sent from the Ably service to clients)."
        },
        "messages.outbound.rest.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound REST presence message size (sent from the Ably service to clients)."
        },
        "messages.outbound.rest.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound REST presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients)."
        },
        "messages.outbound.webhook.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound webhook message count (sent from the Ably service to clients using webhooks)."
        },
        "messages.outbound.webhook.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound webhook message size (sent from the Ably service to clients using webhooks)."
        },
        "messages.outbound.webhook.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound webhook message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients using webhooks)."
        },
        "messages.outbound.webhook.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound webhook messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, in particular rejection by an external integration target)"
        },
        "messages.outbound.webhook.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound webhook messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.webhook.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound webhook message count (sent from the Ably service to clients using webhooks), excluding presence messages."
        },
        "messages.outbound.webhook.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound webhook message size (sent from the Ably service to clients using webhooks), excluding presence messages."
        },
        "messages.outbound.webhook.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound webhook message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients using webhooks), excluding presence messages."
        },
        "messages.outbound.webhook.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound webhook messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, in particular rejection by an external integration target)"
        },
        "messages.outbound.webhook.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound webhook messages excluding presence messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.webhook.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound webhook presence message count (sent from the Ably service to clients using webhooks)."
        },
        "messages.outbound.webhook.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound webhook presence message size (sent from the Ably service to clients using webhooks)."
        },
        "messages.outbound.webhook.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound webhook presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients using webhooks)."
        },
        "messages.outbound.webhook.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound webhook presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, in particular rejection by an external integration target)"
        },
        "messages.outbound.webhook.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound webhook presence messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.sharedQueue.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Ably Queue message count (sent from the Ably service to an Ably Queue using an integration rule)."
        },
        "messages.outbound.sharedQueue.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Ably Queue message size (sent from the Ably service to an Ably Queue using an integration rule)."
        },
        "messages.outbound.sharedQueue.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Ably Queue message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to an Ably Queue using an integration rule)."
        },
        "messages.outbound.sharedQueue.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Ably Queue messages that failed (which were rejected by RabbitMQ for some reason)"
        },
        "messages.outbound.sharedQueue.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Ably Queue messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.sharedQueue.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Ably Queue message count (sent from the Ably service to an Ably Queue using an integration rule), excluding presence messages."
        },
        "messages.outbound.sharedQueue.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Ably Queue message size (sent from the Ably service to an Ably Queue using an integration rule), excluding presence messages."
        },
        "messages.outbound.sharedQueue.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Ably Queue message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to an Ably Queue using an integration rule), excluding presence messages."
        },
        "messages.outbound.sharedQueue.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Ably Queue messages excluding presence messages that failed (which were rejected by RabbitMQ for some reason)"
        },
        "messages.outbound.sharedQueue.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Ably Queue messages excluding presence messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.sharedQueue.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Ably Queue presence message count (sent from the Ably service to an Ably Queue using an integration rule)."
        },
        "messages.outbound.sharedQueue.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Ably Queue presence message size (sent from the Ably service to an Ably Queue using an integration rule)."
        },
        "messages.outbound.sharedQueue.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Ably Queue presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to an Ably Queue using an integration rule)."
        },
        "messages.outbound.sharedQueue.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Ably Queue presence messages that failed (which were rejected by RabbitMQ for some reason)"
        },
        "messages.outbound.sharedQueue.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Ably Queue presence messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.externalQueue.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Firehose message count (sent from the Ably service to some external target using a Firehose integration rule)."
        },
        "messages.outbound.externalQueue.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Firehose message size (sent from the Ably service to some external target using a Firehose integration rule)."
        },
        "messages.outbound.externalQueue.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Firehose message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to some external target using a Firehose integration rule)."
        },
        "messages.outbound.externalQueue.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Firehose messages that failed (which were rejected by the external integration target for some reason)"
        },
        "messages.outbound.externalQueue.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Firehose messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.externalQueue.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Firehose message count (sent from the Ably service to some external target using a Firehose integration rule), excluding presence messages."
        },
        "messages.outbound.externalQueue.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Firehose message size (sent from the Ably service to some external target using a Firehose integration rule), excluding presence messages."
        },
        "messages.outbound.externalQueue.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Firehose message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to some external target using a Firehose integration rule), excluding presence messages."
        },
        "messages.outbound.externalQueue.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Firehose messages excluding presence messages that failed (which were rejected by the external integration target for some reason)"
        },
        "messages.outbound.externalQueue.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Firehose messages excluding presence messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.externalQueue.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Firehose presence message count (sent from the Ably service to some external target using a Firehose integration rule)."
        },
        "messages.outbound.externalQueue.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Firehose presence message size (sent from the Ably service to some external target using a Firehose integration rule)."
        },
        "messages.outbound.externalQueue.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Firehose presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to some external target using a Firehose integration rule)."
        },
        "messages.outbound.externalQueue.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Firehose presence messages that failed (which were rejected by the external integration target for some reason)"
        },
        "messages.outbound.externalQueue.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Firehose presence messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.httpEvent.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total messages sent by a HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "messages.outbound.httpEvent.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total size of messages sent by a HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "messages.outbound.httpEvent.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed size of messages sent by a HTTP trigger, excluding delta compression https://ably.com/docs/channels/options/deltas, typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "messages.outbound.httpEvent.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages sent by a HTTP trigger that failed (which were rejected by the external endpoint for some reason)"
        },
        "messages.outbound.httpEvent.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages sent by a HTTP trigger that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.httpEvent.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total messages sent by a HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions), excluding presence messages."
        },
        "messages.outbound.httpEvent.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total size of messages sent by a HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions), excluding presence messages."
        },
        "messages.outbound.httpEvent.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed size of messages sent by a HTTP trigger, excluding delta compression https://ably.com/docs/channels/options/deltas, typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions), excluding presence messages."
        },
        "messages.outbound.httpEvent.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages sent by a HTTP trigger excluding presence messages that failed (which were rejected by the external endpoint for some reason)"
        },
        "messages.outbound.httpEvent.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages sent by a HTTP trigger excluding presence messages that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.httpEvent.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total presence messages sent by a HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "messages.outbound.httpEvent.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total size of presence messages sent by a HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "messages.outbound.httpEvent.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed size of presence messages sent by a HTTP trigger, excluding delta compression https://ably.com/docs/channels/options/deltas, typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "messages.outbound.httpEvent.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of presence messages sent by a HTTP trigger that failed (which were rejected by the external endpoint for some reason)"
        },
        "messages.outbound.httpEvent.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of presence messages sent by a HTTP trigger that Ably refused to send (generally due to a rate limit)"
        },
        "messages.outbound.push.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Push message count (pushed to devices via a Push Notifications transport such as FCM or APNS)."
        },
        "messages.outbound.push.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Push message size (pushed to devices via a Push Notifications transport such as FCM or APNS)."
        },
        "messages.outbound.push.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Push message size, excluding delta compression https://ably.com/docs/channels/options/deltas, pushed to devices via a Push Notifications transport such as FCM or APNS)."
        },
        "messages.outbound.push.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejection by APNS or FCM, or a service issue on Ably's side)"
        },
        "messages.outbound.push.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push messages that were refused by Ably (eg due to a rate limit)"
        },
        "messages.outbound.push.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Push message count (pushed to devices via a Push Notifications transport such as FCM or APNS), excluding presence messages."
        },
        "messages.outbound.push.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Push message size (pushed to devices via a Push Notifications transport such as FCM or APNS), excluding presence messages."
        },
        "messages.outbound.push.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Push message size, excluding delta compression https://ably.com/docs/channels/options/deltas, pushed to devices via a Push Notifications transport such as FCM or APNS), excluding presence messages."
        },
        "messages.outbound.push.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejection by APNS or FCM, or a service issue on Ably's side)"
        },
        "messages.outbound.push.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push messages excluding presence messages that were refused by Ably (eg due to a rate limit)"
        },
        "messages.outbound.push.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Push presence message count (pushed to devices via a Push Notifications transport such as FCM or APNS)."
        },
        "messages.outbound.push.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total Push presence message size (pushed to devices via a Push Notifications transport such as FCM or APNS)."
        },
        "messages.outbound.push.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed Push presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, pushed to devices via a Push Notifications transport such as FCM or APNS)."
        },
        "messages.outbound.push.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejection by APNS or FCM, or a service issue on Ably's side)"
        },
        "messages.outbound.push.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push presence messages that were refused by Ably (eg due to a rate limit)"
        },
        "messages.outbound.all.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound message count (sent from the Ably service to clients)."
        },
        "messages.outbound.all.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound message size (sent from the Ably service to clients)."
        },
        "messages.outbound.all.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients)."
        },
        "messages.outbound.all.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejection by an external integration target, or a service issue on Ably's side)"
        },
        "messages.outbound.all.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.all.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound message count (sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.all.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound message size (sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.all.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients), excluding presence messages."
        },
        "messages.outbound.all.messages.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound messages excluding presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejection by an external integration target, or a service issue on Ably's side)"
        },
        "messages.outbound.all.messages.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound messages excluding presence messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.outbound.all.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound presence message count (sent from the Ably service to clients)."
        },
        "messages.outbound.all.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total outbound presence message size (sent from the Ably service to clients)."
        },
        "messages.outbound.all.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed outbound presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas, sent from the Ably service to clients)."
        },
        "messages.outbound.all.presence.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound presence messages that failed (which did not succeed for some reason other than Ably explicitly refusing it, such as rejection by an external integration target, or a service issue on Ably's side)"
        },
        "messages.outbound.all.presence.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of outbound presence messages that were refused by Ably (generally due to rate limits)"
        },
        "messages.persisted.all.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total persisted message count based on configured channel rules."
        },
        "messages.persisted.all.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total persisted message size based on configured channel rules."
        },
        "messages.persisted.all.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed persisted message size, excluding delta compression https://ably.com/docs/channels/options/deltas based on configured channel rules."
        },
        "messages.persisted.messages.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total persisted message count based on configured channel rules, excluding presence messages."
        },
        "messages.persisted.messages.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total persisted message size based on configured channel rules, excluding presence messages."
        },
        "messages.persisted.messages.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed persisted message size, excluding delta compression https://ably.com/docs/channels/options/deltas based on configured channel rules, excluding presence messages."
        },
        "messages.persisted.presence.count": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total persisted presence message count based on configured channel rules."
        },
        "messages.persisted.presence.data": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total persisted presence message size based on configured channel rules."
        },
        "messages.persisted.presence.uncompressedData": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total uncompressed persisted presence message size, excluding delta compression https://ably.com/docs/channels/options/deltas based on configured channel rules."
        },
        "messages.processed.delta.xdelta.succeeded": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of message deltas successfully generated (using xdelta, currently the only supported codec), see https://ably.com/docs/channels/options/deltas."
        },
        "messages.processed.delta.xdelta.skipped": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages on channels where delta generation was enabled but where Ably skipped delta generation, eg because the payload was too small to make it worthwhile, see https://ably.com/docs/channels/options/deltas."
        },
        "messages.processed.delta.xdelta.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of messages on channels where delta generation was attempted but where a delta was not successfully generated, so Ably just broadcasted the original, see https://ably.com/docs/channels/options/deltas."
        },
        "connections.all.peak": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak connection count."
        },
        "connections.all.min": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Minimum connection count."
        },
        "connections.all.mean": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Mean connection count."
        },
        "connections.all.opened": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of connections opened."
        },
        "connections.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of connections refused, eg for breaching the connection creation rate limit."
        },
        "channels.peak": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak active channel count."
        },
        "channels.min": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Minimum active channel count."
        },
        "channels.mean": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Mean active channel count."
        },
        "channels.opened": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of channels opened."
        },
        "channels.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of channel creation rejected for breaching the channel creation rate limit."
        },
        "apiRequests.all.succeeded": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of requests made."
        },
        "apiRequests.all.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of failed requests."
        },
        "apiRequests.all.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of refused requests (due to account limits)."
        },
        "apiRequests.tokenRequests.succeeded": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of token requests made."
        },
        "apiRequests.tokenRequests.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of failed token requests."
        },
        "apiRequests.tokenRequests.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of refused token requests (due to permissions or rate limiting)."
        },
        "apiRequests.push.succeeded": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push requests made."
        },
        "apiRequests.push.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of failed Push requests."
        },
        "apiRequests.push.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of refused Push requests."
        },
        "apiRequests.other.succeeded": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of requests made, excluding token and Push requests."
        },
        "apiRequests.other.failed": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of failed requests, excluding token and Push requests."
        },
        "apiRequests.other.refused": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of refused requests, excluding token and Push requests."
        },
        "push.channelMessages": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of channel messages published over Ably containing a push payload (each of which may trigger notifications to be sent to a device with a matching registered push subscription)."
        },
        "push.notifications.delivered.fcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of successfully-delivered Push notifications over the FCM transport."
        },
        "push.notifications.delivered.gcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of successfully-delivered Push notifications over the GCM transport."
        },
        "push.notifications.delivered.apns": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of successfully-delivered Push notifications over the APNS transport."
        },
        "push.notifications.delivered.web": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of successfully-delivered Push notifications over the web transport."
        },
        "push.notifications.delivered.total": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of successfully-delivered Push notifications over any transport."
        },
        "push.notifications.refused.retriable.fcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver to FCM but were refused with a retriable error (so which Ably will attempt to retry)."
        },
        "push.notifications.refused.retriable.gcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver to GCM but were refused with a retriable error (so which Ably will attempt to retry)."
        },
        "push.notifications.refused.retriable.apns": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver to APNS but were refused with a retriable error (so which Ably will attempt to retry)."
        },
        "push.notifications.refused.retriable.web": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver over a web push transport but were refused with a retriable error (so which Ably will attempt to retry)."
        },
        "push.notifications.refused.retriable.total": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver but were refused with a retriable error (so which Ably will attempt to retry)."
        },
        "push.notifications.refused.final.fcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver to FCM but were refused with a non-retriable error."
        },
        "push.notifications.refused.final.gcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver to GCM but were refused with a non-retriable error."
        },
        "push.notifications.refused.final.apns": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver to APNS but were refused with a non-retriable error."
        },
        "push.notifications.refused.final.web": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver over a web push transport but were refused with a non-retriable error."
        },
        "push.notifications.refused.final.total": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of Push notifications that Ably attempted to deliver but were refused with a non-retriable error."
        },
        "push.notifications.all.fcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of attempts (whatever the outcome) to deliver Push notifications over the FCM transport."
        },
        "push.notifications.all.gcm": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of attempts (whatever the outcome) to deliver Push notifications over the GCM transport."
        },
        "push.notifications.all.apns": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of attempts (whatever the outcome) to deliver Push notifications over the APNS transport."
        },
        "push.notifications.all.web": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of attempts (whatever the outcome) to deliver Push notifications over the web transport."
        },
        "push.notifications.all.total": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of attempts (whatever the outcome) to deliver Push notifications over any transport."
        },
        "push.directPublishes": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Total number of direct push publishes (that is, notifications triggered by a request to /push/publish, not a channel message with a push payload)."
        },
        "peakRates.messages": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of messages."
        },
        "peakRates.apiRequests": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of api requests."
        },
        "peakRates.tokenRequests": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of token requests."
        },
        "peakRates.connections": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of opened connections."
        },
        "peakRates.channels": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of channels activations."
        },
        "peakRates.reactor.httpEvent": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of events sent to an HTTP trigger (typically a serverless function on a service such as AWS Lambda, Google Cloud Functions, or Azure Functions)."
        },
        "peakRates.reactor.amqp": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of events sent to an Ably Queue using an integration rule."
        },
        "peakRates.reactor.externalQueue": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of events sent to an external endpoint using a Firehose integration rule."
        },
        "peakRates.reactor.webhook": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of events sent to webhook configured through an integration rule."
        },
        "peakRates.pushRequests": {
          "type": "number",
          "inclusiveMinimum": 0,
          "description": "Peak rate of push API requests."
        }
      }
    }
  },
  "additionalProperties": false,
  "required": ["intervalId", "unit", "schema", "entries"]
}
