---
title: "Admin Opted In Stats"
method: GET
path: "/v1/admin/opted-in/stats"
---

# Admin Opted In Stats

`GET /v1/admin/opted-in/stats`

## Request

- Base URL: `https://api.storyflo.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.storyflo.com/v1/admin/opted-in/stats`
- Auth: none declared

Headline counters for the /admin/opted-in dashboard. Mirrors the
/v1/admin/declined/stats shape so the frontend can reuse the same
Stat card pattern.

Counts:
  - ``total`` — every publisher with opt_in_at non-null AND
    do_not_contact not true (suppression-overrides-opt-in rule).
  - ``by_vertical`` — per-vertical breakdown. Buckets a NULL
    vertical under ``"unclassified"``.
  - ``last_7d_count`` — rows whose opt_in_at falls within the last
    7 days. Useful for "weekly claim velocity" at-a-glance.
  - ``last_30d_count`` — rows whose opt_in_at falls within the last
    30 days. Useful for monthly retention reporting.
  - ``with_payout_wallet`` — opted-in rows that have a non-empty
    payout_wallet_address (USDC-on-Base rail wired).
  - ``with_stripe_account`` — opted-in rows that have a non-empty
    stripe_account_id (Stripe Connect onboarding initiated; may
    not yet be ``stripe_payouts_enabled``).

## Headers

- `x-storyflo-email-token` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/storyflo/apis/storyflo-inference-router.md) · [All operations](https://skmtc.dev/storyflo/apis/storyflo-inference-router/llms.txt) · [OpenAPI document](https://skmtc.dev/storyflo/apis/storyflo-inference-router/revisions/c3a1a735ac7a?raw)
