|
41 | 41 | "- `time` — group by time buckets (day/week/month, auto-selected based on range)\n" |
42 | 42 | "- `browser` — group by browser name (e.g., Chrome, Firefox, Safari)\n" |
43 | 43 | "- `os` — group by operating system (e.g., Windows, macOS, Linux)\n" |
| 44 | + "- `device` — group by device type (`mobile`, `tablet`, `desktop`, `unknown`)\n" |
44 | 45 | "- `country` — group by country\n" |
45 | 46 | "- `city` — group by city\n" |
46 | 47 | "- `referrer` — group by referrer URL\n" |
47 | | - "- `short_code` — group by URL alias (only with `scope=all`)\n\n" |
| 48 | + "- `short_code` — group by URL alias (only with `scope=all`)\n" |
| 49 | + "- `utm_source` — group by the `utm_source` tag on the short link " |
| 50 | + "(untagged clicks appear as `(none)`)\n" |
| 51 | + "- `utm_medium` — group by the `utm_medium` tag\n" |
| 52 | + "- `utm_campaign` — group by the `utm_campaign` tag\n\n" |
48 | 53 | "Multiple dimensions can be combined: `time,browser` returns time series " |
49 | 54 | "broken down by browser." |
50 | 55 | ) |
|
69 | 74 | "**Available filter dimensions:**\n\n" |
70 | 75 | "- `browser` — Filter by browser name (e.g., Chrome, Firefox, Safari, Edge)\n" |
71 | 76 | "- `os` — Filter by operating system (e.g., Windows, macOS, Linux, iOS, Android)\n" |
| 77 | + "- `device` — Filter by device type (`mobile`, `tablet`, `desktop`, `unknown`)\n" |
72 | 78 | "- `country` — Filter by country name (e.g., United States, Canada, Germany)\n" |
73 | 79 | "- `city` — Filter by city name (e.g., New York, London, Mumbai)\n" |
74 | 80 | "- `referrer` — Filter by referrer URL (e.g., https://google.com, https://twitter.com)\n" |
75 | 81 | "- `short_code` — Filter by URL alias (e.g., mylink, promo2024) — " |
76 | | - "**not allowed** with `scope=anon`\n\n" |
| 82 | + "**not allowed** with `scope=anon`\n" |
| 83 | + "- `utm_source` / `utm_medium` / `utm_campaign` — Filter by campaign tags; " |
| 84 | + "`(none)` matches untagged clicks\n\n" |
77 | 85 | "**Value format:** Array of strings for each dimension.\n\n" |
78 | 86 | "**Important:** Filter values are case-sensitive. Use exact capitalization " |
79 | 87 | "as stored in the database.\n\n" |
|
133 | 141 | "**Note:** Both `filters` JSON and individual parameters can be combined." |
134 | 142 | ) |
135 | 143 |
|
| 144 | +STATS_DEVICE_DESC = ( |
| 145 | + "**Method 2: Individual Filter Parameter**\n\n" |
| 146 | + "Comma-separated device types. Alternative to using the `filters` JSON " |
| 147 | + "parameter.\n\n" |
| 148 | + "**Values:** `mobile`, `tablet`, `desktop`, `unknown`. `unknown` also " |
| 149 | + "matches clicks recorded before device tracking existed.\n\n" |
| 150 | + "**Note:** Both `filters` JSON and individual parameters can be combined." |
| 151 | +) |
| 152 | + |
| 153 | +STATS_UTM_DESC = ( |
| 154 | + "**Method 2: Individual Filter Parameter**\n\n" |
| 155 | + "Comma-separated campaign tag values. Alternative to using the `filters` " |
| 156 | + "JSON parameter.\n\n" |
| 157 | + "**Important:** Values are case-sensitive. `(none)` matches clicks with " |
| 158 | + "no tag.\n\n" |
| 159 | + "**Note:** Both `filters` JSON and individual parameters can be combined." |
| 160 | +) |
| 161 | + |
136 | 162 |
|
137 | 163 | # ── ListUrlsQuery ──────────────────────────────────────────────────────────── |
138 | 164 |
|
|
0 commit comments