---
title: "Signup Ops Analytics"
method: GET
path: "/api/v1/admin/signup/ops/analytics"
tags: ["Admin APIs", "signup"]
---

# Signup Ops Analytics

`GET /api/v1/admin/signup/ops/analytics`

## Query parameters

- `date_from` string, date, nullable — Inclusive start date (UTC). Omit for no lower bound on signup created_at.
- `date_to` string, date, nullable — Inclusive end calendar day (UTC). Omit to use current time as the upper bound.
- `bucket` string — day, week, or month
- `statuses` string[], nullable — Filter by one or more signup statuses
- `selected_plan_ids` string[], nullable — Filter by one or more plan ids
- `importances` string[], nullable — Filter by one or more importance values
- `tracking_statuses` string[], nullable — Filter by one or more tracking statuses
- `subscription_periods` string[], nullable — Filter by one or more billing cycles
- `plan_subscription_pairs` string[], nullable — Filter by plan + billing cycle pairs (OR). Each value is plan_id:period (e.g. professional:monthly). When set, selected_plan_ids and subscription_periods are ignored.
- `verification_failure_any` boolean, nullable — If true, restrict to signups with at least one email_verification_failed event.
- `verification_error_codes` string[], nullable — Restrict to signups whose latest email_verification_failed error_code is one of these (OR). Repeat query param.
- `incomplete_segments` string[], nullable — Restrict analytics to incomplete buckets matching the Signup Lifecycle chart: `users_stuck` (non-completed with verification/payment/provisioning failure events), `users_opted_out` (non-completed without those). Omit or pass both for all non-completed.
- `exclude_internal` boolean — When true (default), omit signups whose email domain is in internal_email_domains or contains internal_email_domain_substring in the domain (see /signup/ops/meta).

## Response `200`

Successful Response

- SignupOpsAnalyticsResponse
  - `summary` SignupOpsAnalyticsSummary, required
    - `total_in_range` integer, required
    - `completed` integer, required
    - `not_completed` integer, required
    - `users_stuck` integer, required — Non-completed signups that are stuck: at least one email_verification_failed, payment_failed, or provisioning_failed event, or latest status provisioning_in_progress with the last event older than 10 minutes (current snapshot within filters).
    - `users_opted_out` integer, required — Non-completed signups that are not stuck: no failure events and not long-running provisioning_in_progress (abandoned / in-progress without failure or hung provisioning).
    - `success_rate` number, nullable — completed / (completed + users_stuck) when that sum > 0; opted-out users excluded
  - `status_distribution` SignupOpsStatusCount[], required
    - `status` string, required
    - `count` integer, required
  - `verification_failures_by_code` SignupOpsVerificationFailureBucket[], required — Failure events (verification, payment, provisioning) in range, grouped by error code or by event type when meta has no error_code.
    - `error_code` string, required
    - `count` integer, required
  - `verification_outcome_options` SignupOpsVerificationFailureBucket[] — Failure codes/types in range for filter UI (same date/status/plan/tracking as request, but not restricted by failure-code selections).
    - `error_code` string, required
    - `count` integer, required
  - `incomplete_by_status` SignupOpsStatusCount[], required
    - `status` string, required
    - `count` integer, required
  - `time_series` SignupOpsTimeSeriesPoint[], required
    - `bucket_date` string, date, required
    - `signups_created` integer
    - `signups_completed` integer
    - `verification_failures` integer — Count of email_verification_failed, payment_failed, and provisioning_failed events in this bucket.
    - `users_stuck` integer — Non-completed signups created in this bucket that are stuck (failure events or provisioning_in_progress beyond 10 minutes on latest event; current snapshot).
    - `users_opted_out` integer — Non-completed signups created in this bucket that are not stuck (see summary).
  - `bucket` string

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/carbonarc/apis/carbon-arc-client-admin-api.md) · [All operations](https://skmtc.net/carbonarc/apis/carbon-arc-client-admin-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/carbonarc/carbon-arc-client-admin-api/revisions/a8ca30023371/schema)
