@whop/cli 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/index.js +287 -65
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -18708,12 +18708,12 @@ async function generateCommands(spec2, fetch3, options = {}) {
|
|
|
18708
18708
|
const resolved = dereference(structuredClone(spec2));
|
|
18709
18709
|
const commands = /* @__PURE__ */ new Map();
|
|
18710
18710
|
const paths = resolved.paths ?? {};
|
|
18711
|
-
const
|
|
18712
|
-
const namespaceInfo = getNamespaceInfo(
|
|
18711
|
+
const operations2 = openapiOperations(paths);
|
|
18712
|
+
const namespaceInfo = getNamespaceInfo(operations2);
|
|
18713
18713
|
const { config: config2 } = options;
|
|
18714
18714
|
if (config2?.compact)
|
|
18715
|
-
compactOperations(
|
|
18716
|
-
for (const { method, operation: op, path: path9 } of
|
|
18715
|
+
compactOperations(operations2);
|
|
18716
|
+
for (const { method, operation: op, path: path9 } of operations2) {
|
|
18717
18717
|
const segments = commandSegments({
|
|
18718
18718
|
method,
|
|
18719
18719
|
mode: config2?.mode ?? "operation",
|
|
@@ -18819,12 +18819,12 @@ var openapiMethods = /* @__PURE__ */ new Set([
|
|
|
18819
18819
|
"trace"
|
|
18820
18820
|
]);
|
|
18821
18821
|
function openapiOperations(paths) {
|
|
18822
|
-
const
|
|
18822
|
+
const operations2 = [];
|
|
18823
18823
|
for (const [path9, methods] of Object.entries(paths))
|
|
18824
18824
|
for (const [method, operation] of Object.entries(methods))
|
|
18825
18825
|
if (openapiMethods.has(method))
|
|
18826
|
-
|
|
18827
|
-
return
|
|
18826
|
+
operations2.push({ method, operation, path: path9 });
|
|
18827
|
+
return operations2;
|
|
18828
18828
|
}
|
|
18829
18829
|
function securityHeaderParams(spec2, operation) {
|
|
18830
18830
|
const schemes = spec2.components?.securitySchemes ?? {};
|
|
@@ -18863,8 +18863,8 @@ function securityHeaderParam(name, scheme) {
|
|
|
18863
18863
|
var authorizationSchemes = /* @__PURE__ */ new Set(["basic", "bearer"]);
|
|
18864
18864
|
var compactPatternLimit = 100;
|
|
18865
18865
|
var dateTimeFormats = /* @__PURE__ */ new Set(["date", "date-time", "duration", "time"]);
|
|
18866
|
-
function compactOperations(
|
|
18867
|
-
for (const { operation } of
|
|
18866
|
+
function compactOperations(operations2) {
|
|
18867
|
+
for (const { operation } of operations2) {
|
|
18868
18868
|
for (const parameter of operation.parameters ?? [])
|
|
18869
18869
|
if (parameter.schema)
|
|
18870
18870
|
parameter.schema = compactSchema(parameter.schema);
|
|
@@ -18937,10 +18937,10 @@ function resolveHeaderOptionName(optionName, used) {
|
|
|
18937
18937
|
return candidate;
|
|
18938
18938
|
}
|
|
18939
18939
|
}
|
|
18940
|
-
function getNamespaceInfo(
|
|
18940
|
+
function getNamespaceInfo(operations2) {
|
|
18941
18941
|
const pathOperations = /* @__PURE__ */ new Map();
|
|
18942
18942
|
const parentPaths = /* @__PURE__ */ new Set();
|
|
18943
|
-
for (const { path: path9 } of
|
|
18943
|
+
for (const { path: path9 } of operations2) {
|
|
18944
18944
|
pathOperations.set(path9, (pathOperations.get(path9) ?? 0) + 1);
|
|
18945
18945
|
const segments = namespaceNames(path9);
|
|
18946
18946
|
for (let i = 1; i < segments.length; i++)
|
|
@@ -27933,7 +27933,7 @@ var native_spec_default = {
|
|
|
27933
27933
|
],
|
|
27934
27934
|
tags: [
|
|
27935
27935
|
{
|
|
27936
|
-
description: "An Account represents a person or business on Whop that can have its own profile, wallet, and account-scoped settings. Use accounts for customers, creators, merchants, sellers, or connected businesses your integration supports.\n\nUse the Accounts API to create accounts, list accounts visible to your credentials, retrieve or update an account, suspend or delete a connected account managed by your platform, and retrieve the account associated with the current API key.\n",
|
|
27936
|
+
description: "An Account represents a person or business on Whop that can have its own profile, wallet, and account-scoped settings. Use accounts for customers, creators, merchants, sellers, or connected businesses your integration supports.\n\nUse the Accounts API to create accounts, list accounts visible to your credentials, retrieve or update an account, suspend or delete a connected account managed by your platform, and retrieve the account associated with the current API key.\n\nAn account applies to accept financing payments through financing applications. A financing application requests review of a merchant account for payment financing, not a loan or business capital. Create, list, and retrieve applications for your account and its direct sub-accounts. Creating an application returns an existing open application when one is already collecting information or awaiting review.\n",
|
|
27937
27937
|
name: "Accounts",
|
|
27938
27938
|
"x-whop-summary": "A business on Whop: profile, wallet, capabilities, settings."
|
|
27939
27939
|
},
|
|
@@ -27971,11 +27971,6 @@ var native_spec_default = {
|
|
|
27971
27971
|
name: "Verifications",
|
|
27972
27972
|
"x-whop-summary": "Legal identity required before payouts and card issuing."
|
|
27973
27973
|
},
|
|
27974
|
-
{
|
|
27975
|
-
description: "A financing application requests review of a merchant account for payment financing. It is not an application for a loan or business capital.\n\nCreate, list, and retrieve applications for your account and its direct sub-accounts. Creating an application returns an existing open application when one is already collecting information or awaiting review.\n",
|
|
27976
|
-
name: "Financing Applications",
|
|
27977
|
-
"x-whop-summary": "Merchant applications to accept financing payments."
|
|
27978
|
-
},
|
|
27979
27974
|
{
|
|
27980
27975
|
description: "An Export is an asynchronous CSV of one resource for one account \u2014 members, payments, disputes, ads, and the other tables the Whop dashboard can export. Generating a full table takes longer than a request, so an export is created in `pending`, moves through `processing`, and lands on `completed` with a download link. Each resource requires that resource's own export scope.\n\nUse the Exports API to start an export, poll it until `download_url` is set, and list the exports already requested for an account. Finished CSVs are retained for 30 days, after which the file is deleted and the export moves to `expired`.\n",
|
|
27981
27976
|
name: "Exports",
|
|
@@ -28250,7 +28245,6 @@ var native_spec_default = {
|
|
|
28250
28245
|
"Webhooks",
|
|
28251
28246
|
"Stats",
|
|
28252
28247
|
"Verifications",
|
|
28253
|
-
"Financing Applications",
|
|
28254
28248
|
"Exports"
|
|
28255
28249
|
]
|
|
28256
28250
|
},
|
|
@@ -30219,12 +30213,13 @@ var native_spec_default = {
|
|
|
30219
30213
|
}
|
|
30220
30214
|
],
|
|
30221
30215
|
summary: "List Financing Applications",
|
|
30222
|
-
tags: ["
|
|
30216
|
+
tags: ["Accounts"],
|
|
30223
30217
|
"x-whop-credentials": [
|
|
30224
30218
|
"account_api_key",
|
|
30225
30219
|
"account_token",
|
|
30226
30220
|
"oauth_token"
|
|
30227
|
-
]
|
|
30221
|
+
],
|
|
30222
|
+
"x-whop-docs-subgroup": "Financing Applications"
|
|
30228
30223
|
},
|
|
30229
30224
|
post: {
|
|
30230
30225
|
description: "Creates an application for merchant payment-financing approval. Requires an existing ledger account. Returns an existing application collecting information or awaiting review; applications awaiting review take precedence. Restricted industries cannot apply. Closed applications allow reapplication. This does not submit the application for review. Supports Idempotency-Key replay; open applications are also reused across different keys.",
|
|
@@ -30313,12 +30308,13 @@ var native_spec_default = {
|
|
|
30313
30308
|
}
|
|
30314
30309
|
],
|
|
30315
30310
|
summary: "Create Financing Application",
|
|
30316
|
-
tags: ["
|
|
30311
|
+
tags: ["Accounts"],
|
|
30317
30312
|
"x-whop-credentials": [
|
|
30318
30313
|
"account_api_key",
|
|
30319
30314
|
"account_token",
|
|
30320
30315
|
"oauth_token"
|
|
30321
|
-
]
|
|
30316
|
+
],
|
|
30317
|
+
"x-whop-docs-subgroup": "Financing Applications"
|
|
30322
30318
|
}
|
|
30323
30319
|
},
|
|
30324
30320
|
"/accounts/{account_id}/financing_applications/{id}": {
|
|
@@ -30357,12 +30353,13 @@ var native_spec_default = {
|
|
|
30357
30353
|
}
|
|
30358
30354
|
],
|
|
30359
30355
|
summary: "Retrieve Financing Application",
|
|
30360
|
-
tags: ["
|
|
30356
|
+
tags: ["Accounts"],
|
|
30361
30357
|
"x-whop-credentials": [
|
|
30362
30358
|
"account_api_key",
|
|
30363
30359
|
"account_token",
|
|
30364
30360
|
"oauth_token"
|
|
30365
30361
|
],
|
|
30362
|
+
"x-whop-docs-subgroup": "Financing Applications",
|
|
30366
30363
|
parameters: [
|
|
30367
30364
|
{
|
|
30368
30365
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -30598,12 +30595,13 @@ var native_spec_default = {
|
|
|
30598
30595
|
}
|
|
30599
30596
|
],
|
|
30600
30597
|
summary: "Update Financing Application",
|
|
30601
|
-
tags: ["
|
|
30598
|
+
tags: ["Accounts"],
|
|
30602
30599
|
"x-whop-credentials": [
|
|
30603
30600
|
"account_api_key",
|
|
30604
30601
|
"account_token",
|
|
30605
30602
|
"oauth_token"
|
|
30606
|
-
]
|
|
30603
|
+
],
|
|
30604
|
+
"x-whop-docs-subgroup": "Financing Applications"
|
|
30607
30605
|
}
|
|
30608
30606
|
},
|
|
30609
30607
|
"/accounts/{account_id}/financing_applications/{id}/submit": {
|
|
@@ -30712,12 +30710,13 @@ var native_spec_default = {
|
|
|
30712
30710
|
}
|
|
30713
30711
|
],
|
|
30714
30712
|
summary: "Submit Financing Application",
|
|
30715
|
-
tags: ["
|
|
30713
|
+
tags: ["Accounts"],
|
|
30716
30714
|
"x-whop-credentials": [
|
|
30717
30715
|
"account_api_key",
|
|
30718
30716
|
"account_token",
|
|
30719
30717
|
"oauth_token"
|
|
30720
|
-
]
|
|
30718
|
+
],
|
|
30719
|
+
"x-whop-docs-subgroup": "Financing Applications"
|
|
30721
30720
|
}
|
|
30722
30721
|
},
|
|
30723
30722
|
"/accounts/{account_id}/preferences": {
|
|
@@ -51775,7 +51774,7 @@ var native_spec_default = {
|
|
|
51775
51774
|
type: "array"
|
|
51776
51775
|
},
|
|
51777
51776
|
filters: {
|
|
51778
|
-
description: "Resource-specific filters. For native REST resources (`payouts`, `transfers`, `products`) these are the resource's own list query params; for dashboard tables they mirror the dashboard table filters.\n\n<details>\n<summary>Filters by resource (26)</summary>\n\n<details>\n<summary>ad_campaigns (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ad_campaigns`.\n\n- `campaign_type` `string` \u2014 Only return campaigns of this type. One of `standard`, `search`.\n- `created_after` `string` \u2014 Only return campaigns created after this timestamp.\n- `created_before` `string` \u2014 Only return campaigns created before this timestamp.\n- `query` `string` \u2014 Filter campaigns by a title or ID substring.\n- `status` `string` \u2014 Only return campaigns with this status. One of `draft`, `active`, `paused`, `payment_failed`.\n\n</details>\n<details>\n<summary>ad_groups (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ad_groups`.\n\n- `ad_campaign_id` `string` \u2014 Filter to ad groups in this campaign.\n- `ad_campaign_ids` `string[]` \u2014 Filter to ad groups in these campaigns (max 100). Repeat the parameter for each id (ad_campaign_ids=a&ad_campaign_ids=b).\n- `created_after` `string` \u2014 Only return ad groups created after this timestamp.\n- `created_before` `string` \u2014 Only return ad groups created before this timestamp.\n- `query` `string` \u2014 Filter ad groups by a title or ID substring.\n- `status` `string` \u2014 Filter to ad groups with this status. One of `active`, `paused`, `rejected`, `duplicating`.\n\n</details>\n<details>\n<summary>ads (8)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ads`.\n\n- `ad_campaign_id` `string` \u2014 Only return ads in this ad campaign.\n- `ad_campaign_ids` `string[]` \u2014 Only return ads in these ad campaigns (max 100). Repeat the parameter for each id (ad_campaign_ids=a&ad_campaign_ids=b).\n- `ad_group_id` `string` \u2014 Only return ads in this ad group.\n- `ad_group_ids` `string[]` \u2014 Only return ads in these ad groups (max 100). Repeat the parameter for each id (ad_group_ids=a&ad_group_ids=b).\n- `created_after` `string` \u2014 Only return ads created after this timestamp.\n- `created_before` `string` \u2014 Only return ads created before this timestamp.\n- `query` `string` \u2014 Filter ads by a title or ID substring.\n- `status` `string` \u2014 Only return ads with this status. One of `active`, `paused`, `in_review`, `rejected`.\n\n</details>\n<details>\n<summary>apps (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/apps`.\n\n- `app_type` `string` \u2014 Filter apps by the type of end-user they are built for. Apps of type `website` are left out unless you ask for them by name. One of `b2b_app`, `b2c_app`, `company_app`, `component`, `website`.\n- `query` `string` \u2014 A search string matched against app names.\n- `recommended` `boolean` \u2014 Only return apps Whop recommends (or, with `false`, only those it does not), independently of verification status.\n- `verified` `boolean` \u2014 Only return apps whose Whop verification status matches this value. Omit this filter to include every verification status the caller can see.\n- `verified_apps_only` `boolean` \u2014 Legacy compatibility filter. Use `verified` for field equality. `true` returns verified apps; clients pinned before `2026-08-25-2` retain the earlier public website discovery behavior.\n- `view_type` `string` \u2014 Only return apps supporting this view type, such as `dashboard` or `hub`. One of `hub`, `discover`, `dash`, `dashboard`, `analytics`, `skills`, `openapi`.\n\n</details>\n<details>\n<summary>audiences (3)</summary>\n\nMirrors the filtering query params of `GET /api/v1/audiences`.\n\n- `audience_id` `string` \u2014 Audience ID, prefixed `adaud_`, used to filter the response to one audience.\n- `audience_type` `string` \u2014 Filter by custom or lookalike audiences. One of `custom`, `lookalike`.\n- `source_type` `string` \u2014 Filter by uploaded customer lists, Whop People filters, or social engagement. One of `csv_upload`, `people_filter`, `engagement`.\n\n</details>\n<details>\n<summary>bounties (8)</summary>\n\nMirrors the filtering query params of `GET /api/v1/bounties`.\n\n- `business_goal_type` `string` \u2014 Filter by the poster's declared goal. Bounties created before the goal taxonomy carry no goal and never match this filter. One of `clipping`, `post_engagement`, `owned_account_growth`, `ugc_content`, `local_activation`, `data_capture`, `other`.\n- `country` `string` \u2014 Only bounties workable from this country, as an ISO 3166-1 alpha-2 code. Bounties with no country targeting are workable worldwide and always match.\n- `created_after` `string` \u2014 Only bounties created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only bounties created before this ISO 8601 timestamp.\n- `experience_id` `string` \u2014 Only bounties posted to this forum experience, prefixed `exp_`. An unknown experience, or one outside the caller's scope, matches nothing.\n- `query` `string` \u2014 Substring match on the bounty title or ID.\n- `status` `string` \u2014 Filter by lifecycle state. One of `scheduled`, `open`, `closed`, `completed`, `canceled`.\n- `user_id` `string` \u2014 List the bounties this user participated in (`user_` tag). Must be the authenticated user.\n\n</details>\n<details>\n<summary>bounty_submissions (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/bounty_submissions`.\n\n- `bounty_id` `string` \u2014 Only submissions on this bounty (`bnty_` tag).\n- `created_after` `string` \u2014 Only submissions created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only submissions created before this ISO 8601 timestamp.\n- `status` `string` \u2014 Filter by lifecycle state. One of `in_progress`, `submitted`, `approved`, `denied`.\n\n</details>\n<details>\n<summary>card_transactions (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/card_transactions`.\n\n- `card_id` `string[]` \u2014 Return only transactions charged to these cards, each prefixed `icrd_`.\n- `cardholder_id` `string[]` \u2014 Return only transactions on cards assigned to these users, each prefixed `user_`.\n- `created_after` `string` \u2014 Return only transactions authorized at or after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Return only transactions authorized at or before this ISO 8601 timestamp.\n- `status` `string` \u2014 Return only transactions with this status. One of `pending`, `completed`, `reversed`, `declined`.\n- `transaction_ids` `string[]` \u2014 Return only these card transactions, each prefixed `citx_`. Repeat the parameter, or pass one comma-separated value.\n\n</details>\n<details>\n<summary>checkout_configurations (3)</summary>\n\nMirrors the filtering query params of `GET /api/v1/checkout_configurations`.\n\n- `created_after` `string` \u2014 Only return checkout configurations created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only return checkout configurations created before this ISO 8601 timestamp.\n- `plan_id` `string` \u2014 Only return checkout configurations for this variant ID, prefixed `plan_`.\n\n</details>\n<details>\n<summary>disputes (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/disputes`.\n\n- `created_after` `string` \u2014 Only disputes opened after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only disputes opened before this ISO 8601 timestamp.\n- `currency` `string` \u2014 Only disputes in this three-letter ISO currency.\n- `status` `string[]` \u2014 Only disputes in these statuses. Repeat the parameter to pass several \u2014 one paginated list covers all of them. Inquiries match only the `warning_` statuses. A `needs_response` dispute whose evidence deadline has passed reports and filters as `under_review` instead.\n\n</details>\n<details>\n<summary>events (14)</summary>\n\nMirrors the filtering query params of `GET /api/v1/events`.\n\n- `attribution_model` `string` \u2014 Attribution model for the source filter (defaults to last_touch). One of `last_touch`, `first_touch`.\n- `browser` `string` \u2014 Browser families to filter by, comma-separated (e.g. Chrome, Mobile Safari).\n- `city` `string` \u2014 Cities to filter by, comma-separated.\n- `country` `string` \u2014 Country codes to filter by, comma-separated.\n- `device` `string` \u2014 Device families to filter by, comma-separated (e.g. iPhone, Mac).\n- `event` `string` \u2014 Full event names to filter by, comma-separated (payment.completed, pixel.lead, pixel.page, pixel.custom:<name>) \u2014 the same vocabulary the events / people metrics use.\n- `from` `string` \u2014 Start of the time range as an ISO 8601 timestamp. Required when identifier is omitted.\n- `hostname` `string` \u2014 Page hostnames to filter by, comma-separated.\n- `identifier` `string` \u2014 Any hard identifier of the person: a person ID (prsn_*), user ID, email, phone number, or a tracking cookie value (wuid, anonymous ID, fbp/fbc/ttp/ga). Omit to list recent events for the account.\n- `os` `string` \u2014 Operating system families to filter by, comma-separated (e.g. iOS, Windows).\n- `page` `string` \u2014 Page paths to filter by, comma-separated.\n- `source` `string` \u2014 Canonical source path, exact or with a trailing :* prefix (whop:<campaign>:*, ext:meta:*, referrer:<domain>, direct, unknown). Selects conversions credited to this source.\n- `to` `string` \u2014 End of the time range as an ISO 8601 timestamp. Required when identifier is omitted; otherwise defaults to now.\n- `utm_source` `string` \u2014 utm_source values to filter by, comma-separated.\n\n</details>\n<details>\n<summary>external_accounts (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/external_accounts`.\n\n- `platform` `string` \u2014 Only return external accounts for the platform that is specified. One of `x`, `instagram`, `youtube`, `tiktok`, `facebook`, `discord`, `telegram`, `linkedin`, `snapchat`.\n- `scopes` `string[]` \u2014 Only return external accounts that have these scopes.\n- `trust_level` `string` \u2014 Only return external accounts linked with this trust level, such as `oauth` for accounts connected through OAuth. One of `oauth`, `verified`, `authorized`, `claimed`, `scraped`.\n- `user_id` `string` \u2014 The User that the external accounts are connected to. Provide either this or account_id.\n- `verified` `boolean` \u2014 Only return external accounts that are verified on the platform.\n\n</details>\n<details>\n<summary>financial-activity (15)</summary>\n\nMirrors the filtering query params of `GET /api/v1/financial_activity`.\n\n- `activity_id` `string` \u2014 Optional ledger activity ID (for example `line_3`). Returns at most that one activity.\n- `available_after` `string` \u2014 Only include balance credits and debits available on or after this `YYYY-MM-DD` date (UTC), distinct from posted_at. Requires currency.\n- `available_before` `string` \u2014 Only include balance credits and debits available on or before this `YYYY-MM-DD` date (UTC). Set equal to available_after for a single day. Requires currency.\n- `balance_type` `string` \u2014 Which balance the activity changes. `total` includes available, pending, and reserved funds. `available` includes only movements into or out of available funds, including reservations, releases, and fees. Movements within the selected balance are omitted. Omit to preserve the existing activity feed. Requires account_id or user_id; cannot be combined with available_after or available_before. One of `total`, `available`.\n- `currency` `string` \u2014 Optional currency code filter, for example `usd`.\n- `exclude_internal_movements` `boolean` \u2014 Whether to exclude balance reservations and balanced movements between the account's own balances.\n- `include_owned_accounts` `boolean` \u2014 When true, aggregates the authenticated user's personal ledger with the businesses they own (owner role with balance read) into one feed. Requires user_id to be the authenticated user; cannot be combined with account_id or the settlement-date filters. Each returned row includes the owning `account`.\n- `include_resource` `boolean` \u2014 Whether to include the `resource` field in the response or not. Consider passing `false` if you need a fast response without as many rich details.\n- `line_types` `string[]` \u2014 Optional ledger line categories to include. Some categories (for example `onchain_deposit`, which covers inbound crypto deposits such as MoonPay onramps) are only returned when explicitly requested here.\n- `payment_id` `string` \u2014 Filter activity by payment ID (pay_), including related refunds, disputes, and fees. Combines with resource_id and other filters within the selected accounts. Unknown payments return an empty list.\n- `posted_after` `string` \u2014 Only include rows posted after this ISO 8601 timestamp.\n- `posted_before` `string` \u2014 Only include rows posted before this ISO 8601 timestamp.\n- `resource_id` `string` \u2014 Optional prefixed resource ID. Returns activity associated with that resource.\n- `user_id` `string` \u2014 The owning user ID (a user_ identifier). Provide this or account_id.\n- `withdrawal_id` `string` \u2014 Withdrawal ID (wdrl_). With balance_type=available, selects the same period as its statement, after the previous withdrawal and through this withdrawal, excluding this withdrawal and its fee. Requires a single account. Overrides currency and posted-date filters.\n\n</details>\n<details>\n<summary>members (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/members`.\n\n- `access_level` `string` \u2014 Filter by what the member can reach on the account. One of `no_access`, `admin`, `customer`.\n- `created_after` `string` \u2014 Only members who joined after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only members who joined before this ISO 8601 timestamp.\n- `query` `string` \u2014 Search members by name or username. An exact email address also matches when the credential holds the member:email:read scope.\n- `status` `string` \u2014 Filter by whether the member is still part of the account. One of `joined`, `left`.\n- `user_ids` `string[]` \u2014 Only return members whose users match these `user_` identifiers.\n\n</details>\n<details>\n<summary>memberships (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/memberships`.\n\n- `created_after` `string` \u2014 Only memberships created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only memberships created before this ISO 8601 timestamp.\n- `plan_id` `string` \u2014 Filter to memberships of this variant (`plan_` tag). Repeat as plan_ids[] for several.\n- `product_id` `string` \u2014 Filter to memberships of this product (`prod_` tag). Repeat as product_ids[] for several.\n- `status` `string` \u2014 Filter by billing state. `canceling` matches active memberships set to cancel at period end; `paused` matches memberships with payment collection paused. One of `active`, `trialing`, `past_due`, `completed`, `canceled`, `expired`, `canceling`, `paused`.\n- `user_id` `string` \u2014 Narrow to one user's memberships (`user_` tag, or `me` for the caller). A user outside the caller's visible set returns an empty list.\n\n</details>\n<details>\n<summary>payouts (7)</summary>\n\nMirrors the filtering query params of `GET /api/v1/payouts`.\n\n- `created_after` `string` \u2014 Only payouts created at or after this ISO 8601 time (inclusive).\n- `created_before` `string` \u2014 Only payouts created before this ISO 8601 time (exclusive).\n- `currency` `string` \u2014 Optional currency code filter, for example `usd`.\n- `payout_method_id` `string` \u2014 Filter to payouts sent to one saved payout method (a pytk_ identifier). An unknown id matches nothing.\n- `source` `string` \u2014 Filter by how the payout was created. Payouts created before source tracking or through internal tooling carry no source and never match. One of `api`, `dashboard`, `automatic`.\n- `status` `string` \u2014 Filter to payouts whose `status` reads this word, matching exactly what this version displays \u2014 `reversed` finds settled payouts the bank later returned. Requires Api-Version-Date 2026-08-21 or later. One of `requested`, `in_review`, `processing`, `completed`, `reversed`, `canceled`, `failed`, `denied`.\n- `user_id` `string` \u2014 The owning user ID (a user_ identifier). Provide this or account_id.\n\n</details>\n<details>\n<summary>people (39)</summary>\n\nMirrors the filtering query params of `GET /api/v1/people`.\n\n- `aov_gt` `number` \u2014 Select people whose lifetime aov is greater than this value. LTV and AOV are in USD.\n- `aov_gte` `number` \u2014 Select people whose lifetime aov is at least this value. LTV and AOV are in USD.\n- `aov_lt` `number` \u2014 Select people whose lifetime aov is less than this value. LTV and AOV are in USD.\n- `aov_lte` `number` \u2014 Select people whose lifetime aov is at most this value. LTV and AOV are in USD.\n- `attribution_model` `string` \u2014 Attribution model the source filter matches against (defaults to last_touch). One of `last_touch`, `first_touch`.\n- `audience_id` `string` \u2014 Only include people in this audience. An audience that keeps itself up to date resolves to the People filters that define it, so this always reflects who matches now; uploaded lists and point-in-time snapshots match their recorded members.\n- `contactable` `boolean` \u2014 true for people who have an email address or phone number \u2014 the ones an ad platform can match.\n- `country` `string` \u2014 Only include people with activity from this ISO 3166-1 alpha-2 country code.\n- `custom_event` `string` \u2014 Only include people who fired this custom pixel event.\n- `email` `string` \u2014 Only include the person linked to this email address.\n- `event_count_gt` `number` \u2014 Select people whose lifetime event_count is greater than this value. LTV and AOV are in USD.\n- `event_count_gte` `number` \u2014 Select people whose lifetime event_count is at least this value. LTV and AOV are in USD.\n- `event_count_lt` `number` \u2014 Select people whose lifetime event_count is less than this value. LTV and AOV are in USD.\n- `event_count_lte` `number` \u2014 Select people whose lifetime event_count is at most this value. LTV and AOV are in USD.\n- `event_from` `string` \u2014 The inclusive start of the matching activity window.\n- `event_name` `string[]` \u2014 Only include people who fired any of these events, e.g. payment.completed or page.checkout.view.\n- `event_to` `string` \u2014 The inclusive end of the matching activity window, for both stats drilldowns and saved audiences.\n- `event_within_days` `integer` \u2014 Match activity within a rolling number of days. Cannot be combined with event_from/event_to.\n- `first_seen_after` `string` \u2014 Only include people first seen at or after this ISO 8601 timestamp.\n- `first_seen_before` `string` \u2014 Only include people first seen before this ISO 8601 timestamp.\n- `first_seen_within_days` `integer` \u2014 Only include people first seen within this many days, as a rolling window.\n- `from` `string` \u2014 Inclusive activity-window start. Alias for event_from.\n- `has_purchased` `boolean` \u2014 true for customers only, false for people who have never purchased.\n- `last_seen_after` `string` \u2014 Only include people last seen at or after this ISO 8601 timestamp.\n- `last_seen_before` `string` \u2014 Only include people last seen before this ISO 8601 timestamp.\n- `last_seen_within_days` `integer` \u2014 Only include people last seen within this many days, as a rolling window.\n- `ltv_gt` `number` \u2014 Select people whose lifetime ltv is greater than this value. LTV and AOV are in USD.\n- `ltv_gte` `number` \u2014 Select people whose lifetime ltv is at least this value. LTV and AOV are in USD.\n- `ltv_lt` `number` \u2014 Select people whose lifetime ltv is less than this value. LTV and AOV are in USD.\n- `ltv_lte` `number` \u2014 Select people whose lifetime ltv is at most this value. LTV and AOV are in USD.\n- `phone` `string` \u2014 Only include the person linked to this phone number.\n- `purchase_count_gt` `number` \u2014 Select people whose lifetime purchase_count is greater than this value. LTV and AOV are in USD.\n- `purchase_count_gte` `number` \u2014 Select people whose lifetime purchase_count is at least this value. LTV and AOV are in USD.\n- `purchase_count_lt` `number` \u2014 Select people whose lifetime purchase_count is less than this value. LTV and AOV are in USD.\n- `purchase_count_lte` `number` \u2014 Select people whose lifetime purchase_count is at most this value. LTV and AOV are in USD.\n- `query` `string` \u2014 Search people by name, email, phone, or whop user ID (case-insensitive substring match).\n- `source` `string[]` \u2014 Only include people acquired from any of these sources \u2014 canonical paths (whop:<campaign>:<group>:<ad>, ext:<platform>:..., referrer:<domain>, direct, other), exact or with a trailing :* prefix. The same vocabulary the events / people metrics use.\n- `to` `string` \u2014 Inclusive activity-window end. Alias for event_to.\n- `user_id` `string` \u2014 Only include the person linked to this whop user ID.\n\n</details>\n<details>\n<summary>plans (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/plans`.\n\n- `created_after` `string`\n- `created_before` `string`\n- `plan_types` `string[]`\n- `product_ids` `string[]`\n- `release_methods` `string[]`\n- `visibilities` `string[]`\n\n</details>\n<details>\n<summary>products (10)</summary>\n\nMirrors the filtering query params of `GET /api/v1/products`.\n\n- `access_pass_types` `string[]` \u2014 Filter to only products matching these types.\n- `created_after` `string` \u2014 Only return products created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only return products created before this ISO 8601 timestamp.\n- `labels` `string[]` \u2014 Filter to only products carrying all of these labels. Labels are matched lowercased.\n- `marketplace_category_route` `string` \u2014 Only return marketplace products assigned to this category route, such as `trading`.\n- `plan_types` `string[]` \u2014 Filter to products with a buyable variant of these billing models, such as `one_time` or `renewal`.\n- `price_maximum` `number` \u2014 Only return products whose advertised buyable variant has a displayed price of at most this amount. Recurring variants use renewal price.\n- `price_minimum` `number` \u2014 Only return products whose advertised buyable variant has a displayed price of at least this amount. Recurring variants use renewal price.\n- `query` `string` \u2014 Ranked search against product title and headline. Omit to browse by recency.\n- `visibilities` `string[]` \u2014 Filter to only products matching these visibility states. Ignored on the public marketplace list, which only returns visible products.\n\n</details>\n<details>\n<summary>promo_codes (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/promo_codes`.\n\n- `created_after` `string` \u2014 Only promo codes created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only promo codes created before this ISO 8601 timestamp.\n- `plan_ids` `string[]` \u2014 Only promo codes scoped to these variant IDs.\n- `product_ids` `string[]` \u2014 Only promo codes scoped to these product IDs.\n- `status` `string` \u2014 Promo-code status. `expired` groups inactive and archived codes. One of `active`, `inactive`, `archived`, `expired`.\n\n</details>\n<details>\n<summary>resolution_center_cases (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/resolution_center_cases`.\n\n- `created_after` `string` \u2014 Only cases created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only cases created before this ISO 8601 timestamp.\n- `outcome` `string[]` \u2014 Only closed cases that ended these ways. Repeat the parameter to pass several.\n- `reason` `string[]` \u2014 Only cases opened for these reasons. Repeat the parameter to pass several.\n- `status` `string[]` \u2014 Only cases in these statuses. Repeat the parameter to pass several \u2014 one paginated list covers all of them.\n- `user_id` `string` \u2014 Only cases opened by this customer \u2014 a `user_` tag, or `me` for the calling user. It narrows what you can already read, so `me` lists the cases you opened without the ones on accounts you are a team member of.\n\n</details>\n<details>\n<summary>shipments (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/shipments`.\n\n- `created_after` `string` \u2014 Return shipments created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Return shipments created before this ISO 8601 timestamp.\n- `payment_id` `string[]` \u2014 Only shipments fulfilling these payments, each prefixed `pay_`. Repeat the parameter to pass several, up to 100 per request \u2014 one paginated list covers all of them.\n- `status` `string` \u2014 Filter to shipments with this delivery status. One of `unknown`, `pre_transit`, `in_transit`, `out_for_delivery`, `delivered`, `available_for_pickup`, `return_to_sender`, `failure`, `cancelled`, `error`.\n\n</details>\n<details>\n<summary>social_accounts (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/social_accounts`.\n\n- `platform` `string` \u2014 Only return external accounts for the platform that is specified. One of `x`, `instagram`, `youtube`, `tiktok`, `facebook`, `discord`, `telegram`, `linkedin`, `snapchat`.\n- `scopes` `string[]` \u2014 Only return external accounts that have these scopes.\n- `trust_level` `string` \u2014 Only return external accounts linked with this trust level, such as `oauth` for accounts connected through OAuth. One of `oauth`, `verified`, `authorized`, `claimed`, `scraped`.\n- `user_id` `string` \u2014 The User that the external accounts are connected to. Provide either this or account_id.\n- `verified` `boolean` \u2014 Only return external accounts that are verified on the platform.\n\n</details>\n<details>\n<summary>team_members (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/team_members`.\n\n- `created_after` `string` \u2014 Only return members added after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only return members added before this ISO 8601 timestamp.\n- `role` `string` \u2014 Only return members with this role. `custom` matches members on a dashboard-managed custom role. One of `owner`, `admin`, `partner`, `sales_manager`, `moderator`, `advertiser`, `app_manager`, `support`, `manager`, `workforce`, `custom`.\n- `status` `string` \u2014 Only return members with this status: `joined` (accepted members) or `pending` (pending invites). Both are returned by default. One of `joined`, `pending`.\n- `user_id` `string` \u2014 Only return the membership for this user ID, prefixed `user_`.\n\n</details>\n<details>\n<summary>transfers (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/transfers`.\n\n- `created_after` `string` \u2014 Only transfers created strictly after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only transfers created strictly before this ISO 8601 timestamp.\n- `destination_id` `string` \u2014 Filter to transfers received by this account. Provide this or origin_id.\n- `origin_id` `string` \u2014 Filter to transfers sent from this account. Provide this or destination_id.\n\n</details>\n<details>\n<summary>webhooks (3)</summary>\n\nMirrors the filtering query params of `GET /api/v1/webhooks`.\n\n- `app_id` `string` \u2014 Only return webhooks attached to this app. Omit to list the account's own webhooks.\n- `has_failures` `boolean` \u2014 Only return webhooks whose endpoint is currently failing \u2014 every delivery since the current failure streak began has been rejected. Clears as soon as a delivery succeeds.\n- `include_app_webhooks` `boolean` \u2014 Also return webhooks attached to the account's apps, not just the account's own. Cannot be combined with `app_id`.\n\n</details>\n</details>",
|
|
51777
|
+
description: "Resource-specific filters. For native REST resources (`payouts`, `transfers`, `products`) these are the resource's own list query params; for dashboard tables they mirror the dashboard table filters.\n\n<details>\n<summary>Filters by resource (26)</summary>\n\n<details>\n<summary>ad_campaigns (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ad_campaigns`.\n\n- `campaign_type` `string` \u2014 Only return campaigns of this type. One of `standard`, `search`.\n- `created_after` `string` \u2014 Only return campaigns created after this timestamp.\n- `created_before` `string` \u2014 Only return campaigns created before this timestamp.\n- `query` `string` \u2014 Filter campaigns by a title or ID substring.\n- `status` `string` \u2014 Only return campaigns with this status. One of `draft`, `active`, `paused`, `payment_failed`.\n\n</details>\n<details>\n<summary>ad_groups (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ad_groups`.\n\n- `ad_campaign_id` `string` \u2014 Filter to ad groups in this campaign.\n- `ad_campaign_ids` `string[]` \u2014 Filter to ad groups in these campaigns (max 100). Repeat the parameter for each id (ad_campaign_ids=a&ad_campaign_ids=b).\n- `created_after` `string` \u2014 Only return ad groups created after this timestamp.\n- `created_before` `string` \u2014 Only return ad groups created before this timestamp.\n- `query` `string` \u2014 Filter ad groups by a title or ID substring.\n- `status` `string` \u2014 Filter to ad groups with this status. One of `active`, `paused`, `rejected`, `duplicating`.\n\n</details>\n<details>\n<summary>ads (8)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ads`.\n\n- `ad_campaign_id` `string` \u2014 Only return ads in this ad campaign.\n- `ad_campaign_ids` `string[]` \u2014 Only return ads in these ad campaigns (max 100). Repeat the parameter for each id (ad_campaign_ids=a&ad_campaign_ids=b).\n- `ad_group_id` `string` \u2014 Only return ads in this ad group.\n- `ad_group_ids` `string[]` \u2014 Only return ads in these ad groups (max 100). Repeat the parameter for each id (ad_group_ids=a&ad_group_ids=b).\n- `created_after` `string` \u2014 Only return ads created after this timestamp.\n- `created_before` `string` \u2014 Only return ads created before this timestamp.\n- `query` `string` \u2014 Filter ads by a title or ID substring.\n- `status` `string` \u2014 Only return ads with this status. One of `active`, `paused`, `in_review`, `rejected`.\n\n</details>\n<details>\n<summary>apps (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/apps`.\n\n- `app_type` `string` \u2014 Filter apps by the type of end-user they are built for. Apps of type `website` are left out unless you ask for them by name. One of `b2b_app`, `b2c_app`, `company_app`, `component`, `website`.\n- `query` `string` \u2014 A search string matched against app names.\n- `recommended` `boolean` \u2014 Only return apps Whop recommends (or, with `false`, only those it does not), independently of verification status.\n- `verified` `boolean` \u2014 Only return apps whose Whop verification status matches this value. Omit this filter to include every verification status the caller can see.\n- `verified_apps_only` `boolean` \u2014 Legacy compatibility filter. Use `verified` for field equality. `true` returns verified apps; clients pinned before `2026-08-25-2` retain the earlier public website discovery behavior.\n- `view_type` `string` \u2014 Only return apps supporting this view type, such as `dashboard` or `hub`. One of `hub`, `discover`, `dash`, `dashboard`, `analytics`, `skills`, `openapi`.\n\n</details>\n<details>\n<summary>audiences (3)</summary>\n\nMirrors the filtering query params of `GET /api/v1/audiences`.\n\n- `audience_id` `string` \u2014 Audience ID, prefixed `adaud_`, used to filter the response to one audience.\n- `audience_type` `string` \u2014 Filter by custom or lookalike audiences. One of `custom`, `lookalike`.\n- `source_type` `string` \u2014 Filter by uploaded customer lists, Whop People filters, or social engagement. One of `csv_upload`, `people_filter`, `engagement`.\n\n</details>\n<details>\n<summary>bounties (8)</summary>\n\nMirrors the filtering query params of `GET /api/v1/bounties`.\n\n- `business_goal_type` `string` \u2014 Filter by the poster's declared goal. Bounties created before the goal taxonomy carry no goal and never match this filter. One of `clipping`, `post_engagement`, `owned_account_growth`, `ugc_content`, `local_activation`, `data_capture`, `other`.\n- `country` `string` \u2014 Only bounties workable from this country, as an ISO 3166-1 alpha-2 code. Bounties with no country targeting are workable worldwide and always match.\n- `created_after` `string` \u2014 Only bounties created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only bounties created before this ISO 8601 timestamp.\n- `experience_id` `string` \u2014 Only bounties posted to this forum experience, prefixed `exp_`. An unknown experience, or one outside the caller's scope, matches nothing.\n- `query` `string` \u2014 Substring match on the bounty title or ID.\n- `status` `string` \u2014 Filter by lifecycle state. One of `scheduled`, `open`, `closed`, `completed`, `canceled`.\n- `user_id` `string` \u2014 List the bounties this user participated in (`user_` tag). Must be the authenticated user.\n\n</details>\n<details>\n<summary>bounty_submissions (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/bounty_submissions`.\n\n- `bounty_id` `string` \u2014 Only submissions on this bounty (`bnty_` tag).\n- `created_after` `string` \u2014 Only submissions created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only submissions created before this ISO 8601 timestamp.\n- `status` `string` \u2014 Filter by lifecycle state. One of `in_progress`, `submitted`, `approved`, `denied`.\n\n</details>\n<details>\n<summary>card_transactions (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/card_transactions`.\n\n- `card_id` `string[]` \u2014 Return only transactions charged to these cards, each prefixed `icrd_`.\n- `cardholder_id` `string[]` \u2014 Return only transactions on cards assigned to these users, each prefixed `user_`.\n- `created_after` `string` \u2014 Return only transactions authorized at or after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Return only transactions authorized at or before this ISO 8601 timestamp.\n- `status` `string` \u2014 Return only transactions with this status. One of `pending`, `completed`, `reversed`, `declined`.\n- `transaction_ids` `string[]` \u2014 Return only these card transactions, each prefixed `citx_`. Repeat the parameter, or pass one comma-separated value.\n\n</details>\n<details>\n<summary>checkout_configurations (3)</summary>\n\nMirrors the filtering query params of `GET /api/v1/checkout_configurations`.\n\n- `created_after` `string` \u2014 Only return checkout configurations created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only return checkout configurations created before this ISO 8601 timestamp.\n- `plan_id` `string` \u2014 Only return checkout configurations for this variant ID, prefixed `plan_`.\n\n</details>\n<details>\n<summary>disputes (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/disputes`.\n\n- `created_after` `string` \u2014 Only disputes opened after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only disputes opened before this ISO 8601 timestamp.\n- `currency` `string` \u2014 Only disputes in this three-letter ISO currency.\n- `status` `string[]` \u2014 Only disputes in these statuses. Repeat the parameter to pass several \u2014 one paginated list covers all of them. Inquiries match only the `warning_` statuses. A `needs_response` dispute whose evidence deadline has passed reports and filters as `under_review` instead.\n\n</details>\n<details>\n<summary>events (14)</summary>\n\nMirrors the filtering query params of `GET /api/v1/events`.\n\n- `attribution_model` `string` \u2014 Attribution model for the source filter (defaults to last_touch). One of `last_touch`, `first_touch`.\n- `browser` `string` \u2014 Browser families to filter by, comma-separated (e.g. Chrome, Mobile Safari).\n- `city` `string` \u2014 Cities to filter by, comma-separated.\n- `country` `string` \u2014 Country codes to filter by, comma-separated.\n- `device` `string` \u2014 Device families to filter by, comma-separated (e.g. iPhone, Mac).\n- `event` `string` \u2014 Full event names to filter by, comma-separated (payment.completed, pixel.lead, pixel.page, pixel.custom:<name>) \u2014 the same vocabulary the events / people metrics use.\n- `from` `string` \u2014 Start of the time range as an ISO 8601 timestamp. Required when identifier is omitted.\n- `hostname` `string` \u2014 Page hostnames to filter by, comma-separated.\n- `identifier` `string` \u2014 Any hard identifier of the person: a person ID (prsn_*), user ID, email, phone number, or a tracking cookie value (wuid, anonymous ID, fbp/fbc/ttp/ga). Omit to list recent events for the account.\n- `os` `string` \u2014 Operating system families to filter by, comma-separated (e.g. iOS, Windows).\n- `page` `string` \u2014 Page paths to filter by, comma-separated.\n- `source` `string` \u2014 Canonical source path, exact or with a trailing :* prefix (whop:<campaign>:*, ext:meta:*, referrer:<domain>, direct, unknown). Selects conversions credited to this source.\n- `to` `string` \u2014 End of the time range as an ISO 8601 timestamp. Required when identifier is omitted; otherwise defaults to now.\n- `utm_source` `string` \u2014 utm_source values to filter by, comma-separated.\n\n</details>\n<details>\n<summary>external_accounts (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/external_accounts`.\n\n- `platform` `string` \u2014 Only return external accounts for the platform that is specified. One of `x`, `instagram`, `youtube`, `tiktok`, `facebook`, `discord`, `telegram`, `linkedin`, `snapchat`.\n- `scopes` `string[]` \u2014 Only return external accounts that have these scopes.\n- `trust_level` `string` \u2014 Only return external accounts linked with this trust level, such as `oauth` for accounts connected through OAuth. One of `oauth`, `verified`, `authorized`, `claimed`, `scraped`.\n- `user_id` `string` \u2014 The User that the external accounts are connected to. Provide either this or account_id.\n- `verified` `boolean` \u2014 Only return external accounts that are verified on the platform.\n\n</details>\n<details>\n<summary>financial-activity (15)</summary>\n\nMirrors the filtering query params of `GET /api/v1/financial_activity`.\n\n- `activity_id` `string` \u2014 Optional ledger activity ID (for example `line_3`). Returns at most that one activity.\n- `available_after` `string` \u2014 Only include balance credits and debits available on or after this `YYYY-MM-DD` date (UTC), distinct from posted_at. Requires currency.\n- `available_before` `string` \u2014 Only include balance credits and debits available on or before this `YYYY-MM-DD` date (UTC). Set equal to available_after for a single day. Requires currency.\n- `balance_type` `string` \u2014 Which balance the activity changes. `total` includes available, pending, and reserved funds. `available` includes only movements into or out of available funds, including reservations, releases, and fees. Movements within the selected balance are omitted. Omit to preserve the existing activity feed. Requires account_id or user_id; cannot be combined with available_after or available_before. One of `total`, `available`.\n- `currency` `string` \u2014 Optional currency code filter, for example `usd`.\n- `exclude_internal_movements` `boolean` \u2014 Whether to exclude balance reservations and balanced movements between the account's own balances.\n- `include_owned_accounts` `boolean` \u2014 When true, aggregates the authenticated user's personal ledger with the businesses they own (owner role with balance read) into one feed. Requires user_id to be the authenticated user; cannot be combined with account_id or the settlement-date filters. Each returned row includes the owning `account`.\n- `include_resource` `boolean` \u2014 Whether to include the `resource` field in the response or not. Consider passing `false` if you need a fast response without as many rich details.\n- `line_types` `string[]` \u2014 Optional ledger line categories to include. Some categories (for example `onchain_deposit`, which covers inbound crypto deposits such as MoonPay onramps) are only returned when explicitly requested here.\n- `payment_id` `string` \u2014 Filter activity by payment ID (pay_), including related refunds, disputes, and fees. Combines with resource_id and other filters within the selected accounts. Unknown payments return an empty list.\n- `posted_after` `string` \u2014 Only include rows posted after this ISO 8601 timestamp.\n- `posted_before` `string` \u2014 Only include rows posted before this ISO 8601 timestamp.\n- `resource_id` `string` \u2014 Optional prefixed resource ID. Returns activity associated with that resource.\n- `user_id` `string` \u2014 The owning user ID (a user_ identifier). Provide this or account_id.\n- `withdrawal_id` `string` \u2014 Withdrawal ID (wdrl_). With balance_type=available, selects the same period as its statement, after the previous withdrawal and through this withdrawal, excluding this withdrawal and its fee. Requires a single account. Overrides currency and posted-date filters.\n\n</details>\n<details>\n<summary>members (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/members`.\n\n- `access_level` `string` \u2014 Filter by what the member can reach on the account. One of `no_access`, `admin`, `customer`.\n- `created_after` `string` \u2014 Only members who joined after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only members who joined before this ISO 8601 timestamp.\n- `query` `string` \u2014 Search members by name or username. An exact email address also matches when the credential holds the member:email:read scope.\n- `status` `string` \u2014 Filter by whether the member is still part of the account. One of `joined`, `left`.\n- `user_ids` `string[]` \u2014 Only return members whose users match these `user_` identifiers.\n\n</details>\n<details>\n<summary>memberships (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/memberships`.\n\n- `created_after` `string` \u2014 Only memberships created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only memberships created before this ISO 8601 timestamp.\n- `plan_id` `string` \u2014 Filter to memberships of this variant (`plan_` tag). Repeat as plan_ids[] for several.\n- `product_id` `string` \u2014 Filter to memberships of this product (`prod_` tag). Repeat as product_ids[] for several.\n- `status` `string` \u2014 Filter by billing state. `canceling` matches active memberships set to cancel at period end; `paused` matches memberships with payment collection paused. One of `active`, `trialing`, `past_due`, `completed`, `canceled`, `expired`, `canceling`, `paused`.\n- `user_id` `string` \u2014 Narrow to one user's memberships (`user_` tag, or `me` for the caller). A user outside the caller's visible set returns an empty list.\n\n</details>\n<details>\n<summary>payouts (7)</summary>\n\nMirrors the filtering query params of `GET /api/v1/payouts`.\n\n- `created_after` `string` \u2014 Only payouts created at or after this ISO 8601 time (inclusive).\n- `created_before` `string` \u2014 Only payouts created before this ISO 8601 time (exclusive).\n- `currency` `string` \u2014 Optional currency code filter, for example `usd`.\n- `payout_method_id` `string` \u2014 Filter to payouts sent to one saved payout method (a pytk_ identifier). An unknown id matches nothing.\n- `source` `string` \u2014 Filter by how the payout was created. Payouts created before source tracking or through internal tooling carry no source and never match. One of `api`, `dashboard`, `automatic`.\n- `status` `string` \u2014 Filter to payouts whose `status` reads this word, matching exactly what this version displays \u2014 `reversed` finds settled payouts the bank later returned. Requires Api-Version-Date 2026-08-21 or later. One of `requested`, `in_review`, `processing`, `completed`, `reversed`, `canceled`, `failed`, `denied`.\n- `user_id` `string` \u2014 The owning user ID (a user_ identifier). Provide this or account_id.\n\n</details>\n<details>\n<summary>people (39)</summary>\n\nMirrors the filtering query params of `GET /api/v1/people`.\n\n- `aov_gt` `number` \u2014 Select people whose lifetime aov is greater than this value. LTV and AOV are in USD.\n- `aov_gte` `number` \u2014 Select people whose lifetime aov is at least this value. LTV and AOV are in USD.\n- `aov_lt` `number` \u2014 Select people whose lifetime aov is less than this value. LTV and AOV are in USD.\n- `aov_lte` `number` \u2014 Select people whose lifetime aov is at most this value. LTV and AOV are in USD.\n- `attribution_model` `string` \u2014 Attribution model the source filter matches against (defaults to last_touch). One of `last_touch`, `first_touch`.\n- `audience_id` `string` \u2014 Only include people in this audience. An audience that keeps itself up to date resolves to the People filters that define it, so this always reflects who matches now; uploaded lists and point-in-time snapshots match their recorded members.\n- `contactable` `boolean` \u2014 true for people who have an email address or phone number \u2014 the ones an ad platform can match.\n- `country` `string` \u2014 Only include people with activity from this ISO 3166-1 alpha-2 country code.\n- `custom_event` `string` \u2014 Only include people who fired this custom pixel event.\n- `email` `string` \u2014 Only include the person linked to this email address.\n- `event_count_gt` `number` \u2014 Select people whose lifetime event_count is greater than this value. LTV and AOV are in USD.\n- `event_count_gte` `number` \u2014 Select people whose lifetime event_count is at least this value. LTV and AOV are in USD.\n- `event_count_lt` `number` \u2014 Select people whose lifetime event_count is less than this value. LTV and AOV are in USD.\n- `event_count_lte` `number` \u2014 Select people whose lifetime event_count is at most this value. LTV and AOV are in USD.\n- `event_from` `string` \u2014 The inclusive start of the matching activity window.\n- `event_name` `string[]` \u2014 Only include people who fired any of these events, e.g. payment.completed or page.checkout.view.\n- `event_to` `string` \u2014 The inclusive end of the matching activity window, for both stats drilldowns and saved audiences.\n- `event_within_days` `integer` \u2014 Match activity within a rolling number of days. Cannot be combined with event_from/event_to.\n- `first_seen_after` `string` \u2014 Only include people first seen at or after this ISO 8601 timestamp.\n- `first_seen_before` `string` \u2014 Only include people first seen before this ISO 8601 timestamp.\n- `first_seen_within_days` `integer` \u2014 Only include people first seen within this many days, as a rolling window.\n- `from` `string` \u2014 Inclusive activity-window start. Alias for event_from.\n- `has_purchased` `boolean` \u2014 true for customers only, false for people who have never purchased.\n- `last_seen_after` `string` \u2014 Only include people last seen at or after this ISO 8601 timestamp.\n- `last_seen_before` `string` \u2014 Only include people last seen before this ISO 8601 timestamp.\n- `last_seen_within_days` `integer` \u2014 Only include people last seen within this many days, as a rolling window.\n- `ltv_gt` `number` \u2014 Select people whose lifetime ltv is greater than this value. LTV and AOV are in USD.\n- `ltv_gte` `number` \u2014 Select people whose lifetime ltv is at least this value. LTV and AOV are in USD.\n- `ltv_lt` `number` \u2014 Select people whose lifetime ltv is less than this value. LTV and AOV are in USD.\n- `ltv_lte` `number` \u2014 Select people whose lifetime ltv is at most this value. LTV and AOV are in USD.\n- `phone` `string` \u2014 Only include the person linked to this phone number.\n- `purchase_count_gt` `number` \u2014 Select people whose lifetime purchase_count is greater than this value. LTV and AOV are in USD.\n- `purchase_count_gte` `number` \u2014 Select people whose lifetime purchase_count is at least this value. LTV and AOV are in USD.\n- `purchase_count_lt` `number` \u2014 Select people whose lifetime purchase_count is less than this value. LTV and AOV are in USD.\n- `purchase_count_lte` `number` \u2014 Select people whose lifetime purchase_count is at most this value. LTV and AOV are in USD.\n- `query` `string` \u2014 Search people by name, email, phone, or whop user ID (case-insensitive substring match).\n- `source` `string[]` \u2014 Only include people acquired from any of these sources \u2014 canonical paths (whop:<campaign>:<group>:<ad>, ext:<platform>:..., referrer:<domain>, direct, other), exact or with a trailing :* prefix. The same vocabulary the events / people metrics use.\n- `to` `string` \u2014 Inclusive activity-window end. Alias for event_to.\n- `user_id` `string` \u2014 Only include the person linked to this whop user ID.\n\n</details>\n<details>\n<summary>plans (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/plans`.\n\n- `created_after` `string`\n- `created_before` `string`\n- `plan_types` `string[]`\n- `product_ids` `string[]`\n- `release_methods` `string[]`\n- `visibilities` `string[]`\n\n</details>\n<details>\n<summary>products (10)</summary>\n\nMirrors the filtering query params of `GET /api/v1/products`.\n\n- `access_pass_types` `string[]` \u2014 Filter to only products matching these types.\n- `created_after` `string` \u2014 Only return products created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only return products created before this ISO 8601 timestamp.\n- `labels` `string[]` \u2014 Filter to only products carrying all of these labels. Labels are matched lowercased.\n- `marketplace_category_route` `string` \u2014 Only return marketplace products assigned to this category route, such as `trading`.\n- `plan_types` `string[]` \u2014 Filter to products with a buyable variant of these billing models, such as `one_time` or `renewal`.\n- `price_maximum` `number` \u2014 Only return products whose advertised buyable variant has a displayed price of at most this amount. Recurring variants use renewal price.\n- `price_minimum` `number` \u2014 Only return products whose advertised buyable variant has a displayed price of at least this amount. Recurring variants use renewal price.\n- `query` `string` \u2014 Filters products by text. The public marketplace list searches product title, account name, headline and description, ranking products that match every word first and the closest partial matches after them; an account's own list is a plain substring match over title, headline and description. Omit to browse by recency.\n- `visibilities` `string[]` \u2014 Filter to only products matching these visibility states. Ignored on the public marketplace list, which only returns visible products.\n\n</details>\n<details>\n<summary>promo_codes (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/promo_codes`.\n\n- `created_after` `string` \u2014 Only promo codes created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only promo codes created before this ISO 8601 timestamp.\n- `plan_ids` `string[]` \u2014 Only promo codes scoped to these variant IDs.\n- `product_ids` `string[]` \u2014 Only promo codes scoped to these product IDs.\n- `status` `string` \u2014 Promo-code status. `expired` groups inactive and archived codes. One of `active`, `inactive`, `archived`, `expired`.\n\n</details>\n<details>\n<summary>resolution_center_cases (6)</summary>\n\nMirrors the filtering query params of `GET /api/v1/resolution_center_cases`.\n\n- `created_after` `string` \u2014 Only cases created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only cases created before this ISO 8601 timestamp.\n- `outcome` `string[]` \u2014 Only closed cases that ended these ways. Repeat the parameter to pass several.\n- `reason` `string[]` \u2014 Only cases opened for these reasons. Repeat the parameter to pass several.\n- `status` `string[]` \u2014 Only cases in these statuses. Repeat the parameter to pass several \u2014 one paginated list covers all of them.\n- `user_id` `string` \u2014 Only cases opened by this customer \u2014 a `user_` tag, or `me` for the calling user. It narrows what you can already read, so `me` lists the cases you opened without the ones on accounts you are a team member of.\n\n</details>\n<details>\n<summary>shipments (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/shipments`.\n\n- `created_after` `string` \u2014 Return shipments created after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Return shipments created before this ISO 8601 timestamp.\n- `payment_id` `string[]` \u2014 Only shipments fulfilling these payments, each prefixed `pay_`. Repeat the parameter to pass several, up to 100 per request \u2014 one paginated list covers all of them.\n- `status` `string` \u2014 Filter to shipments with this delivery status. One of `unknown`, `pre_transit`, `in_transit`, `out_for_delivery`, `delivered`, `available_for_pickup`, `return_to_sender`, `failure`, `cancelled`, `error`.\n\n</details>\n<details>\n<summary>social_accounts (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/social_accounts`.\n\n- `platform` `string` \u2014 Only return external accounts for the platform that is specified. One of `x`, `instagram`, `youtube`, `tiktok`, `facebook`, `discord`, `telegram`, `linkedin`, `snapchat`.\n- `scopes` `string[]` \u2014 Only return external accounts that have these scopes.\n- `trust_level` `string` \u2014 Only return external accounts linked with this trust level, such as `oauth` for accounts connected through OAuth. One of `oauth`, `verified`, `authorized`, `claimed`, `scraped`.\n- `user_id` `string` \u2014 The User that the external accounts are connected to. Provide either this or account_id.\n- `verified` `boolean` \u2014 Only return external accounts that are verified on the platform.\n\n</details>\n<details>\n<summary>team_members (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/team_members`.\n\n- `created_after` `string` \u2014 Only return members added after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only return members added before this ISO 8601 timestamp.\n- `role` `string` \u2014 Only return members with this role. `custom` matches members on a dashboard-managed custom role. One of `owner`, `admin`, `partner`, `sales_manager`, `moderator`, `advertiser`, `app_manager`, `support`, `manager`, `workforce`, `custom`.\n- `status` `string` \u2014 Only return members with this status: `joined` (accepted members) or `pending` (pending invites). Both are returned by default. One of `joined`, `pending`.\n- `user_id` `string` \u2014 Only return the membership for this user ID, prefixed `user_`.\n\n</details>\n<details>\n<summary>transfers (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/transfers`.\n\n- `created_after` `string` \u2014 Only transfers created strictly after this ISO 8601 timestamp.\n- `created_before` `string` \u2014 Only transfers created strictly before this ISO 8601 timestamp.\n- `destination_id` `string` \u2014 Filter to transfers received by this account. Provide this or origin_id.\n- `origin_id` `string` \u2014 Filter to transfers sent from this account. Provide this or destination_id.\n\n</details>\n<details>\n<summary>webhooks (3)</summary>\n\nMirrors the filtering query params of `GET /api/v1/webhooks`.\n\n- `app_id` `string` \u2014 Only return webhooks attached to this app. Omit to list the account's own webhooks.\n- `has_failures` `boolean` \u2014 Only return webhooks whose endpoint is currently failing \u2014 every delivery since the current failure streak began has been rejected. Clears as soon as a delivery succeeds.\n- `include_app_webhooks` `boolean` \u2014 Also return webhooks attached to the account's apps, not just the account's own. Cannot be combined with `app_id`.\n\n</details>\n</details>",
|
|
51779
51778
|
example: {
|
|
51780
51779
|
include_resource: false,
|
|
51781
51780
|
posted_after: "2026-01-01T12:00:00.000Z",
|
|
@@ -66495,6 +66494,55 @@ var native_spec_default = {
|
|
|
66495
66494
|
description: "Server-signed quote token to submit to POST /payouts.",
|
|
66496
66495
|
example: "signed-payout-quote",
|
|
66497
66496
|
type: "string"
|
|
66497
|
+
},
|
|
66498
|
+
recommended_method: {
|
|
66499
|
+
description: "An optional payout method to connect for estimated savings. The quote still uses the requested saved method.",
|
|
66500
|
+
properties: {
|
|
66501
|
+
country: {
|
|
66502
|
+
description: "Two-letter ISO country code for connecting the method.",
|
|
66503
|
+
example: "AE",
|
|
66504
|
+
type: "string"
|
|
66505
|
+
},
|
|
66506
|
+
destination_currency: {
|
|
66507
|
+
description: "Currency to select when connecting the method.",
|
|
66508
|
+
example: "eur",
|
|
66509
|
+
type: "string"
|
|
66510
|
+
},
|
|
66511
|
+
estimated_arrival: {
|
|
66512
|
+
description: "Estimated arrival when paying out with the suggested method, when available.",
|
|
66513
|
+
example: "2026-01-01T12:00:00.000Z",
|
|
66514
|
+
format: "date-time",
|
|
66515
|
+
type: ["string", "null"]
|
|
66516
|
+
},
|
|
66517
|
+
estimated_fee: {
|
|
66518
|
+
$ref: "#/components/schemas/Money",
|
|
66519
|
+
description: "Estimated total cost, including same-currency exchange-rate loss."
|
|
66520
|
+
},
|
|
66521
|
+
estimated_savings: {
|
|
66522
|
+
$ref: "#/components/schemas/Money",
|
|
66523
|
+
description: "Estimated increase in the delivered amount after fees compared with this quote."
|
|
66524
|
+
},
|
|
66525
|
+
name: {
|
|
66526
|
+
description: "Display name of the suggested payout method.",
|
|
66527
|
+
example: "Bank Wire",
|
|
66528
|
+
type: "string"
|
|
66529
|
+
},
|
|
66530
|
+
supported_payout_method_id: {
|
|
66531
|
+
description: "Supported payout method to connect, prefixed `podst_`.",
|
|
66532
|
+
example: "podst_xxxxxxxxxxxxxx",
|
|
66533
|
+
type: "string"
|
|
66534
|
+
}
|
|
66535
|
+
},
|
|
66536
|
+
required: [
|
|
66537
|
+
"supported_payout_method_id",
|
|
66538
|
+
"name",
|
|
66539
|
+
"country",
|
|
66540
|
+
"destination_currency",
|
|
66541
|
+
"estimated_savings",
|
|
66542
|
+
"estimated_fee",
|
|
66543
|
+
"estimated_arrival"
|
|
66544
|
+
],
|
|
66545
|
+
type: ["object", "null"]
|
|
66498
66546
|
}
|
|
66499
66547
|
},
|
|
66500
66548
|
required: [
|
|
@@ -66506,7 +66554,8 @@ var native_spec_default = {
|
|
|
66506
66554
|
"destination_amount",
|
|
66507
66555
|
"exchange_rate",
|
|
66508
66556
|
"expires_at",
|
|
66509
|
-
"quote_token"
|
|
66557
|
+
"quote_token",
|
|
66558
|
+
"recommended_method"
|
|
66510
66559
|
],
|
|
66511
66560
|
type: "object"
|
|
66512
66561
|
}
|
|
@@ -70575,7 +70624,7 @@ var native_spec_default = {
|
|
|
70575
70624
|
}
|
|
70576
70625
|
},
|
|
70577
70626
|
{
|
|
70578
|
-
description: "
|
|
70627
|
+
description: "Filters products by text. The public marketplace list searches product title, account name, headline and description, ranking products that match every word first and the closest partial matches after them; an account's own list is a plain substring match over title, headline and description. Omit to browse by recency.",
|
|
70579
70628
|
in: "query",
|
|
70580
70629
|
name: "query",
|
|
70581
70630
|
required: false,
|
|
@@ -75555,7 +75604,7 @@ var native_spec_default = {
|
|
|
75555
75604
|
"/stats/reports": {
|
|
75556
75605
|
get: {
|
|
75557
75606
|
description: "Lists every report: the aggregates that are not bucketed over time. Each entry names the report's path, its window kind, the breakdowns it accepts and its columns. A property column is an attribute of the row and lists the breakdowns it can ride along with. A metric column is a number measured over the row, with the unit that sets its JSON type, the aggregate that says how to combine it across rows, and the breakdowns and windows it supports. For a bucketed series, use `GET /stats/time_series`.",
|
|
75558
|
-
operationId: "
|
|
75607
|
+
operationId: "list",
|
|
75559
75608
|
responses: {
|
|
75560
75609
|
"200": {
|
|
75561
75610
|
content: {
|
|
@@ -75728,7 +75777,7 @@ var native_spec_default = {
|
|
|
75728
75777
|
"/stats/reports/platform_trends": {
|
|
75729
75778
|
get: {
|
|
75730
75779
|
description: "Payments across all of Whop, for up to four windows at once. Break rows down by business type, industry type, account country or customer country, and let the business type ride along on industry type rows. The report covers the whole platform, so it takes no `account_id` and any authenticated caller can read it. A breakdown value with fewer than three businesses behind it is left out, and a filtered total that small comes back with every metric `null`.",
|
|
75731
|
-
operationId: "
|
|
75780
|
+
operationId: "platform_trends",
|
|
75732
75781
|
parameters: [
|
|
75733
75782
|
{
|
|
75734
75783
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -76325,7 +76374,7 @@ var native_spec_default = {
|
|
|
76325
76374
|
"/stats/time_series": {
|
|
76326
76375
|
get: {
|
|
76327
76376
|
description: "Lists the metrics you can chart over time, with the unit each reports and the properties you can filter or break it down by. Aggregates that are not bucketed over time are reports, listed at `GET /stats/reports`.",
|
|
76328
|
-
operationId: "
|
|
76377
|
+
operationId: "list",
|
|
76329
76378
|
responses: {
|
|
76330
76379
|
"200": {
|
|
76331
76380
|
content: {
|
|
@@ -76423,7 +76472,7 @@ var native_spec_default = {
|
|
|
76423
76472
|
"/stats/time_series/{metric}": {
|
|
76424
76473
|
get: {
|
|
76425
76474
|
description: "Retrieves a metric as a time series of points for an account or user over a time range. For an aggregate that is not bucketed over time, use a report from `GET /stats/reports`. The `market_prices` metric is public and requires no authentication. The `funnel` metric measures 2 to 10 ordered events per person. Its first matching event inside from/to anchors the cohort, breakdown and conversion window; later entries do not restart it. Intervening events are allowed, and conversions may occur after to. Funnel values are final conversion percentages; steps include counts and cumulative conversion percentages. Experiment funnels use experiment.exposure as step 1 and breakdown_by=variant. Pass steps using bracket parameters such as steps[1][event]=pixel.page&steps[1][page]=/pricing*&steps[2][event]=payment.completed.",
|
|
76426
|
-
operationId: "
|
|
76475
|
+
operationId: "get",
|
|
76427
76476
|
parameters: [
|
|
76428
76477
|
{
|
|
76429
76478
|
description: "The metric to retrieve, for example net_revenue. Use GET /stats/time_series to see every metric key. The metric sets the unit and the properties you can filter or break down by.",
|
|
@@ -80459,7 +80508,7 @@ var native_spec_default = {
|
|
|
80459
80508
|
"/users/me/oauth_grants": {
|
|
80460
80509
|
get: {
|
|
80461
80510
|
description: "Lists the authenticated user's own OAuth grants \u2014 one per app they have authorized, per account they authorized it for. The list is always the caller's own; there is no parameter for reading another user's grants. Requires a user session: an API key or an OAuth token is refused, so an app can never enumerate the other apps a user has authorized.",
|
|
80462
|
-
operationId: "
|
|
80511
|
+
operationId: "list",
|
|
80463
80512
|
parameters: [
|
|
80464
80513
|
{
|
|
80465
80514
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -80613,7 +80662,7 @@ var native_spec_default = {
|
|
|
80613
80662
|
},
|
|
80614
80663
|
post: {
|
|
80615
80664
|
description: "Completes the OAuth authorization step for the authenticated user: records their consent for the scopes an app asked for and mints the authorization code to hand back to it. Returns the grant, plus a `redirect_url` carrying that code \u2014 the one and only time it is returned. Exchange the code at `POST /oauth/token` with the verifier for `code_challenge`, or with the app's secret when a confidential app sent none. Requires a user session, because consent has to come from the account holder: an API key or an OAuth token is refused, so an app can never authorize itself. Send an `Idempotency-Key` to make a retry safe \u2014 a replay returns the original `redirect_url` and its code rather than issuing a second one.",
|
|
80616
|
-
operationId: "authorize
|
|
80665
|
+
operationId: "authorize",
|
|
80617
80666
|
parameters: [
|
|
80618
80667
|
{
|
|
80619
80668
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -80768,7 +80817,7 @@ var native_spec_default = {
|
|
|
80768
80817
|
"/users/me/passkeys": {
|
|
80769
80818
|
get: {
|
|
80770
80819
|
description: "Lists the authenticated user's own passkeys, newest first. The list is always the caller's own; there is no parameter for reading another user's passkeys. Requires a user session: an API key or an OAuth token is refused, because a passkey confirms the account holder before a sensitive action and no app may enumerate one.",
|
|
80771
|
-
operationId: "
|
|
80820
|
+
operationId: "list",
|
|
80772
80821
|
parameters: [
|
|
80773
80822
|
{
|
|
80774
80823
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -80913,7 +80962,7 @@ var native_spec_default = {
|
|
|
80913
80962
|
},
|
|
80914
80963
|
post: {
|
|
80915
80964
|
description: "Registers a passkey for the authenticated user from the attestation a browser produced for a `registration` challenge. Mint that challenge first with `POST /users/me/passkeys/challenge`; it is single-use and expires 5 minutes after it is issued. Requires a user session.",
|
|
80916
|
-
operationId: "register
|
|
80965
|
+
operationId: "register",
|
|
80917
80966
|
parameters: [
|
|
80918
80967
|
{
|
|
80919
80968
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -81007,7 +81056,7 @@ var native_spec_default = {
|
|
|
81007
81056
|
"/users/me/passkeys/challenge": {
|
|
81008
81057
|
post: {
|
|
81009
81058
|
description: "Mints the challenge a browser needs to run a WebAuthn ceremony against the authenticated user's own passkeys. A `registration` challenge enrolls a new passkey; a `deletion` challenge is bound to the one passkey named by `passkey_id` and proves the user still holds it. Challenges are single-use and expire 5 minutes after they are issued, so send a fresh `Idempotency-Key` per ceremony \u2014 a replayed key returns the original challenge, which may already have expired. Requires a user session.",
|
|
81010
|
-
operationId: "
|
|
81059
|
+
operationId: "challenge",
|
|
81011
81060
|
parameters: [
|
|
81012
81061
|
{
|
|
81013
81062
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -81099,7 +81148,7 @@ var native_spec_default = {
|
|
|
81099
81148
|
"/users/me/passkeys/{id}": {
|
|
81100
81149
|
delete: {
|
|
81101
81150
|
description: "Deletes one of the authenticated user's own passkeys. The request body carries a WebAuthn assertion from the passkey being deleted, so possession of the credential is proven before it is removed: mint a `deletion` challenge for it first, run the ceremony with that passkey, and send the result here. Deleting the user's last passkey is allowed \u2014 their other step-up factors remain. Requires a user session.",
|
|
81102
|
-
operationId: "delete
|
|
81151
|
+
operationId: "delete",
|
|
81103
81152
|
parameters: [
|
|
81104
81153
|
{
|
|
81105
81154
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -81207,7 +81256,7 @@ var native_spec_default = {
|
|
|
81207
81256
|
"/users/me/preferences": {
|
|
81208
81257
|
get: {
|
|
81209
81258
|
description: "Retrieves the authenticated user's settings document. Addressed only as `me` \u2014 the document always belongs to the session user.",
|
|
81210
|
-
operationId: "
|
|
81259
|
+
operationId: "get",
|
|
81211
81260
|
responses: {
|
|
81212
81261
|
"200": {
|
|
81213
81262
|
content: {
|
|
@@ -81247,7 +81296,7 @@ var native_spec_default = {
|
|
|
81247
81296
|
},
|
|
81248
81297
|
patch: {
|
|
81249
81298
|
description: "Updates the authenticated user's settings document. Replaces the top-level keys it is given and leaves the rest untouched.",
|
|
81250
|
-
operationId: "update
|
|
81299
|
+
operationId: "update",
|
|
81251
81300
|
parameters: [
|
|
81252
81301
|
{
|
|
81253
81302
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -81320,7 +81369,7 @@ var native_spec_default = {
|
|
|
81320
81369
|
"/users/me/preferences/notifications": {
|
|
81321
81370
|
patch: {
|
|
81322
81371
|
description: "Sets the authenticated user's notification preferences. Each preference is addressed by `scope`, not by id, so a scope read back from either list endpoint can be sent straight here.\n\nA scope naming an experience with no topic sets that experience's level, and accepts all three levels. Any other scope sets a topic override, which is binary \u2014 `all` or `nothing`. A topic override with no `channel` applies to every delivery channel.\n\n`level: null` clears the preference. Preferences are stored as overrides, so clearing one means the scope inherits its default again rather than being switched off.\n\nThe batch is applied in one transaction: if any entry is rejected, none are written. Experience levels are applied before topic overrides, because setting a level replaces every topic preference for that experience \u2014 so an override sent alongside a level wins. The response reports what each scope now resolves to, in the order the entries were sent.",
|
|
81323
|
-
operationId: "
|
|
81372
|
+
operationId: "update",
|
|
81324
81373
|
parameters: [
|
|
81325
81374
|
{
|
|
81326
81375
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -81438,7 +81487,7 @@ var native_spec_default = {
|
|
|
81438
81487
|
"/users/me/preferences/notifications/experiences": {
|
|
81439
81488
|
get: {
|
|
81440
81489
|
description: "Lists the authenticated user's per-experience notification levels. Experiences the user never set a level for are omitted \u2014 their effective level is `all`.",
|
|
81441
|
-
operationId: "
|
|
81490
|
+
operationId: "experiences",
|
|
81442
81491
|
parameters: [
|
|
81443
81492
|
{
|
|
81444
81493
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -81536,7 +81585,7 @@ var native_spec_default = {
|
|
|
81536
81585
|
"/users/me/preferences/notifications/topics": {
|
|
81537
81586
|
get: {
|
|
81538
81587
|
description: "Lists the authenticated user's topic-scoped notification preferences, plus user-agnostic platform defaults. Each filter matches preferences scoped to its value or not narrowed on that dimension. Per-experience levels are listed separately, by `GET /users/me/preferences/notifications/experiences`.",
|
|
81539
|
-
operationId: "
|
|
81588
|
+
operationId: "topics",
|
|
81540
81589
|
parameters: [
|
|
81541
81590
|
{
|
|
81542
81591
|
$ref: "#/components/parameters/ApiVersionDate"
|
|
@@ -130109,7 +130158,7 @@ async function announceActionUrl(url2, {
|
|
|
130109
130158
|
// package.json
|
|
130110
130159
|
var package_default = {
|
|
130111
130160
|
name: "@whop/cli",
|
|
130112
|
-
version: "0.
|
|
130161
|
+
version: "0.25.0",
|
|
130113
130162
|
description: "The Whop CLI \u2014 build and manage Whop apps from your terminal. Human and agent friendly.",
|
|
130114
130163
|
keywords: [
|
|
130115
130164
|
"agent",
|
|
@@ -131681,6 +131730,62 @@ function transformNullableObjectBodyFields(operation) {
|
|
|
131681
131730
|
}
|
|
131682
131731
|
};
|
|
131683
131732
|
}
|
|
131733
|
+
function describeDefault(description, value) {
|
|
131734
|
+
const text4 = typeof description === "string" ? description.trim() : "";
|
|
131735
|
+
if (/\bdefault/i.test(text4)) return text4;
|
|
131736
|
+
const shown = typeof value === "string" ? value : JSON.stringify(value);
|
|
131737
|
+
const note = `Defaults to \`${shown}\`.`;
|
|
131738
|
+
return text4 ? `${text4} ${note}` : note;
|
|
131739
|
+
}
|
|
131740
|
+
function withoutDefault(owner, schema2, place) {
|
|
131741
|
+
if (!("default" in schema2)) return owner;
|
|
131742
|
+
const { default: value, ...rest } = schema2;
|
|
131743
|
+
return {
|
|
131744
|
+
...place(rest),
|
|
131745
|
+
description: describeDefault(
|
|
131746
|
+
owner.description ?? schema2.description,
|
|
131747
|
+
value
|
|
131748
|
+
)
|
|
131749
|
+
};
|
|
131750
|
+
}
|
|
131751
|
+
function transformDefaults(operation) {
|
|
131752
|
+
const parameters = Array.isArray(operation.parameters) ? operation.parameters.map((parameter) => {
|
|
131753
|
+
if (parameter == null || typeof parameter !== "object")
|
|
131754
|
+
return parameter;
|
|
131755
|
+
const record2 = parameter;
|
|
131756
|
+
const schema2 = record2.schema;
|
|
131757
|
+
if (!schema2 || typeof schema2 !== "object") return record2;
|
|
131758
|
+
return withoutDefault(record2, schema2, (rest) => ({
|
|
131759
|
+
...record2,
|
|
131760
|
+
schema: rest
|
|
131761
|
+
}));
|
|
131762
|
+
}) : operation.parameters;
|
|
131763
|
+
const requestBody2 = operation.requestBody;
|
|
131764
|
+
const mediaType = requestBody2?.content?.["application/json"];
|
|
131765
|
+
const bodySchema = mediaType?.schema;
|
|
131766
|
+
const properties = bodySchema?.properties ? Object.fromEntries(
|
|
131767
|
+
Object.entries(bodySchema.properties).map(([name, property]) => [
|
|
131768
|
+
name,
|
|
131769
|
+
withoutDefault(property, property, (rest) => rest)
|
|
131770
|
+
])
|
|
131771
|
+
) : void 0;
|
|
131772
|
+
return {
|
|
131773
|
+
...operation,
|
|
131774
|
+
...parameters ? { parameters } : {},
|
|
131775
|
+
...properties && requestBody2 && mediaType && bodySchema ? {
|
|
131776
|
+
requestBody: {
|
|
131777
|
+
...requestBody2,
|
|
131778
|
+
content: {
|
|
131779
|
+
...requestBody2.content,
|
|
131780
|
+
"application/json": {
|
|
131781
|
+
...mediaType,
|
|
131782
|
+
schema: { ...bodySchema, properties }
|
|
131783
|
+
}
|
|
131784
|
+
}
|
|
131785
|
+
}
|
|
131786
|
+
} : {}
|
|
131787
|
+
};
|
|
131788
|
+
}
|
|
131684
131789
|
function filterSpecByTag(spec2, tag) {
|
|
131685
131790
|
const hiddenRefs = hiddenParamRefs(spec2);
|
|
131686
131791
|
const paths = {};
|
|
@@ -131702,7 +131807,7 @@ function filterSpecByTag(spec2, tag) {
|
|
|
131702
131807
|
method,
|
|
131703
131808
|
path9,
|
|
131704
131809
|
transformNullableObjectBodyFields(
|
|
131705
|
-
transformParams(record2, hiddenRefs)
|
|
131810
|
+
transformDefaults(transformParams(record2, hiddenRefs))
|
|
131706
131811
|
)
|
|
131707
131812
|
);
|
|
131708
131813
|
}
|
|
@@ -132258,12 +132363,6 @@ var groups_default = [
|
|
|
132258
132363
|
description: "Legal identity required before payouts and card issuing.",
|
|
132259
132364
|
group: "Core Resources"
|
|
132260
132365
|
},
|
|
132261
|
-
{
|
|
132262
|
-
name: "financing-applications",
|
|
132263
|
-
tag: "Financing Applications",
|
|
132264
|
-
description: "Merchant applications to accept financing payments.",
|
|
132265
|
-
group: "Core Resources"
|
|
132266
|
-
},
|
|
132267
132366
|
{
|
|
132268
132367
|
name: "exports",
|
|
132269
132368
|
tag: "Exports",
|
|
@@ -132578,6 +132677,92 @@ var API_GROUPS = groups_default.filter(
|
|
|
132578
132677
|
({ name }) => !HANDWRITTEN_GROUP_NAMES.has(name)
|
|
132579
132678
|
);
|
|
132580
132679
|
|
|
132680
|
+
// src/api/subgroups.ts
|
|
132681
|
+
var SUBGROUP_KEY = "x-whop-docs-subgroup";
|
|
132682
|
+
var HTTP_METHODS2 = /* @__PURE__ */ new Set([
|
|
132683
|
+
"get",
|
|
132684
|
+
"put",
|
|
132685
|
+
"post",
|
|
132686
|
+
"delete",
|
|
132687
|
+
"options",
|
|
132688
|
+
"head",
|
|
132689
|
+
"patch",
|
|
132690
|
+
"trace"
|
|
132691
|
+
]);
|
|
132692
|
+
function subgroupCommandPath(subgroup) {
|
|
132693
|
+
return subgroup.split("/").map((segment) => segment.trim()).filter(Boolean).map((segment) => segment.toLowerCase().replace(/\s+/g, "-"));
|
|
132694
|
+
}
|
|
132695
|
+
function subgroupOf(operation) {
|
|
132696
|
+
const value = operation?.[SUBGROUP_KEY];
|
|
132697
|
+
return typeof value === "string" && value.trim() ? value : null;
|
|
132698
|
+
}
|
|
132699
|
+
function operations(spec2) {
|
|
132700
|
+
const found = [];
|
|
132701
|
+
for (const [path9, item] of Object.entries(
|
|
132702
|
+
spec2.paths ?? {}
|
|
132703
|
+
)) {
|
|
132704
|
+
for (const [method, operation] of Object.entries(item)) {
|
|
132705
|
+
if (HTTP_METHODS2.has(method)) found.push([path9, method, operation]);
|
|
132706
|
+
}
|
|
132707
|
+
}
|
|
132708
|
+
return found;
|
|
132709
|
+
}
|
|
132710
|
+
function subgroupsIn(spec2) {
|
|
132711
|
+
const subgroups = /* @__PURE__ */ new Set();
|
|
132712
|
+
for (const [, , operation] of operations(spec2)) {
|
|
132713
|
+
const subgroup = subgroupOf(operation);
|
|
132714
|
+
if (subgroup) subgroups.add(subgroup);
|
|
132715
|
+
}
|
|
132716
|
+
return [...subgroups].sort();
|
|
132717
|
+
}
|
|
132718
|
+
function filterSpecBySubgroup(spec2, subgroup) {
|
|
132719
|
+
const paths = {};
|
|
132720
|
+
for (const [path9, item] of Object.entries(
|
|
132721
|
+
spec2.paths ?? {}
|
|
132722
|
+
)) {
|
|
132723
|
+
const kept = {};
|
|
132724
|
+
for (const [method, operation] of Object.entries(item)) {
|
|
132725
|
+
if (HTTP_METHODS2.has(method) && subgroupOf(operation) !== subgroup) {
|
|
132726
|
+
continue;
|
|
132727
|
+
}
|
|
132728
|
+
kept[method] = operation;
|
|
132729
|
+
}
|
|
132730
|
+
if (Object.keys(kept).some((method) => HTTP_METHODS2.has(method))) {
|
|
132731
|
+
paths[path9] = kept;
|
|
132732
|
+
}
|
|
132733
|
+
}
|
|
132734
|
+
return { ...spec2, paths };
|
|
132735
|
+
}
|
|
132736
|
+
async function buildSubgroupedGroup(name, description, spec2, fetch3) {
|
|
132737
|
+
const root = Cli_exports.create(name, { description });
|
|
132738
|
+
const groups = /* @__PURE__ */ new Map([["", root]]);
|
|
132739
|
+
const groupFor = (path9, labels) => {
|
|
132740
|
+
const key = path9.join(" ");
|
|
132741
|
+
const existing = groups.get(key);
|
|
132742
|
+
if (existing) return existing;
|
|
132743
|
+
const parent = groupFor(path9.slice(0, -1), labels.slice(0, -1));
|
|
132744
|
+
const group = Cli_exports.create(path9.at(-1), { description: labels.at(-1) });
|
|
132745
|
+
parent.command(group);
|
|
132746
|
+
groups.set(key, group);
|
|
132747
|
+
return group;
|
|
132748
|
+
};
|
|
132749
|
+
for (const subgroup of [null, ...subgroupsIn(spec2)]) {
|
|
132750
|
+
const target = subgroup ? groupFor(
|
|
132751
|
+
subgroupCommandPath(subgroup),
|
|
132752
|
+
subgroup.split("/").map((label) => label.trim())
|
|
132753
|
+
) : root;
|
|
132754
|
+
const generated = await Openapi_exports.generateCommands(
|
|
132755
|
+
filterSpecBySubgroup(spec2, subgroup),
|
|
132756
|
+
fetch3,
|
|
132757
|
+
{ config: { security: false } }
|
|
132758
|
+
);
|
|
132759
|
+
for (const [command, entry] of generated) {
|
|
132760
|
+
if ("run" in entry) target.command(command, entry);
|
|
132761
|
+
}
|
|
132762
|
+
}
|
|
132763
|
+
return root;
|
|
132764
|
+
}
|
|
132765
|
+
|
|
132581
132766
|
// src/apps/commands.ts
|
|
132582
132767
|
import { spinner as spinner4 } from "@clack/prompts";
|
|
132583
132768
|
import { createHash as createHash3 } from "crypto";
|
|
@@ -137753,10 +137938,15 @@ for (const { name, tag, description } of API_GROUPS) {
|
|
|
137753
137938
|
cli.command(await buildFilesGroup(description));
|
|
137754
137939
|
continue;
|
|
137755
137940
|
}
|
|
137941
|
+
const tagSpec = spec(tag);
|
|
137942
|
+
if (subgroupsIn(tagSpec).length > 0) {
|
|
137943
|
+
cli.command(await buildSubgroupedGroup(name, description, tagSpec, fetch2));
|
|
137944
|
+
continue;
|
|
137945
|
+
}
|
|
137756
137946
|
cli.command(name, {
|
|
137757
137947
|
description,
|
|
137758
137948
|
fetch: fetch2,
|
|
137759
|
-
openapi:
|
|
137949
|
+
openapi: tagSpec,
|
|
137760
137950
|
openapiConfig: { security: false }
|
|
137761
137951
|
});
|
|
137762
137952
|
}
|
|
@@ -138016,7 +138206,7 @@ import {
|
|
|
138016
138206
|
select as select4,
|
|
138017
138207
|
text as text3
|
|
138018
138208
|
} from "@clack/prompts";
|
|
138019
|
-
var
|
|
138209
|
+
var HTTP_METHODS3 = /* @__PURE__ */ new Set([
|
|
138020
138210
|
"get",
|
|
138021
138211
|
"put",
|
|
138022
138212
|
"post",
|
|
@@ -138050,7 +138240,11 @@ var PROMPTABLE_TYPES = /* @__PURE__ */ new Set(["string", "number", "integer", "
|
|
|
138050
138240
|
function normalizeName(name) {
|
|
138051
138241
|
return name.replace(/-/g, "_");
|
|
138052
138242
|
}
|
|
138053
|
-
function
|
|
138243
|
+
function subgroupPathOf(operation) {
|
|
138244
|
+
const subgroup = operation[SUBGROUP_KEY];
|
|
138245
|
+
return typeof subgroup === "string" ? subgroupCommandPath(subgroup) : [];
|
|
138246
|
+
}
|
|
138247
|
+
function findSpecCommand(group, sub, subgroup = []) {
|
|
138054
138248
|
const entry = API_GROUPS.find(({ name }) => name === group);
|
|
138055
138249
|
if (!entry) return null;
|
|
138056
138250
|
const spec2 = filterSpecByTag(
|
|
@@ -138061,9 +138255,10 @@ function findSpecCommand(group, sub) {
|
|
|
138061
138255
|
spec2.paths
|
|
138062
138256
|
)) {
|
|
138063
138257
|
for (const [method, op] of Object.entries(methods)) {
|
|
138064
|
-
if (!
|
|
138258
|
+
if (!HTTP_METHODS3.has(method)) continue;
|
|
138065
138259
|
const operation = op;
|
|
138066
138260
|
if (operation.operationId !== sub) continue;
|
|
138261
|
+
if (subgroupPathOf(operation).join(" ") !== subgroup.join(" ")) continue;
|
|
138067
138262
|
const body = operation.requestBody?.content?.["application/json"]?.schema;
|
|
138068
138263
|
return {
|
|
138069
138264
|
method,
|
|
@@ -138111,6 +138306,27 @@ function scanProvided(tokens, command, skipUnknownShortFlags = false) {
|
|
|
138111
138306
|
}
|
|
138112
138307
|
return { options, positionals };
|
|
138113
138308
|
}
|
|
138309
|
+
function splitInvocation(tokens) {
|
|
138310
|
+
const [group, ...after] = tokens;
|
|
138311
|
+
const entry = API_GROUPS.find(({ name }) => name === group);
|
|
138312
|
+
if (!group || !entry) return null;
|
|
138313
|
+
const subgroupPaths = /* @__PURE__ */ new Set();
|
|
138314
|
+
for (const subgroup2 of subgroupsIn(
|
|
138315
|
+
filterSpecByTag(native_spec_default, entry.tag)
|
|
138316
|
+
)) {
|
|
138317
|
+
const path9 = subgroupCommandPath(subgroup2);
|
|
138318
|
+
for (let depth = 1; depth <= path9.length; depth++) {
|
|
138319
|
+
subgroupPaths.add(path9.slice(0, depth).join(" "));
|
|
138320
|
+
}
|
|
138321
|
+
}
|
|
138322
|
+
const subgroup = [];
|
|
138323
|
+
let index2 = 0;
|
|
138324
|
+
while (index2 < after.length && subgroupPaths.has([...subgroup, after[index2]].join(" "))) {
|
|
138325
|
+
subgroup.push(after[index2]);
|
|
138326
|
+
index2++;
|
|
138327
|
+
}
|
|
138328
|
+
return { group, subgroup, sub: after[index2], rest: after.slice(index2 + 1) };
|
|
138329
|
+
}
|
|
138114
138330
|
function hasLegacyAccountId(argv2) {
|
|
138115
138331
|
if (argv2.some((token) => NON_EXECUTING_FLAGS.has(token))) return false;
|
|
138116
138332
|
const commandArgv = [];
|
|
@@ -138126,11 +138342,16 @@ function hasLegacyAccountId(argv2) {
|
|
|
138126
138342
|
}
|
|
138127
138343
|
commandArgv.push(token);
|
|
138128
138344
|
}
|
|
138129
|
-
const
|
|
138130
|
-
if (group !== "accounts" || !sub) return false;
|
|
138131
|
-
const
|
|
138345
|
+
const invocation = splitInvocation(commandArgv);
|
|
138346
|
+
if (invocation?.group !== "accounts" || !invocation.sub) return false;
|
|
138347
|
+
const { group, subgroup, sub, rest } = invocation;
|
|
138348
|
+
const command = findSpecCommand(group, sub, subgroup);
|
|
138132
138349
|
if (!command || !command.path.includes("{account_id}")) return false;
|
|
138133
|
-
|
|
138350
|
+
const pathArgs = command.parameters.filter(
|
|
138351
|
+
({ in: location }) => location === "path"
|
|
138352
|
+
);
|
|
138353
|
+
const positionals = scanProvided(rest, command, true)?.positionals.length ?? 0;
|
|
138354
|
+
return positionals > pathArgs.length;
|
|
138134
138355
|
}
|
|
138135
138356
|
function toMissingParam(name, kind, schema2, description) {
|
|
138136
138357
|
const enumValues = schema2?.enum?.every((v) => typeof v === "string") ? schema2.enum : void 0;
|
|
@@ -138254,15 +138475,16 @@ async function resolveContext(command) {
|
|
|
138254
138475
|
}
|
|
138255
138476
|
async function promptForMissingParams(argv2) {
|
|
138256
138477
|
if (!process.stdin.isTTY || !process.stdout.isTTY) return argv2;
|
|
138257
|
-
const
|
|
138258
|
-
if (!
|
|
138478
|
+
const invocation = splitInvocation(argv2);
|
|
138479
|
+
if (!invocation?.sub || invocation.sub.startsWith("-")) return argv2;
|
|
138259
138480
|
if (argv2.some((token) => NON_EXECUTING_FLAGS.has(token))) return argv2;
|
|
138260
|
-
const
|
|
138481
|
+
const { group, subgroup, sub, rest } = invocation;
|
|
138482
|
+
const command = findSpecCommand(group, sub, subgroup);
|
|
138261
138483
|
if (!command) return argv2;
|
|
138262
138484
|
const context = await resolveContext(command);
|
|
138263
138485
|
const missing = collectMissingParams(command, rest, context);
|
|
138264
138486
|
if (!missing || missing.length === 0) return argv2;
|
|
138265
|
-
intro(`whop ${group
|
|
138487
|
+
intro(`whop ${[group, ...subgroup, sub].join(" ")}`);
|
|
138266
138488
|
const extra = [];
|
|
138267
138489
|
for (const param of missing) {
|
|
138268
138490
|
const tokens = await promptForParam(param);
|