---
title: "List users"
method: GET
path: "/admin/billing/stats/users/list"
tags: ["Billing"]
---

# List users

`GET /admin/billing/stats/users/list`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/admin/billing/stats/users/list`
- Auth: API key in header `x-api-key`

Admin-only endpoint returning a filtered, sorted, paginated page of users with non-sensitive profile fields and the total matching count. request_count, last_request_at, product_activated and first_successful_request_at are derived from billing events: every product-route call and every MCP tools/call or resources/read writes one, including free (zero-credit) routes, but the MCP initialize handshake does not. mcp_initialize_count_30d and last_mcp_initialize_at report that handshake separately from api_usage, so a user who connects over MCP but never calls a tool can be told apart from a dormant one.

## Query parameters

- `q` string
- `plan` 'Free' | 'Starter' | 'Growth' | 'Pro' | 'Business' | 'Enterprise' | 'Admin'
- `provider` string
- `source` string
- `medium` string
- `campaign` string
- `activated` boolean
- `banned` boolean
- `sort` 'created_at' | 'email' | 'username' | 'plan' | 'provider' | 'requests' | 'last_request_at' | 'signup_source' | 'signup_medium' | 'signup_campaign' | 'signup_landing_path' | 'signup_click_path' | 'signup_referrer_host' | 'signup_ip' | 'signup_browser_id_hash' | 'signup_country' | 'signup_locale' | 'signup_browser_language'
- `order` 'asc' | 'desc'
- `limit` integer
- `offset` integer

## Headers

- `x-api-key` string, required

## Response `200`

User list page

- BillingAdminUserListResponseDoc
  - `code` integer
  - `data` BillingAdminUserListDoc
    - `items` BillingAdminUserListItemDoc[]
      - `created_at` string
      - `email` string
      - `first_successful_request_at` string
      - `id` string
      - `is_activated` boolean
      - `is_banned` boolean
      - `last_mcp_initialize_at` string: Latest MCP initialize handshake; absent when none in the window.
      - `last_request_at` string
      - `mcp_initialize_count_30d` integer: MCP initialize handshakes in the last 30 days, from api_usage. The handshake is not a billing event, so it is not part of request_count.
      - `plan` string
      - `product_activated` boolean
      - `provider` string
      - `referral_attribution_id` string
      - `referral_referrer_user_id` string
      - `request_count` integer
      - `retained_7d` boolean
      - `signup_accept_language` string
      - `signup_attribution` ModelsSignupAttribution
        - `auth_click` ModelsSignupAttributionClick
          - `clicked_at` string
          - `cta_id` string
          - `cta_location` string
          - `destination` string
          - `href` string
          - `link_id` string
          - `page_type` string
          - `path` string
          - `provider` string
          - `search` string
          - `section_id` string
        - `first_touch` ModelsSignupAttributionTouch
          - `campaign` string
          - `captured_at` string
          - `content` string
          - `creative_format` string
          - `landing_path` string
          - `marketing_tactic` string
          - `medium` string
          - `referrer_host` string
          - `referrer_path` string
          - `referrer_url` string
          - `source` string
          - `source_platform` string
          - `term` string
        - `last_touch` ModelsSignupAttributionTouch
          - `campaign` string
          - `captured_at` string
          - `content` string
          - `creative_format` string
          - `landing_path` string
          - `marketing_tactic` string
          - `medium` string
          - `referrer_host` string
          - `referrer_path` string
          - `referrer_url` string
          - `source` string
          - `source_platform` string
          - `term` string
        - `signup_click` ModelsSignupAttributionClick
          - `clicked_at` string
          - `cta_id` string
          - `cta_location` string
          - `destination` string
          - `href` string
          - `link_id` string
          - `page_type` string
          - `path` string
          - `provider` string
          - `search` string
          - `section_id` string
      - `signup_browser_id_hash` string: Hash of a random first-party browser marker; it is only intended to correlate accounts during admin review.
      - `signup_browser_language` string
      - `signup_campaign` string
      - `signup_click_path` string
      - `signup_content` string
      - `signup_country` string
      - `signup_ip` string
      - `signup_landing_path` string
      - `signup_last_referrer_host` string
      - `signup_locale` string
      - `signup_medium` string
      - `signup_referrer_host` string
      - `signup_region` string
      - `signup_source` string
      - `stripe_customer_id` string
      - `subscription_status` string
      - `username` string
    - `limit` integer
    - `offset` integer
    - `total` integer
  - `msg` string

## Other responses

- `400`: Invalid query parameters
- `401`: Authentication required
- `403`: Admin plan required
- `500`: Internal server error

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/0497899e2016?raw)
