{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/customdomain-ai/json-schema/customdomain-ai-connect-analytics-schema.json",
  "title": "ConnectAnalytics",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/customdomain-ai-openapi.yml#/components/schemas/ConnectAnalytics",
  "type": "object",
  "required": [
    "window",
    "widget",
    "connections",
    "daily",
    "truncated"
  ],
  "properties": {
    "window": {
      "type": "object",
      "properties": {
        "from": {
          "type": "string",
          "format": "date-time"
        },
        "to": {
          "type": "string",
          "format": "date-time"
        },
        "days": {
          "type": "integer"
        },
        "application_id": {
          "type": "string"
        }
      }
    },
    "widget": {
      "type": "object",
      "properties": {
        "sessions": {
          "type": "integer"
        },
        "entered_domain": {
          "type": "integer"
        },
        "analyzed": {
          "type": "integer"
        },
        "offered_automatic": {
          "type": "integer"
        },
        "shown_manual": {
          "type": "integer"
        },
        "succeeded": {
          "type": "integer"
        },
        "succeeded_automatic": {
          "type": "integer"
        },
        "errored": {
          "type": "integer"
        },
        "conversion_rate": {
          "type": "number"
        },
        "median_seconds_to_success": {
          "type": "integer"
        },
        "drop_off": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AnalyticsCount"
          }
        },
        "errors": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AnalyticsCount"
          }
        },
        "providers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "provider": {
                "type": "string"
              },
              "sessions": {
                "type": "integer"
              },
              "succeeded": {
                "type": "integer"
              },
              "automatic": {
                "type": "integer"
              }
            }
          }
        },
        "domain_kinds": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string"
              },
              "sessions": {
                "type": "integer"
              },
              "succeeded": {
                "type": "integer"
              }
            }
          }
        }
      }
    },
    "connections": {
      "type": "object",
      "properties": {
        "total": {
          "type": "integer"
        },
        "live": {
          "type": "integer"
        },
        "pending": {
          "type": "integer"
        },
        "propagating": {
          "type": "integer"
        },
        "failed": {
          "type": "integer"
        },
        "live_rate": {
          "type": "number"
        },
        "median_seconds_to_live": {
          "type": "integer"
        },
        "by_provider": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "provider": {
                "type": "string"
              },
              "total": {
                "type": "integer"
              },
              "live": {
                "type": "integer"
              },
              "pending": {
                "type": "integer"
              },
              "failed": {
                "type": "integer"
              },
              "top_stuck": {
                "type": "string",
                "description": "The most common reason this provider's not-live domains are stuck (a key of stuck). Absent when none are."
              },
              "top_stuck_count": {
                "type": "integer"
              },
              "median_seconds_to_live": {
                "type": "integer",
                "description": "Median over this provider's live domains; 0 when none."
              }
            }
          }
        },
        "by_method": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AnalyticsGroup"
          }
        },
        "by_kind": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AnalyticsGroup"
          }
        },
        "stuck": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AnalyticsCount"
          }
        },
        "time_to_live": {
          "type": "array",
          "description": "Domains that went live by how long they took from being added: under_5m, 5m_to_1h, 1h_to_1d, over_1d, always all four in that order.",
          "items": {
            "$ref": "#/$defs/AnalyticsCount"
          }
        }
      }
    },
    "daily": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string"
          },
          "sessions": {
            "type": "integer"
          },
          "succeeded": {
            "type": "integer"
          },
          "created": {
            "type": "integer"
          },
          "went_live": {
            "type": "integer"
          }
        }
      }
    },
    "audience": {
      "type": "object",
      "description": "Who opened the widget, from the session each widget open records (sessions from before this was recorded have none). Each list counts sessions, how many reached a finish screen (`succeeded`) and how many of their domains are live (`went_live`). Countries, browsers and systems list the eight busiest, then `other`; `unknown` is last.",
      "properties": {
        "sessions": {
          "type": "integer"
        },
        "devices": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AudienceRow"
          },
          "description": "desktop, mobile, tablet, bot or unknown."
        },
        "countries": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AudienceRow"
          },
          "description": "ISO 3166-1 alpha-2 codes."
        },
        "browsers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AudienceRow"
          }
        },
        "systems": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AudienceRow"
          }
        },
        "embeds": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AudienceRow"
          },
          "description": "embedded, modal or unknown."
        }
      }
    },
    "install": {
      "type": "object",
      "description": "Whether the widget has been seen in the builder's own product, per application, from the session each widget open records. A session is a console test when its token's end user is `console:<member>` (the console's Try it live and welcome domain step); every other session is the product's. The console's design preview opens no session. Counts are sessions. `application_id` narrows it like the rest; an application with no session is not listed.",
      "required": [
        "applications"
      ],
      "properties": {
        "applications": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "application_id": {
                "type": "string"
              },
              "product_sessions": {
                "type": "integer",
                "description": "Every session of the product ever recorded."
              },
              "test_sessions": {
                "type": "integer",
                "description": "Every console test session ever recorded."
              },
              "window_product_sessions": {
                "type": "integer",
                "description": "The product sessions that started inside the window."
              },
              "window_test_sessions": {
                "type": "integer",
                "description": "The console test sessions that started inside the window."
              },
              "last_product_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "description": "When a product session last had an event; null when none ever did."
              },
              "last_product_host": {
                "type": "string",
                "description": "The page origin (scheme, host, port, never a path) the newest product session reported; empty when it reported none."
              },
              "last_test_at": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          }
        }
      }
    },
    "secure_sign_in": {
      "type": "object",
      "description": "The cloud browser sessions started in the window. `failures` is keyed by the failure taxonomy (bot_wall, captcha, region_blocked, vendor_error, user_cancel and the rest); `proxy_sensitive` marks the four a proxy in the customer's country could change. `proxy` has one row for the sessions without a vendor proxy and one for those with one, when there were any.",
      "properties": {
        "sessions": {
          "type": "integer"
        },
        "signed_in": {
          "type": "integer"
        },
        "done": {
          "type": "integer"
        },
        "done_manual": {
          "type": "integer"
        },
        "sign_in_rate": {
          "type": "number"
        },
        "average_seconds_to_sign_in": {
          "type": "integer"
        },
        "average_seconds_to_done": {
          "type": "integer"
        },
        "providers": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "provider": {
                "type": "string"
              },
              "sessions": {
                "type": "integer"
              },
              "signed_in": {
                "type": "integer"
              },
              "planned": {
                "type": "integer"
              },
              "applied": {
                "type": "integer"
              },
              "done": {
                "type": "integer"
              },
              "done_manual": {
                "type": "integer"
              }
            }
          }
        },
        "failures": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "key": {
                "type": "string"
              },
              "sessions": {
                "type": "integer"
              },
              "with_proxy": {
                "type": "integer"
              },
              "without_proxy": {
                "type": "integer"
              },
              "proxy_sensitive": {
                "type": "boolean"
              }
            }
          }
        },
        "proxy": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "proxy": {
                "type": "boolean"
              },
              "sessions": {
                "type": "integer"
              },
              "signed_in": {
                "type": "integer"
              },
              "done": {
                "type": "integer"
              },
              "blocked": {
                "type": "integer",
                "description": "Ended in bot_wall, captcha, region_blocked or vendor_error."
              },
              "sign_in_rate": {
                "type": "number"
              },
              "blocked_rate": {
                "type": "number"
              }
            }
          }
        }
      }
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "$defs": {
    "AnalyticsCount": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "count": {
          "type": "integer"
        }
      }
    },
    "AnalyticsGroup": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "total": {
          "type": "integer"
        },
        "live": {
          "type": "integer"
        },
        "median_seconds_to_live": {
          "type": "integer",
          "description": "Median over this group's live domains; 0 when none."
        }
      }
    },
    "AudienceRow": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "sessions": {
          "type": "integer"
        },
        "succeeded": {
          "type": "integer"
        },
        "went_live": {
          "type": "integer"
        }
      }
    }
  }
}