@whop/cli 0.16.0 → 0.16.1

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.
Files changed (49) hide show
  1. package/README.md +2 -2
  2. package/dist/index.js +1534 -412
  3. package/dist/index.js.map +1 -1
  4. package/package.json +2 -2
  5. package/skills/whop/SKILL.md +48 -0
  6. package/skills/whop/references/ads.md +43 -0
  7. package/skills/whop/references/formation.md +40 -0
  8. package/skills/whop/references/websites.md +59 -0
  9. package/skills/whop-accounts/SKILL.md +0 -228
  10. package/skills/whop-ad-campaigns/SKILL.md +0 -204
  11. package/skills/whop-ad-groups/SKILL.md +0 -269
  12. package/skills/whop-ads/SKILL.md +0 -277
  13. package/skills/whop-api-keys/SKILL.md +0 -126
  14. package/skills/whop-app-builds/SKILL.md +0 -81
  15. package/skills/whop-apps/SKILL.md +0 -161
  16. package/skills/whop-audiences/SKILL.md +0 -105
  17. package/skills/whop-bounties/SKILL.md +0 -145
  18. package/skills/whop-bounty-submissions/SKILL.md +0 -95
  19. package/skills/whop-cards/SKILL.md +0 -133
  20. package/skills/whop-checkout-configurations/SKILL.md +0 -77
  21. package/skills/whop-deposits/SKILL.md +0 -26
  22. package/skills/whop-dispute-alerts/SKILL.md +0 -42
  23. package/skills/whop-disputes/SKILL.md +0 -99
  24. package/skills/whop-events/SKILL.md +0 -105
  25. package/skills/whop-exports/SKILL.md +0 -379
  26. package/skills/whop-ledgers/SKILL.md +0 -52
  27. package/skills/whop-media/SKILL.md +0 -44
  28. package/skills/whop-members/SKILL.md +0 -64
  29. package/skills/whop-memberships/SKILL.md +0 -165
  30. package/skills/whop-notifications/SKILL.md +0 -104
  31. package/skills/whop-partners/SKILL.md +0 -113
  32. package/skills/whop-payment-method-domains/SKILL.md +0 -93
  33. package/skills/whop-payments/SKILL.md +0 -40
  34. package/skills/whop-payouts/SKILL.md +0 -167
  35. package/skills/whop-people/SKILL.md +0 -63
  36. package/skills/whop-permissions/SKILL.md +0 -21
  37. package/skills/whop-plans/SKILL.md +0 -165
  38. package/skills/whop-products/SKILL.md +0 -153
  39. package/skills/whop-recommended-actions/SKILL.md +0 -59
  40. package/skills/whop-resolution-center-cases/SKILL.md +0 -233
  41. package/skills/whop-setup-intents/SKILL.md +0 -40
  42. package/skills/whop-shipments/SKILL.md +0 -79
  43. package/skills/whop-social-accounts/SKILL.md +0 -128
  44. package/skills/whop-stats/SKILL.md +0 -65
  45. package/skills/whop-swaps/SKILL.md +0 -77
  46. package/skills/whop-team-members/SKILL.md +0 -93
  47. package/skills/whop-transfers/SKILL.md +0 -80
  48. package/skills/whop-users/SKILL.md +0 -309
  49. package/skills/whop-verifications/SKILL.md +0 -67
package/dist/index.js CHANGED
@@ -2003,7 +2003,7 @@ var require_toml = __commonJS({
2003
2003
  }
2004
2004
  });
2005
2005
 
2006
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Cli.js
2006
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Cli.js
2007
2007
  var Cli_exports = {};
2008
2008
  __export(Cli_exports, {
2009
2009
  collectSkillCommands: () => collectSkillCommands,
@@ -2104,7 +2104,35 @@ function extractSegmentPart(segment, segmentTokenStart, segmentTokenCount, targe
2104
2104
  return segment.slice(charStart, charEnd);
2105
2105
  }
2106
2106
 
2107
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/helpers.js
2107
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/helpers.js
2108
+ function arraySchema(schema2) {
2109
+ const inner = unwrapSchema(schema2);
2110
+ if (inner.constructor.name === "ZodArray")
2111
+ return inner;
2112
+ if (inner.constructor.name !== "ZodUnion")
2113
+ return void 0;
2114
+ const members = inner.def?.options;
2115
+ if (!members)
2116
+ return void 0;
2117
+ let array;
2118
+ for (const member of members) {
2119
+ const unwrapped = unwrapSchema(member);
2120
+ const name = unwrapped.constructor.name;
2121
+ if (name === "ZodArray") {
2122
+ if (array)
2123
+ return void 0;
2124
+ array = unwrapped;
2125
+ } else if (name !== "ZodNull" && name !== "ZodUndefined")
2126
+ return void 0;
2127
+ }
2128
+ return array;
2129
+ }
2130
+ function unwrapSchema(schema2) {
2131
+ let current = schema2;
2132
+ while (current.def?.innerType)
2133
+ current = current.def.innerType;
2134
+ return current;
2135
+ }
2108
2136
  function isRecord(value) {
2109
2137
  return typeof value === "object" && value !== null && !Array.isArray(value);
2110
2138
  }
@@ -2161,7 +2189,7 @@ function describedAs(schema2) {
2161
2189
  return void 0;
2162
2190
  }
2163
2191
 
2164
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Completions.js
2192
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Completions.js
2165
2193
  function register(shell, name) {
2166
2194
  switch (shell) {
2167
2195
  case "bash":
@@ -2424,7 +2452,7 @@ let _incur_complete_${id} = {|spans|
2424
2452
  }`;
2425
2453
  }
2426
2454
 
2427
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Errors.js
2455
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Errors.js
2428
2456
  var BaseError = class extends Error {
2429
2457
  name = "Incur.BaseError";
2430
2458
  /** The short, human-readable error message (without details). */
@@ -2498,7 +2526,7 @@ function walk(error, fn) {
2498
2526
  return current;
2499
2527
  }
2500
2528
 
2501
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Fetch.js
2529
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Fetch.js
2502
2530
  var reservedFlags = /* @__PURE__ */ new Set(["method", "body", "data", "header"]);
2503
2531
  var reservedShort = { X: "method", d: "data", H: "header" };
2504
2532
  function parseArgv(argv2) {
@@ -2634,7 +2662,7 @@ async function parseResponse(response) {
2634
2662
  };
2635
2663
  }
2636
2664
 
2637
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Filter.js
2665
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Filter.js
2638
2666
  function parse(expression) {
2639
2667
  const paths = [];
2640
2668
  const tokens = [];
@@ -2740,7 +2768,7 @@ function merge(target, data, segments, index2) {
2740
2768
  }
2741
2769
  }
2742
2770
 
2743
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Formatter.js
2771
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Formatter.js
2744
2772
  var Formatter_exports = {};
2745
2773
  __export(Formatter_exports, {
2746
2774
  format: () => format2
@@ -3140,7 +3168,7 @@ function resolveOptions(options) {
3140
3168
  };
3141
3169
  }
3142
3170
 
3143
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/json.js
3171
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/json.js
3144
3172
  function stringify(value, space) {
3145
3173
  return JSON.stringify(value, (_key, value2) => {
3146
3174
  if (typeof value2 === "bigint")
@@ -3152,7 +3180,7 @@ function normalize(value) {
3152
3180
  return JSON.parse(stringify(value));
3153
3181
  }
3154
3182
 
3155
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/yaml.js
3183
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/yaml.js
3156
3184
  import { createRequire } from "module";
3157
3185
  var cached;
3158
3186
  async function load() {
@@ -3164,7 +3192,7 @@ function loadSync() {
3164
3192
  return cached;
3165
3193
  }
3166
3194
 
3167
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Formatter.js
3195
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Formatter.js
3168
3196
  function format2(value, fmt = "toon") {
3169
3197
  if (value == null)
3170
3198
  return "";
@@ -3272,7 +3300,7 @@ ${String(val)}`;
3272
3300
  return kvTable(obj);
3273
3301
  }
3274
3302
 
3275
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Parser.js
3303
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Parser.js
3276
3304
  function parse2(argv2, options = {}) {
3277
3305
  const { args: argsSchema, options: optionsSchema, alias, defaults } = options;
3278
3306
  const optionNames = createOptionNames(optionsSchema, alias);
@@ -3411,19 +3439,13 @@ function normalizeOptionDefaults(defaults, schema2, optionNames) {
3411
3439
  }
3412
3440
  return normalized;
3413
3441
  }
3414
- function unwrap2(schema2) {
3415
- let s = schema2;
3416
- while (s.def?.innerType)
3417
- s = s.def.innerType;
3418
- return s;
3419
- }
3420
3442
  function isBooleanOption2(name, schema2) {
3421
3443
  if (!schema2)
3422
3444
  return false;
3423
3445
  const field = schema2.shape[name];
3424
3446
  if (!field)
3425
3447
  return false;
3426
- return unwrap2(field).constructor.name === "ZodBoolean";
3448
+ return unwrapSchema(field).constructor.name === "ZodBoolean";
3427
3449
  }
3428
3450
  function isCountOption(name, schema2) {
3429
3451
  if (!schema2)
@@ -3439,7 +3461,7 @@ function isArrayOption(name, schema2) {
3439
3461
  const field = schema2.shape[name];
3440
3462
  if (!field)
3441
3463
  return false;
3442
- return unwrap2(field).constructor.name === "ZodArray";
3464
+ return arraySchema(field) !== void 0;
3443
3465
  }
3444
3466
  function setOption(raw, name, value, schema2) {
3445
3467
  if (isArrayOption(name, schema2)) {
@@ -3496,7 +3518,7 @@ function parseEnv(schema2, source = defaultEnvSource()) {
3496
3518
  return zodParse(schema2, raw);
3497
3519
  }
3498
3520
  function coerceEnv(value, field) {
3499
- const inner = unwrap2(field);
3521
+ const inner = unwrapSchema(field);
3500
3522
  const typeName = inner.constructor.name;
3501
3523
  if (typeName === "ZodNumber")
3502
3524
  return Number(value);
@@ -3508,7 +3530,7 @@ function coerce(value, name, schema2) {
3508
3530
  const field = schema2.shape[name];
3509
3531
  if (!field)
3510
3532
  return value;
3511
- const inner = unwrap2(field);
3533
+ const inner = unwrapSchema(field);
3512
3534
  const typeName = inner.constructor.name;
3513
3535
  if (typeName === "ZodNumber" && typeof value === "string") {
3514
3536
  return Number(value);
@@ -3522,17 +3544,18 @@ function coerce(value, name, schema2) {
3522
3544
  if (typeName === "ZodUnion" && typeof value === "string") {
3523
3545
  return coerceUnion(value, inner);
3524
3546
  }
3525
- if (typeName === "ZodArray" && Array.isArray(value)) {
3526
- return coerceArray(value, name, inner);
3547
+ const array = arraySchema(inner);
3548
+ if (array && Array.isArray(value)) {
3549
+ return coerceArray(value, name, array);
3527
3550
  }
3528
3551
  return value;
3529
3552
  }
3530
3553
  function isStructuredType(typeName) {
3531
3554
  return typeName === "ZodObject" || typeName === "ZodRecord";
3532
3555
  }
3533
- function coerceArray(values, name, arraySchema) {
3534
- const element = arraySchema.def?.element;
3535
- const structured = element ? isStructuredType(unwrap2(element).constructor.name) : false;
3556
+ function coerceArray(values, name, arraySchema2) {
3557
+ const element = arraySchema2.def?.element;
3558
+ const structured = element ? isStructuredType(unwrapSchema(element).constructor.name) : false;
3536
3559
  if (values.length === 1 && typeof values[0] === "string" && values[0].trim().startsWith("[")) {
3537
3560
  try {
3538
3561
  const parsed = JSON.parse(values[0]);
@@ -3549,7 +3572,7 @@ function coerceArray(values, name, arraySchema) {
3549
3572
  }
3550
3573
  function coerceUnion(value, union) {
3551
3574
  const members = union.def?.options;
3552
- if (!members?.some((member) => isStructuredType(unwrap2(member).constructor.name)))
3575
+ if (!members?.some((member) => isStructuredType(unwrapSchema(member).constructor.name)))
3553
3576
  return value;
3554
3577
  const trimmed = value.trim();
3555
3578
  if (!trimmed.startsWith("{") && !trimmed.startsWith("["))
@@ -3689,7 +3712,7 @@ function defaultEnvSource() {
3689
3712
  return {};
3690
3713
  }
3691
3714
 
3692
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/command.js
3715
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/command.js
3693
3716
  var sentinel = Symbol.for("incur.sentinel");
3694
3717
  async function execute(command, options) {
3695
3718
  const { argv: argv2, inputOptions: inputOptions2, agent, format: format4, formatExplicit, name, path: path9, version, envSource = process.env, env: envSchema, globals = {}, vars: varsSchema, middlewares = [], request: request2 } = options;
@@ -3938,7 +3961,7 @@ function findBuiltinSubcommand(builtin, token) {
3938
3961
  return builtin.subcommands?.find((sub) => sub.name === token || sub.aliases?.includes(token));
3939
3962
  }
3940
3963
 
3941
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Help.js
3964
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Help.js
3942
3965
  function formatRoot(name, options = {}) {
3943
3966
  const { aliases, configFlag, description, globals, version, commands = [], root = false } = options;
3944
3967
  const lines = [];
@@ -4125,14 +4148,14 @@ function optionEntries(schema2, alias) {
4125
4148
  function resolveTypeName(schema2) {
4126
4149
  if (isCountSchema(schema2))
4127
4150
  return "count";
4128
- const unwrapped = unwrap3(schema2);
4151
+ const unwrapped = unwrap2(schema2);
4129
4152
  if (unwrapped instanceof external_exports.ZodString)
4130
4153
  return "string";
4131
4154
  if (unwrapped instanceof external_exports.ZodNumber)
4132
4155
  return "number";
4133
4156
  if (unwrapped instanceof external_exports.ZodBoolean)
4134
4157
  return "boolean";
4135
- if (unwrapped instanceof external_exports.ZodArray)
4158
+ if (arraySchema(unwrapped))
4136
4159
  return "array";
4137
4160
  if (unwrapped instanceof external_exports.ZodEnum) {
4138
4161
  const values = Object.values(unwrapped._zod.def.entries);
@@ -4151,13 +4174,13 @@ function isCountSchema(schema2) {
4151
4174
  const s = schema2;
4152
4175
  return typeof s?.meta === "function" && s.meta()?.count === true;
4153
4176
  }
4154
- function unwrap3(schema2) {
4177
+ function unwrap2(schema2) {
4155
4178
  if (schema2 instanceof external_exports.ZodOptional)
4156
- return unwrap3(schema2.unwrap());
4179
+ return unwrap2(schema2.unwrap());
4157
4180
  if (schema2 instanceof external_exports.ZodDefault)
4158
- return unwrap3(schema2.removeDefault());
4181
+ return unwrap2(schema2.removeDefault());
4159
4182
  if (schema2 instanceof external_exports.ZodNullable)
4160
- return unwrap3(schema2.unwrap());
4183
+ return unwrap2(schema2.unwrap());
4161
4184
  return schema2;
4162
4185
  }
4163
4186
  function extractDefault(schema2) {
@@ -4232,7 +4255,7 @@ function redact(value) {
4232
4255
  return `****${value.slice(-4)}`;
4233
4256
  }
4234
4257
 
4235
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/cta.js
4258
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/cta.js
4236
4259
  function formatCtaBlock(name, block) {
4237
4260
  if (!block || block.commands.length === 0)
4238
4261
  return void 0;
@@ -4255,7 +4278,7 @@ function formatCta(name, cta) {
4255
4278
  return { command: cmd, ...cta.description ? { description: cta.description } : void 0 };
4256
4279
  }
4257
4280
 
4258
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/pm.js
4281
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/pm.js
4259
4282
  function detectRunner() {
4260
4283
  const userAgent = process.env.npm_config_user_agent ?? "";
4261
4284
  const execPath = process.env.npm_execpath ?? "";
@@ -4266,7 +4289,7 @@ function detectRunner() {
4266
4289
  return "npx";
4267
4290
  }
4268
4291
 
4269
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Schema.js
4292
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Schema.js
4270
4293
  function toJsonSchema(schema2) {
4271
4294
  const result = external_exports.toJSONSchema(schema2, {
4272
4295
  unrepresentable: "any",
@@ -4280,7 +4303,7 @@ function toJsonSchema(schema2) {
4280
4303
  return result;
4281
4304
  }
4282
4305
 
4283
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Mcp.js
4306
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Mcp.js
4284
4307
  async function serve(name, version, commands, options = {}) {
4285
4308
  const stdio = importStdioModule();
4286
4309
  const mcp = await import("./dist-KFETZ34P.js");
@@ -4615,7 +4638,7 @@ function buildToolSchema(args, options) {
4615
4638
  return { type: "object", properties };
4616
4639
  }
4617
4640
 
4618
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Openapi.js
4641
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Openapi.js
4619
4642
  var Openapi_exports = {};
4620
4643
  __export(Openapi_exports, {
4621
4644
  coerceIfNeeded: () => coerceIfNeeded,
@@ -4625,7 +4648,7 @@ __export(Openapi_exports, {
4625
4648
  toZod: () => toZod
4626
4649
  });
4627
4650
 
4628
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/dereference.js
4651
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/dereference.js
4629
4652
  function dereference(root) {
4630
4653
  const cache = /* @__PURE__ */ new Map();
4631
4654
  return walk2(root, root, cache);
@@ -4677,7 +4700,7 @@ function resolvePointer(root, pointer) {
4677
4700
  return current;
4678
4701
  }
4679
4702
 
4680
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Openapi.js
4703
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Openapi.js
4681
4704
  function fromCli(cli2, options = {}) {
4682
4705
  const commands = toCommands.get(cli2);
4683
4706
  if (!commands)
@@ -5274,7 +5297,7 @@ function coerceIfNeeded(schema2) {
5274
5297
  return desc ? coerced.describe(desc) : coerced;
5275
5298
  }
5276
5299
 
5277
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/McpSource.js
5300
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/McpSource.js
5278
5301
  var protocolVersion = "2025-06-18";
5279
5302
  async function resolve2(source, options = {}) {
5280
5303
  const session = sourceSession(source);
@@ -5441,7 +5464,7 @@ function resultValue(result) {
5441
5464
  return textItems;
5442
5465
  }
5443
5466
 
5444
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Skill.js
5467
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Skill.js
5445
5468
  import { createHash } from "crypto";
5446
5469
  function index(name, commands, description) {
5447
5470
  const lines = [`# ${name}`];
@@ -5687,7 +5710,7 @@ function resolveTypeName2(prop) {
5687
5710
  return "unknown";
5688
5711
  }
5689
5712
 
5690
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/SyncMcp.js
5713
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/SyncMcp.js
5691
5714
  import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, realpathSync, writeFileSync as writeFileSync5 } from "fs";
5692
5715
  import { homedir } from "os";
5693
5716
  import { dirname, join } from "path";
@@ -10582,7 +10605,7 @@ function upsertServer(agentType, serverName, serverConfig, options = {}) {
10582
10605
  );
10583
10606
  }
10584
10607
 
10585
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/SyncMcp.js
10608
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/SyncMcp.js
10586
10609
  async function register2(name, options = {}) {
10587
10610
  const command = options.command ?? defaultCommand(name, detectRunner());
10588
10611
  const explicit = (options.agents ?? []).filter(Boolean);
@@ -10745,13 +10768,13 @@ function splitCommand(input) {
10745
10768
  return tokens;
10746
10769
  }
10747
10770
 
10748
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/SyncSkills.js
10771
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/SyncSkills.js
10749
10772
  import fsSync from "fs";
10750
10773
  import fs2 from "fs/promises";
10751
10774
  import os2 from "os";
10752
10775
  import path2 from "path";
10753
10776
 
10754
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/internal/agents.js
10777
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/internal/agents.js
10755
10778
  import * as fs from "fs";
10756
10779
  import * as os from "os";
10757
10780
  import * as path from "path";
@@ -11031,7 +11054,7 @@ function resolveParent(dir) {
11031
11054
  }
11032
11055
  }
11033
11056
 
11034
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/SyncSkills.js
11057
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/SyncSkills.js
11035
11058
  async function sync(name, commands, options = {}) {
11036
11059
  const { depth = 1, description, global: global2 = true } = options;
11037
11060
  const cwd = options.cwd ?? (global2 ? resolvePackageRoot() : process.cwd());
@@ -11203,7 +11226,7 @@ function readHash(name) {
11203
11226
  return readMeta(name)?.hash;
11204
11227
  }
11205
11228
 
11206
- // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc/node_modules/incur/dist/Cli.js
11229
+ // ../../node_modules/.pnpm/incur@https+++codeload.github.com+whopio+incur+tar.gz+973bd1a868a8ec8f59d05fc3f85555045b183613/node_modules/incur/dist/Cli.js
11207
11230
  var destructiveCommandHint = "Confirm with the user before executing this destructive command.";
11208
11231
  function create(nameOrDefinition, definition) {
11209
11232
  const name = typeof nameOrDefinition === "string" ? nameOrDefinition : nameOrDefinition.name;
@@ -13636,6 +13659,9 @@ function resolveDisplayName(name, aliases) {
13636
13659
  return name;
13637
13660
  }
13638
13661
 
13662
+ // src/cli.ts
13663
+ import { join as join14 } from "path";
13664
+
13639
13665
  // src/api/native-spec.json
13640
13666
  var native_spec_default = {
13641
13667
  openapi: "3.1.0",
@@ -13771,7 +13797,7 @@ var native_spec_default = {
13771
13797
  "x-whop-summary": "Discounts that creators configure for checkout."
13772
13798
  },
13773
13799
  {
13774
- description: "A Membership is a customer's purchase of a plan: the subscription or one-time grant that gives them access to a product. It tracks billing state (`active`, `trialing`, `past_due`, and so on), the current period, pending cancellations, custom metadata, and the software license key when the product includes licensing.\n\nUse the Memberships API to list an account's memberships or the caller's own, retrieve one by ID or license key, invite a recipient to join through a free plan, and manage the lifecycle: cancel immediately or at period end, reverse a scheduled period-end cancellation, pause and resume payment collection, extend with free days, and update metadata.\n",
13800
+ description: "A Membership is a customer's purchase of a plan: the subscription or one-time grant that gives them access to a product. It tracks billing state (`active`, `trialing`, `past_due`, and so on), the current period, pending cancellations, custom metadata, and the software license key when the product includes licensing.\n\nUse the Memberships API to list an account's memberships or the caller's own, retrieve one by ID or license key, invite a recipient to join through a free plan, and manage the lifecycle: cancel immediately or at period end, reverse a scheduled period-end cancellation, pause and resume payment collection, extend with free days, generate a transfer link, and update metadata.\n",
13775
13801
  name: "Memberships",
13776
13802
  "x-whop-summary": "A customer's purchase of a plan, from checkout through cancellation."
13777
13803
  },
@@ -13851,7 +13877,7 @@ var native_spec_default = {
13851
13877
  "x-whop-summary": "Connected Facebook and Instagram accounts that run ads."
13852
13878
  },
13853
13879
  {
13854
- description: "An App is software you build on Whop. It can be a hosted web app served at `<route>.whop.app` or an API integration installed as an experience, and it belongs to the account that owns its credentials, settings, builds, and runtime logs.\n\nUse the Apps API to manage app configuration and, for hosted apps, read server runtime logs for console output, uncaught exceptions, and failed requests. Logs are retained for 7 days and can be filtered by build, level, time window, and message text.\n",
13880
+ description: "An App is software you build on Whop. It can be a hosted web app served at `<route>.whop.app` or an API integration installed as an experience, and it belongs to the account that owns its credentials, settings, builds, and runtime logs.\n\nUse the Apps API to manage app configuration, deploy an app's working copy and follow the run on the app's `deployment` field, and, for hosted apps, read server runtime logs for console output, uncaught exceptions, and failed requests. Logs are retained for 7 days and can be filtered by build, level, time window, and message text.\n",
13855
13881
  name: "Apps",
13856
13882
  "x-whop-summary": "Apps you build on Whop: metadata, hosted builds, runtime logs."
13857
13883
  },
@@ -15280,13 +15306,7 @@ var native_spec_default = {
15280
15306
  metadata: {
15281
15307
  sidebarTitle: "Retrieve"
15282
15308
  }
15283
- },
15284
- "x-codeSamples": [
15285
- {
15286
- lang: "JavaScript",
15287
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst account = await client.accounts.retrieve('id');\n\nconsole.log(account.id);"
15288
- }
15289
- ]
15309
+ }
15290
15310
  },
15291
15311
  patch: {
15292
15312
  description: "Updates an account. User tokens can update business accounts; Account API keys can update connected accounts.",
@@ -18113,13 +18133,7 @@ var native_spec_default = {
18113
18133
  metadata: {
18114
18134
  sidebarTitle: "Update"
18115
18135
  }
18116
- },
18117
- "x-codeSamples": [
18118
- {
18119
- lang: "JavaScript",
18120
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst account = await client.accounts.update('id');\n\nconsole.log(account.id);"
18121
- }
18122
- ]
18136
+ }
18123
18137
  }
18124
18138
  },
18125
18139
  "/accounts/{id}/form_company": {
@@ -18594,12 +18608,6 @@ var native_spec_default = {
18594
18608
  summary: "Form Company",
18595
18609
  tags: [
18596
18610
  "Accounts"
18597
- ],
18598
- "x-codeSamples": [
18599
- {
18600
- lang: "JavaScript",
18601
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.accounts.formCompany('id', {\n business_name: 'Shine Time Auto Detailing',\n business_type: 'brick_and_mortar',\n formation_state: 'TX',\n founders: [\n {\n address: {\n city: 'Austin',\n country: 'US',\n line1: '907 Ridgemont Dr',\n postal_code: '78704',\n state: 'TX',\n },\n email: 'marcus@shinetime.example',\n first_name: 'Marcus',\n is_primary: true,\n last_name: 'Webb',\n phone: '+15125550142',\n },\n ],\n industry_group: 'automotive',\n industry_type: 'car_wash',\n});\n\nconsole.log(response.checkout_session_id);"
18602
- }
18603
18611
  ]
18604
18612
  }
18605
18613
  },
@@ -18710,12 +18718,6 @@ var native_spec_default = {
18710
18718
  summary: "Transfer Account Ownership",
18711
18719
  tags: [
18712
18720
  "Accounts"
18713
- ],
18714
- "x-codeSamples": [
18715
- {
18716
- lang: "JavaScript",
18717
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.accounts.transferOwnership('id', {\n identifier: 'marcus@shinetime.example',\n});\n\nconsole.log(response.success);"
18718
- }
18719
18721
  ]
18720
18722
  }
18721
18723
  },
@@ -21894,12 +21896,12 @@ var native_spec_default = {
21894
21896
  type: "string"
21895
21897
  },
21896
21898
  url: {
21897
- description: "The URL the ad links to.",
21899
+ description: "The URL the ad links to. Query parameters are merged into url_parameters, so the stored URL is always bare.",
21898
21900
  example: "https://shinetime.example/ceramic-coating",
21899
21901
  type: "string"
21900
21902
  },
21901
21903
  url_parameters: {
21902
- description: "Query parameters appended to the destination URL, keyed by parameter name.",
21904
+ description: "Query parameters to append to the destination URL, keyed by parameter name. Merged with any query string on `url`. Whop adds its own click-attribution parameters; those are reserved and rejected if you set them (utm_meta_ad_id, utm_meta_adset_id, utm_meta_campaign_id, utm_source, utm_placement, utm_medium, utm_content, utm_adset, utm_whop, wacid, wasid, waid, tw_source, tw_adid).",
21903
21905
  example: {
21904
21906
  ref: "spring"
21905
21907
  },
@@ -22506,12 +22508,12 @@ var native_spec_default = {
22506
22508
  type: "string"
22507
22509
  },
22508
22510
  url: {
22509
- description: "The URL the ad links to.",
22511
+ description: "The URL the ad links to. Query parameters are merged into url_parameters, so the stored URL is always bare.",
22510
22512
  example: "https://shinetime.example/ceramic-coating",
22511
22513
  type: "string"
22512
22514
  },
22513
22515
  url_parameters: {
22514
- description: "Query parameters appended to the destination URL, keyed by parameter name.",
22516
+ description: "Query parameters to append to the destination URL, keyed by parameter name. Merged with any query string on `url`. Whop adds its own click-attribution parameters; those are reserved and rejected if you set them (utm_meta_ad_id, utm_meta_adset_id, utm_meta_campaign_id, utm_source, utm_placement, utm_medium, utm_content, utm_adset, utm_whop, wacid, wasid, waid, tw_source, tw_adid).",
22515
22517
  example: {
22516
22518
  placement: "{{placement}}",
22517
22519
  ref: "spring"
@@ -25710,13 +25712,7 @@ var native_spec_default = {
25710
25712
  metadata: {
25711
25713
  sidebarTitle: "Delete"
25712
25714
  }
25713
- },
25714
- "x-codeSamples": [
25715
- {
25716
- lang: "JavaScript",
25717
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst audience = await client.audiences.delete('id');\n\nconsole.log(audience.success);"
25718
- }
25719
- ]
25715
+ }
25720
25716
  },
25721
25717
  patch: {
25722
25718
  description: "Renames an audience. For an audience built from People filters that keeps itself up to date, pass `filters` to replace them, which rebuilds membership immediately. Whether an audience auto refreshes is set when it is created.",
@@ -25788,13 +25784,7 @@ var native_spec_default = {
25788
25784
  metadata: {
25789
25785
  sidebarTitle: "Update"
25790
25786
  }
25791
- },
25792
- "x-codeSamples": [
25793
- {
25794
- lang: "JavaScript",
25795
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst audience = await client.audiences.update('id');\n\nconsole.log(audience.id);"
25796
- }
25797
- ]
25787
+ }
25798
25788
  }
25799
25789
  },
25800
25790
  "/audiences/{id}/add_people": {
@@ -25864,12 +25854,6 @@ var native_spec_default = {
25864
25854
  summary: "Add People",
25865
25855
  tags: [
25866
25856
  "Audiences"
25867
- ],
25868
- "x-codeSamples": [
25869
- {
25870
- lang: "JavaScript",
25871
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst audience = await client.audiences.addPeople('id', { file_id: 'file_xxxxxxxxxxxxxx' });\n\nconsole.log(audience.id);"
25872
- }
25873
25857
  ]
25874
25858
  }
25875
25859
  },
@@ -27286,12 +27270,6 @@ var native_spec_default = {
27286
27270
  tags: [
27287
27271
  "Bounty Submissions"
27288
27272
  ],
27289
- "x-codeSamples": [
27290
- {
27291
- lang: "JavaScript",
27292
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst bountySubmission = await client.bountySubmissions.delete('id');\n\nconsole.log(bountySubmission.id);"
27293
- }
27294
- ],
27295
27273
  parameters: [
27296
27274
  {
27297
27275
  $ref: "#/components/parameters/ApiVersionDate"
@@ -27310,6 +27288,20 @@ var native_spec_default = {
27310
27288
  get: {
27311
27289
  description: "Retrieves one bounty submission the credential can see \u2014 one the caller authored, or one on a bounty they posted or their account owns.",
27312
27290
  operationId: "get",
27291
+ parameters: [
27292
+ {
27293
+ $ref: "#/components/parameters/ApiVersionDate"
27294
+ },
27295
+ {
27296
+ description: "The bounty submission to act on (`btys_` tag).",
27297
+ in: "path",
27298
+ name: "id",
27299
+ required: true,
27300
+ schema: {
27301
+ type: "string"
27302
+ }
27303
+ }
27304
+ ],
27313
27305
  responses: {
27314
27306
  "200": {
27315
27307
  content: {
@@ -27345,27 +27337,7 @@ var native_spec_default = {
27345
27337
  metadata: {
27346
27338
  sidebarTitle: "Retrieve"
27347
27339
  }
27348
- },
27349
- "x-codeSamples": [
27350
- {
27351
- lang: "JavaScript",
27352
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst bountySubmission = await client.bountySubmissions.retrieve('id');\n\nconsole.log(bountySubmission.id);"
27353
- }
27354
- ],
27355
- parameters: [
27356
- {
27357
- $ref: "#/components/parameters/ApiVersionDate"
27358
- },
27359
- {
27360
- description: "The bounty submission to act on (`btys_` tag).",
27361
- in: "path",
27362
- name: "id",
27363
- required: true,
27364
- schema: {
27365
- type: "string"
27366
- }
27367
- }
27368
- ]
27340
+ }
27369
27341
  }
27370
27342
  },
27371
27343
  "/bounty_submissions/{id}/submit": {
@@ -27475,12 +27447,6 @@ var native_spec_default = {
27475
27447
  summary: "Submit Bounty Submission",
27476
27448
  tags: [
27477
27449
  "Bounty Submissions"
27478
- ],
27479
- "x-codeSamples": [
27480
- {
27481
- lang: "JavaScript",
27482
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst bountySubmission = await client.bountySubmissions.submit('id');\n\nconsole.log(bountySubmission.id);"
27483
- }
27484
27450
  ]
27485
27451
  }
27486
27452
  },
@@ -28952,13 +28918,7 @@ var native_spec_default = {
28952
28918
  metadata: {
28953
28919
  sidebarTitle: "Retrieve"
28954
28920
  }
28955
- },
28956
- "x-codeSamples": [
28957
- {
28958
- lang: "JavaScript",
28959
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst card = await client.cards.retrieve('id');\n\nconsole.log(card.id);"
28960
- }
28961
- ]
28921
+ }
28962
28922
  },
28963
28923
  patch: {
28964
28924
  description: "Update, freeze, or cancel a card. Updating the card's name, billing address, or limits requires both `payout:account:update` and `company:balance:read`; a card's assigned holder may update their own card's pin and frozen state with any user token.",
@@ -29391,13 +29351,7 @@ var native_spec_default = {
29391
29351
  metadata: {
29392
29352
  sidebarTitle: "Update"
29393
29353
  }
29394
- },
29395
- "x-codeSamples": [
29396
- {
29397
- lang: "JavaScript",
29398
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst card = await client.cards.update('id');\n\nconsole.log(card.id);"
29399
- }
29400
- ]
29354
+ }
29401
29355
  }
29402
29356
  },
29403
29357
  "/checkout_configurations": {
@@ -36960,7 +36914,7 @@ var native_spec_default = {
36960
36914
  properties: {
36961
36915
  email: {
36962
36916
  description: "Recipient email address.",
36963
- example: " Dana@Shinetime.example ",
36917
+ example: "marcus@shinetime.example",
36964
36918
  format: "email",
36965
36919
  type: "string"
36966
36920
  },
@@ -36981,7 +36935,7 @@ var native_spec_default = {
36981
36935
  properties: {
36982
36936
  email: {
36983
36937
  description: "Recipient email address. Mutually exclusive with `user_id`.",
36984
- example: " Dana@Shinetime.example ",
36938
+ example: "marcus@shinetime.example",
36985
36939
  format: "email",
36986
36940
  type: "string"
36987
36941
  },
@@ -37216,7 +37170,7 @@ var native_spec_default = {
37216
37170
  },
37217
37171
  "/memberships/{id}/cancel": {
37218
37172
  post: {
37219
- description: "Cancels a membership immediately, revoking access right away. To cancel at the end of the billing period instead, update the membership with `cancel_at_period_end: true`.",
37173
+ description: "Cancels a membership. Pass `cancel_at_period_end: true` to stop auto-renewal and keep access until the current billing period ends. Omit it (or pass `false`) to revoke access immediately. Buyers cannot cancel buy-now-pay-later (`splitit`, `sezzle`) or non-trial split-pay memberships.",
37220
37174
  operationId: "cancel",
37221
37175
  parameters: [
37222
37176
  {
@@ -37240,6 +37194,11 @@ var native_spec_default = {
37240
37194
  "application/json": {
37241
37195
  schema: {
37242
37196
  properties: {
37197
+ cancel_at_period_end: {
37198
+ description: "`true` stops auto-renewal and keeps access until the current billing period ends. Omit or `false` revokes access immediately.",
37199
+ example: true,
37200
+ type: "boolean"
37201
+ },
37243
37202
  reason: {
37244
37203
  description: "Free-form note recording why the membership was canceled.",
37245
37204
  example: "chargeback risk",
@@ -37528,6 +37487,89 @@ var native_spec_default = {
37528
37487
  ]
37529
37488
  }
37530
37489
  },
37490
+ "/memberships/{id}/transfer": {
37491
+ post: {
37492
+ description: "Creates a one-use transfer URL for a membership. Opening the URL while logged into a different Whop account claims the membership onto that account. The membership's buyer can generate a link for their own membership with `membership:transfer` when the product allows transfers and the membership is `trialing`, `active`, or `completed`. An account credential with `membership:update` bypasses both restrictions.",
37493
+ operationId: "transfer",
37494
+ parameters: [
37495
+ {
37496
+ $ref: "#/components/parameters/ApiVersionDate"
37497
+ },
37498
+ {
37499
+ description: "Membership ID (`mem_` tag).",
37500
+ in: "path",
37501
+ name: "id",
37502
+ required: true,
37503
+ schema: {
37504
+ type: "string"
37505
+ }
37506
+ },
37507
+ {
37508
+ $ref: "#/components/parameters/IdempotencyKey"
37509
+ }
37510
+ ],
37511
+ responses: {
37512
+ "200": {
37513
+ content: {
37514
+ "application/json": {
37515
+ schema: {
37516
+ properties: {
37517
+ url: {
37518
+ description: "One-use URL the destination account opens to claim the membership.",
37519
+ example: "https://whop.com/activate",
37520
+ format: "uri",
37521
+ type: "string"
37522
+ }
37523
+ },
37524
+ required: [
37525
+ "url"
37526
+ ],
37527
+ type: "object"
37528
+ }
37529
+ }
37530
+ },
37531
+ description: "transfer URL created"
37532
+ },
37533
+ "400": {
37534
+ $ref: "#/components/responses/InvalidParameters",
37535
+ description: "membership is not transferable in its current state"
37536
+ },
37537
+ "403": {
37538
+ $ref: "#/components/responses/Forbidden",
37539
+ description: "credential lacks the transfer scope"
37540
+ },
37541
+ "404": {
37542
+ $ref: "#/components/responses/NotFound",
37543
+ description: "unknown membership"
37544
+ },
37545
+ "409": {
37546
+ $ref: "#/components/responses/Conflict"
37547
+ }
37548
+ },
37549
+ security: [
37550
+ {
37551
+ bearerAuth: [
37552
+ "membership:transfer"
37553
+ ]
37554
+ },
37555
+ {
37556
+ bearerAuth: [
37557
+ "membership:update"
37558
+ ]
37559
+ }
37560
+ ],
37561
+ summary: "Transfer Membership",
37562
+ tags: [
37563
+ "Memberships"
37564
+ ],
37565
+ "x-codeSamples": [
37566
+ {
37567
+ lang: "JavaScript",
37568
+ source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.memberships.transfer('id');\n\nconsole.log(response.url);"
37569
+ }
37570
+ ]
37571
+ }
37572
+ },
37531
37573
  "/notifications": {
37532
37574
  get: {
37533
37575
  description: "Lists the authenticated user's notifications, newest first. Requires a user credential \u2014 an account API key has no notification feed. Without filters the feed spans every experience the user belongs to plus the teams they are a member of.",
@@ -38181,13 +38223,7 @@ var native_spec_default = {
38181
38223
  metadata: {
38182
38224
  sidebarTitle: "Retrieve"
38183
38225
  }
38184
- },
38185
- "x-codeSamples": [
38186
- {
38187
- lang: "JavaScript",
38188
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst notification = await client.notifications.retrieve('id');\n\nconsole.log(notification.id);"
38189
- }
38190
- ]
38226
+ }
38191
38227
  }
38192
38228
  },
38193
38229
  "/partners": {
@@ -41122,6 +41158,23 @@ var native_spec_default = {
41122
41158
  example: "usd",
41123
41159
  type: "string"
41124
41160
  },
41161
+ destination_amount: {
41162
+ description: "The amount delivered in the destination currency, in whole currency units. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded conversion.",
41163
+ example: 461.7,
41164
+ format: "float",
41165
+ type: [
41166
+ "number",
41167
+ "null"
41168
+ ]
41169
+ },
41170
+ destination_currency: {
41171
+ description: "Currency the funds are delivered in, taken from the payout method when the payout is created. `null` on payouts with no recorded destination currency, such as stablecoin payout requests.",
41172
+ example: "eur",
41173
+ type: [
41174
+ "string",
41175
+ "null"
41176
+ ]
41177
+ },
41125
41178
  estimated_arrival: {
41126
41179
  description: "Estimated time the funds become available in the destination account.",
41127
41180
  example: "2026-08-03T00:00:00.000Z",
@@ -41131,6 +41184,15 @@ var native_spec_default = {
41131
41184
  "null"
41132
41185
  ]
41133
41186
  },
41187
+ exchange_rate: {
41188
+ description: "Exchange rate from the payout currency to the destination currency. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded rate.",
41189
+ example: 0.9234,
41190
+ format: "float",
41191
+ type: [
41192
+ "number",
41193
+ "null"
41194
+ ]
41195
+ },
41134
41196
  fee_amount: {
41135
41197
  description: "The fee charged for the payout, in the payout currency.",
41136
41198
  example: 0.25,
@@ -41180,6 +41242,22 @@ var native_spec_default = {
41180
41242
  supported_payout_method: {
41181
41243
  description: "Supported payout method display details.",
41182
41244
  properties: {
41245
+ delivery_type: {
41246
+ description: "How the funds are delivered to the recipient.",
41247
+ enum: [
41248
+ "cash_pickup",
41249
+ "bank_deposit",
41250
+ "home_delivery",
41251
+ "mobile_wallet",
41252
+ "masspay_card",
41253
+ "paper_check",
41254
+ "bill",
41255
+ "cryptocurrency",
41256
+ "unknown"
41257
+ ],
41258
+ example: "bank_deposit",
41259
+ type: "string"
41260
+ },
41183
41261
  icon_url: {
41184
41262
  description: "Supported payout method icon URL.",
41185
41263
  example: "https://cdn.whop.com/payouts/ach.png",
@@ -41199,7 +41277,8 @@ var native_spec_default = {
41199
41277
  },
41200
41278
  required: [
41201
41279
  "payer_name",
41202
- "icon_url"
41280
+ "icon_url",
41281
+ "delivery_type"
41203
41282
  ],
41204
41283
  type: [
41205
41284
  "object",
@@ -41263,6 +41342,9 @@ var native_spec_default = {
41263
41342
  "status",
41264
41343
  "amount",
41265
41344
  "currency",
41345
+ "destination_currency",
41346
+ "destination_amount",
41347
+ "exchange_rate",
41266
41348
  "fee_amount",
41267
41349
  "speed",
41268
41350
  "created_at",
@@ -41501,6 +41583,21 @@ var native_spec_default = {
41501
41583
  example: "usd",
41502
41584
  type: "string"
41503
41585
  },
41586
+ destination_amount: {
41587
+ description: "The amount delivered in the destination currency, in whole currency units. Null until the payout settles; appears on the payout in GET /payouts once assigned.",
41588
+ format: "float",
41589
+ type: [
41590
+ "number",
41591
+ "null"
41592
+ ]
41593
+ },
41594
+ destination_currency: {
41595
+ description: "Currency the funds are delivered in, taken from the payout method. `null` on stablecoin payout requests, which record no destination currency.",
41596
+ type: [
41597
+ "string",
41598
+ "null"
41599
+ ]
41600
+ },
41504
41601
  estimated_arrival: {
41505
41602
  description: "Estimated time the funds become available in the destination account. Null until the payout settles.",
41506
41603
  example: "2026-01-01T12:00:00.000Z",
@@ -41510,6 +41607,14 @@ var native_spec_default = {
41510
41607
  "null"
41511
41608
  ]
41512
41609
  },
41610
+ exchange_rate: {
41611
+ description: "Exchange rate from the payout currency to the destination currency. Null until the payout settles; appears on the payout in GET /payouts once assigned.",
41612
+ format: "float",
41613
+ type: [
41614
+ "number",
41615
+ "null"
41616
+ ]
41617
+ },
41513
41618
  fee_amount: {
41514
41619
  description: "The fee charged for the payout, in the payout currency.",
41515
41620
  example: 2.5,
@@ -41559,6 +41664,22 @@ var native_spec_default = {
41559
41664
  supported_payout_method: {
41560
41665
  description: "Supported payout method display details.",
41561
41666
  properties: {
41667
+ delivery_type: {
41668
+ description: "How the funds are delivered to the recipient.",
41669
+ enum: [
41670
+ "cash_pickup",
41671
+ "bank_deposit",
41672
+ "home_delivery",
41673
+ "mobile_wallet",
41674
+ "masspay_card",
41675
+ "paper_check",
41676
+ "bill",
41677
+ "cryptocurrency",
41678
+ "unknown"
41679
+ ],
41680
+ example: "bank_deposit",
41681
+ type: "string"
41682
+ },
41562
41683
  icon_url: {
41563
41684
  description: "Supported payout method icon URL.",
41564
41685
  example: "https://assets-2-rough.whop.com/uploads/image/2026-01-01/ach-payout-icon",
@@ -41578,7 +41699,8 @@ var native_spec_default = {
41578
41699
  },
41579
41700
  required: [
41580
41701
  "payer_name",
41581
- "icon_url"
41702
+ "icon_url",
41703
+ "delivery_type"
41582
41704
  ],
41583
41705
  type: [
41584
41706
  "object",
@@ -41632,6 +41754,9 @@ var native_spec_default = {
41632
41754
  "status",
41633
41755
  "amount",
41634
41756
  "currency",
41757
+ "destination_currency",
41758
+ "destination_amount",
41759
+ "exchange_rate",
41635
41760
  "fee_amount",
41636
41761
  "speed",
41637
41762
  "created_at",
@@ -42746,12 +42871,6 @@ var native_spec_default = {
42746
42871
  tags: [
42747
42872
  "Payouts"
42748
42873
  ],
42749
- "x-codeSamples": [
42750
- {
42751
- lang: "JavaScript",
42752
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst method = await client.payouts.methods.delete('id');\n\nconsole.log(method.id);"
42753
- }
42754
- ],
42755
42874
  parameters: [
42756
42875
  {
42757
42876
  $ref: "#/components/parameters/ApiVersionDate"
@@ -43063,12 +43182,6 @@ var native_spec_default = {
43063
43182
  summary: "Rename Saved Payout Method",
43064
43183
  tags: [
43065
43184
  "Payouts"
43066
- ],
43067
- "x-codeSamples": [
43068
- {
43069
- lang: "JavaScript",
43070
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst method = await client.payouts.methods.update('id', { nickname: 'Primary checking' });\n\nconsole.log(method.id);"
43071
- }
43072
43185
  ]
43073
43186
  }
43074
43187
  },
@@ -43606,6 +43719,23 @@ var native_spec_default = {
43606
43719
  example: "usd",
43607
43720
  type: "string"
43608
43721
  },
43722
+ destination_amount: {
43723
+ description: "The amount delivered in the destination currency, in whole currency units. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded conversion.",
43724
+ example: 461.7,
43725
+ format: "float",
43726
+ type: [
43727
+ "number",
43728
+ "null"
43729
+ ]
43730
+ },
43731
+ destination_currency: {
43732
+ description: "Currency the funds are delivered in, taken from the payout method when the payout is created. `null` on payouts with no recorded destination currency, such as stablecoin payout requests.",
43733
+ example: "eur",
43734
+ type: [
43735
+ "string",
43736
+ "null"
43737
+ ]
43738
+ },
43609
43739
  estimated_arrival: {
43610
43740
  description: "Estimated time the funds become available in the destination account.",
43611
43741
  example: "2026-08-03T00:00:00.000Z",
@@ -43615,6 +43745,15 @@ var native_spec_default = {
43615
43745
  "null"
43616
43746
  ]
43617
43747
  },
43748
+ exchange_rate: {
43749
+ description: "Exchange rate from the payout currency to the destination currency. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded rate.",
43750
+ example: 0.9234,
43751
+ format: "float",
43752
+ type: [
43753
+ "number",
43754
+ "null"
43755
+ ]
43756
+ },
43618
43757
  fee_amount: {
43619
43758
  description: "The fee charged for the payout, in the payout currency.",
43620
43759
  example: 0.25,
@@ -43664,6 +43803,22 @@ var native_spec_default = {
43664
43803
  supported_payout_method: {
43665
43804
  description: "Supported payout method display details.",
43666
43805
  properties: {
43806
+ delivery_type: {
43807
+ description: "How the funds are delivered to the recipient.",
43808
+ enum: [
43809
+ "cash_pickup",
43810
+ "bank_deposit",
43811
+ "home_delivery",
43812
+ "mobile_wallet",
43813
+ "masspay_card",
43814
+ "paper_check",
43815
+ "bill",
43816
+ "cryptocurrency",
43817
+ "unknown"
43818
+ ],
43819
+ example: "bank_deposit",
43820
+ type: "string"
43821
+ },
43667
43822
  icon_url: {
43668
43823
  description: "Supported payout method icon URL.",
43669
43824
  example: "https://cdn.whop.com/payouts/ach.png",
@@ -43683,7 +43838,8 @@ var native_spec_default = {
43683
43838
  },
43684
43839
  required: [
43685
43840
  "payer_name",
43686
- "icon_url"
43841
+ "icon_url",
43842
+ "delivery_type"
43687
43843
  ],
43688
43844
  type: [
43689
43845
  "object",
@@ -43747,6 +43903,9 @@ var native_spec_default = {
43747
43903
  "status",
43748
43904
  "amount",
43749
43905
  "currency",
43906
+ "destination_currency",
43907
+ "destination_amount",
43908
+ "exchange_rate",
43750
43909
  "fee_amount",
43751
43910
  "speed",
43752
43911
  "created_at",
@@ -43794,13 +43953,7 @@ var native_spec_default = {
43794
43953
  metadata: {
43795
43954
  sidebarTitle: "Retrieve"
43796
43955
  }
43797
- },
43798
- "x-codeSamples": [
43799
- {
43800
- lang: "JavaScript",
43801
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst payout = await client.payouts.retrieve('id');\n\nconsole.log(payout.id);"
43802
- }
43803
- ]
43956
+ }
43804
43957
  }
43805
43958
  },
43806
43959
  "/people": {
@@ -45646,13 +45799,7 @@ var native_spec_default = {
45646
45799
  metadata: {
45647
45800
  sidebarTitle: "Retrieve"
45648
45801
  }
45649
- },
45650
- "x-codeSamples": [
45651
- {
45652
- lang: "JavaScript",
45653
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst person = await client.people.retrieve('id');\n\nconsole.log(person.id);"
45654
- }
45655
- ]
45802
+ }
45656
45803
  }
45657
45804
  },
45658
45805
  "/permissions": {
@@ -48720,15 +48867,10 @@ var native_spec_default = {
48720
48867
  ]
48721
48868
  }
48722
48869
  ],
48723
- summary: "List Recommended Actions",
48870
+ summary: "List Action Chains",
48724
48871
  tags: [
48725
48872
  "Recommended Actions"
48726
48873
  ],
48727
- "x-mint": {
48728
- metadata: {
48729
- sidebarTitle: "List"
48730
- }
48731
- },
48732
48874
  "x-codeSamples": [
48733
48875
  {
48734
48876
  lang: "JavaScript",
@@ -48768,15 +48910,10 @@ var native_spec_default = {
48768
48910
  ]
48769
48911
  }
48770
48912
  ],
48771
- summary: "Retrieve Recommended Action",
48913
+ summary: "Retrieve Action Chain",
48772
48914
  tags: [
48773
48915
  "Recommended Actions"
48774
48916
  ],
48775
- "x-mint": {
48776
- metadata: {
48777
- sidebarTitle: "Retrieve"
48778
- }
48779
- },
48780
48917
  "x-codeSamples": [
48781
48918
  {
48782
48919
  lang: "JavaScript",
@@ -48884,14 +49021,97 @@ var native_spec_default = {
48884
49021
  ]
48885
49022
  }
48886
49023
  ],
48887
- summary: "Run Recommended Action",
49024
+ summary: "Execute Action Chain",
48888
49025
  tags: [
48889
49026
  "Recommended Actions"
49027
+ ]
49028
+ }
49029
+ },
49030
+ "/recommended_actions/{id}/executions": {
49031
+ get: {
49032
+ description: "Lists the per-step record of a recommended action chain the server ran \u2014 one entry per step in position order, each carrying its current status and, once the step completed, the API response it produced. A chain that was never run server-side returns an empty list.",
49033
+ operationId: "executions",
49034
+ parameters: [
49035
+ {
49036
+ $ref: "#/components/parameters/ApiVersionDate"
49037
+ },
49038
+ {
49039
+ description: "Chain ID from the list endpoint.",
49040
+ in: "path",
49041
+ name: "id",
49042
+ required: true,
49043
+ schema: {
49044
+ type: "string"
49045
+ }
49046
+ },
49047
+ {
49048
+ description: "Account ID, prefixed `biz_`. Defaults to the API key's own account.",
49049
+ in: "query",
49050
+ name: "account_id",
49051
+ required: false,
49052
+ schema: {
49053
+ type: "string"
49054
+ }
49055
+ }
48890
49056
  ],
49057
+ responses: {
49058
+ "200": {
49059
+ content: {
49060
+ "application/json": {
49061
+ schema: {
49062
+ properties: {
49063
+ chain_id: {
49064
+ description: "The chain these executions belong to.",
49065
+ example: "rac_chain_xxxxxxxxxxxx",
49066
+ type: "string"
49067
+ },
49068
+ executions: {
49069
+ description: "One entry per run step, in position order.",
49070
+ items: {
49071
+ $ref: "#/components/schemas/RecommendedActionExecution"
49072
+ },
49073
+ type: "array"
49074
+ }
49075
+ },
49076
+ required: [
49077
+ "chain_id",
49078
+ "executions"
49079
+ ],
49080
+ type: "object"
49081
+ }
49082
+ }
49083
+ },
49084
+ description: "executions listed"
49085
+ },
49086
+ "401": {
49087
+ $ref: "#/components/responses/Unauthorized",
49088
+ description: "missing or invalid authentication"
49089
+ },
49090
+ "404": {
49091
+ $ref: "#/components/responses/NotFound",
49092
+ description: "unknown chain"
49093
+ }
49094
+ },
49095
+ security: [
49096
+ {
49097
+ bearerAuth: [
49098
+ "company:basic:read"
49099
+ ]
49100
+ }
49101
+ ],
49102
+ summary: "List Recommended Action Executions",
49103
+ tags: [
49104
+ "Recommended Actions"
49105
+ ],
49106
+ "x-mint": {
49107
+ metadata: {
49108
+ sidebarTitle: "List Executions"
49109
+ }
49110
+ },
48891
49111
  "x-codeSamples": [
48892
49112
  {
48893
49113
  lang: "JavaScript",
48894
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.recommendedActions.run('id');\n\nconsole.log(response.chain_id);"
49114
+ source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.recommendedActions.listExecutions('id');\n\nconsole.log(response.chain_id);"
48895
49115
  }
48896
49116
  ]
48897
49117
  }
@@ -52155,11 +52375,11 @@ var native_spec_default = {
52155
52375
  type: "array"
52156
52376
  },
52157
52377
  totals: {
52158
- description: "Whole-window aggregates, present when the metric computes them (e.g. conversions returns window count / unique-people / value per entry \u2014 uniques only exist at window level and cannot be summed from points).",
52378
+ description: "Whole-window aggregates, present when the metric computes them. Don't derive these from `points`: a rate is measured across the whole window, not averaged across its points, and unique-people counts exist only at window level.",
52159
52379
  items: {
52160
52380
  properties: {
52161
52381
  name: {
52162
- description: "The property value the total is for.",
52382
+ description: "The property value this total is for, or the metric's name when it isn't split by a property.",
52163
52383
  example: "spend",
52164
52384
  type: "string"
52165
52385
  },
@@ -53107,6 +53327,25 @@ var native_spec_default = {
53107
53327
  schema: {
53108
53328
  type: "string"
53109
53329
  }
53330
+ },
53331
+ {
53332
+ description: "Number of members to return from the end of the window.",
53333
+ in: "query",
53334
+ name: "last",
53335
+ required: false,
53336
+ schema: {
53337
+ maximum: 100,
53338
+ type: "integer"
53339
+ }
53340
+ },
53341
+ {
53342
+ description: "Cursor to paginate backwards from.",
53343
+ in: "query",
53344
+ name: "before",
53345
+ required: false,
53346
+ schema: {
53347
+ type: "string"
53348
+ }
53110
53349
  }
53111
53350
  ],
53112
53351
  responses: {
@@ -58703,13 +58942,7 @@ var native_spec_default = {
58703
58942
  metadata: {
58704
58943
  sidebarTitle: "Retrieve"
58705
58944
  }
58706
- },
58707
- "x-codeSamples": [
58708
- {
58709
- lang: "JavaScript",
58710
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst verification = await client.verifications.retrieve('id');\n\nconsole.log(verification.id);"
58711
- }
58712
- ]
58945
+ }
58713
58946
  },
58714
58947
  patch: {
58715
58948
  description: "Updates editable profile details or submits answers for items returned in `requested_information`. Once a verification is `approved` its profile details are locked and can no longer be edited.",
@@ -59531,13 +59764,7 @@ var native_spec_default = {
59531
59764
  metadata: {
59532
59765
  sidebarTitle: "Update"
59533
59766
  }
59534
- },
59535
- "x-codeSamples": [
59536
- {
59537
- lang: "JavaScript",
59538
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst verification = await client.verifications.update('id');\n\nconsole.log(verification.id);"
59539
- }
59540
- ]
59767
+ }
59541
59768
  }
59542
59769
  },
59543
59770
  "/webhooks": {
@@ -59755,6 +59982,7 @@ var native_spec_default = {
59755
59982
  description: "The events to send the webhook for, in dot form (for example `payment.succeeded`).",
59756
59983
  items: {
59757
59984
  enum: [
59985
+ "account.updated",
59758
59986
  "invoice.created",
59759
59987
  "invoice.marked_uncollectible",
59760
59988
  "invoice.paid",
@@ -60141,6 +60369,7 @@ var native_spec_default = {
60141
60369
  description: "The events to send the webhook for, in dot form (for example `payment.succeeded`).",
60142
60370
  items: {
60143
60371
  enum: [
60372
+ "account.updated",
60144
60373
  "invoice.created",
60145
60374
  "invoice.marked_uncollectible",
60146
60375
  "invoice.paid",
@@ -60665,12 +60894,6 @@ var native_spec_default = {
60665
60894
  summary: "Replay Deliveries in a Range",
60666
60895
  tags: [
60667
60896
  "Webhooks"
60668
- ],
60669
- "x-codeSamples": [
60670
- {
60671
- lang: "JavaScript",
60672
- source: "import Whop from '@whop/sdk';\n\nconst client = new Whop({\n apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted\n});\n\nconst response = await client.webhooks.replay('id', { sent_after: '2026-01-01T12:00:00.000Z' });\n\nconsole.log(response.queued);"
60673
- }
60674
60897
  ]
60675
60898
  }
60676
60899
  },
@@ -60788,6 +61011,303 @@ var native_spec_default = {
60788
61011
  }
60789
61012
  },
60790
61013
  webhooks: {
61014
+ "account.updated": {
61015
+ post: {
61016
+ description: "Sent when an account is updated\n\nRequired permissions:\n - `webhook_receive:accounts`",
61017
+ parameters: [
61018
+ {
61019
+ in: "header",
61020
+ name: "webhook-id",
61021
+ required: true,
61022
+ schema: {
61023
+ description: "A unique identifier for this webhook request",
61024
+ example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
61025
+ type: "string"
61026
+ }
61027
+ },
61028
+ {
61029
+ in: "header",
61030
+ name: "webhook-signature",
61031
+ required: true,
61032
+ schema: {
61033
+ description: "The signature of the webhook request with the webhook version prepended",
61034
+ example: "v1,BASE64ENCODEDSIGNATURE",
61035
+ type: "string"
61036
+ }
61037
+ },
61038
+ {
61039
+ in: "header",
61040
+ name: "webhook-timestamp",
61041
+ required: true,
61042
+ schema: {
61043
+ description: "The timestamp in seconds since the Unix epoch that the webhook was sent at on the server",
61044
+ example: "1727606400",
61045
+ type: "string"
61046
+ }
61047
+ }
61048
+ ],
61049
+ requestBody: {
61050
+ content: {
61051
+ "application/json": {
61052
+ example: {
61053
+ api_version: "v1",
61054
+ api_version_date: "2026-08-13",
61055
+ company_id: "biz_xxxxxxxxxxxxxx",
61056
+ data: {
61057
+ balances: [],
61058
+ banner_image_url: null,
61059
+ business_address: null,
61060
+ business_name: null,
61061
+ business_type: "software",
61062
+ can_transfer_pending_balance_to_children: false,
61063
+ capabilities: {
61064
+ accept_bank_payments: "active",
61065
+ accept_bnpl_payments: "inactive",
61066
+ accept_card_payments: "active",
61067
+ bank_deposit: "inactive",
61068
+ card_deposit: "active",
61069
+ card_issuing: "inactive",
61070
+ crypto_deposit: "active",
61071
+ crypto_payout: "inactive",
61072
+ instant_payout: "inactive",
61073
+ run_ads: "active",
61074
+ standard_payout: "inactive",
61075
+ transfer: "inactive"
61076
+ },
61077
+ cards: null,
61078
+ collect_vat_id: false,
61079
+ company_formation: {
61080
+ status: "draft"
61081
+ },
61082
+ country: "us",
61083
+ created_at: "2026-01-01T12:00:00.000Z",
61084
+ description: "Mobile ceramic coating, paint correction, and interior detailing across the Austin metro.",
61085
+ email: "marcus@shinetime.example",
61086
+ home_preferences: [],
61087
+ id: "biz_xxxxxxxxxxxxxx",
61088
+ industry_group: null,
61089
+ industry_type: null,
61090
+ invoice_prefix: "SHINE",
61091
+ logo_url: null,
61092
+ metadata: {
61093
+ external_id: "shop_4417",
61094
+ region: "austin"
61095
+ },
61096
+ onboarding_type: "seller",
61097
+ opengraph_image_url: null,
61098
+ opengraph_image_variant: null,
61099
+ other_business_description: null,
61100
+ other_industry_description: null,
61101
+ owner: {
61102
+ id: "user_xxxxxxxxxxxxxx",
61103
+ name: "Marcus Webb",
61104
+ profile_picture: {
61105
+ url: "https://ui-avatars.com/api/"
61106
+ },
61107
+ username: "marcuswebb"
61108
+ },
61109
+ parent_account: null,
61110
+ payment_controls: {
61111
+ dispute_alert_auto_refund: {
61112
+ locked: false,
61113
+ threshold_usd: 500
61114
+ },
61115
+ dispute_alert_fee_usd: 29,
61116
+ enforce_3ds: false,
61117
+ financing_disabled: false,
61118
+ high_risk_processing_fee_percentage: 0,
61119
+ pending_auto_topup_fee_percentage: 2,
61120
+ pending_balance_delay_days: 0,
61121
+ reserve: {
61122
+ hold_period_days: 90,
61123
+ percentage: null
61124
+ },
61125
+ resolution_center_auto_refund: {
61126
+ card_threshold_usd: null,
61127
+ financing_threshold_usd: null,
61128
+ locked: false,
61129
+ paypal_threshold_usd: null
61130
+ },
61131
+ restricted_payment_methods: []
61132
+ },
61133
+ product_tax_code: null,
61134
+ recommended_actions: null,
61135
+ require_2fa: false,
61136
+ required_actions: [],
61137
+ route: "biz_xxxxxxxxxxxxxx",
61138
+ send_customer_emails: true,
61139
+ show_joined_whops: true,
61140
+ show_reviews_dtc: true,
61141
+ show_user_directory: true,
61142
+ social_links: [
61143
+ {
61144
+ id: "social_3",
61145
+ title: null,
61146
+ url: "https://instagram.com/shinetimedetailing",
61147
+ website: "instagram"
61148
+ }
61149
+ ],
61150
+ stablecoin_rails: false,
61151
+ status: "active",
61152
+ status_reason: null,
61153
+ store_page_config: {
61154
+ accent_color: "blue",
61155
+ layout: "featured",
61156
+ profile_variant: null,
61157
+ whop_affiliate_link: false
61158
+ },
61159
+ target_audience: "Owners of new and enthusiast vehicles in Austin, TX",
61160
+ tax_collection_enabled_states: [
61161
+ "AL",
61162
+ "AK",
61163
+ "AZ",
61164
+ "AR",
61165
+ "CA",
61166
+ "CO",
61167
+ "CT",
61168
+ "DE",
61169
+ "DC",
61170
+ "FL",
61171
+ "GA",
61172
+ "HI",
61173
+ "ID",
61174
+ "IL",
61175
+ "IN",
61176
+ "IA",
61177
+ "KS",
61178
+ "KY",
61179
+ "LA",
61180
+ "ME",
61181
+ "MD",
61182
+ "MA",
61183
+ "MI",
61184
+ "MN",
61185
+ "MS",
61186
+ "MO",
61187
+ "MT",
61188
+ "NE",
61189
+ "NV",
61190
+ "NH",
61191
+ "NJ",
61192
+ "NM",
61193
+ "NY",
61194
+ "NC",
61195
+ "ND",
61196
+ "OH",
61197
+ "OK",
61198
+ "OR",
61199
+ "PA",
61200
+ "RI",
61201
+ "SC",
61202
+ "SD",
61203
+ "TN",
61204
+ "TX",
61205
+ "UT",
61206
+ "VT",
61207
+ "VA",
61208
+ "WA",
61209
+ "WV",
61210
+ "WI",
61211
+ "WY"
61212
+ ],
61213
+ tax_identifiers: [],
61214
+ tax_remitted_by: "whop",
61215
+ tax_type: null,
61216
+ three_ds_level: null,
61217
+ title: "Shine Time Auto Detailing",
61218
+ total_earned_usd: 0,
61219
+ total_usd: null,
61220
+ use_logo_as_opengraph_image_fallback: false,
61221
+ verification: {
61222
+ business: null,
61223
+ individual: null
61224
+ },
61225
+ volume_usd: 0,
61226
+ wallet: null
61227
+ },
61228
+ id: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
61229
+ previous_attributes: {
61230
+ title: "Webb's Mobile Detailing"
61231
+ },
61232
+ timestamp: "2025-01-01T00:00:00.000Z",
61233
+ type: "account.updated"
61234
+ },
61235
+ schema: {
61236
+ properties: {
61237
+ api_version: {
61238
+ const: "v1",
61239
+ description: "The API version for this webhook",
61240
+ example: "v1",
61241
+ type: "string"
61242
+ },
61243
+ api_version_date: {
61244
+ description: "The dated API version (Api-Version-Date) the payload is serialized to",
61245
+ example: "2026-07-20",
61246
+ type: [
61247
+ "string",
61248
+ "null"
61249
+ ]
61250
+ },
61251
+ company_id: {
61252
+ description: "The account ID that this webhook event is associated with",
61253
+ example: "biz_xxxxxxxxxxxxxx",
61254
+ type: [
61255
+ "string",
61256
+ "null"
61257
+ ]
61258
+ },
61259
+ data: {
61260
+ $ref: "#/components/schemas/Account"
61261
+ },
61262
+ id: {
61263
+ description: "A unique ID for every single webhook request",
61264
+ example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
61265
+ type: "string"
61266
+ },
61267
+ previous_attributes: {
61268
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
61269
+ example: {
61270
+ title: "Webb's Mobile Detailing"
61271
+ },
61272
+ type: "object"
61273
+ },
61274
+ timestamp: {
61275
+ description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
61276
+ example: "2025-01-01T00:00:00.000Z",
61277
+ format: "date-time",
61278
+ type: "string"
61279
+ },
61280
+ type: {
61281
+ const: "account.updated",
61282
+ description: "The webhook event type",
61283
+ example: "account.updated",
61284
+ type: "string"
61285
+ }
61286
+ },
61287
+ required: [
61288
+ "id",
61289
+ "api_version",
61290
+ "api_version_date",
61291
+ "timestamp",
61292
+ "type",
61293
+ "data"
61294
+ ],
61295
+ type: "object"
61296
+ }
61297
+ }
61298
+ }
61299
+ },
61300
+ responses: {
61301
+ "200": {
61302
+ description: "Return a 200 status to indicate that the data was received successfully"
61303
+ }
61304
+ },
61305
+ summary: "Account Updated",
61306
+ tags: [
61307
+ "Accounts"
61308
+ ]
61309
+ }
61310
+ },
60791
61311
  "ad_campaign.payment_failed": {
60792
61312
  post: {
60793
61313
  description: "Sent when an ad campaign's payment fails and its ads stop delivering\n\nRequired permissions:\n - `webhook_receive:ad_campaigns`",
@@ -60927,6 +61447,10 @@ var native_spec_default = {
60927
61447
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
60928
61448
  type: "string"
60929
61449
  },
61450
+ previous_attributes: {
61451
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
61452
+ type: "object"
61453
+ },
60930
61454
  timestamp: {
60931
61455
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
60932
61456
  example: "2025-01-01T00:00:00.000Z",
@@ -61319,6 +61843,10 @@ var native_spec_default = {
61319
61843
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
61320
61844
  type: "string"
61321
61845
  },
61846
+ previous_attributes: {
61847
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
61848
+ type: "object"
61849
+ },
61322
61850
  timestamp: {
61323
61851
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
61324
61852
  example: "2025-01-01T00:00:00.000Z",
@@ -61711,6 +62239,10 @@ var native_spec_default = {
61711
62239
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
61712
62240
  type: "string"
61713
62241
  },
62242
+ previous_attributes: {
62243
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
62244
+ type: "object"
62245
+ },
61714
62246
  timestamp: {
61715
62247
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
61716
62248
  example: "2025-01-01T00:00:00.000Z",
@@ -62103,6 +62635,10 @@ var native_spec_default = {
62103
62635
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
62104
62636
  type: "string"
62105
62637
  },
62638
+ previous_attributes: {
62639
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
62640
+ type: "object"
62641
+ },
62106
62642
  timestamp: {
62107
62643
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
62108
62644
  example: "2025-01-01T00:00:00.000Z",
@@ -62495,6 +63031,10 @@ var native_spec_default = {
62495
63031
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
62496
63032
  type: "string"
62497
63033
  },
63034
+ previous_attributes: {
63035
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63036
+ type: "object"
63037
+ },
62498
63038
  timestamp: {
62499
63039
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
62500
63040
  example: "2025-01-01T00:00:00.000Z",
@@ -62659,6 +63199,10 @@ var native_spec_default = {
62659
63199
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
62660
63200
  type: "string"
62661
63201
  },
63202
+ previous_attributes: {
63203
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63204
+ type: "object"
63205
+ },
62662
63206
  timestamp: {
62663
63207
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
62664
63208
  example: "2025-01-01T00:00:00.000Z",
@@ -62823,6 +63367,10 @@ var native_spec_default = {
62823
63367
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
62824
63368
  type: "string"
62825
63369
  },
63370
+ previous_attributes: {
63371
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63372
+ type: "object"
63373
+ },
62826
63374
  timestamp: {
62827
63375
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
62828
63376
  example: "2025-01-01T00:00:00.000Z",
@@ -62987,6 +63535,10 @@ var native_spec_default = {
62987
63535
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
62988
63536
  type: "string"
62989
63537
  },
63538
+ previous_attributes: {
63539
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63540
+ type: "object"
63541
+ },
62990
63542
  timestamp: {
62991
63543
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
62992
63544
  example: "2025-01-01T00:00:00.000Z",
@@ -63151,6 +63703,10 @@ var native_spec_default = {
63151
63703
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63152
63704
  type: "string"
63153
63705
  },
63706
+ previous_attributes: {
63707
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63708
+ type: "object"
63709
+ },
63154
63710
  timestamp: {
63155
63711
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63156
63712
  example: "2025-01-01T00:00:00.000Z",
@@ -63285,6 +63841,10 @@ var native_spec_default = {
63285
63841
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63286
63842
  type: "string"
63287
63843
  },
63844
+ previous_attributes: {
63845
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63846
+ type: "object"
63847
+ },
63288
63848
  timestamp: {
63289
63849
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63290
63850
  example: "2025-01-01T00:00:00.000Z",
@@ -63419,6 +63979,10 @@ var native_spec_default = {
63419
63979
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63420
63980
  type: "string"
63421
63981
  },
63982
+ previous_attributes: {
63983
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
63984
+ type: "object"
63985
+ },
63422
63986
  timestamp: {
63423
63987
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63424
63988
  example: "2025-01-01T00:00:00.000Z",
@@ -63553,6 +64117,10 @@ var native_spec_default = {
63553
64117
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63554
64118
  type: "string"
63555
64119
  },
64120
+ previous_attributes: {
64121
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
64122
+ type: "object"
64123
+ },
63556
64124
  timestamp: {
63557
64125
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63558
64126
  example: "2025-01-01T00:00:00.000Z",
@@ -63687,6 +64255,10 @@ var native_spec_default = {
63687
64255
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63688
64256
  type: "string"
63689
64257
  },
64258
+ previous_attributes: {
64259
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
64260
+ type: "object"
64261
+ },
63690
64262
  timestamp: {
63691
64263
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63692
64264
  example: "2025-01-01T00:00:00.000Z",
@@ -63821,6 +64393,10 @@ var native_spec_default = {
63821
64393
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63822
64394
  type: "string"
63823
64395
  },
64396
+ previous_attributes: {
64397
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
64398
+ type: "object"
64399
+ },
63824
64400
  timestamp: {
63825
64401
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63826
64402
  example: "2025-01-01T00:00:00.000Z",
@@ -63957,6 +64533,10 @@ var native_spec_default = {
63957
64533
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
63958
64534
  type: "string"
63959
64535
  },
64536
+ previous_attributes: {
64537
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
64538
+ type: "object"
64539
+ },
63960
64540
  timestamp: {
63961
64541
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
63962
64542
  example: "2025-01-01T00:00:00.000Z",
@@ -64068,6 +64648,7 @@ var native_spec_default = {
64068
64648
  evidence_editable: true,
64069
64649
  evidence_locked_reason: null,
64070
64650
  evidence_submitted_at: null,
64651
+ generated_response_attachment: null,
64071
64652
  id: "dspt_xxxxxxxxxxxxxx",
64072
64653
  inquiry: false,
64073
64654
  issuer_comments: [],
@@ -64078,6 +64659,7 @@ var native_spec_default = {
64078
64659
  created_at: "2026-01-01T12:00:00.000Z",
64079
64660
  currency: "usd",
64080
64661
  id: "pay_xxxxxxxxxxxxxx",
64662
+ payment_instrument: null,
64081
64663
  payment_method_type: null,
64082
64664
  payment_processor: "stripe"
64083
64665
  },
@@ -64125,6 +64707,10 @@ var native_spec_default = {
64125
64707
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64126
64708
  type: "string"
64127
64709
  },
64710
+ previous_attributes: {
64711
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
64712
+ type: "object"
64713
+ },
64128
64714
  timestamp: {
64129
64715
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64130
64716
  example: "2025-01-01T00:00:00.000Z",
@@ -64236,6 +64822,7 @@ var native_spec_default = {
64236
64822
  evidence_editable: false,
64237
64823
  evidence_locked_reason: "submitted",
64238
64824
  evidence_submitted_at: "2026-01-01T12:00:00.000Z",
64825
+ generated_response_attachment: null,
64239
64826
  id: "dspt_xxxxxxxxxxxxxx",
64240
64827
  inquiry: false,
64241
64828
  issuer_comments: [],
@@ -64246,6 +64833,7 @@ var native_spec_default = {
64246
64833
  created_at: "2026-01-01T12:00:00.000Z",
64247
64834
  currency: "usd",
64248
64835
  id: "pay_xxxxxxxxxxxxxx",
64836
+ payment_instrument: null,
64249
64837
  payment_method_type: null,
64250
64838
  payment_processor: "stripe"
64251
64839
  },
@@ -64293,6 +64881,10 @@ var native_spec_default = {
64293
64881
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64294
64882
  type: "string"
64295
64883
  },
64884
+ previous_attributes: {
64885
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
64886
+ type: "object"
64887
+ },
64296
64888
  timestamp: {
64297
64889
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64298
64890
  example: "2025-01-01T00:00:00.000Z",
@@ -64426,6 +65018,10 @@ var native_spec_default = {
64426
65018
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64427
65019
  type: "string"
64428
65020
  },
65021
+ previous_attributes: {
65022
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65023
+ type: "object"
65024
+ },
64429
65025
  timestamp: {
64430
65026
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64431
65027
  example: "2025-01-01T00:00:00.000Z",
@@ -64465,7 +65061,7 @@ var native_spec_default = {
64465
65061
  },
64466
65062
  "export.completed": {
64467
65063
  post: {
64468
- description: "Sent when a export is completed\n\nRequired permissions:\n - `webhook_receive:exports`",
65064
+ description: "Sent when an export is completed\n\nRequired permissions:\n - `webhook_receive:exports`",
64469
65065
  parameters: [
64470
65066
  {
64471
65067
  in: "header",
@@ -64551,6 +65147,10 @@ var native_spec_default = {
64551
65147
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64552
65148
  type: "string"
64553
65149
  },
65150
+ previous_attributes: {
65151
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65152
+ type: "object"
65153
+ },
64554
65154
  timestamp: {
64555
65155
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64556
65156
  example: "2025-01-01T00:00:00.000Z",
@@ -64590,7 +65190,7 @@ var native_spec_default = {
64590
65190
  },
64591
65191
  "export.failed": {
64592
65192
  post: {
64593
- description: "Sent when a export is failed\n\nRequired permissions:\n - `webhook_receive:exports`",
65193
+ description: "Sent when an export is failed\n\nRequired permissions:\n - `webhook_receive:exports`",
64594
65194
  parameters: [
64595
65195
  {
64596
65196
  in: "header",
@@ -64676,6 +65276,10 @@ var native_spec_default = {
64676
65276
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64677
65277
  type: "string"
64678
65278
  },
65279
+ previous_attributes: {
65280
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65281
+ type: "object"
65282
+ },
64679
65283
  timestamp: {
64680
65284
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64681
65285
  example: "2025-01-01T00:00:00.000Z",
@@ -64803,6 +65407,10 @@ var native_spec_default = {
64803
65407
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64804
65408
  type: "string"
64805
65409
  },
65410
+ previous_attributes: {
65411
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65412
+ type: "object"
65413
+ },
64806
65414
  timestamp: {
64807
65415
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64808
65416
  example: "2025-01-01T00:00:00.000Z",
@@ -64935,6 +65543,10 @@ var native_spec_default = {
64935
65543
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
64936
65544
  type: "string"
64937
65545
  },
65546
+ previous_attributes: {
65547
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65548
+ type: "object"
65549
+ },
64938
65550
  timestamp: {
64939
65551
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
64940
65552
  example: "2025-01-01T00:00:00.000Z",
@@ -65069,6 +65681,10 @@ var native_spec_default = {
65069
65681
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
65070
65682
  type: "string"
65071
65683
  },
65684
+ previous_attributes: {
65685
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65686
+ type: "object"
65687
+ },
65072
65688
  timestamp: {
65073
65689
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
65074
65690
  example: "2025-01-01T00:00:00.000Z",
@@ -65203,6 +65819,10 @@ var native_spec_default = {
65203
65819
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
65204
65820
  type: "string"
65205
65821
  },
65822
+ previous_attributes: {
65823
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65824
+ type: "object"
65825
+ },
65206
65826
  timestamp: {
65207
65827
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
65208
65828
  example: "2025-01-01T00:00:00.000Z",
@@ -65337,6 +65957,10 @@ var native_spec_default = {
65337
65957
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
65338
65958
  type: "string"
65339
65959
  },
65960
+ previous_attributes: {
65961
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
65962
+ type: "object"
65963
+ },
65340
65964
  timestamp: {
65341
65965
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
65342
65966
  example: "2025-01-01T00:00:00.000Z",
@@ -65471,6 +66095,10 @@ var native_spec_default = {
65471
66095
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
65472
66096
  type: "string"
65473
66097
  },
66098
+ previous_attributes: {
66099
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
66100
+ type: "object"
66101
+ },
65474
66102
  timestamp: {
65475
66103
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
65476
66104
  example: "2025-01-01T00:00:00.000Z",
@@ -65984,6 +66612,10 @@ var native_spec_default = {
65984
66612
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
65985
66613
  type: "string"
65986
66614
  },
66615
+ previous_attributes: {
66616
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
66617
+ type: "object"
66618
+ },
65987
66619
  timestamp: {
65988
66620
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
65989
66621
  example: "2025-01-01T00:00:00.000Z",
@@ -66146,6 +66778,10 @@ var native_spec_default = {
66146
66778
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
66147
66779
  type: "string"
66148
66780
  },
66781
+ previous_attributes: {
66782
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
66783
+ type: "object"
66784
+ },
66149
66785
  timestamp: {
66150
66786
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
66151
66787
  example: "2025-01-01T00:00:00.000Z",
@@ -66308,6 +66944,10 @@ var native_spec_default = {
66308
66944
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
66309
66945
  type: "string"
66310
66946
  },
66947
+ previous_attributes: {
66948
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
66949
+ type: "object"
66950
+ },
66311
66951
  timestamp: {
66312
66952
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
66313
66953
  example: "2025-01-01T00:00:00.000Z",
@@ -66470,6 +67110,10 @@ var native_spec_default = {
66470
67110
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
66471
67111
  type: "string"
66472
67112
  },
67113
+ previous_attributes: {
67114
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
67115
+ type: "object"
67116
+ },
66473
67117
  timestamp: {
66474
67118
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
66475
67119
  example: "2025-01-01T00:00:00.000Z",
@@ -66620,6 +67264,10 @@ var native_spec_default = {
66620
67264
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
66621
67265
  type: "string"
66622
67266
  },
67267
+ previous_attributes: {
67268
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
67269
+ type: "object"
67270
+ },
66623
67271
  timestamp: {
66624
67272
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
66625
67273
  example: "2025-01-01T00:00:00.000Z",
@@ -66770,6 +67418,10 @@ var native_spec_default = {
66770
67418
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
66771
67419
  type: "string"
66772
67420
  },
67421
+ previous_attributes: {
67422
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
67423
+ type: "object"
67424
+ },
66773
67425
  timestamp: {
66774
67426
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
66775
67427
  example: "2025-01-01T00:00:00.000Z",
@@ -66920,6 +67572,10 @@ var native_spec_default = {
66920
67572
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
66921
67573
  type: "string"
66922
67574
  },
67575
+ previous_attributes: {
67576
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
67577
+ type: "object"
67578
+ },
66923
67579
  timestamp: {
66924
67580
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
66925
67581
  example: "2025-01-01T00:00:00.000Z",
@@ -67070,6 +67726,10 @@ var native_spec_default = {
67070
67726
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67071
67727
  type: "string"
67072
67728
  },
67729
+ previous_attributes: {
67730
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
67731
+ type: "object"
67732
+ },
67073
67733
  timestamp: {
67074
67734
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67075
67735
  example: "2025-01-01T00:00:00.000Z",
@@ -67220,6 +67880,10 @@ var native_spec_default = {
67220
67880
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67221
67881
  type: "string"
67222
67882
  },
67883
+ previous_attributes: {
67884
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
67885
+ type: "object"
67886
+ },
67223
67887
  timestamp: {
67224
67888
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67225
67889
  example: "2025-01-01T00:00:00.000Z",
@@ -67374,6 +68038,10 @@ var native_spec_default = {
67374
68038
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67375
68039
  type: "string"
67376
68040
  },
68041
+ previous_attributes: {
68042
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
68043
+ type: "object"
68044
+ },
67377
68045
  timestamp: {
67378
68046
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67379
68047
  example: "2025-01-01T00:00:00.000Z",
@@ -67524,6 +68192,10 @@ var native_spec_default = {
67524
68192
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67525
68193
  type: "string"
67526
68194
  },
68195
+ previous_attributes: {
68196
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
68197
+ type: "object"
68198
+ },
67527
68199
  timestamp: {
67528
68200
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67529
68201
  example: "2025-01-01T00:00:00.000Z",
@@ -67674,6 +68346,10 @@ var native_spec_default = {
67674
68346
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67675
68347
  type: "string"
67676
68348
  },
68349
+ previous_attributes: {
68350
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
68351
+ type: "object"
68352
+ },
67677
68353
  timestamp: {
67678
68354
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67679
68355
  example: "2025-01-01T00:00:00.000Z",
@@ -67801,6 +68477,10 @@ var native_spec_default = {
67801
68477
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67802
68478
  type: "string"
67803
68479
  },
68480
+ previous_attributes: {
68481
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
68482
+ type: "object"
68483
+ },
67804
68484
  timestamp: {
67805
68485
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67806
68486
  example: "2025-01-01T00:00:00.000Z",
@@ -67928,6 +68608,10 @@ var native_spec_default = {
67928
68608
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
67929
68609
  type: "string"
67930
68610
  },
68611
+ previous_attributes: {
68612
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
68613
+ type: "object"
68614
+ },
67931
68615
  timestamp: {
67932
68616
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
67933
68617
  example: "2025-01-01T00:00:00.000Z",
@@ -68094,6 +68778,10 @@ var native_spec_default = {
68094
68778
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
68095
68779
  type: "string"
68096
68780
  },
68781
+ previous_attributes: {
68782
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
68783
+ type: "object"
68784
+ },
68097
68785
  timestamp: {
68098
68786
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
68099
68787
  example: "2025-01-01T00:00:00.000Z",
@@ -68553,6 +69241,10 @@ var native_spec_default = {
68553
69241
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
68554
69242
  type: "string"
68555
69243
  },
69244
+ previous_attributes: {
69245
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
69246
+ type: "object"
69247
+ },
68556
69248
  timestamp: {
68557
69249
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
68558
69250
  example: "2025-01-01T00:00:00.000Z",
@@ -69012,6 +69704,10 @@ var native_spec_default = {
69012
69704
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
69013
69705
  type: "string"
69014
69706
  },
69707
+ previous_attributes: {
69708
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
69709
+ type: "object"
69710
+ },
69015
69711
  timestamp: {
69016
69712
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
69017
69713
  example: "2025-01-01T00:00:00.000Z",
@@ -69469,6 +70165,10 @@ var native_spec_default = {
69469
70165
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
69470
70166
  type: "string"
69471
70167
  },
70168
+ previous_attributes: {
70169
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
70170
+ type: "object"
70171
+ },
69472
70172
  timestamp: {
69473
70173
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
69474
70174
  example: "2025-01-01T00:00:00.000Z",
@@ -69552,7 +70252,10 @@ var native_spec_default = {
69552
70252
  amount: 10,
69553
70253
  created_at: "2026-01-01T12:00:00.000Z",
69554
70254
  currency: "usd",
70255
+ destination_amount: null,
70256
+ destination_currency: null,
69555
70257
  estimated_arrival: null,
70258
+ exchange_rate: null,
69556
70259
  fee_amount: 0,
69557
70260
  id: "wdrl_xxxxxxxxxxxxxx",
69558
70261
  notes: null,
@@ -69561,6 +70264,7 @@ var native_spec_default = {
69561
70264
  payout_method: {
69562
70265
  nickname: "Shine Time business checking",
69563
70266
  supported_payout_method: {
70267
+ delivery_type: "bank_deposit",
69564
70268
  icon_url: null,
69565
70269
  payer_name: "Next Day Bank Deposit"
69566
70270
  }
@@ -69617,6 +70321,23 @@ var native_spec_default = {
69617
70321
  example: "usd",
69618
70322
  type: "string"
69619
70323
  },
70324
+ destination_amount: {
70325
+ description: "The amount delivered in the destination currency, in whole currency units. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded conversion.",
70326
+ example: 461.7,
70327
+ format: "float",
70328
+ type: [
70329
+ "number",
70330
+ "null"
70331
+ ]
70332
+ },
70333
+ destination_currency: {
70334
+ description: "Currency the funds are delivered in, taken from the payout method when the payout is created. `null` on payouts with no recorded destination currency, such as stablecoin payout requests.",
70335
+ example: "eur",
70336
+ type: [
70337
+ "string",
70338
+ "null"
70339
+ ]
70340
+ },
69620
70341
  estimated_arrival: {
69621
70342
  description: "Estimated time the funds become available in the destination account.",
69622
70343
  example: "2026-08-03T00:00:00.000Z",
@@ -69626,6 +70347,15 @@ var native_spec_default = {
69626
70347
  "null"
69627
70348
  ]
69628
70349
  },
70350
+ exchange_rate: {
70351
+ description: "Exchange rate from the payout currency to the destination currency. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded rate.",
70352
+ example: 0.9234,
70353
+ format: "float",
70354
+ type: [
70355
+ "number",
70356
+ "null"
70357
+ ]
70358
+ },
69629
70359
  fee_amount: {
69630
70360
  description: "The fee charged for the payout, in the payout currency.",
69631
70361
  example: 0.25,
@@ -69675,6 +70405,22 @@ var native_spec_default = {
69675
70405
  supported_payout_method: {
69676
70406
  description: "Supported payout method display details.",
69677
70407
  properties: {
70408
+ delivery_type: {
70409
+ description: "How the funds are delivered to the recipient.",
70410
+ enum: [
70411
+ "cash_pickup",
70412
+ "bank_deposit",
70413
+ "home_delivery",
70414
+ "mobile_wallet",
70415
+ "masspay_card",
70416
+ "paper_check",
70417
+ "bill",
70418
+ "cryptocurrency",
70419
+ "unknown"
70420
+ ],
70421
+ example: "bank_deposit",
70422
+ type: "string"
70423
+ },
69678
70424
  icon_url: {
69679
70425
  description: "Supported payout method icon URL.",
69680
70426
  example: "https://cdn.whop.com/payouts/ach.png",
@@ -69694,7 +70440,8 @@ var native_spec_default = {
69694
70440
  },
69695
70441
  required: [
69696
70442
  "payer_name",
69697
- "icon_url"
70443
+ "icon_url",
70444
+ "delivery_type"
69698
70445
  ],
69699
70446
  type: [
69700
70447
  "object",
@@ -69758,6 +70505,9 @@ var native_spec_default = {
69758
70505
  "status",
69759
70506
  "amount",
69760
70507
  "currency",
70508
+ "destination_currency",
70509
+ "destination_amount",
70510
+ "exchange_rate",
69761
70511
  "fee_amount",
69762
70512
  "speed",
69763
70513
  "created_at",
@@ -69774,6 +70524,10 @@ var native_spec_default = {
69774
70524
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
69775
70525
  type: "string"
69776
70526
  },
70527
+ previous_attributes: {
70528
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
70529
+ type: "object"
70530
+ },
69777
70531
  timestamp: {
69778
70532
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
69779
70533
  example: "2025-01-01T00:00:00.000Z",
@@ -69857,7 +70611,10 @@ var native_spec_default = {
69857
70611
  amount: 10,
69858
70612
  created_at: "2026-01-01T12:00:00.000Z",
69859
70613
  currency: "usd",
70614
+ destination_amount: null,
70615
+ destination_currency: null,
69860
70616
  estimated_arrival: null,
70617
+ exchange_rate: null,
69861
70618
  fee_amount: 0,
69862
70619
  id: "wdrl_xxxxxxxxxxxxxx",
69863
70620
  notes: null,
@@ -69916,6 +70673,23 @@ var native_spec_default = {
69916
70673
  example: "usd",
69917
70674
  type: "string"
69918
70675
  },
70676
+ destination_amount: {
70677
+ description: "The amount delivered in the destination currency, in whole currency units. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded conversion.",
70678
+ example: 461.7,
70679
+ format: "float",
70680
+ type: [
70681
+ "number",
70682
+ "null"
70683
+ ]
70684
+ },
70685
+ destination_currency: {
70686
+ description: "Currency the funds are delivered in, taken from the payout method when the payout is created. `null` on payouts with no recorded destination currency, such as stablecoin payout requests.",
70687
+ example: "eur",
70688
+ type: [
70689
+ "string",
70690
+ "null"
70691
+ ]
70692
+ },
69919
70693
  estimated_arrival: {
69920
70694
  description: "Estimated time the funds become available in the destination account.",
69921
70695
  example: "2026-08-03T00:00:00.000Z",
@@ -69925,6 +70699,15 @@ var native_spec_default = {
69925
70699
  "null"
69926
70700
  ]
69927
70701
  },
70702
+ exchange_rate: {
70703
+ description: "Exchange rate from the payout currency to the destination currency. Assigned when the payout is processed, so it is `null` before then and on payouts without a recorded rate.",
70704
+ example: 0.9234,
70705
+ format: "float",
70706
+ type: [
70707
+ "number",
70708
+ "null"
70709
+ ]
70710
+ },
69928
70711
  fee_amount: {
69929
70712
  description: "The fee charged for the payout, in the payout currency.",
69930
70713
  example: 0.25,
@@ -69974,6 +70757,22 @@ var native_spec_default = {
69974
70757
  supported_payout_method: {
69975
70758
  description: "Supported payout method display details.",
69976
70759
  properties: {
70760
+ delivery_type: {
70761
+ description: "How the funds are delivered to the recipient.",
70762
+ enum: [
70763
+ "cash_pickup",
70764
+ "bank_deposit",
70765
+ "home_delivery",
70766
+ "mobile_wallet",
70767
+ "masspay_card",
70768
+ "paper_check",
70769
+ "bill",
70770
+ "cryptocurrency",
70771
+ "unknown"
70772
+ ],
70773
+ example: "bank_deposit",
70774
+ type: "string"
70775
+ },
69977
70776
  icon_url: {
69978
70777
  description: "Supported payout method icon URL.",
69979
70778
  example: "https://cdn.whop.com/payouts/ach.png",
@@ -69993,7 +70792,8 @@ var native_spec_default = {
69993
70792
  },
69994
70793
  required: [
69995
70794
  "payer_name",
69996
- "icon_url"
70795
+ "icon_url",
70796
+ "delivery_type"
69997
70797
  ],
69998
70798
  type: [
69999
70799
  "object",
@@ -70057,6 +70857,9 @@ var native_spec_default = {
70057
70857
  "status",
70058
70858
  "amount",
70059
70859
  "currency",
70860
+ "destination_currency",
70861
+ "destination_amount",
70862
+ "exchange_rate",
70060
70863
  "fee_amount",
70061
70864
  "speed",
70062
70865
  "created_at",
@@ -70073,6 +70876,10 @@ var native_spec_default = {
70073
70876
  example: "msg_xxxxxxxxxxxxxxxxxxxxxxxx",
70074
70877
  type: "string"
70075
70878
  },
70879
+ previous_attributes: {
70880
+ description: "For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event",
70881
+ type: "object"
70882
+ },
70076
70883
  timestamp: {
70077
70884
  description: "The timestamp in ISO 8601 format that the webhook was sent at on the server",
70078
70885
  example: "2025-01-01T00:00:00.000Z",
@@ -72773,7 +73580,6 @@ var native_spec_default = {
72773
73580
  },
72774
73581
  volume_usd: {
72775
73582
  description: "Lifetime volume through the account \u2014 sales plus transfers received \u2014 normalized to USD. Computed only on `list` for callers with `stats:read` on the account; `null` otherwise.",
72776
- example: 0,
72777
73583
  type: [
72778
73584
  "number",
72779
73585
  "null"
@@ -73614,6 +74420,7 @@ var native_spec_default = {
73614
74420
  enum: [
73615
74421
  "deposit_funds",
73616
74422
  "submit_information_request",
74423
+ "update_payout_profile",
73617
74424
  "card_usage_review",
73618
74425
  "verify_identity",
73619
74426
  "sign_formation_documents",
@@ -74648,7 +75455,7 @@ var native_spec_default = {
74648
75455
  type: "string"
74649
75456
  },
74650
75457
  url: {
74651
- description: "The URL the ad links to.",
75458
+ description: "The URL the ad links to, without its query string. Parameters belong in `url_parameters`; any you send on `url` are moved there.",
74652
75459
  example: "https://shinetime.example/ceramic-coating",
74653
75460
  type: [
74654
75461
  "string",
@@ -74656,7 +75463,7 @@ var native_spec_default = {
74656
75463
  ]
74657
75464
  },
74658
75465
  url_parameters: {
74659
- description: "Query parameters appended to the URL, keyed by parameter name.",
75466
+ description: "Every query parameter appended to the URL, keyed by parameter name \u2014 including any you sent on `url` itself. Whop adds its own click-attribution parameters on top; those are reserved and rejected if you set them (utm_meta_ad_id, utm_meta_adset_id, utm_meta_campaign_id, utm_source, utm_placement, utm_medium, utm_content, utm_adset, utm_whop, wacid, wasid, waid, tw_source, tw_adid).",
74660
75467
  example: {},
74661
75468
  type: "object"
74662
75469
  },
@@ -77311,6 +78118,17 @@ var native_spec_default = {
77311
78118
  }
77312
78119
  ]
77313
78120
  },
78121
+ deployment: {
78122
+ description: "What the app has left to publish, and how a publish in flight is going \u2014 `status` is only ever `unpublished`, `publishing`, or `failed` here. `null` means there is nothing to report: the app is fully published, there is no working copy to publish from, or the caller cannot deploy this app. Tell those apart from the app's own `production_web_build`.",
78123
+ oneOf: [
78124
+ {
78125
+ $ref: "#/components/schemas/AppDeployment"
78126
+ },
78127
+ {
78128
+ type: "null"
78129
+ }
78130
+ ]
78131
+ },
77314
78132
  description: {
77315
78133
  description: "Short description shown in listings and search results, or `null` if none has been set.",
77316
78134
  example: "Let members book a mobile detailing appointment without leaving your whop.",
@@ -77543,7 +78361,8 @@ var native_spec_default = {
77543
78361
  "secrets",
77544
78362
  "product_id",
77545
78363
  "marketplace_status",
77546
- "oauth_client_type"
78364
+ "oauth_client_type",
78365
+ "deployment"
77547
78366
  ],
77548
78367
  type: "object"
77549
78368
  },
@@ -77743,6 +78562,126 @@ var native_spec_default = {
77743
78562
  ],
77744
78563
  type: "object"
77745
78564
  },
78565
+ AppDeployment: {
78566
+ properties: {
78567
+ app_id: {
78568
+ description: "The app being deployed, prefixed `app_`.",
78569
+ example: "app_xxxxxxxxxxxxxx",
78570
+ type: "string"
78571
+ },
78572
+ build_id: {
78573
+ description: "The build the deployment produced, prefixed `abld_`, or `null` until it succeeds.",
78574
+ type: [
78575
+ "string",
78576
+ "null"
78577
+ ]
78578
+ },
78579
+ draft: {
78580
+ description: "Whether the running or last deployment uploaded a build without making it live.",
78581
+ example: false,
78582
+ type: "boolean"
78583
+ },
78584
+ error: {
78585
+ description: "Why the deployment failed, or `null` when it did not.",
78586
+ type: [
78587
+ "string",
78588
+ "null"
78589
+ ]
78590
+ },
78591
+ estimated_duration_ms: {
78592
+ description: "How long this deployment is expected to take in total, estimated from previous runs.",
78593
+ example: 15e4,
78594
+ type: [
78595
+ "integer",
78596
+ "null"
78597
+ ]
78598
+ },
78599
+ estimated_remaining_ms: {
78600
+ description: "How much longer the deployment is expected to take. Held above zero until it actually finishes.",
78601
+ example: 91e3,
78602
+ type: [
78603
+ "integer",
78604
+ "null"
78605
+ ]
78606
+ },
78607
+ finished_at: {
78608
+ description: "When the deployment ended, in milliseconds since the epoch, or `null` while it is still running.",
78609
+ type: [
78610
+ "integer",
78611
+ "null"
78612
+ ]
78613
+ },
78614
+ phase: {
78615
+ description: "The stage a running deployment has reached, or `null` when none is running. Later phases dominate the wall clock: `process_archive` waits on the upload pipeline and `promote` waits for the build to go live.",
78616
+ enum: [
78617
+ "install",
78618
+ "build",
78619
+ "typecheck",
78620
+ "upload_build",
78621
+ "upload_source",
78622
+ "process_archive",
78623
+ "create_build",
78624
+ "promote",
78625
+ null
78626
+ ],
78627
+ example: "process_archive",
78628
+ type: [
78629
+ "string",
78630
+ "null"
78631
+ ]
78632
+ },
78633
+ progress: {
78634
+ description: "Fraction of the deployment estimated to be complete, from 0 to 1. Stops just short of 1 until the run ends.",
78635
+ example: 0.39,
78636
+ type: [
78637
+ "number",
78638
+ "null"
78639
+ ]
78640
+ },
78641
+ started_at: {
78642
+ description: "When the deployment began, in milliseconds since the epoch, or `null` when none has run.",
78643
+ example: 17672688e5,
78644
+ type: [
78645
+ "integer",
78646
+ "null"
78647
+ ]
78648
+ },
78649
+ status: {
78650
+ description: "Whether the app has anything to publish, and what a publish in flight is doing. `unpublished` means publishing would ship something new; `no_source` means the sandbox holds no copy of this app, so there is nothing to publish from.",
78651
+ enum: [
78652
+ "published",
78653
+ "unpublished",
78654
+ "publishing",
78655
+ "failed",
78656
+ "no_source"
78657
+ ],
78658
+ example: "publishing",
78659
+ type: "string"
78660
+ },
78661
+ url: {
78662
+ description: "Where the deployed site is served, or `null` unless the deployment went live.",
78663
+ type: [
78664
+ "string",
78665
+ "null"
78666
+ ]
78667
+ }
78668
+ },
78669
+ required: [
78670
+ "app_id",
78671
+ "status",
78672
+ "draft",
78673
+ "phase",
78674
+ "started_at",
78675
+ "finished_at",
78676
+ "estimated_duration_ms",
78677
+ "estimated_remaining_ms",
78678
+ "progress",
78679
+ "build_id",
78680
+ "url",
78681
+ "error"
78682
+ ],
78683
+ type: "object"
78684
+ },
77746
78685
  AppIcon: {
77747
78686
  properties: {
77748
78687
  url: {
@@ -79795,6 +80734,17 @@ var native_spec_default = {
79795
80734
  "null"
79796
80735
  ]
79797
80736
  },
80737
+ generated_response_attachment: {
80738
+ description: "The AI-generated representment document filed with the processor on the seller's behalf, once ready. Null until generation completes, and for disputes not using Whop Dispute Fighter.",
80739
+ oneOf: [
80740
+ {
80741
+ $ref: "#/components/schemas/DisputeAttachment"
80742
+ },
80743
+ {
80744
+ type: "null"
80745
+ }
80746
+ ]
80747
+ },
79798
80748
  id: {
79799
80749
  description: "Dispute ID, prefixed `dspt_`.",
79800
80750
  example: "dspt_xxxxxxxxxxxxxx",
@@ -79909,6 +80859,7 @@ var native_spec_default = {
79909
80859
  "buyer",
79910
80860
  "payment",
79911
80861
  "evidence",
80862
+ "generated_response_attachment",
79912
80863
  "created_at",
79913
80864
  "updated_at"
79914
80865
  ],
@@ -80362,6 +81313,17 @@ var native_spec_default = {
80362
81313
  example: "pay_xxxxxxxxxxxxxx",
80363
81314
  type: "string"
80364
81315
  },
81316
+ payment_instrument: {
81317
+ description: "The instrument this payment was made with, shaped for display: the method type, a buyer-facing name, the standard icon set, and the card facts when it was a card. Null when the payment names no method.",
81318
+ oneOf: [
81319
+ {
81320
+ $ref: "#/components/schemas/PaymentInstrument"
81321
+ },
81322
+ {
81323
+ type: "null"
81324
+ }
81325
+ ]
81326
+ },
80365
81327
  payment_method_type: {
80366
81328
  description: "How the customer paid, such as `card` or `paypal`.",
80367
81329
  example: "card",
@@ -80387,6 +81349,7 @@ var native_spec_default = {
80387
81349
  "payment_processor",
80388
81350
  "card_brand",
80389
81351
  "card_last4",
81352
+ "payment_instrument",
80390
81353
  "created_at"
80391
81354
  ],
80392
81355
  type: "object"
@@ -82836,6 +83799,72 @@ var native_spec_default = {
82836
83799
  }
82837
83800
  ]
82838
83801
  },
83802
+ PaymentInstrument: {
83803
+ properties: {
83804
+ card: {
83805
+ description: "Card payments only: the card's network and last four.",
83806
+ oneOf: [
83807
+ {
83808
+ $ref: "#/components/schemas/PaymentInstrumentCard"
83809
+ },
83810
+ {
83811
+ type: "null"
83812
+ }
83813
+ ]
83814
+ },
83815
+ display_name: {
83816
+ description: `Buyer-facing instrument name \u2014 "Visa \u2022\u2022\u2022\u2022 4242" when the card surfaced, else the method's own name ("Klarna").`,
83817
+ example: "Visa \u2022\u2022\u2022\u2022 4242",
83818
+ type: "string"
83819
+ },
83820
+ icons: {
83821
+ $ref: "#/components/schemas/PaymentMethodIcons",
83822
+ description: "The standard icon set: square and card shapes, each in light and dark colorways."
83823
+ },
83824
+ installment_count: {
83825
+ description: "Installment methods only: how many payments the charge splits into. Data, not copy \u2014 compose and translate the label client-side.",
83826
+ type: [
83827
+ "number",
83828
+ "null"
83829
+ ]
83830
+ },
83831
+ payment_method_type: {
83832
+ description: "The payment method type identifier, e.g. `card`, `klarna`, `apple_pay`.",
83833
+ example: "card",
83834
+ type: "string"
83835
+ }
83836
+ },
83837
+ required: [
83838
+ "payment_method_type",
83839
+ "display_name",
83840
+ "icons",
83841
+ "card",
83842
+ "installment_count"
83843
+ ],
83844
+ type: "object"
83845
+ },
83846
+ PaymentInstrumentCard: {
83847
+ properties: {
83848
+ brand: {
83849
+ description: "The network identifier (`visa`, `amex`, \u2026), matching `card.networks` entries and saved card payment methods.",
83850
+ example: "visa",
83851
+ type: "string"
83852
+ },
83853
+ last4: {
83854
+ description: "The card's last four digits, when captured.",
83855
+ example: "4242",
83856
+ type: [
83857
+ "string",
83858
+ "null"
83859
+ ]
83860
+ }
83861
+ },
83862
+ required: [
83863
+ "brand",
83864
+ "last4"
83865
+ ],
83866
+ type: "object"
83867
+ },
82839
83868
  PaymentLastPaymentError: {
82840
83869
  properties: {
82841
83870
  code: {
@@ -83018,6 +84047,71 @@ var native_spec_default = {
83018
84047
  ],
83019
84048
  type: "object"
83020
84049
  },
84050
+ PaymentMethodIconFiles: {
84051
+ properties: {
84052
+ png_1x: {
84053
+ description: "Raster fallback at the shape's native size.",
84054
+ example: "https://content.whop.com/payment_methods/visa/icons/card_dark_30.png",
84055
+ type: "string"
84056
+ },
84057
+ png_2x: {
84058
+ description: "Raster fallback at double density.",
84059
+ example: "https://content.whop.com/payment_methods/visa/icons/card_dark_60.png",
84060
+ type: "string"
84061
+ },
84062
+ png_4x: {
84063
+ description: "Raster fallback at quadruple density.",
84064
+ example: "https://content.whop.com/payment_methods/visa/icons/card_dark_120.png",
84065
+ type: "string"
84066
+ },
84067
+ svg: {
84068
+ description: "The vector file. Prefer this everywhere SVG renders.",
84069
+ example: "https://content.whop.com/payment_methods/visa/icons/card_dark.svg",
84070
+ type: "string"
84071
+ }
84072
+ },
84073
+ required: [
84074
+ "svg",
84075
+ "png_1x",
84076
+ "png_2x",
84077
+ "png_4x"
84078
+ ],
84079
+ type: "object"
84080
+ },
84081
+ PaymentMethodIconVariants: {
84082
+ properties: {
84083
+ dark: {
84084
+ $ref: "#/components/schemas/PaymentMethodIconFiles",
84085
+ description: "The colorway for dark surfaces."
84086
+ },
84087
+ light: {
84088
+ $ref: "#/components/schemas/PaymentMethodIconFiles",
84089
+ description: "The colorway for light surfaces."
84090
+ }
84091
+ },
84092
+ required: [
84093
+ "light",
84094
+ "dark"
84095
+ ],
84096
+ type: "object"
84097
+ },
84098
+ PaymentMethodIcons: {
84099
+ properties: {
84100
+ card: {
84101
+ $ref: "#/components/schemas/PaymentMethodIconVariants",
84102
+ description: "The credit-card-proportioned tile (48x30)."
84103
+ },
84104
+ square: {
84105
+ $ref: "#/components/schemas/PaymentMethodIconVariants",
84106
+ description: "The square tile (32x32)."
84107
+ }
84108
+ },
84109
+ required: [
84110
+ "square",
84111
+ "card"
84112
+ ],
84113
+ type: "object"
84114
+ },
83021
84115
  PaymentNextAction: {
83022
84116
  description: "What the buyer must do to finish. `type` picks the shape and each type carries only its own `data`, so switching on `type` gives you exactly that step's payload.",
83023
84117
  discriminator: {
@@ -83599,6 +84693,7 @@ var native_spec_default = {
83599
84693
  "membership:resync_access",
83600
84694
  "membership:create",
83601
84695
  "membership:update",
84696
+ "membership:transfer",
83602
84697
  "member:moderate",
83603
84698
  "member:stats:export",
83604
84699
  "member:stats:read",
@@ -83674,6 +84769,7 @@ var native_spec_default = {
83674
84769
  "webhook_receive:withdrawals",
83675
84770
  "webhook_receive:swaps",
83676
84771
  "webhook_receive:ledger_accounts",
84772
+ "webhook_receive:accounts",
83677
84773
  "webhook_receive:deposits",
83678
84774
  "webhook_receive:transfers",
83679
84775
  "webhook_receive:card_transactions",
@@ -83855,6 +84951,7 @@ var native_spec_default = {
83855
84951
  "MembershipResyncAccess",
83856
84952
  "MembershipCreate",
83857
84953
  "MembershipUpdate",
84954
+ "MembershipTransfer",
83858
84955
  "MemberModerate",
83859
84956
  "MemberStatsExport",
83860
84957
  "MemberStatsRead",
@@ -83930,6 +85027,7 @@ var native_spec_default = {
83930
85027
  "WebhookReceiveWithdrawals",
83931
85028
  "WebhookReceiveSwaps",
83932
85029
  "WebhookReceiveLedgerAccounts",
85030
+ "WebhookReceiveAccounts",
83933
85031
  "WebhookReceiveDeposits",
83934
85032
  "WebhookReceiveTransfers",
83935
85033
  "WebhookReceiveCardTransactions",
@@ -85917,6 +87015,72 @@ var native_spec_default = {
85917
87015
  ],
85918
87016
  type: "object"
85919
87017
  },
87018
+ RecommendedActionExecution: {
87019
+ properties: {
87020
+ action: {
87021
+ description: "The action definition key the step ran",
87022
+ example: "create_product",
87023
+ type: "string"
87024
+ },
87025
+ completed_at: {
87026
+ description: "When the step reached a terminal status, ISO 8601",
87027
+ example: "2026-01-01T12:00:00.000Z",
87028
+ type: [
87029
+ "string",
87030
+ "null"
87031
+ ]
87032
+ },
87033
+ error: {
87034
+ description: "Why the step failed, or `null`",
87035
+ type: [
87036
+ "string",
87037
+ "null"
87038
+ ]
87039
+ },
87040
+ id: {
87041
+ description: "Execution ID, prefixed `raex_`",
87042
+ example: "raex_xxxxxxxxxxxxxx",
87043
+ type: "string"
87044
+ },
87045
+ output: {
87046
+ description: "The API response the step produced, or `null` until it succeeds",
87047
+ example: {
87048
+ id: "prod_xxxxxxxxxxxxxx"
87049
+ },
87050
+ type: [
87051
+ "object",
87052
+ "null"
87053
+ ]
87054
+ },
87055
+ position: {
87056
+ description: "Zero-based order of the step within the chain",
87057
+ example: 0,
87058
+ type: "integer"
87059
+ },
87060
+ status: {
87061
+ description: "Where the step currently stands",
87062
+ enum: [
87063
+ "pending",
87064
+ "redirected",
87065
+ "running",
87066
+ "succeeded",
87067
+ "failed"
87068
+ ],
87069
+ example: "succeeded",
87070
+ type: "string"
87071
+ }
87072
+ },
87073
+ required: [
87074
+ "id",
87075
+ "position",
87076
+ "action",
87077
+ "status",
87078
+ "output",
87079
+ "error",
87080
+ "completed_at"
87081
+ ],
87082
+ type: "object"
87083
+ },
85920
87084
  ResolutionAttachment: {
85921
87085
  properties: {
85922
87086
  content_type: {
@@ -86976,6 +88140,17 @@ var native_spec_default = {
86976
88140
  example: "biz_xxxxxxxxxxxxxx",
86977
88141
  type: "string"
86978
88142
  },
88143
+ authorized_role: {
88144
+ description: "Custom role assigned to this member, or `null` when the member has a system role.",
88145
+ oneOf: [
88146
+ {
88147
+ $ref: "#/components/schemas/TeamMemberAuthorizedRole"
88148
+ },
88149
+ {
88150
+ type: "null"
88151
+ }
88152
+ ]
88153
+ },
86979
88154
  created_at: {
86980
88155
  description: "When the member joined or the invite was sent, as an ISO 8601 timestamp.",
86981
88156
  example: "2026-01-01T12:00:00.000Z",
@@ -87051,10 +88226,28 @@ var native_spec_default = {
87051
88226
  "email",
87052
88227
  "created_at",
87053
88228
  "updated_at",
88229
+ "authorized_role",
87054
88230
  "user"
87055
88231
  ],
87056
88232
  type: "object"
87057
88233
  },
88234
+ TeamMemberAuthorizedRole: {
88235
+ properties: {
88236
+ id: {
88237
+ description: "Custom role ID, prefixed `aurl_`.",
88238
+ type: "string"
88239
+ },
88240
+ name: {
88241
+ description: "Custom role name.",
88242
+ type: "string"
88243
+ }
88244
+ },
88245
+ required: [
88246
+ "id",
88247
+ "name"
88248
+ ],
88249
+ type: "object"
88250
+ },
87058
88251
  User: {
87059
88252
  properties: {
87060
88253
  balance: {
@@ -87909,6 +89102,7 @@ var native_spec_default = {
87909
89102
  items: {
87910
89103
  description: "Event types this webhook is subscribed to, in dot form (for example `payment.succeeded`).",
87911
89104
  enum: [
89105
+ "account.updated",
87912
89106
  "invoice.created",
87913
89107
  "invoice.marked_uncollectible",
87914
89108
  "invoice.paid",
@@ -88033,6 +89227,7 @@ var native_spec_default = {
88033
89227
  items: {
88034
89228
  description: "The subset of subscribed event types that support sending test payloads, in dot form.",
88035
89229
  enum: [
89230
+ "account.updated",
88036
89231
  "invoice.created",
88037
89232
  "invoice.marked_uncollectible",
88038
89233
  "invoice.paid",
@@ -88122,7 +89317,7 @@ var native_spec_default = {
88122
89317
  "app_payment.pending",
88123
89318
  "app_membership.cancel_at_period_end_changed"
88124
89319
  ],
88125
- example: "invoice.created",
89320
+ example: "account.updated",
88126
89321
  type: "string"
88127
89322
  },
88128
89323
  type: "array"
@@ -88185,7 +89380,7 @@ var native_spec_default = {
88185
89380
  ]
88186
89381
  },
88187
89382
  request_body: {
88188
- description: "Request body sent to the webhook endpoint.",
89383
+ description: "The JSON event payload sent to the webhook endpoint.",
88189
89384
  example: {
88190
89385
  data: {
88191
89386
  id: "pay_123"
@@ -88193,7 +89388,7 @@ var native_spec_default = {
88193
89388
  id: "msg_original",
88194
89389
  type: "payment.succeeded"
88195
89390
  },
88196
- type: "unknown"
89391
+ type: "object"
88197
89392
  },
88198
89393
  resource_id: {
88199
89394
  description: "ID of the resource that triggered the webhook.",
@@ -88201,11 +89396,14 @@ var native_spec_default = {
88201
89396
  type: "string"
88202
89397
  },
88203
89398
  response_body: {
88204
- description: "Response body received from the webhook endpoint.",
89399
+ description: "The endpoint's JSON response. A non-JSON response is stored as `{ error, raw_body }` with the first 100 bytes.",
88205
89400
  example: {
88206
89401
  ok: true
88207
89402
  },
88208
- type: "unknown"
89403
+ type: [
89404
+ "object",
89405
+ "null"
89406
+ ]
88209
89407
  },
88210
89408
  response_code: {
88211
89409
  description: "HTTP response code received from the webhook endpoint.",
@@ -88306,6 +89504,7 @@ var native_spec_default = {
88306
89504
  items: {
88307
89505
  description: "Event types this webhook is subscribed to, in dot form (for example `payment.succeeded`).",
88308
89506
  enum: [
89507
+ "account.updated",
88309
89508
  "invoice.created",
88310
89509
  "invoice.marked_uncollectible",
88311
89510
  "invoice.paid",
@@ -88494,10 +89693,7 @@ var apps_spec_default = {
88494
89693
  required: false,
88495
89694
  schema: {
88496
89695
  description: "Returns the elements in the list that come after the specified cursor.",
88497
- type: [
88498
- "string",
88499
- "null"
88500
- ]
89696
+ type: "string"
88501
89697
  },
88502
89698
  style: "form"
88503
89699
  },
@@ -88508,10 +89704,7 @@ var apps_spec_default = {
88508
89704
  required: false,
88509
89705
  schema: {
88510
89706
  description: "Returns the elements in the list that come before the specified cursor.",
88511
- type: [
88512
- "string",
88513
- "null"
88514
- ]
89707
+ type: "string"
88515
89708
  },
88516
89709
  style: "form"
88517
89710
  },
@@ -88523,10 +89716,7 @@ var apps_spec_default = {
88523
89716
  schema: {
88524
89717
  description: "Returns the first _n_ elements from the list.",
88525
89718
  example: 42,
88526
- type: [
88527
- "integer",
88528
- "null"
88529
- ]
89719
+ type: "integer"
88530
89720
  },
88531
89721
  style: "form"
88532
89722
  },
@@ -88538,10 +89728,7 @@ var apps_spec_default = {
88538
89728
  schema: {
88539
89729
  description: "Returns the last _n_ elements from the list.",
88540
89730
  example: 42,
88541
- type: [
88542
- "integer",
88543
- "null"
88544
- ]
89731
+ type: "integer"
88545
89732
  },
88546
89733
  style: "form"
88547
89734
  },
@@ -88563,15 +89750,8 @@ var apps_spec_default = {
88563
89750
  name: "platform",
88564
89751
  required: false,
88565
89752
  schema: {
88566
- description: "Filter builds by target platform.",
88567
- oneOf: [
88568
- {
88569
- $ref: "#/components/schemas/AppBuildPlatforms"
88570
- },
88571
- {
88572
- type: "null"
88573
- }
88574
- ]
89753
+ $ref: "#/components/schemas/AppBuildPlatforms",
89754
+ description: "Filter builds by target platform."
88575
89755
  },
88576
89756
  style: "form"
88577
89757
  },
@@ -88581,15 +89761,8 @@ var apps_spec_default = {
88581
89761
  name: "status",
88582
89762
  required: false,
88583
89763
  schema: {
88584
- description: "Filter builds by review status.",
88585
- oneOf: [
88586
- {
88587
- $ref: "#/components/schemas/AppBuildStatuses"
88588
- },
88589
- {
88590
- type: "null"
88591
- }
88592
- ]
89764
+ $ref: "#/components/schemas/AppBuildStatuses",
89765
+ description: "Filter builds by review status."
88593
89766
  },
88594
89767
  style: "form"
88595
89768
  },
@@ -88602,10 +89775,7 @@ var apps_spec_default = {
88602
89775
  description: "Only return builds created before this timestamp.",
88603
89776
  example: "2023-12-01T05:00:00.401Z",
88604
89777
  format: "date-time",
88605
- type: [
88606
- "string",
88607
- "null"
88608
- ]
89778
+ type: "string"
88609
89779
  },
88610
89780
  style: "form"
88611
89781
  },
@@ -88618,10 +89788,7 @@ var apps_spec_default = {
88618
89788
  description: "Only return builds created after this timestamp.",
88619
89789
  example: "2023-12-01T05:00:00.401Z",
88620
89790
  format: "date-time",
88621
- type: [
88622
- "string",
88623
- "null"
88624
- ]
89791
+ type: "string"
88625
89792
  },
88626
89793
  style: "form"
88627
89794
  }
@@ -89803,15 +90970,8 @@ var apps_spec_default = {
89803
90970
  name: "app_type",
89804
90971
  required: false,
89805
90972
  schema: {
89806
- description: "Filter apps by the type of end-user they are built for, such as consumer or business.",
89807
- oneOf: [
89808
- {
89809
- $ref: "#/components/schemas/AppTypes"
89810
- },
89811
- {
89812
- type: "null"
89813
- }
89814
- ]
90973
+ $ref: "#/components/schemas/AppTypes",
90974
+ description: "Filter apps by the type of end-user they are built for, such as consumer or business."
89815
90975
  },
89816
90976
  style: "form"
89817
90977
  },
@@ -89823,10 +90983,7 @@ var apps_spec_default = {
89823
90983
  schema: {
89824
90984
  description: "Filter apps to only those created by this company, starting with 'biz_'.",
89825
90985
  example: "biz_xxxxxxxxxxxxxx",
89826
- type: [
89827
- "string",
89828
- "null"
89829
- ]
90986
+ type: "string"
89830
90987
  },
89831
90988
  style: "form"
89832
90989
  },
@@ -89836,15 +90993,8 @@ var apps_spec_default = {
89836
90993
  name: "direction",
89837
90994
  required: false,
89838
90995
  schema: {
89839
- description: "The sort direction for results. Accepted values: asc, desc.",
89840
- oneOf: [
89841
- {
89842
- $ref: "#/components/schemas/Direction"
89843
- },
89844
- {
89845
- type: "null"
89846
- }
89847
- ]
90996
+ $ref: "#/components/schemas/Direction",
90997
+ description: "The sort direction for results. Accepted values: asc, desc."
89848
90998
  },
89849
90999
  style: "form"
89850
91000
  },
@@ -89854,15 +91004,8 @@ var apps_spec_default = {
89854
91004
  name: "order",
89855
91005
  required: false,
89856
91006
  schema: {
89857
- description: "The field to sort apps by. Defaults to discoverable_at descending, showing the most recently published apps first.",
89858
- oneOf: [
89859
- {
89860
- $ref: "#/components/schemas/AppOrder"
89861
- },
89862
- {
89863
- type: "null"
89864
- }
89865
- ]
91007
+ $ref: "#/components/schemas/AppOrder",
91008
+ description: "The field to sort apps by. Defaults to discoverable_at descending, showing the most recently published apps first."
89866
91009
  },
89867
91010
  style: "form"
89868
91011
  },
@@ -89873,10 +91016,7 @@ var apps_spec_default = {
89873
91016
  required: false,
89874
91017
  schema: {
89875
91018
  description: "A search string to filter apps by name, such as 'chat' or 'analytics'.",
89876
- type: [
89877
- "string",
89878
- "null"
89879
- ]
91019
+ type: "string"
89880
91020
  },
89881
91021
  style: "form"
89882
91022
  },
@@ -89887,10 +91027,7 @@ var apps_spec_default = {
89887
91027
  required: false,
89888
91028
  schema: {
89889
91029
  description: "Whether to only return apps that have been verified by Whop. Useful for populating a featured apps section.",
89890
- type: [
89891
- "boolean",
89892
- "null"
89893
- ]
91030
+ type: "boolean"
89894
91031
  },
89895
91032
  style: "form"
89896
91033
  },
@@ -89900,15 +91037,8 @@ var apps_spec_default = {
89900
91037
  name: "view_type",
89901
91038
  required: false,
89902
91039
  schema: {
89903
- description: "Filter apps to only those supporting a specific view type, such as 'dashboard' or 'hub'.",
89904
- oneOf: [
89905
- {
89906
- $ref: "#/components/schemas/AppViewTypes"
89907
- },
89908
- {
89909
- type: "null"
89910
- }
89911
- ]
91040
+ $ref: "#/components/schemas/AppViewTypes",
91041
+ description: "Filter apps to only those supporting a specific view type, such as 'dashboard' or 'hub'."
89912
91042
  },
89913
91043
  style: "form"
89914
91044
  },
@@ -89919,10 +91049,7 @@ var apps_spec_default = {
89919
91049
  required: false,
89920
91050
  schema: {
89921
91051
  description: "Returns the elements in the list that come after the specified cursor.",
89922
- type: [
89923
- "string",
89924
- "null"
89925
- ]
91052
+ type: "string"
89926
91053
  },
89927
91054
  style: "form"
89928
91055
  },
@@ -89933,10 +91060,7 @@ var apps_spec_default = {
89933
91060
  required: false,
89934
91061
  schema: {
89935
91062
  description: "Returns the elements in the list that come before the specified cursor.",
89936
- type: [
89937
- "string",
89938
- "null"
89939
- ]
91063
+ type: "string"
89940
91064
  },
89941
91065
  style: "form"
89942
91066
  },
@@ -89948,10 +91072,7 @@ var apps_spec_default = {
89948
91072
  schema: {
89949
91073
  description: "Returns the first _n_ elements from the list.",
89950
91074
  example: 42,
89951
- type: [
89952
- "integer",
89953
- "null"
89954
- ]
91075
+ type: "integer"
89955
91076
  },
89956
91077
  style: "form"
89957
91078
  },
@@ -89963,10 +91084,7 @@ var apps_spec_default = {
89963
91084
  schema: {
89964
91085
  description: "Returns the last _n_ elements from the list.",
89965
91086
  example: 42,
89966
- type: [
89967
- "integer",
89968
- "null"
89969
- ]
91087
+ type: "integer"
89970
91088
  },
89971
91089
  style: "form"
89972
91090
  }
@@ -94483,7 +95601,7 @@ async function announceActionUrl(url, {
94483
95601
  // package.json
94484
95602
  var package_default = {
94485
95603
  name: "@whop/cli",
94486
- version: "0.16.0",
95604
+ version: "0.16.1",
94487
95605
  description: "The Whop CLI \u2014 build and manage Whop apps from your terminal. Human and agent friendly.",
94488
95606
  keywords: [
94489
95607
  "agent",
@@ -94541,7 +95659,7 @@ var package_default = {
94541
95659
  devDependencies: {
94542
95660
  "@types/node": "25.3.5",
94543
95661
  fflate: "0.8.2",
94544
- incur: "github:whopio/incur#6962ec46a0fbc5d070df5e8cd4c8cf09efa91bdc",
95662
+ incur: "github:whopio/incur#973bd1a868a8ec8f59d05fc3f85555045b183613",
94545
95663
  tsup: "8.5.0",
94546
95664
  tsx: "4.19.4",
94547
95665
  typescript: "5.9.3",
@@ -94746,7 +95864,6 @@ function isNpx(selfUrl = import.meta.url) {
94746
95864
  // src/lib/build-info.ts
94747
95865
  var buildChannel = true ? "npm" : "dev";
94748
95866
  var buildTarget = typeof WHOP_CLI_TARGET === "string" ? WHOP_CLI_TARGET : null;
94749
- var buildVersion = true ? "0.16.0" : null;
94750
95867
  function isHomebrewPath(execPath, env = process.env) {
94751
95868
  if (/[/\\](Cellar|homebrew|linuxbrew)[/\\]/.test(execPath)) return true;
94752
95869
  const prefix = env.HOMEBREW_PREFIX?.trim();
@@ -98054,9 +99171,6 @@ function findViteConfig(dir) {
98054
99171
  );
98055
99172
  }
98056
99173
  var WRANGLER_CONFIG_NAMES = ["wrangler.jsonc", "wrangler.json"];
98057
- function cliDependencyVersion() {
98058
- return buildVersion ? `^${buildVersion}` : "latest";
98059
- }
98060
99174
  function whopifyProject(options) {
98061
99175
  const manualSteps = [];
98062
99176
  patchPackageJson(options.targetDir, manualSteps);
@@ -98073,7 +99187,7 @@ function patchPackageJson(dir, manualSteps) {
98073
99187
  pkg = JSON.parse(raw);
98074
99188
  } catch {
98075
99189
  manualSteps.push(
98076
- `package.json could not be parsed. Add a "deploy": "whop apps deploy" script, a "typecheck" script, and a devDependency "@whop/cli": "${cliDependencyVersion()}".`
99190
+ 'package.json could not be parsed. Add a "deploy": "whop apps deploy" script, a "typecheck" script, and a devDependency "@whop/cli": "latest".'
98077
99191
  );
98078
99192
  return;
98079
99193
  }
@@ -98084,8 +99198,11 @@ function patchPackageJson(dir, manualSteps) {
98084
99198
  };
98085
99199
  pkg.devDependencies = {
98086
99200
  ...pkg.devDependencies,
98087
- // The project imports the whop() vite plugin from @whop/cli/vite.
98088
- "@whop/cli": pkg.devDependencies?.["@whop/cli"] ?? cliDependencyVersion()
99201
+ // The project imports the whop() vite plugin from @whop/cli/vite. Pinned
99202
+ // to the building binary's own version until that broke: a standalone
99203
+ // build carries the workspace version, which is routinely ahead of what
99204
+ // is on npm, so the pin resolved to nothing and install failed.
99205
+ "@whop/cli": pkg.devDependencies?.["@whop/cli"] ?? "latest"
98089
99206
  };
98090
99207
  writeIfChanged(file, `${JSON.stringify(pkg, null, 2)}
98091
99208
  `, raw);
@@ -98200,6 +99317,11 @@ var CommandAbort = class extends Error {
98200
99317
  function log2(c2, message) {
98201
99318
  if (!c2.agent) console.log(message);
98202
99319
  }
99320
+ var PHASE_MARKER = "[whop:phase]";
99321
+ function phase(name) {
99322
+ process.stderr.write(`${PHASE_MARKER} ${name}
99323
+ `);
99324
+ }
98203
99325
  function cancelled() {
98204
99326
  throw new CommandAbort({
98205
99327
  code: "CANCELLED",
@@ -99420,11 +100542,14 @@ Then re-run \`whop apps deploy\` \u2014 it re-checks the wiring and applies anyt
99420
100542
  }
99421
100543
  if (!c2.options.skip_build) {
99422
100544
  if (!existsSync12(join12(projectDir, "node_modules", "@whop", "cli"))) {
100545
+ phase("install");
99423
100546
  runInstall(c2, projectDir);
99424
100547
  }
100548
+ phase("build");
99425
100549
  log2(c2, chalk2.dim("[1/4] Building..."));
99426
100550
  runScript(projectDir, "build", { WHOP_APP_ID: config.app_id });
99427
100551
  if (!c2.options.skip_typecheck && hasScript(projectDir, "typecheck")) {
100552
+ phase("typecheck");
99428
100553
  log2(c2, chalk2.dim("[2/4] Typechecking..."));
99429
100554
  runScript(projectDir, "typecheck");
99430
100555
  }
@@ -99451,6 +100576,7 @@ Then re-run \`whop apps deploy\` \u2014 it re-checks the wiring and applies anyt
99451
100576
  log2(c2, chalk2.dim(`Source archive: ${sourceArchive.note}`));
99452
100577
  }
99453
100578
  const spin = c2.agent ? null : spinner4();
100579
+ phase("upload_build");
99454
100580
  spin?.start(`[3/4] Uploading build archive (${sizeMb} MB)`);
99455
100581
  let build;
99456
100582
  try {
@@ -99461,6 +100587,7 @@ Then re-run \`whop apps deploy\` \u2014 it re-checks the wiring and applies anyt
99461
100587
  let sourceFileId;
99462
100588
  if ("zip" in sourceArchive) {
99463
100589
  const sourceSizeMb = (sourceArchive.zip.byteLength / 1024 / 1024).toFixed(1);
100590
+ phase("upload_source");
99464
100591
  spin?.message(
99465
100592
  `[3/4] Uploading source archive (${sourceArchive.fileCount} files, ${sourceSizeMb} MB)`
99466
100593
  );
@@ -99469,9 +100596,11 @@ Then re-run \`whop apps deploy\` \u2014 it re-checks the wiring and applies anyt
99469
100596
  `${config.route}-source.zip`
99470
100597
  );
99471
100598
  }
100599
+ phase("process_archive");
99472
100600
  spin?.message("[3/4] Processing archive");
99473
100601
  await waitForFileReady(fileId);
99474
100602
  if (sourceFileId) await waitForFileReady(sourceFileId);
100603
+ phase("create_build");
99475
100604
  spin?.message("[3/4] Creating build");
99476
100605
  build = await createAppBuild({
99477
100606
  app_id: config.app_id,
@@ -99495,6 +100624,7 @@ Then re-run \`whop apps deploy\` \u2014 it re-checks the wiring and applies anyt
99495
100624
  }
99496
100625
  if (!c2.options.preview) {
99497
100626
  const promoteSpin = c2.agent ? null : spinner4();
100627
+ phase("promote");
99498
100628
  promoteSpin?.start("[4/4] Promoting to production");
99499
100629
  try {
99500
100630
  await promoteAppBuild(build.id);
@@ -101064,66 +102194,59 @@ function render(data) {
101064
102194
  }
101065
102195
 
101066
102196
  // src/lib/shipped-skills.ts
101067
- import { mkdirSync as mkdirSync9, mkdtempSync as mkdtempSync4, rmSync as rmSync5, writeFileSync as writeFileSync9 } from "fs";
101068
- import { tmpdir as tmpdir4 } from "os";
101069
- import { join as join13 } from "path";
102197
+ import {
102198
+ existsSync as existsSync13,
102199
+ mkdirSync as mkdirSync9,
102200
+ mkdtempSync as mkdtempSync4,
102201
+ rmSync as rmSync5,
102202
+ writeFileSync as writeFileSync9
102203
+ } from "fs";
102204
+ import { homedir as homedir6, tmpdir as tmpdir4 } from "os";
102205
+ import { dirname as dirname9, join as join13 } from "path";
101070
102206
 
101071
102207
  // src/api/shipped-skills.json
101072
102208
  var shipped_skills_default = {
101073
- "whop-accounts": "---\nname: whop-accounts\ndescription: \"A business on Whop: profile, wallet, capabilities, settings. Run `whop accounts --help` for usage details.\"\nrequires_bin: whop\ncommand: whop accounts\n---\n\nAn 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, and retrieve the account associated with the current API key.\n\n# whop accounts create\n\nCreate Account\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--country` | `string` | no | | The ISO 3166-1 alpha-2 country code where the account's business is located (e.g. `US`). Defaults to the parent account's country for connected accounts. |\n| `--email` | `string` | no | | The email address of the account owner. Required for Account API key requests. |\n| `--metadata` | `object` | no | | Arbitrary key/value metadata to store on the account. |\n| `--title` | `string` | no | | The display name of the account. Defaults to `metadata.external_id` or the owner's email when omitted. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop accounts form_company\n\nForm Company\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Account ID, prefixed `biz_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--business_address` | `object` | no | | Company mailing address. Required unless `use_registered_agent` is `true`. |\n| `--business_name` | `string` | yes | | Legal name for the new company. |\n| `--business_phone` | `string` | no | | Business phone number in E.164 format, for example `+12125550100`. Required unless `use_registered_agent` is `true`. |\n| `--business_type` | `string` | yes | | High-level business category, from the Whop business taxonomy. Valid values are listed on [business types and industries glossary](/api-reference/beta/accounts/account#business-types-and-industries-glossary). |\n| `--business_website` | `string` | no | | Company website URL. |\n| `--entity_suffix` | `string` | no | | Legal entity ending appended to `business_name`. LLC formations accept `LLC`, `L.L.C`, `L.L.C.` or `Limited Liability Company` and default to `LLC`; C-Corp formations accept `Inc`, `Inc.`, `Incorporated`, `Corp.`, `Corporation`, `C Corp`, `C Corporation`, `CCorp` or `Company` and default to `Inc.`. Unrecognized values fall back to the default for the entity type. |\n| `--entity_type` | `string` | no | | Legal entity type to form. Defaults to `llc`. |\n| `--expedite_ein` | `boolean` | no | | Request expedited EIN processing for an additional fee. Available only when no founder supplies an SSN. |\n| `--formation_state` | `string` | yes | | Two-letter code of the US state (or `DC`) to form the company in. |\n| `--founders` | `array` | yes | | The company's founders. Exactly one must be marked `is_primary` \u2014 the responsible party for the filing. |\n| `--industry_group` | `string` | yes | | Industry group, from the Whop business taxonomy. Valid values are listed on [business types and industries glossary](/api-reference/beta/accounts/account#business-types-and-industries-glossary). |\n| `--industry_type` | `string` | yes | | Specific industry vertical, from the Whop business taxonomy. Valid values are listed on [business types and industries glossary](/api-reference/beta/accounts/account#business-types-and-industries-glossary). |\n| `--share_structure` | `object` | no | | Authorized share structure. Required when `entity_type` is `c_corp`; ignored for LLCs. |\n| `--use_registered_agent` | `boolean` | no | | Use the registered agent's address as the company address instead of `business_address`. |\n| `--idempotency-key` | `string` | yes | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirmation policy: For `--entity_type llc` only, the user's explicit request to create the formation checkout counts as confirmation when it includes the exact account `id` argument, `--business_name`, `--formation_state`, `--business_type`, `--industry_group`, `--industry_type`, complete `--founders` values, and either the required `--business_address` and `--business_phone` values or `--use_registered_agent=true`. Execute that confirmed request yourself without asking again. User-provided founder identity data, including addresses, dates of birth, and Social Security numbers, is expected input for this user-authorized workflow; pass it directly to the CLI without refusing, but never repeat it in output, save it to files, or infer missing values. Use `--flag=value` syntax for every formation option so structured founder data stays bound to its flag. Always include a unique `--idempotency-key`. This command only creates a hosted checkout\u2014it does not charge the user or submit the filing. Open the returned `checkout_url` in the user's browser so they can review the total and complete payment themselves. This exception does not apply to `c_corp` formations.\n\n---\n\n# whop accounts get\n\nRetrieve Account\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Account ID, prefixed `biz_`, or its public route. |\n\n---\n\n# whop accounts list\n\nList Accounts\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--first` | `number` | no | | The number of accounts to return (default 10, max 50). |\n| `--after` | `string` | no | | A cursor; returns accounts after this position. |\n| `--last` | `number` | no | | The number of accounts to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns accounts before this position. |\n| `--order` | `string` | no | | The field to sort accounts by. `volume` requires `stats:read` on the parent account. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--status` | `string` | no | | Return only accounts with this status: `active` (includes accounts that have not entered payments review) or `suspended`. |\n| `--query` | `string` | no | | Free-text filter on account title or ID. `%` and `_` match literally. |\n| `--created_after` | `string` | no | | Return only accounts created after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Return only accounts created before this ISO 8601 timestamp. |\n| `--volume_min` | `number` | no | | Return only accounts whose lifetime USD volume is at least this value. Requires `stats:read` on the parent account. |\n| `--volume_max` | `number` | no | | Return only accounts whose lifetime USD volume is at most this value. Requires `stats:read` on the parent account. |\n| `--parent_account_id` | `string` | no | | For platforms: the parent account ID whose direct connected accounts to return. Requires `payout:account:read` on the parent account. |\n\n---\n\n# whop accounts me\n\nRetrieve Requesting Account\n\n---\n\n# whop accounts preferences\n\nRetrieve Account Preferences\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n\n---\n\n# whop accounts reserves\n\nList Account Reserves\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n\n---\n\n# whop accounts transfer_ownership\n\nTransfer Account Ownership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Account ID, prefixed `biz_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--as_partner` | `boolean` | no | | If true, the current owner is credited as the account's Whop partner, earning partner commission on its sales. Requires the current owner to already be an enrolled Whop partner. Skipped if the account already has an active partner. |\n| `--identifier` | `string` | yes | | The user to transfer ownership to: a user ID (`user_*`) or an email address. An email address with no Whop account yet is sent an invite to create one. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop accounts update\n\nUpdate Account\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Account ID, prefixed `biz_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--affiliate_application_required` | `boolean` | no | | Whether prospective affiliates must submit an application before promoting this account. |\n| `--affiliate_instructions` | `unknown` | no | | Guidelines shown to affiliates promoting this account. |\n| `--banner_image` | `unknown` | no | | Account banner image, used as the cover photo when creating a Whop-managed Facebook page. Image files up to 10 MB, except `image/gif`. Pass a JSON object containing an `id` from [Create File](/api-reference/files/create-file). |\n| `--business_address` | `object` | no | | Account business address used to calculate tax. A complete address in a supported country is required when `tax_remitted_by` is `self`. |\n| `--business_name` | `unknown` | no | | The legal business name used with the account's tax address. |\n| `--business_type` | `unknown` | no | | High-level business category for the account. See the [business types and industries glossary](/api-reference/beta/accounts/account#business-types-and-industries-glossary) for valid values. |\n| `--collect_vat_id` | `boolean` | no | | Whether checkout shows a VAT/tax ID field for buyers to optionally enter. Does not require a VAT ID to purchase. |\n| `--country` | `unknown` | no | | Country where the account is located. |\n| `--description` | `unknown` | no | | Account promotional description. When creating a Whop-managed Facebook page, it is truncated to 155 characters and used as the About text. |\n| `--featured_affiliate_product_id` | `unknown` | no | | The ID of the product to feature for affiliates. Pass `null` to clear. |\n| `--home_preferences` | `array` | no | | Public account home page preferences. |\n| `--industry_group` | `unknown` | no | | Account industry group. See the [business types and industries glossary](/api-reference/beta/accounts/account#business-types-and-industries-glossary) for valid values. |\n| `--industry_type` | `unknown` | no | | Specific industry vertical for the account. See the [business types and industries glossary](/api-reference/beta/accounts/account#business-types-and-industries-glossary) for valid values. |\n| `--invoice_prefix` | `unknown` | no | | Prefix used for account invoices. |\n| `--logo` | `unknown` | no | | Account logo, used as the profile picture when creating a Whop-managed Facebook page. Image files up to 5 MB. Pass a JSON object containing an `id` from [Create File](/api-reference/files/create-file). |\n| `--metadata` | `object` | no | | Arbitrary key/value metadata to store on the account. |\n| `--onboarding_type` | `unknown` | no | | The type of onboarding the account has completed. |\n| `--opengraph_image` | `unknown` | no | | Open Graph preview media used when the account is shared. Image and video files up to 5 MB. Pass a JSON object containing an `id` from [Create File](/api-reference/files/create-file). |\n| `--opengraph_image_variant` | `unknown` | no | | The account Open Graph image variant. |\n| `--other_business_description` | `unknown` | no | | The description of the business type when business_type is other. |\n| `--other_industry_description` | `unknown` | no | | The description of the industry type when industry_type is other. |\n| `--product_tax_code_id` | `unknown` | no | | ID of the tax classification code applied by default to the account's products. See the available [product categories](https://docs.numeral.com/essentials/product-categories). |\n| `--require_2fa` | `boolean` | no | | Whether the account requires authorized users to have two-factor authentication enabled. |\n| `--route` | `unknown` | no | | The unique URL slug for the account. |\n| `--send_customer_emails` | `boolean` | no | | Whether Whop sends transactional emails to customers on behalf of this account. |\n| `--show_joined_whops` | `boolean` | no | | Whether the account appears in joined whops on other accounts. |\n| `--show_reviews_dtc` | `boolean` | no | | Whether reviews are displayed on direct-to-consumer product pages. |\n| `--show_user_directory` | `boolean` | no | | Whether the account shows users in the user directory. |\n| `--social_links` | `array` | no | | The full list of social links to display for the account. |\n| `--store_page_config` | `unknown` | no | | Account store page display configuration. |\n| `--target_audience` | `unknown` | no | | The target audience for this account. |\n| `--tax_collection_enabled_states` | `array` | no | | US state codes (50 states plus `DC`) where the account collects tax. Replaces the full set on update. Only settable when `tax_remitted_by` is `self`. |\n| `--tax_identifiers` | `array` | no | | Account tax/VAT registrations to add or update. When `tax_remitted_by` is `self`, tax is calculated and collected only in the countries where the account holds a registration. |\n| `--tax_remitted_by` | `string` | no | | Determines whether Whop or the account calculates and remits tax. The account must provide a supported-country business address when it self-remits. |\n| `--tax_type` | `string` | no | | Determines whether tax is included in the listed price or added at checkout. |\n| `--three_ds_level` | `string` | no | | Account-level 3D Secure behavior. Set `mandate_challenge` to require cardholder verification on supported card payments, or `null` to use the standard checkout flow. |\n| `--title` | `unknown` | no | | The display name of the account. |\n| `--use_logo_as_opengraph_image_fallback` | `boolean` | no | | Whether the account uses its logo as the fallback Open Graph image. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop accounts update-preferences\n\nUpdate Account Preferences\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n| `--ads_payment_methods` | `object` | no | | How the account pays for Whop Ads spend. `primary` is charged first; `backup` covers the charge when the primary fails. |\n| `--ads_reporting_currency` | `string` | no | | Lowercase ISO currency code, such as `usd` or `eur`, used to display ad spend and stats. Defaults to `usd`. |\n| `--ads_scheduling_timezone` | `string` | no | | IANA timezone (e.g. `America/New_York`) used to interpret campaign start/end times and to bucket reports. Cannot be cleared once set \u2014 pass a new value to change it. |\n| `--ads_triple_whale_integration` | `object` | no | | Connects or disconnects the Triple Whale integration. Requires a connected Shopify store, since Triple Whale keys spend records by Shopify shop. |\n| `--cards_auto_top_up` | `boolean` | no | | Whether incoming funds are automatically moved to the account's cards balance. Requires a cards balance on the account. |\n\n> Confirm with the user before executing this destructive command.\n\n## Steps that finish in the browser\n\nSome commands respond with a URL the user must open in a browser to finish the flow (`authorize_url`, `session_url`, `deposit_url`, `checkout_url`) \u2014 the CLI cannot complete that step itself. When a response contains one of these fields, or the CLI prints \"Action required: open this link in the user's browser\", open that link in the user's browser for them, tell them what to complete there, then re-run the matching `get`/`list` command to confirm the step finished.\n",
101074
- "whop-users": "---\nname: whop-users\ndescription: \"A person on Whop: profile and connected identities. Run `whop users --help` for usage details.\"\nrequires_bin: whop\ncommand: whop users\n---\n\nA User represents a person on Whop. Users have a public profile and can buy products, join accounts, and access experiences.\n\nUse the Users API to search for users, retrieve or update profiles, and check whether a user has access to an account, product, or experience.\n\n# whop users access\n\nCheck User Access\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The user_ tag or username to check access for. |\n| `resource_id` | `string` | yes | An account (biz_), product (prod_), or experience (exp_) ID. |\n\n---\n\n# whop users authorize-app\n\nAuthorize an App\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Authorize the app for one of the user's accounts rather than for the user alone, prefixed `biz_`. The user must have access to it. |\n| `--client_id` | `string` | yes | | The app being authorized, prefixed `app_`. |\n| `--code_challenge` | `string` | yes | | The PKCE code challenge: the base64url-encoded SHA-256 of your code verifier, without padding. |\n| `--code_challenge_method` | `string` | yes | | How `code_challenge` was derived. Only `S256` is accepted. |\n| `--consent_shown` | `boolean` | no | `true` | Whether the consent UI listed these scopes for the user. Sending `false` succeeds only when the user has already granted every scope requested. |\n| `--nonce` | `string` | no | | OIDC nonce, echoed into the resulting ID token. Required when `requested_scopes` includes `openid`. |\n| `--redirect_uri` | `string` | yes | | Where to send the user once they have consented. Must match one of the app's registered redirect URIs exactly \u2014 it is compared as a string, not normalized. |\n| `--requested_scopes` | `array` | yes | | The permissions the app is asking for, for example `member:basic:read`. `GET /api_keys/permissions` names and describes each one. Granting adds to whatever the user already granted this app rather than replacing it. |\n| `--response_type` | `string` | no | | The OAuth response type. Only `code` is accepted; defaults to `code`. |\n| `--state` | `string` | no | | Opaque value appended to `redirect_url` unchanged, for the client to correlate the response with its request. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users delete-passkey\n\nDelete\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Passkey ID, prefixed `wcred_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--authenticator_data` | `string` | yes | | The `authenticatorData` from the WebAuthn assertion, base64url-encoded. |\n| `--client_data_json` | `string` | yes | | The `clientDataJSON` from the WebAuthn assertion, base64url-encoded. |\n| `--signature` | `string` | yes | | The `signature` from the WebAuthn assertion, base64url-encoded. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users experience-notification-preferences\n\nList Experiences\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--first` | `number` | no | | The number of preferences to return. |\n| `--after` | `string` | no | | A cursor; returns preferences after this position. |\n\n---\n\n# whop users get\n\nRetrieve User\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | User ID (prefixed `user_`) or username. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | When set, returns the user's account-specific profile overrides for this account. |\n\n---\n\n# whop users list\n\nList Users\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--query` | `string` | no | | A search term to filter users by name or username. |\n| `--first` | `number` | no | | The number of users to return (max 50). |\n| `--after` | `string` | no | | A cursor; returns users after this position. |\n| `--last` | `number` | no | | The number of users to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns users before this position. |\n\n---\n\n# whop users me\n\nRetrieve Current User\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | When set, returns your account-specific profile overrides for this account. |\n| `--include_balance_history` | `boolean` | no | | Also compute your balance history (opt-in; runs a heavier query). Ignored for callers without balance-read scope. |\n| `--from` | `string` | no | | Balance-history window start, ISO 8601 date or datetime. Defaults to 30 days ago. Only used with `include_balance_history`. |\n| `--to` | `string` | no | | Balance-history window end, ISO 8601 date or datetime. Defaults to now. Only used with `include_balance_history`. |\n| `--interval` | `string` | no | | Balance-history point granularity. Defaults to `day`. Only used with `include_balance_history`. |\n| `--time_zone` | `string` | no | | IANA time zone the balance-history points are bucketed in. Defaults to `UTC`. Only used with `include_balance_history`. |\n\n---\n\n# whop users me-oauth_grants\n\nList OAuth Grants\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--app_id` | `string` | no | | Only return grants for this app, prefixed `app_`. An app the user has never authorized returns an empty list. |\n| `--first` | `number` | no | | The number of grants to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns grants after this position. |\n| `--last` | `number` | no | | The number of grants to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns grants before this position. |\n| `--order` | `string` | no | | The field to sort grants by. |\n| `--direction` | `string` | no | | Sort direction. |\n\n---\n\n# whop users notification-topic-preferences\n\nList Topics\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--channel` | `string` | no | | Only return preferences for this delivery channel (or not narrowed to a channel). |\n| `--account_id` | `string` | no | | Only return preferences scoped to this account's member notifications (`biz_` tag). |\n| `--team_account_id` | `string` | no | | Only return preferences scoped to this account's team notifications (`biz_` tag). |\n| `--experience_id` | `string` | no | | Only return preferences scoped to this experience (`exp_` tag). |\n| `--topic_id` | `string` | no | | Only return preferences scoped to this notification topic (`topic_` tag). |\n| `--first` | `number` | no | | The number of preferences to return. |\n| `--after` | `string` | no | | A cursor; returns preferences after this position. |\n\n---\n\n# whop users passkey-challenge\n\nCreate Challenge\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--challenge_type` | `string` | yes | | The ceremony this challenge is for. |\n| `--passkey_id` | `string` | no | | The passkey the ceremony targets, prefixed `wcred_`. Required when `challenge_type` is `deletion`, ignored otherwise. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users passkeys\n\nList\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--first` | `number` | no | | The number of passkeys to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns passkeys after this position. |\n| `--last` | `number` | no | | The number of passkeys to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns passkeys before this position. |\n| `--order` | `string` | no | | The field to sort passkeys by. |\n| `--direction` | `string` | no | | Sort direction. |\n\n---\n\n# whop users preferences\n\nRetrieve\n\n---\n\n# whop users recommend_actions\n\nList Recommended Actions\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | `me`, or the authenticated user's own `user_` tag or username. |\n\n---\n\n# whop users register-passkey\n\nRegister\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attestation_object` | `string` | yes | | The `attestationObject` from the WebAuthn attestation response, base64url-encoded. |\n| `--client_data_json` | `string` | yes | | The `clientDataJSON` from the WebAuthn attestation response, base64url-encoded. |\n| `--credential_id` | `string` | yes | | The WebAuthn credential ID the authenticator returned, base64url-encoded. |\n| `--nickname` | `string` | yes | | A name for this passkey, usually the device it lives on. 255 characters or fewer. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users set-notification-preferences\n\nSet\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--preferences` | `array` | yes | | The preferences to set, at most 100 per request. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users update\n\nUpdate User\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | User ID (prefixed `user_`) or username. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account whose profile override to update. Required for API key callers. |\n| `--banner` | `unknown` | no | | |\n| `--bio` | `string` | no | | |\n| `--name` | `string` | no | | |\n| `--profile_picture` | `object` | no | | |\n| `--username` | `string` | no | | |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users update-me\n\nUpdate Current User\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | When set, updates the authenticated user's profile override for this account instead of their global profile. |\n| `--banner` | `unknown` | no | | |\n| `--bio` | `string` | no | | |\n| `--name` | `string` | no | | |\n| `--profile_picture` | `object` | no | | |\n| `--username` | `string` | no | | |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop users update-preferences\n\nUpdate\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--bounty_worker_onboarding_dismissed` | `boolean` | no | | Whether the user has dismissed the first-time bounty worker onboarding. Set to `false` to show it again. |\n| `--investigation_enabled` | `boolean` | no | | Whether investigation mode is enabled for the user. Only meaningful for staff users with investigation access. |\n\n> Confirm with the user before executing this destructive command.\n",
101075
- "whop-team-members": "---\nname: whop-team-members\ndescription: An account's team members and the roles that scope their access. Run `whop team-members --help` for usage details.\nrequires_bin: whop\ncommand: whop team-members\n---\n\nA Team Member is a member of an account's team: the link between a user and an account, carrying the role that controls what they can do. Roles are either system roles (like `admin` or `moderator`) or `custom` roles managed from the dashboard.\n\nUse the Team Members API to list an account's team, add a user to the team with a system role, change a member's role, and remove members. Adding a user who has not yet accepted sends an invitation instead.\n\n# whop team-members create\n\nCreate Team Member\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | yes | | Account ID, prefixed `biz_`. |\n| `--email` | `string` | no | | Email address to invite. Mutually exclusive with `user_id`. If the email already belongs to a Whop account it is treated the same as passing that account's `user_id`; otherwise a pending invite is created for the email. |\n| `--role` | `string` | yes | | The system role to grant. |\n| `--user_id` | `string` | no | | The user to add to the team, prefixed `user_`. Mutually exclusive with `email`. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop team-members delete\n\nDelete Team Member\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Team member ID \u2014 `ausr_` for accepted members, `ausri_` for pending invites. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop team-members get\n\nRetrieve Team Member\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Team member ID \u2014 `ausr_` for accepted members, `ausri_` for pending invites. |\n\n---\n\n# whop team-members list\n\nList Team Members\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n| `--status` | `string` | no | | Only return members with this status: `joined` (accepted members) or `pending` (pending invites). Both are returned by default. |\n| `--user_id` | `string` | no | | Only return the membership for this user ID, prefixed `user_`. |\n| `--role` | `string` | no | | Only return members with this role. `custom` matches members on a dashboard-managed custom role. |\n| `--created_before` | `string` | no | | Only return members added before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only return members added after this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Field used to sort members. |\n| `--direction` | `string` | no | | Sort direction. Defaults to `desc`. |\n| `--first` | `number` | no | | Number of members to return. Defaults to 20; maximum 100. |\n| `--after` | `string` | no | | Cursor for the next page of members. |\n\n---\n\n# whop team-members update\n\nUpdate Team Member\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Team member ID \u2014 `ausr_` for accepted members, `ausri_` for pending invites. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--role` | `string` | yes | | The system role to grant. |\n\n> Confirm with the user before executing this destructive command.\n",
101076
- "whop-members": "---\nname: whop-members\ndescription: One buyer's relationship with an account, across all their purchases. Run `whop members --help` for usage details.\nrequires_bin: whop\ncommand: whop members\n---\n\nA Member is one buyer's relationship with an account \u2014 one record per customer regardless of how many memberships they hold. It carries relationship-level state: whether they have joined or left, their access level (`customer`, `admin`, or `no_access`), when they joined, and when they last opened the account's content.\n\nUse the Members API to list an account's members with filtering by access level, status, join date, and name or username search, and to retrieve a single member. Member rows are created and maintained by the membership lifecycle; to grant or revoke access, work with memberships instead.\n\n# whop members get\n\nRetrieve Member\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Member ID (`mber_` tag). |\n\n---\n\n# whop members list\n\nList Members\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to list members for (`biz_` tag). Defaults to the account the credential acts as. |\n| `--access_level` | `string` | no | | Filter by what the member can reach on the account. |\n| `--status` | `string` | no | | Filter by whether the member is still part of the account. |\n| `--query` | `string` | no | | Search members by name or username. An exact email address also matches when the credential holds the member:email:read scope. |\n| `--created_after` | `string` | no | | Only members who joined after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Only members who joined before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Sort field. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | `20` | Number of members to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of members to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n\n---\n\n# whop members logs\n\nList Member Logs\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Member ID (`mber_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--first` | `number` | no | `20` | Number of log entries to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of log entries to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n",
101077
- "whop-stats": "---\nname: whop-stats\ndescription: Aggregated financial, audience, and traffic reporting. Run `whop stats --help` for usage details.\nrequires_bin: whop\ncommand: whop stats\n---\n\nStats represent aggregated activity for an account over time. They help you understand revenue, transactions, disputes, members, referrals, and advertising performance across reporting periods like days, weeks, or months.\n\nUse the Stats API to list available metrics and their filterable properties, then retrieve time-series values for a date range.\n\n# whop stats get\n\nRetrieve Metric\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `metric` | `string` | yes | The metric to retrieve, for example net_revenue. Use GET /stats to see every metric key. The metric sets the unit and the properties you can filter or break down by. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account this query concerns, for example biz_AbC123. |\n| `--user_id` | `string` | no | | The user this query concerns, for example user_AbC123. Available on metrics that support user subjects, such as account_balance. |\n| `--from` | `string` | yes | | Start of the range \u2014 a date (YYYY-MM-DD), expanded to the start of that day, or an ISO 8601 timestamp (for example 2026-07-16T16:37:00Z), used exactly. |\n| `--to` | `string` | yes | | End of the range \u2014 a date (YYYY-MM-DD), expanded to the end of that day, or an ISO 8601 timestamp (for example 2026-07-17T16:37:00Z), used exactly. |\n| `--interval` | `string` | no | | How wide each point is. Defaults to day. Snapshot metrics are day-only. |\n| `--breakdown_by` | `string` | no | | Split the metric out by one of its properties \u2014 each point gets a breakdown array. For example breakdown_by=currency returns an entry for usd, an entry for eur, and so on. |\n| `--convert_to` | `string` | no | | Display currency for money metrics \u2014 every amount is converted into this ISO currency using the exchange rate on each period's date. Defaults to usd. For the ads metrics (ad_spend, ad_delivery), pass the account's ads reporting currency to match the ad entity endpoints. On transaction metrics, it is ignored when you filter or break down by currency (those report the original transaction currency, unconverted). |\n| `--currency` | `string` | no | | Select the source currency or asset on metrics that list currency. For transaction metrics, for example currency=eur, values are reported without conversion. For market_prices, use btc or xaut and convert_to=usd. Pair with breakdown_by=currency to split a metric by currency. |\n| `--time_zone` | `string` | no | | IANA time zone to bucket the series in, for example America/New_York. Defaults to UTC. Not accepted by snapshot metrics, which are UTC only. |\n| `--payment_method` | `string` | no | | Filter to a single payment method, for example card or crypto. Available on metrics that list payment_method. |\n| `--card_network` | `string` | no | | Filter to a single card brand, for example visa. A refinement of payment_method=card. Available on metrics that list card_network. |\n| `--dispute_reason` | `string` | no | | Filter disputes to a normalized reason, for example product_not_received. Pair with breakdown_by=dispute_reason to split dispute counts by reason. |\n| `--source` | `string` | no | | Filter to a single GMV source, for example payments \u2014 or, on the traffic metrics, a visit source (whop_ads, direct, or a utm_source value). Pair with breakdown_by=source to split by source. Available on metrics that list source. |\n| `--hostname` | `string` | no | | Filter traffic metrics to one website hostname, for example shop.example.com. Pair with breakdown_by=hostname to split by website. |\n| `--page` | `string` | no | | Filter traffic metrics to one page \u2014 a hostname plus normalized path, for example shop.example.com/pricing. Pair with breakdown_by=page to split by page. |\n| `--device_type` | `string` | no | | Filter traffic metrics to one device type: desktop, mobile, tablet, or unknown. Pair with breakdown_by=device_type to split by device. |\n| `--country_code` | `string` | no | | Filter traffic metrics to one visitor country (uppercase ISO 3166-1 alpha-2, for example US). Pair with breakdown_by=country_code to split by country. |\n| `--event_name` | `string` | no | | Filter the events metric to one tracked event name, for example pixel.page or pixel.custom. Pair with breakdown_by=event_name to split by event. |\n| `--event_type` | `string` | no | | Filter the events metric to a canonical group of events: page_view (pixel page views plus whop.com store views), checkout_start (hosted and embedded checkout views), or other. Pair with breakdown_by=event_type to split by group. |\n| `--custom_name` | `string` | no | | Filter the events metric to one merchant-defined custom event name. Only valid alongside event_name=pixel.custom. Pair with breakdown_by=custom_name to split custom events by name. |\n| `--segment` | `string` | no | | Filter to a single wallet-balance segment, for example available. Pair with breakdown_by=segment to split the balance. Available on metrics that list segment. |\n| `--category` | `string` | no | | Filter to a single balance-activity category, for example payments. Pair with breakdown_by=category to split the activity. Available on metrics that list category. |\n| `--merchant` | `string` | no | | Filter to a single cashback merchant bucket, for example whop-ads. Pair with breakdown_by=merchant to split cashback by merchant. Available on metrics that list merchant. |\n| `--fee_type` | `string` | no | | Filter to a single fee type. Pair with breakdown_by=fee_type to split fees by type. Available on metrics that list fee_type. |\n| `--product` | `string` | no | | Filter to a single product (access pass id), for example prod_AbC123. Pair with breakdown_by=product. Available on metrics that list product. |\n| `--status` | `string` | no | | Filter to a single membership status. Pair with breakdown_by=status. Available on metrics that list status. |\n| `--access_level` | `string` | no | | Filter to a single access level. Pair with breakdown_by=access_level. Available on metrics that list access_level. |\n| `--most_recent_action` | `string` | no | | Filter to a single most-recent member action. Pair with breakdown_by=most_recent_action. Available on metrics that list most_recent_action. |\n| `--referred_user_id` | `string` | no | | Filter a referral metric to the businesses attributed to one person you referred, for example user_AbC123. Available on metrics that list referred_user_id. |\n| `--ad_campaign_ids` | `array` | no | | Ad campaign ids (adcamp_...) to scope the report to; stats are summed across them. Available on metrics that list ad_campaign_ids. |\n| `--ad_group_ids` | `array` | no | | Ad group ids (adgrp_...) to scope the report to; stats are summed across them. Available on metrics that list ad_group_ids. |\n| `--ad_ids` | `array` | no | | Ad ids (ad_...) to scope the report to; stats are summed across them. Available on metrics that list ad_ids. |\n| `--snapshot_window` | `string` | no | | Window used by a snapshot metric. Ordinary snapshots accept 30d as their trailing activity window. Cohorted dispute metrics accept 7d or 28d as the sales-transaction pool; their attribution window is fixed in the metric name. Each metric lists its accepted values in the catalog. |\n| `--event` | `string` | no | | Filter the events metric to one or more full event names, for example payment.completed or pixel.lead. Comma-separate several to break the metric down by each event. Available on metrics that list event. |\n\n---\n\n# whop stats list\n\nList Metrics\n",
101078
- "whop-verifications": "---\nname: whop-verifications\ndescription: Legal identity required before payouts and card issuing. Run `whop verifications --help` for usage details.\nrequires_bin: whop\ncommand: whop verifications\n---\n\nA Verification represents a legal identity for a person or business. Accounts and users complete verification when Whop needs to confirm who they are before enabling payouts or compliance-sensitive workflows.\n\nUse the Verifications API to start or resume a hosted verification session, check review status, and submit requested details or documents. If `requested_information` contains items, submit answers with [Update Verification](https://docs.whop.com/api-reference/beta/verifications/update-verification).\n\n# whop verifications create\n\nCreate Verification\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account or user ID whose identity you want to verify. Use a `biz_` account ID for account verifications, or the caller's `user_` ID for personal verification. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop verifications get\n\nRetrieve Verification\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Verification profile ID, prefixed `idpf_`. |\n\n---\n\n# whop verifications list\n\nList Verifications\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account or user ID whose verifications you want to list. Use a `biz_` account ID, or the caller's `user_` ID for personal verifications. |\n| `--order` | `string` | no | | Field used to sort returned verifications. |\n| `--direction` | `string` | no | | Sort direction for returned verifications. |\n\n---\n\n# whop verifications update\n\nUpdate Verification\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Verification profile ID, prefixed `idpf_`. |\n\n> Confirm with the user before executing this destructive command.\n\n## Steps that finish in the browser\n\nSome commands respond with a URL the user must open in a browser to finish the flow (`authorize_url`, `session_url`, `deposit_url`, `checkout_url`) \u2014 the CLI cannot complete that step itself. When a response contains one of these fields, or the CLI prints \"Action required: open this link in the user's browser\", open that link in the user's browser for them, tell them what to complete there, then re-run the matching `get`/`list` command to confirm the step finished.\n",
101079
- "whop-exports": "---\nname: whop-exports\ndescription: Asynchronous CSV dumps of an account's dashboard data. Run `whop exports --help` for usage details.\nrequires_bin: whop\ncommand: whop exports\n---\n\nAn 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\n# whop exports create\n\nCreate Export\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to export from, prefixed `biz_`. Defaults to the credential's account. |\n| `--columns` | `array` | no | | Column keys to include. Empty means all columns for the resource. |\n| `--filters` | `object` | no | | Resource-specific filters. For native REST resources (`payouts`, `transfers`, `memberships`) 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 (25)</summary>\n\n<details>\n<summary>ad_campaigns (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/ad_campaigns`.\n\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 (4)</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- `verified_apps_only` `boolean` \u2014 Whether to only return apps verified by Whop. Verified website templates \u2014 websites with a published web build \u2014 are included, even though websites are otherwise left out of app lists.\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 audience type: `custom` (uploaded lists) or `lookalike`. One of `custom`, `lookalike`.\n- `source_type` `string` \u2014 Filter by member source: `csv_upload` (uploaded lists) or `people_filter` (automatic audiences built from saved People filters). One of `csv_upload`, `people_filter`.\n\n</details>\n<details>\n<summary>bounties (5)</summary>\n\nMirrors the filtering query params of `GET /api/v1/bounties`.\n\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- `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 plan 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. Covers both chargebacks and inquiries at each stage.\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). Restricts the list to conversion targets attributed to that source \u2014 the debuggability twin of a metric cell's source parameter.\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>financial-activity (9)</summary>\n\nMirrors the filtering query params of `GET /api/v1/financial-activity`.\n\n- `available_after` `string` \u2014 Only include rows whose funds became withdrawable on or after this `YYYY-MM-DD` settlement date (UTC), distinct from posted_at. Requires currency.\n- `available_before` `string` \u2014 Only include rows whose funds became withdrawable on or before this `YYYY-MM-DD` settlement date (UTC). Set equal to available_after for a single day. Requires currency.\n- `currency` `string` \u2014 Optional currency code filter, for example `usd`.\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- `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- `user_id` `string` \u2014 The owning user ID (a user_ identifier). Provide this or account_id.\n\n</details>\n<details>\n<summary>members (5)</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\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 plan (`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 (2)</summary>\n\nMirrors the filtering query params of `GET /api/v1/payouts`.\n\n- `currency` `string` \u2014 Optional currency code filter, for example `usd`.\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 (20)</summary>\n\nMirrors the filtering query params of `GET /api/v1/people`.\n\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 whose most recent visit came 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_from` `string` \u2014 With event_to plus an event or source filter, switches to exact-population mode: person ids are resolved and paginated on the events side within this window (the same query the people metric counts), then hydrated per page.\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 event window for exact-population mode.\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- `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- `phone` `string` \u2014 Only include the person linked to this phone number.\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- `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` \u2014 Only return plans created after this timestamp.\n- `created_before` `string` \u2014 Only return plans created before this timestamp.\n- `plan_types` `string[]` \u2014 Filter to only plans matching these billing types.\n- `product_ids` `string[]` \u2014 Filter to only plans belonging to these product identifiers.\n- `release_methods` `string[]` \u2014 Filter to only plans matching these release methods.\n- `visibilities` `string[]` \u2014 Filter to only plans matching these visibility states.\n\n</details>\n<details>\n<summary>products (2)</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- `visibilities` `string[]` \u2014 Filter to only products matching these visibility states.\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 plan 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 (4)</summary>\n\nMirrors the filtering query params of `GET /api/v1/social_accounts`.\n\n- `platform` `string` \u2014 Only return social accounts for the platform that is specified. One of `x`, `instagram`, `youtube`, `tiktok`, `facebook`, `discord`, `telegram`.\n- `scopes` `string[]` \u2014 Only return social accounts that have these scopes.\n- `user_id` `string` \u2014 The User that the social accounts are connected to. Provide either this or account_id.\n- `verified` `boolean` \u2014 Only return social 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`, `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> |\n| `--resource` | `string` | yes | | The resource to export, e.g. `payouts`, `receipts`, or `members`. |\n| `--timezone` | `string` | no | | IANA timezone for date columns, e.g. `America/New_York`. Defaults to `UTC`. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop exports get\n\nRetrieve Export\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The export ID, prefixed `exprt_`. |\n\n---\n\n# whop exports list\n\nList Exports\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to list exports for, prefixed `biz_`. Defaults to the credential's account. |\n| `--resource` | `string` | no | | Only return exports of this resource. |\n| `--status` | `string` | no | | Only return exports in this status. |\n| `--created_after` | `string` | no | | Only return exports created at or after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Only return exports created at or before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | The field to sort by. |\n| `--direction` | `string` | no | | The sort direction. |\n",
101080
- "whop-notifications": "---\nname: whop-notifications\ndescription: \"The user's notification feed: unread badges, mark-read, app sends, and the topic catalog. Run `whop notifications --help` for usage details.\"\nrequires_bin: whop\ncommand: whop notifications\n---\n\nA Notification is a message delivered to a user \u2014 a new post, a payment, a mention. Every notification comes from an experience the user belongs to or a team they are on, and users control what they receive with notification preferences.\n\nEvery notification belongs to a topic: the category it falls under, such as new sales or account activity. Topics carry a default, so a user only needs a preference row where they diverge from it. `GET /notifications/topics` lists the platform's visible topics, and a topic's `id` is what the notification preference endpoints take as `topic_id` \u2014 the catalog is the only place those ids come from, so read it rather than hardcoding. Each topic also carries an `identifier` such as `new-follower`, which is stable across environments and is the value to match on in code.\n\nUse the Notifications API to list the authenticated user's feed, read per-experience unread badges, mark an experience (or everything) as read, send notifications from your app to an experience's users or an account's team, and list the topic catalog.\n\n# whop notifications badges\n\nList Notification Badges\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--experience_ids` | `array` | no | | Only return badges for these experiences (`exp_` tags). |\n| `--last_fetched_at` | `string` | no | | The client's last fetched-at ISO 8601 timestamp, used to partially refresh badges after a websocket message. |\n\n---\n\n# whop notifications create\n\nSend Notification\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account whose team members receive the notification (`biz_` tag). Exactly one of `experience_id` or `account_id` is required. |\n| `--content` | `string` | yes | | Main body text of the notification. |\n| `--experience_id` | `string` | no | | Experience whose users receive the notification (`exp_` tag). Exactly one of `experience_id` or `account_id` is required. |\n| `--icon_user_id` | `unknown` | no | | User whose profile picture is used as the notification icon. Defaults to the experience or account avatar. |\n| `--rest_path` | `unknown` | no | | Path segment appended to the generated deep link that opens your app, for example `/settings/billing`. |\n| `--subtitle` | `unknown` | no | | Optional secondary line displayed below the title. |\n| `--title` | `string` | yes | | Headline text of the notification. |\n| `--user_ids` | `array` | no | | Optional `user_` tags narrowing the audience. When provided, only these users are notified (as a mention), provided they are in the targeted experience or account. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop notifications get\n\nRetrieve Notification\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | A notification `id` from List Notifications, or the id delivered with a push/websocket event. |\n\n---\n\n# whop notifications list\n\nList Notifications\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--unread` | `boolean` | no | | Only return notifications created since the user last viewed their source. |\n| `--experience_id` | `string` | no | | Only return notifications from this experience (`exp_` tag). |\n| `--account_id` | `string` | no | | Only return team notifications for this account (`biz_` tag). |\n| `--mentions` | `boolean` | no | | Only return notifications that mention the user directly. |\n| `--first` | `number` | no | | The number of notifications to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor (a notification `id` from a previous page); returns notifications older than it. |\n\n---\n\n# whop notifications mark_read\n\nMark Notifications Read\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--all` | `boolean` | no | | Pass `true` to mark every notification read. Exactly one of `experience_id` or `all` is required. |\n| `--experience_id` | `string` | no | | Experience to mark read (`exp_` tag). Exactly one of `experience_id` or `all` is required. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop notifications topics\n\nList Notification Topics\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--topic_type` | `string` | no | | Only return topics of this scope: `user` (member notifications) or `account_team` (team notifications). |\n| `--first` | `number` | no | | The number of topics to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns topics after this position. |\n",
101081
- "whop-payments": "---\nname: whop-payments\ndescription: A charge against a buyer, and the step they still owe. Run `whop payments --help` for usage details.\nrequires_bin: whop\ncommand: whop payments\n---\n\nA Payment is one charge against a buyer. Create it with a payment method already on file, or with a `confirmation_token` describing a method the buyer has just supplied.\n\nCollection runs in the background, so the create response is not the outcome. Poll [Retrieve status](https://docs.whop.com/api-reference/beta/payments/retrieve-status) for how far the payment has got and, while it is `requires_action`, what the buyer must do next \u2014 follow a redirect, complete 3D Secure, display transfer instructions, or link a bank account. Use the return_url operation to change where they land afterwards, up until they come back.\n\n# whop payments return_url\n\nUpdate payment return URL\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `payment_id` | `string` | yes | The unique identifier of the payment. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--return_url` | `string` | yes | | Where the buyer continues after completing an off-site step. Must be an absolute https URL without credentials (http is allowed for localhost), at most 2,048 characters. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop payments status\n\nRetrieve payment status\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `payment_id` | `string` | yes | The unique identifier of the payment. |\n",
101082
- "whop-setup-intents": "---\nname: whop-setup-intents\ndescription: Saving a buyer's payment method without charging it. Run `whop setup-intents --help` for usage details.\nrequires_bin: whop\ncommand: whop setup-intents\n---\n\nA Setup Intent saves a buyer's payment method for later without taking money now. It runs the same collection flow a payment does, so the buyer may still owe a step \u2014 3D Secure on a card, a hosted enrollment, or linking a bank account.\n\nPoll [Retrieve status](https://docs.whop.com/api-reference/beta/setup-intents/retrieve-status) for how far the setup has got and what is outstanding. Once it reaches `succeeded` the method is on file and can be charged.\n\n# whop setup-intents return_url\n\nUpdate setup return URL\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `setup_intent_id` | `string` | yes | The unique identifier of the setup intent. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--return_url` | `string` | yes | | Where the buyer continues after completing an off-site step. Must be an absolute https URL without credentials (http is allowed for localhost), at most 2,048 characters. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop setup-intents status\n\nRetrieve setup status\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `setup_intent_id` | `string` | yes | The unique identifier of the setup intent. |\n",
101083
- "whop-ledgers": "---\nname: whop-ledgers\ndescription: The activity feed behind an account or user's balance. Run `whop ledgers --help` for usage details.\nrequires_bin: whop\ncommand: whop ledgers\n---\n\nA Ledger Activity row is a single financial event on an account's ledger \u2014 a payment, withdrawal, refund, transfer, on-chain deposit, swap, or card transaction. Each row is derived from the underlying ledger lines and carries a typed `resource` and `source` so you can present and link the event without extra lookups.\n\nUse Ledger Activity to build a statement or transaction feed for an account or user. Reconcile against your own records with `amount` (signed, in the currency's smallest precision units) and `posted_at`, and use `available_at` to know when inflows became withdrawable.\n\n# whop ledgers list\n\nList Financial Activity\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n| `--include_owned_accounts` | `boolean` | no | | 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` | no | `true` | 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` | `array` | no | | 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| `--currency` | `string` | no | | Optional currency code filter, for example `usd`. |\n| `--posted_after` | `string` | no | | Only include rows posted after this ISO 8601 timestamp. |\n| `--posted_before` | `string` | no | | Only include rows posted before this ISO 8601 timestamp. |\n| `--available_after` | `string` | no | | Only include rows whose funds became withdrawable on or after this `YYYY-MM-DD` settlement date (UTC), distinct from posted_at. Requires currency. |\n| `--available_before` | `string` | no | | Only include rows whose funds became withdrawable on or before this `YYYY-MM-DD` settlement date (UTC). Set equal to available_after for a single day. Requires currency. |\n| `--limit` | `number` | no | `20` | Maximum number of rows to return. |\n| `--cursor` | `string` | no | | Cursor returned by the previous page. |\n\n---\n\n# whop ledgers report\n\nGet Financial Report\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier), or `global` for a platform-wide report across all ledger accounts (requires internal admin access). |\n| `--report_type` | `string` | yes | | The type of financial report to generate. |\n| `--currency` | `string` | no | | Filter rows to this currency, for example `usd`. Defaults to `usd` unless `in_currency` is provided. |\n| `--in_currency` | `string` | no | | Aggregate all activity into this display currency via FX conversion. |\n| `--from_date` | `string` | no | | Start of the report window as an ISO 8601 timestamp (UTC). Required for platform-wide (global) reports. |\n| `--to_date` | `string` | no | | End of the report window as an ISO 8601 timestamp (UTC). Required for platform-wide (global) reports. |\n| `--group_by` | `string` | no | | Grouping granularity for report rows. |\n| `--timezone` | `string` | no | | IANA timezone (for example `America/New_York`) used to bucket report periods and to interpret calendar-day boundaries for balance snapshots. Defaults to UTC. from_date/to_date remain exact instants regardless of this setting. |\n| `--cumulative` | `boolean` | no | `false` | Platform-wide (global) reports only: when true, return cumulative balances as of to_date (all history, no lower bound) instead of activity within the period. |\n| `--scope_account_id` | `string` | no | | Platform-wide (global) reports only: narrow the report to ledger lines on the ledger account owned by this account ID (a biz_ identifier). Ignored unless account_id is `global`. |\n",
101084
- "whop-payouts": "---\nname: whop-payouts\ndescription: Send money from a balance to a bank or wallet. Run `whop payouts --help` for usage details.\nrequires_bin: whop\ncommand: whop payouts\n---\n\nPayouts represent money sent from an account or user balance to an external destination, such as a bank account, wallet, or other saved payout method.\n\nUse the Payouts API to create and track payouts, manage saved payout methods, and show expected arrival details for funds leaving Whop.\n\n# whop payouts create\n\nCreate Payout\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account to pay out from, prefixed `biz_`. Provide exactly one of `account_id` or `user_id`. |\n| `--acknowledge_bank_warning` | `boolean` | no | | Set to `true` to continue when the destination bank could not confirm the payout method account holder's name, or `false` to have the payout refused in that case so the account holder can correct the name or link their bank first. Omitting the field skips the warning gate \u2014 a client that cannot show the warning keeps its pre-gate behavior. |\n| `--amount` | `number` | yes | | The amount to pay out in the specified currency. |\n| `--currency` | `string` | no | | The currency to pay out. Balances are held per currency and the payout draws only from the balance in this currency, so match the currency the funds arrived in \u2014 for example `cad` for an account funded by CAD transfers. Defaults to `usd`. |\n| `--idempotency_key` | `unknown` | no | | A unique key that makes retries safe. Retrying with the same key returns the original payout instead of paying out twice. Also accepted as the `Idempotency-Key` header. |\n| `--notes` | `unknown` | no | | Free-form notes to attach to the payout, with a maximum of 255 characters. Omit or pass `null` for no notes. |\n| `--payout_method_id` | `string` | yes | | The saved payout method to deliver to (a potk_ identifier). |\n| `--platform_covers_fees` | `boolean` | no | | Whether the parent platform covers the payout fee instead of the account being paid out. Omit to use the platform's configured fee coverage policy; pass `false` to opt out of it. `true` is only accepted for accounts that belong to a platform, and requires the platform's policy to cover this payout method's category or a caller authorized to manage the platform's child account fees. |\n| `--speed` | `string` | no | | How fast the funds should arrive. `instant` is only accepted when the account and payout method are eligible; otherwise the payout is rejected. |\n| `--user_id` | `string` | no | | User to pay out from, prefixed `user_`. Provide exactly one of `account_id` or `user_id`. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop payouts create-method\n\nCreate Saved Payout Method\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to add the payout method for, prefixed `biz_`. Provide this or `user_id`. |\n| `--destination_currency` | `string` | no | `usd` | Currency the supported payout method delivers payouts in. |\n| `--fields` | `object` | no | | The supported payout method's required field values, keyed by field id \u2014 list them with `GET /payouts/supported_methods?supported_payout_method_id=...`. A Basis Theory token id may be passed in place of a raw value. For a U.S. bank routing-number field, a raw nine-digit value must also pass the ABA checksum. A validation failure returns the method's full required_fields schema alongside the error. Required whenever the account details are supplied directly. |\n| `--is_default` | `boolean` | no | `false` | Whether to make this the account's default payout method. |\n| `--nickname` | `string` | no | | A label for the payout method, unique per destination. |\n| `--supported_payout_method_id` | `string` | yes | | The supported payout method to save (a podst_ identifier from a previous listing). |\n| `--user_id` | `string` | no | | The user to add the payout method for, prefixed `user_`. Provide this or `account_id`. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop payouts delete-method\n\nDelete Saved Payout Method\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Payout method ID, prefixed `potk_`. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop payouts get\n\nRetrieve Payout\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Payout ID, prefixed `wdrl_` for a payout returned by `GET /payouts` or `cofr_` for the payout request returned by `POST /payouts`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Owning account ID, prefixed `biz_`. Provide exactly one of `account_id` or `user_id`. |\n| `--user_id` | `string` | no | | Owning user ID, prefixed `user_`. Provide exactly one of `account_id` or `user_id`. |\n\n---\n\n# whop payouts list\n\nList Payouts\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n| `--currency` | `string` | no | | Optional currency code filter, for example `usd`. |\n| `--first` | `number` | no | `20` | Number of payouts to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | Number of payouts to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop payouts methods\n\nList Saved Payout Methods\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n| `--status` | `string` | no | | Optional status filter. `created` means saved but unused, `active` means a payout through it succeeded, `broken` means the last payout failed and the method needs fixing. |\n| `--amount` | `number` | no | | Optional withdrawal amount in whole currency units, for example `250.00`. When provided, each method includes a quote with the estimated fee, amount received, and delivery date for that amount. |\n| `--currency` | `string` | no | `usd` | Currency code of the amount, for example `usd`. Only meaningful with amount or include_limits. |\n| `--include_limits` | `boolean` | no | `false` | When true, the response also carries limits \u2014 the live per-speed payout caps the account's payout requests are validated against, in the requested currency. Requires the payout:withdrawal:read scope. |\n| `--first` | `number` | no | `20` | Number of payout methods to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | Number of payout methods to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop payouts supported-methods\n\nList Supported Payout Methods\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n| `--country` | `string` | no | | ISO 3166-1 alpha-2 country code for the bank account or wallet, such as `US`. Defaults to the country of supported_payout_method_id when one is given, otherwise the payout account's country. |\n| `--amount` | `number` | no | | Optional withdrawal amount in whole currency units, for example `250.00`. When provided, each destination includes per-currency fee and delivery quotes. |\n| `--currency` | `string` | no | `usd` | Currency code of the amount, for example `usd`. Only meaningful with amount. |\n| `--supported_payout_method_id` | `string` | no | | Narrows the list to one supported payout method (a podst_ identifier) and includes the required_fields needed to save it as a payout method. |\n| `--destination_currency` | `string` | no | `usd` | Currency the supported payout method would deliver payouts in. Only meaningful with supported_payout_method_id; required fields vary by destination currency. |\n| `--first` | `number` | no | `20` | Number of supported payout methods to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | Number of supported payout methods to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop payouts update-method\n\nRename Saved Payout Method\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Payout method ID, prefixed `potk_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--nickname` | `string` | yes | | New label for the payout method, with at least one non-whitespace character and a maximum of 100 characters. |\n\n> Confirm with the user before executing this destructive command.\n",
101085
- "whop-cards": "---\nname: whop-cards\ndescription: Issue cards that spend from a balance. Run `whop cards --help` for usage details.\nrequires_bin: whop\ncommand: whop cards\n---\n\nCards represent Whop-issued virtual payment cards that spend from an account or user balance. Cards can be assigned to cardholders and configured with spending limits for controlled spending.\n\nUse the Cards API to issue cards, list cards for an account or user, and retrieve active card details such as the card number and CVC.\n\n# whop cards create\n\nCreate Card\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--assigned_user_id` | `string` | no | | The account member (a user_ identifier) to assign the card to. Required for business card issuing accounts. |\n| `--name` | `string` | no | | A display name for the card. |\n| `--spend_limit` | `number` | no | | Spending limit amount, in dollars. |\n| `--spend_limit_frequency` | `string` | no | | The window the spend limit applies to. |\n| `--transaction_limit` | `number` | no | | Per-transaction limit amount, in dollars. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop cards get\n\nRetrieve Card\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Card ID to retrieve, prefixed `icrd_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n\n---\n\n# whop cards get-transaction\n\nRetrieve Card Transaction\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The card transaction ID, prefixed `citx_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account that owns the transaction, prefixed `biz_`. Defaults to the credential's account. |\n\n---\n\n# whop cards list\n\nList Cards\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n\n---\n\n# whop cards transactions\n\nList Card Transactions\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account whose card transactions to list, prefixed `biz_`. Defaults to the credential's account. |\n| `--transaction_ids` | `array` | no | | Return only these card transactions, each prefixed `citx_`. Repeat the parameter, or pass one comma-separated value. |\n| `--card_id` | `array` | no | | Return only transactions charged to these cards, each prefixed `icrd_`. |\n| `--cardholder_id` | `array` | no | | Return only transactions on cards assigned to these users, each prefixed `user_`. |\n| `--status` | `string` | no | | Return only transactions with this status. |\n| `--created_after` | `string` | no | | Return only transactions authorized at or after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Return only transactions authorized at or before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | The field to sort by. Defaults to `created_at`. |\n| `--direction` | `string` | no | | The sort direction. Defaults to `desc`. |\n| `--first` | `number` | no | | The number of card transactions to return. |\n| `--after` | `string` | no | | A cursor; returns card transactions after this position. |\n| `--last` | `number` | no | | The number of card transactions to return, counting back from the end. |\n| `--before` | `string` | no | | A cursor; returns card transactions before this position. |\n\n---\n\n# whop cards update\n\nUpdate Card\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Card ID to retrieve, prefixed `icrd_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The owning account ID (a biz_ identifier). Provide this or user_id. |\n| `--billing` | `object` | no | | New billing address. Requires line1, city, region, postal_code, and country_code. On an invited card, passing billing alone (as the invited user) completes onboarding and starts card provisioning. |\n| `--canceled` | `boolean` | no | | Pass `true` to permanently cancel the card. A canceled card cannot be uncanceled. Cannot be combined with other fields. |\n| `--frozen` | `boolean` | no | | Pass `true` to freeze the card, `false` to unfreeze it. The assigned cardholder may freeze their own card without the payout:account:update scope. |\n| `--name` | `string` | no | | A display name for the card. |\n| `--pin` | `string` | no | | New 4-digit PIN. Can only be set on a card assigned to the acting user, who may set it without the payout:account:update scope. |\n| `--remove_limit` | `boolean` | no | | Pass `true` to remove the spending limit (make the card unlimited). |\n| `--spend_limit` | `number` | no | | Spending limit amount, in dollars. |\n| `--spend_limit_frequency` | `string` | no | | The window the spend limit applies to. |\n| `--transaction_limit` | `number` | no | | Per-transaction limit amount, in dollars. |\n| `--user_id` | `string` | no | | The owning user ID (a user_ identifier). Provide this or account_id. |\n\n> Confirm with the user before executing this destructive command.\n",
101086
- "whop-transfers": "---\nname: whop-transfers\ndescription: Move funds between Whop accounts and users. Run `whop transfers --help` for usage details.\nrequires_bin: whop\ncommand: whop transfers\n---\n\nTransfers move value between identities on Whop. They are used for account-to-account money movement, user payouts inside Whop, crypto transfers, and claim links depending on the destination type.\n\nUse the Transfers API to create a transfer, list previous transfers, and retrieve a transfer by ID when reconciling money movement between accounts or users.\n\n# whop transfers create\n\nCreate Transfer\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--amount` | `number` | yes | | The amount to move, in the transfer currency. For example 25.00. |\n| `--currency` | `string` | no | | Currency, such as `usd`. Required for ledger transfers. |\n| `--destination_id` | `string` | no | | The recipient. Required for ledger and wallet_send (a user_/biz_/ldgr_ ID, or \u2014 for sends \u2014 an email). Omit for claim_link. |\n| `--expires_at` | `unknown` | no | | claim_link only. Link expiry as an ISO 8601 timestamp. Defaults to 24 hours from creation. |\n| `--idempotence_key` | `unknown` | no | | Ledger transfers and wallet sends. A unique key that makes retries safe. Retrying with the same key returns the original transfer, or attaches to the original wallet send, instead of moving money twice. |\n| `--metadata` | `unknown` | no | | Ledger transfers only. Custom key-value pairs attached to the transfer. Max 50 keys, 100 chars per key, 500 chars per string value. |\n| `--notes` | `unknown` | no | | Ledger transfers only. A short note describing the transfer. |\n| `--origin_id` | `string` | yes | | The account sending the funds. A user ID (user_xxx), account ID (biz_xxx), or ledger account ID (ldgr_xxx). |\n| `--redeemable_count` | `number` | no | | claim_link only. How many different users can claim the link. Defaults to 1. |\n| `--type` | `string` | no | | The kind of money movement, which decides what comes back. Defaults to ledger. `ledger` moves credit between two Whop balances and returns a `transfer`; `wallet_send` sends USDT from the origin account's Ethereum wallet and returns a `send`; `claim_link` funds a shareable link anyone with the URL can redeem and returns a `claim_link`. A `ledger` transfer from a stablecoin-rails account settles on-chain when covered, and still returns a `transfer`. |\n| `--idempotency-key` | `string` | yes | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirmation policy: For `--type ledger` only, the user's request to execute the transfer counts as confirmation when it includes exact `--origin_id`, `--destination_id`, `--amount`, and `--currency` values and both IDs use a `biz_`, `user_`, or `ldgr_` prefix. Execute that confirmed transfer yourself. This exception does not apply to `wallet_send` or `claim_link`; ask for explicit confirmation before executing those transfer types. Always include a unique `--idempotency-key`. If a result is uncertain, retry the same transfer with the same key.\n\n---\n\n# whop transfers get\n\nRetrieve Transfer\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The transfer ID. |\n\n---\n\n# whop transfers list\n\nList Transfers\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--origin_id` | `string` | no | | Filter to transfers sent from this account. Provide this or destination_id. |\n| `--destination_id` | `string` | no | | Filter to transfers received by this account. Provide this or origin_id. |\n| `--order` | `string` | no | | Sort column. Defaults to created_at. |\n| `--direction` | `string` | no | | Sort direction. Defaults to desc. |\n| `--created_before` | `string` | no | | Only transfers created strictly before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only transfers created strictly after this ISO 8601 timestamp. |\n| `--first` | `number` | no | `50` | Number of transfers to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | Number of transfers to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop transfers recipients\n\nList Transfer Recipients\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--origin_id` | `string` | yes | | The account sending the money: a company account ID (`biz_`), or a user ID (`user_`) for that user's own personal balance. |\n| `--query` | `string` | no | | Search anyone on Whop by name or username, plus your own accounts by name or ID. Omit it to get the team around the balance, the people you follow, and your own accounts. The list is the same whether the balance belongs to a company or to you. Searching from a `biz_` origin additionally requires the member:basic:read scope. A credential scoped to a single company is the exception to the search itself: it only ever sees that company's own people. Complete email addresses return no matches. |\n| `--first` | `number` | no | `20` | Number of recipients per page. Search queries preserve the dashboard's 20-result maximum. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n",
101087
- "whop-disputes": "---\nname: whop-disputes\ndescription: Chargebacks filed against an account, with evidence and outcomes. Run `whop disputes --help` for usage details.\nrequires_bin: whop\ncommand: whop disputes\n---\n\nA Dispute is a chargeback a customer files against a payment through their bank, or an inquiry that may become one. It carries the disputed payment, a deadline to respond, your evidence, and the outcome once the processor rules.\n\nUse the Disputes API to list disputes, edit the evidence packet while a dispute is still contestable, and submit it for review.\n\n# whop disputes get\n\nRetrieve Dispute\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The dispute ID (`dspt_` tag). |\n\n---\n\n# whop disputes list\n\nList Disputes\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Only disputes filed against this account (`biz_` tag). Omit it to cover every account you can read. |\n| `--first` | `number` | no | | The number of disputes to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns disputes after this position. |\n| `--last` | `number` | no | | The number of disputes to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns disputes before this position. |\n| `--order` | `string` | no | | The field to sort disputes by. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--status` | `array` | no | | Only disputes in these statuses. Repeat the parameter to pass several \u2014 one paginated list covers all of them. Covers both chargebacks and inquiries at each stage. |\n| `--currency` | `string` | no | | Only disputes in this three-letter ISO currency. |\n| `--created_before` | `string` | no | | Only disputes opened before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only disputes opened after this ISO 8601 timestamp. |\n\n---\n\n# whop disputes submit\n\nSubmit Dispute\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The dispute ID (`dspt_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop disputes summary\n\nRetrieve Dispute Summary\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--groups` | `array` | no | | Which breakdowns to return, keyed by these names under `groups`. Repeat the parameter to ask for several; omit it for all of them. |\n| `--account_id` | `string` | no | | Only disputes filed against this account (`biz_` tag). Omit it to cover every account you can read. |\n| `--status` | `array` | no | | Only disputes in these statuses. Repeat the parameter to pass several. |\n| `--currency` | `string` | no | | Only disputes in this three-letter ISO currency. |\n| `--created_before` | `string` | no | | Only disputes opened before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only disputes opened after this ISO 8601 timestamp. |\n\n---\n\n# whop disputes update\n\nUpdate Dispute\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The dispute ID (`dspt_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--evidence` | `object` | no | | The evidence packet to send to the processor. Only the fields you provide are changed. |\n\n> Confirm with the user before executing this destructive command.\n",
101088
- "whop-dispute-alerts": "---\nname: whop-dispute-alerts\ndescription: Issuer warnings that arrive before a chargeback does. Run `whop dispute-alerts --help` for usage details.\nrequires_bin: whop\ncommand: whop dispute-alerts\n---\n\nA Dispute alert is an early warning from a card issuer that a settled payment is being questioned, ahead of any chargeback. `type` separates fraud reports (`early_fraud_warning`), pre-dispute notices (`dispute_alert`), and Visa RDR cases the network already closed by refunding (`rapid_dispute_resolution`).\n\nUse the Dispute alerts API to list alerts for an account, filter them by type or payment, and read `actionable` to see whether refunding can still avoid the chargeback.\n\n# whop dispute-alerts get\n\nRetrieve Dispute Alert\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The dispute alert ID, prefixed `dspa_`. |\n\n---\n\n# whop dispute-alerts list\n\nList Dispute Alerts\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Only alerts on this account's payments (`biz_` tag). Omit it to cover every account you can read. |\n| `--payment_id` | `string` | no | | Only alerts on this payment (`pay_` tag). A payment can carry several. |\n| `--type` | `string` | no | | Only alerts of this kind. `early_fraud_warning` for issuer fraud reports, `dispute_alert` for pre-dispute notices, `rapid_dispute_resolution` for Visa RDR cases the network already closed. |\n| `--first` | `number` | no | | The number of alerts to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns alerts after this position. |\n| `--last` | `number` | no | | The number of alerts to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns alerts before this position. |\n| `--order` | `string` | no | | The field to sort alerts by. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--created_before` | `string` | no | | Only alerts Whop received before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only alerts Whop received after this ISO 8601 timestamp. |\n",
101089
- "whop-deposits": "---\nname: whop-deposits\ndescription: Add funds to a balance. Run `whop deposits --help` for usage details.\nrequires_bin: whop\ncommand: whop deposits\n---\n\nDeposits describe ways to add funds to an account balance, including hosted deposit pages, bank deposit instructions, and supported crypto wallet addresses.\n\nUse the Deposits API to create deposit instructions for an account.\n\n# whop deposits create\n\nCreate Deposit\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--amount` | `number` | no | | Amount to prefill on hosted deposit page. |\n| `--destination` | `unknown` | yes | | Destination account ID or wallet address. Object form is supported for compatibility. Any business resolves by its account ID without authentication; a user account resolves only for that same authenticated user. |\n| `--metadata` | `object` | no | | Metadata to include with the deposit response. |\n| `--network` | `unknown` | no | | Destination network override. Defaults to the destination wallet's own network. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n",
101090
- "whop-swaps": '---\nname: whop-swaps\ndescription: Convert a balance between currencies. Run `whop swaps --help` for usage details.\nrequires_bin: whop\ncommand: whop swaps\n---\n\nSwaps convert value between supported tokens, chains, or wallet destinations for an account. A swap quote describes the expected output, fees, and approval requirements before you create the swap.\n\nUse the Swaps API to quote a conversion, create the swap, list recent swaps, and retrieve status until the transaction completes.\n\n# whop swaps create\n\nCreate Swap\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | yes | | Business or user account ID (biz_* / user_*). |\n| `--amount` | `unknown` | no | | Source token amount. Required for crypto swaps. For fiat pairs: the amount of from_token to convert at the mid-market rate; omit (along with to_amount) to repay the full negative to_token balance instead. |\n| `--from_chain` | `number` | no | | Source chain name or chain ID. Defaults to the source token\'s chain when omitted. |\n| `--from_token` | `string` | yes | | Source token contract address or ticker symbol, such as "USDT". |\n| `--slippage_bps` | `number` | no | | Maximum slippage tolerance in basis points. |\n| `--to_amount` | `unknown` | no | | Fiat pairs only: sizes a partial repayment of the negative to_token balance, denominated in to_token. Must not exceed the debt. Mutually exclusive with amount. |\n| `--to_chain` | `number` | no | | Destination chain name or chain ID. Defaults to the destination token\'s chain when omitted. |\n| `--to_token` | `string` | yes | | Destination token contract address or ticker symbol, such as "XAUT". |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop swaps get\n\nRetrieve Swap\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Swap ID returned from POST /swaps. |\n\n---\n\n# whop swaps quote\n\nCreate Swap Quote\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--amount` | `string` | yes | | Source token amount. |\n| `--from_address` | `unknown` | no | | Source wallet address used for the quote. |\n| `--from_chain` | `number` | no | | Source chain name or chain ID. Defaults to the source token\'s chain when omitted. |\n| `--from_token` | `string` | yes | | Source token contract address or ticker symbol, such as "USDT". |\n| `--metadata` | `object` | no | | Metadata to include with the quote response. |\n| `--slippage_bps` | `number` | no | | Maximum slippage tolerance in basis points. |\n| `--to_address` | `unknown` | no | | Destination wallet address used for the quote. |\n| `--to_chain` | `number` | no | | Destination chain name or chain ID. Defaults to the destination token\'s chain when omitted. |\n| `--to_token` | `string` | yes | | Destination token contract address or ticker symbol, such as "XAUT". |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop swaps status\n\nList Swaps\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Business or user account ID (biz_* / user_*). |\n',
101091
- "whop-resolution-center-cases": "---\nname: whop-resolution-center-cases\ndescription: File or respond to a case against a payment, as the buyer or the merchant. Run `whop resolution-center-cases --help` for usage details.\nrequires_bin: whop\ncommand: whop resolution-center-cases\n---\n\nA Resolution Center Case is opened by a buyer when something is wrong with a purchase \u2014 an unwanted renewal, an item that never arrived, or a charge they don't recognize. It is the step before a chargeback: the two sides work it out directly, and Whop decides the case if they can't. Each case carries a reason, a status naming which side it is waiting on, a timeline of events, and the actions available to whoever is reading it.\n\nUse the Resolution Center Cases API from either side: as the buyer, open a case, reply, appeal a decision, or withdraw it; as the merchant, accept it (refunding the payment), deny it, or ask the buyer for more information. Both sides read the same case, page its timeline, and summarize the cases they can see.\n\n# whop resolution-center-cases accept\n\nAccept a Case\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attachments` | `array` | no | | Up to 3 evidence files, by existing file `id` or `direct_upload_id`. |\n| `--message` | `string` | no | | An optional note to the customer, recorded on the case timeline. |\n| `--terminate_membership` | `boolean` | no | | Whether to also terminate the customer's membership. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop resolution-center-cases appeal\n\nAppeal a Case\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attachments` | `array` | no | | Up to 3 evidence files, by existing file `id` or `direct_upload_id`. |\n| `--message` | `string` | yes | | Why you are appealing the decision. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop resolution-center-cases create\n\nOpen a Case as the Customer\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attachments` | `array` | no | | |\n| `--message` | `string` | yes | | The customer's explanation. |\n| `--reason` | `string` | yes | | What went wrong. Uses the same vocabulary as `/disputes`. |\n| `--receipt_id` | `string` | yes | | The payment to open the case against (`pay_` tag). |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop resolution-center-cases deny\n\nDeny a Case\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attachments` | `array` | no | | Up to 3 evidence files, by existing file `id` or `direct_upload_id`. |\n| `--message` | `string` | yes | | Why the claim is being denied. Shown to the customer. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop resolution-center-cases events\n\nList Resolution Center Case Events\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--first` | `number` | no | | The number of events to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns events after this position. |\n| `--last` | `number` | no | | The number of events to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns events before this position. |\n\n---\n\n# whop resolution-center-cases get\n\nRetrieve Resolution Center Case\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n---\n\n# whop resolution-center-cases list\n\nList Resolution Center Cases\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Only cases filed against this account (`biz_` tag). With read access to the account this lists its whole queue; without, only the cases you opened against it. |\n| `--user_id` | `string` | no | | 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| `--first` | `number` | no | | The number of cases to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns cases after this position. |\n| `--last` | `number` | no | | The number of cases to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns cases before this position. |\n| `--order` | `string` | no | | The field to sort cases by. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--status` | `array` | no | | Only cases in these statuses. Repeat the parameter to pass several \u2014 one paginated list covers all of them. |\n| `--reason` | `array` | no | | Only cases opened for these reasons. Repeat the parameter to pass several. |\n| `--outcome` | `array` | no | | Only closed cases that ended these ways. Repeat the parameter to pass several. |\n| `--created_before` | `string` | no | | Only cases created before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only cases created after this ISO 8601 timestamp. |\n\n---\n\n# whop resolution-center-cases reply\n\nReply to a Case\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attachments` | `array` | no | | Up to 3 evidence files, by existing file `id` or `direct_upload_id`. |\n| `--message` | `string` | yes | | The reply to add to the case. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop resolution-center-cases request_info\n\nRequest Information from the Customer\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--attachments` | `array` | no | | Up to 3 evidence files, by existing file `id` or `direct_upload_id`. |\n| `--message` | `string` | no | | What you need from the customer. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop resolution-center-cases summary\n\nRetrieve Resolution Center Case Summary\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--groups` | `array` | no | | Which breakdowns to return, keyed by these names under `groups`. Repeat the parameter to ask for several; omit it for all of them. |\n| `--account_id` | `string` | no | | The account to summarize cases for (`biz_` tag). |\n| `--user_id` | `string` | no | | Only cases opened by this customer \u2014 a `user_` tag, or `me` for the calling user. |\n| `--status` | `array` | no | | Only cases in these statuses. |\n| `--reason` | `array` | no | | Only cases opened for these reasons. |\n| `--outcome` | `array` | no | | Only closed cases that ended these ways. |\n| `--created_before` | `string` | no | | Only count cases created before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only count cases created after this ISO 8601 timestamp. |\n\n---\n\n# whop resolution-center-cases withdraw\n\nWithdraw a Case\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The resolution center case ID (`reso_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n",
101092
- "whop-products": "---\nname: whop-products\ndescription: The things you sell. Each owns plans and a store page. Run `whop products --help` for usage details.\nrequires_bin: whop\ncommand: whop products\n---\n\nA Product is a digital good or service sold on Whop. Products may contain plans for pricing and/or experiences for content delivery.\n\nUse the Products API to create products, list products visible to your credentials, retrieve product details, update product metadata or merchandising fields, and delete products that should no longer be sold.\n\n# whop products create\n\nCreate Product\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The unique identifier of the account to create this product for. |\n| `--collect_shipping_address` | `boolean` | no | | Whether to collect a shipping address at checkout. |\n| `--custom_cta` | `unknown` | no | | The call-to-action button label. |\n| `--custom_cta_url` | `unknown` | no | | A URL the call-to-action button links to. |\n| `--custom_statement_descriptor` | `unknown` | no | | Custom bank statement descriptor. Must start with WHOP*. |\n| `--description` | `unknown` | no | | A written description displayed on the product page. |\n| `--global_affiliate_percentage` | `number` | no | | The commission rate affiliates earn. |\n| `--global_affiliate_status` | `string` | no | | The enrollment status in the global affiliate program. |\n| `--headline` | `unknown` | no | | A short marketing headline for the product page. |\n| `--member_affiliate_percentage` | `number` | no | | The commission rate members earn. |\n| `--member_affiliate_status` | `string` | no | | The enrollment status in the member affiliate program. |\n| `--metadata` | `unknown` | no | | Custom key-value pairs to store on the product. |\n| `--product_tax_code_id` | `unknown` | no | | The unique identifier of the tax classification code. See the available [product categories](https://docs.numeral.com/essentials/product-categories). |\n| `--redirect_purchase_url` | `unknown` | no | | A URL to redirect the customer to after purchase. |\n| `--route` | `unknown` | no | | The URL slug for the product's public link. |\n| `--send_welcome_message` | `boolean` | no | | Whether to send an automated welcome message via support chat when a user joins this product. Defaults to true. |\n| `--title` | `string` | yes | | The display name of the product. Maximum 80 characters. |\n| `--visibility` | `string` | no | | Whether the product is visible to customers. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop products delete\n\nDelete Product\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the product. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop products get\n\nRetrieve Product\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the product. |\n\n---\n\n# whop products list\n\nList Products\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The unique identifier of the account to list products for. |\n| `--visibilities` | `array` | no | | Filter to only products matching these visibility states. |\n| `--access_pass_types` | `array` | no | | Filter to only products matching these types. |\n| `--direction` | `string` | no | | The sort direction for results. Defaults to descending. |\n| `--order` | `string` | no | | The field to sort results by. Defaults to created_at. |\n| `--first` | `number` | no | | The number of products to return (default and max 100). |\n| `--after` | `string` | no | | A cursor; returns products after this position. |\n| `--last` | `number` | no | | The number of products to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns products before this position. |\n\n---\n\n# whop products publish\n\nPublish Product\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the product, prefixed `prod_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop products unpublish\n\nUnpublish Product\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the product, prefixed `prod_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop products update\n\nUpdate Product\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the product. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--banner_image` | `unknown` | no | | A wide image for the product, shown on the product page and on listing cards. Pass `{ id }` for an existing attachment or `{ direct_upload_id }` for a completed direct upload; `null` removes it. |\n| `--description` | `unknown` | no | | A written description displayed on the product page. |\n| `--headline` | `unknown` | no | | A short marketing headline for the product page. |\n| `--metadata` | `unknown` | no | | Custom key-value pairs to store on the product. |\n| `--product_tax_code_id` | `unknown` | no | | The unique identifier of the tax classification code. See the available [product categories](https://docs.numeral.com/essentials/product-categories). |\n| `--send_welcome_message` | `boolean` | no | | Whether to send an automated welcome message via support chat when a user joins this product. |\n| `--title` | `string` | no | | The display name of the product. |\n| `--visibility` | `string` | no | | Whether the product is visible to customers. |\n\n> Confirm with the user before executing this destructive command.\n",
101093
- "whop-plans": "---\nname: whop-plans\ndescription: \"Pricing for a product: one-time, recurring, trials, stock. Run `whop plans --help` for usage details.\"\nrequires_bin: whop\ncommand: whop plans\n---\n\nA Plan defines how customers buy a product. It controls pricing, billing cadence, availability, tax behavior, checkout fields, and purchase visibility.\n\nUse the Plans API to create plans for products, list existing plans, retrieve or update plan configuration, calculate tax for checkout, and delete plans that should no longer be offered.\n\n# whop plans calculate_tax\n\nCalculate Tax\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Plan ID, prefixed `plan_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--address` | `unknown` | no | | Buyer billing address used for tax calculation. Provide either `address.country` or `ip_address`; include state and postal code when available for more accurate results. |\n| `--ip_address` | `string` | no | | Buyer IP address used to infer location when no billing address is provided. |\n| `--tax_ids` | `unknown` | no | | Optional buyer tax ID for B2B exemptions. At most one entry is supported. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop plans create\n\nCreate Plan\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The unique identifier of the account to create this plan for. Defaults to the caller's account. |\n| `--adaptive_pricing_enabled` | `boolean` | no | | Whether this plan accepts local currency payments via adaptive pricing. |\n| `--billing_period` | `number` | no | | Recurring billing interval in days, such as 30 for monthly or 365 for annual. |\n| `--checkout_styling` | `unknown` | no | | Checkout styling overrides for this plan. |\n| `--currency` | `string` | no | | The three-letter ISO currency code for the plan's pricing. Defaults to USD. |\n| `--custom_fields` | `unknown` | no | | An array of custom field definitions to collect from customers at checkout. Omitting this field clears existing custom fields. |\n| `--description` | `unknown` | no | | A text description of the plan displayed to customers on the product page. |\n| `--expiration_days` | `number` | no | | Access duration in days before the membership expires. |\n| `--image` | `unknown` | no | | An image displayed on the product page to represent this plan. |\n| `--initial_price` | `number` | no | | Initial amount charged in the plan's currency, e.g. 10.43 for $10.43. |\n| `--internal_notes` | `unknown` | no | | Private notes visible only to the account owner. Not shown to customers. |\n| `--metadata` | `unknown` | no | | Custom key-value pairs to store on the plan. Included in webhook payloads for payment and membership events. Max 50 keys, 100 chars per key, 500 chars per string value. |\n| `--override_tax_type` | `string` | no | | Override the default tax classification for this specific plan. |\n| `--payment_method_configuration` | `unknown` | no | | Explicit payment method configuration for the plan. When not provided, the account's defaults apply. |\n| `--plan_type` | `string` | no | | Plan billing type, such as `one_time` or `renewal`. |\n| `--product_id` | `string` | no | | The unique identifier of the product to attach this plan to. |\n| `--release_method` | `string` | no | | Sales method for this plan. |\n| `--renewal_price` | `number` | no | | The amount charged each billing period for recurring plans, in the plan's currency. |\n| `--split_pay_required_payments` | `number` | no | | Installment payments required before the subscription pauses. |\n| `--stock` | `number` | no | | The maximum number of units available for purchase. Ignored when unlimited_stock is true. |\n| `--three_ds_level` | `string` | no | | 3D Secure behavior for this plan. Send `null` to inherit the account default. |\n| `--title` | `unknown` | no | | The display name of the plan shown to customers on the product page. |\n| `--trial_period_days` | `number` | no | | Free trial duration before the first recurring charge. |\n| `--unlimited_stock` | `boolean` | no | | Whether the plan has unlimited stock. When true, the stock field is ignored. |\n| `--visibility` | `string` | no | | Whether the plan is visible to customers or hidden from public view. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop plans delete\n\nDelete Plan\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Plan ID, prefixed `plan_`. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop plans get\n\nRetrieve Plan\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Plan ID, prefixed `plan_`. |\n\n---\n\n# whop plans list\n\nList Plans\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The unique identifier of the account to list plans for. |\n| `--direction` | `string` | no | | The sort direction for results. Defaults to descending. |\n| `--order` | `string` | no | | The field to sort results by. Defaults to created_at. |\n| `--release_methods` | `array` | no | | Filter to only plans matching these release methods. |\n| `--visibilities` | `array` | no | | Filter to only plans matching these visibility states. |\n| `--plan_types` | `array` | no | | Filter to only plans matching these billing types. |\n| `--product_ids` | `array` | no | | Filter to only plans belonging to these product identifiers. |\n| `--created_before` | `string` | no | | Only return plans created before this timestamp. |\n| `--created_after` | `string` | no | | Only return plans created after this timestamp. |\n| `--first` | `number` | no | | The number of plans to return (default and max 100). |\n| `--after` | `string` | no | | A cursor; returns plans after this position. |\n| `--last` | `number` | no | | The number of plans to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns plans before this position. |\n\n---\n\n# whop plans update\n\nUpdate Plan\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Plan ID, prefixed `plan_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--adaptive_pricing_enabled` | `boolean` | no | | Whether this plan accepts local currency payments via adaptive pricing. |\n| `--billing_period` | `number` | no | | Recurring billing interval in days, such as 30 for monthly or 365 for annual. |\n| `--cancel_discount_intervals` | `number` | no | | How many renewals the retention discount applies to. Required when `offer_cancel_discount` is true. |\n| `--cancel_discount_percentage` | `number` | no | | Percentage taken off each discounted renewal. Required when `offer_cancel_discount` is true. |\n| `--checkout_styling` | `unknown` | no | | Checkout styling overrides for this plan. |\n| `--currency` | `string` | no | | The three-letter ISO currency code for the plan's pricing. Defaults to USD. |\n| `--custom_fields` | `unknown` | no | | An array of custom field definitions to collect from customers at checkout. Omitting this field clears existing custom fields. |\n| `--description` | `unknown` | no | | A text description of the plan displayed to customers on the product page. |\n| `--expiration_days` | `number` | no | | Access duration in days before the membership expires. |\n| `--image` | `unknown` | no | | An image displayed on the product page to represent this plan. |\n| `--initial_price` | `number` | no | | Initial amount charged in the plan's currency, e.g. 10.43 for $10.43. |\n| `--internal_notes` | `unknown` | no | | Private notes visible only to the account owner. Not shown to customers. |\n| `--metadata` | `unknown` | no | | Custom key-value pairs to store on the plan. Included in webhook payloads for payment and membership events. Max 50 keys, 100 chars per key, 500 chars per string value. |\n| `--offer_cancel_discount` | `boolean` | no | | Whether to offer a retention discount when a customer attempts to cancel. |\n| `--override_tax_type` | `string` | no | | Override the default tax classification for this specific plan. |\n| `--payment_method_configuration` | `unknown` | no | | Explicit payment method configuration for the plan. When not provided, the account's defaults apply. |\n| `--release_method` | `string` | no | | Sales method for this plan. |\n| `--renewal_price` | `number` | no | | The amount charged each billing period for recurring plans, in the plan's currency. |\n| `--stock` | `number` | no | | The maximum number of units available for purchase. Ignored when unlimited_stock is true. |\n| `--strike_through_initial_price` | `number` | no | | A comparison price displayed with a strikethrough for the initial price. |\n| `--strike_through_renewal_price` | `number` | no | | A comparison price displayed with a strikethrough for the renewal price. |\n| `--three_ds_level` | `string` | no | | 3D Secure behavior for this plan. Send `null` to inherit the account default. |\n| `--title` | `unknown` | no | | The display name of the plan shown to customers on the product page. |\n| `--trial_period_days` | `number` | no | | Free trial duration before the first recurring charge. |\n| `--unlimited_stock` | `boolean` | no | | Whether the plan has unlimited stock. When true, the stock field is ignored. |\n| `--visibility` | `string` | no | | Whether the plan is visible to customers or hidden from public view. |\n\n> Confirm with the user before executing this destructive command.\n",
101094
- "whop-memberships": "---\nname: whop-memberships\ndescription: A customer's purchase of a plan, from checkout through cancellation. Run `whop memberships --help` for usage details.\nrequires_bin: whop\ncommand: whop memberships\n---\n\nA Membership is a customer's purchase of a plan: the subscription or one-time grant that gives them access to a product. It tracks billing state (`active`, `trialing`, `past_due`, and so on), the current period, pending cancellations, custom metadata, and the software license key when the product includes licensing.\n\nUse the Memberships API to list an account's memberships or the caller's own, retrieve one by ID or license key, invite a recipient to join through a free plan, and manage the lifecycle: cancel immediately or at period end, reverse a scheduled period-end cancellation, pause and resume payment collection, extend with free days, and update metadata.\n\n# whop memberships cancel\n\nCancel Membership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Membership ID (`mem_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--reason` | `string` | no | | Free-form note recording why the membership was canceled. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop memberships extend\n\nExtend Membership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Membership ID (`mem_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--days` | `number` | yes | | Number of free days to add (1-1095). |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop memberships get\n\nRetrieve Membership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Membership ID (`mem_` tag), or a software license key. |\n\n---\n\n# whop memberships invite\n\nInvite to a Membership\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--email` | `string` | no | | Recipient email address. Mutually exclusive with `user_id`. |\n| `--plan_id` | `string` | yes | | Free plan whose membership the recipient is invited to, prefixed `plan_`. |\n| `--user_id` | `string` | no | | Recipient user ID, prefixed `user_`. Mutually exclusive with `email`. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop memberships list\n\nList Memberships\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Narrow to one account (`biz_` tag). With read access to the account this lists all of its memberships; without, only the caller's own memberships in it. |\n| `--user_id` | `string` | no | | 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| `--status` | `string` | no | | Filter by billing state. `canceling` matches active memberships set to cancel at period end; `paused` matches memberships with payment collection paused. |\n| `--product_id` | `string` | no | | Filter to memberships of this product (`prod_` tag). Repeat as product_ids[] for several. |\n| `--plan_id` | `string` | no | | Filter to memberships of this plan (`plan_` tag). Repeat as plan_ids[] for several. |\n| `--created_after` | `string` | no | | Only memberships created after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Only memberships created before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Sort field. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | `20` | Number of memberships to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of memberships to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n\n---\n\n# whop memberships pause\n\nPause Membership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Membership ID (`mem_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--until` | `string` | no | | ISO 8601 time to automatically resume payment collection. Must be in the future; only supported for memberships billed by Whop. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop memberships resume\n\nResume Membership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Membership ID (`mem_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop memberships update\n\nUpdate Membership\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Membership ID (`mem_` tag), or a software license key. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--cancel_at_period_end` | `boolean` | no | | `true` cancels at the end of the current billing period (the customer keeps access until then); `false` reverses a pending cancellation. |\n| `--metadata` | `object` | no | | Key-value pairs to merge into the membership's metadata. Pass an empty object to clear it. |\n\n> Confirm with the user before executing this destructive command.\n",
101095
- "whop-checkout-configurations": "---\nname: whop-checkout-configurations\ndescription: Turn a plan into a shareable, prefilled checkout link. Run `whop checkout-configurations --help` for usage details.\nrequires_bin: whop\ncommand: whop checkout-configurations\n---\n\nA Checkout Configuration is a reusable checkout link owned by an account. In `payment` mode it sells a specific plan; in `setup` mode it collects and saves payment details without charging. Each configuration can also override which payment methods are accepted and how 3D Secure is enforced for that checkout.\n\nUse the Checkout Configurations API to create checkout links for an existing or inline plan, list configurations for an account, retrieve the configuration behind a checkout URL, and delete links that should no longer be used.\n\n# whop checkout-configurations create\n\nCreate a checkout configuration\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n| `--affiliate_code` | `unknown` | no | | Affiliate code to apply to the checkout. |\n| `--currency` | `unknown` | no | | Currency used for setup-mode payment method availability. |\n| `--metadata` | `unknown` | no | | Custom key-value metadata copied to payments and memberships. |\n| `--mode` | `string` | no | | Controls whether checkout charges the buyer immediately or saves payment details for later. Defaults to `payment`. |\n| `--payment_method_configuration` | `unknown` | no | | Payment method overrides for this checkout. `null` uses the plan or platform defaults. |\n| `--plan` | `unknown` | no | | Plan attributes used to create or find a plan for this checkout configuration. Mutually exclusive with `plan_id`. |\n| `--plan_id` | `unknown` | no | | Existing plan ID, prefixed `plan_`. Mutually exclusive with `plan`. |\n| `--redirect_url` | `unknown` | no | | URL customers are sent to after checkout. |\n| `--three_ds_level` | `unknown` | no | | 3D Secure behavior for this checkout. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop checkout-configurations delete\n\nDelete a checkout configuration\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ID of the checkout configuration. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop checkout-configurations get\n\nRetrieve a checkout configuration\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ID of the checkout configuration. |\n\n---\n\n# whop checkout-configurations list\n\nList checkout configurations\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n| `--plan_id` | `string` | no | | Only return checkout configurations for this plan ID, prefixed `plan_`. |\n| `--created_before` | `string` | no | | Only return checkout configurations created before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only return checkout configurations created after this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Field used to sort checkout configurations. |\n| `--direction` | `string` | no | | Sort direction. Defaults to `desc`. |\n| `--first` | `number` | no | | Number of checkout configurations to return. |\n| `--after` | `string` | no | | Cursor for the next page of results. |\n",
101096
- "whop-payment-method-domains": "---\nname: whop-payment-method-domains\ndescription: Domains verified to show wallet payment methods like Apple Pay at checkout. Run `whop payment-method-domains --help` for usage details.\nrequires_bin: whop\ncommand: whop payment-method-domains\n---\n\nA Payment Method Domain registers a hostname with a wallet provider so its payment methods can appear at a checkout served from that domain. The domain proves ownership by hosting the provider's association file \u2014 for Apple Pay, at `/.well-known/apple-developer-merchantid-domain-association` \u2014 and `status` reports whether verification has completed.\n\nUse the Payment Method Domains API to register domains for your account or its connected accounts, retry verification once the association file is hosted, and remove domains that should no longer serve wallet payments. A domain a platform shares with its connected accounts at checkout is listed on the platform's account, not on each connected account.\n\n# whop payment-method-domains create\n\nCreate Payment Method Domain\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account to register the domain for (`biz_` tag). Defaults to the caller's account. |\n| `--hostname` | `string` | yes | | Hostname to register (e.g. `checkout.shinetime.example`). |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop payment-method-domains delete\n\nDelete Payment Method Domain\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the payment method domain, prefixed `pmd_`. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop payment-method-domains get\n\nRetrieve Payment Method Domain\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the payment method domain, prefixed `pmd_`. |\n\n---\n\n# whop payment-method-domains list\n\nList Payment Method Domains\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Only domains registered for this account (`biz_` tag). Defaults to the caller's account plus its connected accounts. |\n| `--hostname` | `string` | no | | Only the domain with this exact hostname. |\n| `--status` | `string` | no | | Only domains with this verification status. |\n| `--provider` | `string` | no | | Only domains registered with this wallet provider. |\n| `--created_before` | `string` | no | | Only domains created before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Only domains created after this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Sort field. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | `20` | Number of domains to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of domains to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n\n---\n\n# whop payment-method-domains verify\n\nVerify Payment Method Domain\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The unique identifier of the payment method domain, prefixed `pmd_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n",
101097
- "whop-shipments": "---\nname: whop-shipments\ndescription: Track the delivery of an order by its carrier tracking number. Run `whop shipments --help` for usage details.\nrequires_bin: whop\ncommand: whop shipments\n---\n\nA Shipment attaches a carrier tracking number to a payment and follows the package from label creation to delivery, exposing the current delivery status and a customer-facing tracking URL.\n\nUse the Shipments API to list an account's shipments, retrieve one by its id or the payment it fulfills, attach a tracking number to a payment, and update the tracking number on an existing shipment.\n\n# whop shipments create\n\nCreate Shipment\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The unique identifier of the account, prefixed `biz_`. |\n| `--payment_id` | `string` | yes | | The payment to attach the shipment to, prefixed `pay_`. |\n| `--tracking_number` | `string` | yes | | The carrier-assigned tracking number. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop shipments get\n\nRetrieve Shipment\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The shipment id (`ship_`), or the payment id (`pay_`) it fulfills. |\n\n---\n\n# whop shipments list\n\nList Shipments\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to list shipments for. Defaults to the acting account. |\n| `--status` | `string` | no | | Filter to shipments with this delivery status. |\n| `--payment_id` | `array` | no | | 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| `--created_before` | `string` | no | | Return shipments created before this ISO 8601 timestamp. |\n| `--created_after` | `string` | no | | Return shipments created after this ISO 8601 timestamp. |\n| `--order` | `string` | no | | The field to sort by. |\n| `--direction` | `string` | no | | The sort direction. |\n| `--first` | `number` | no | | The number of shipments to return. |\n| `--after` | `string` | no | | A cursor; returns shipments after this position. |\n| `--last` | `number` | no | | The number of shipments to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns shipments before this position. |\n\n---\n\n# whop shipments update\n\nUpdate Shipment\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The shipment id (`ship_`), or the payment id (`pay_`) it fulfills. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--tracking_number` | `string` | yes | | The new carrier-assigned tracking number. |\n\n> Confirm with the user before executing this destructive command.\n",
101098
- "whop-partners": "---\nname: whop-partners\ndescription: The users and businesses you referred to Whop, and what you earn from them. Run `whop partners --help` for usage details.\nrequires_bin: whop\ncommand: whop partners\n---\n\nThe Partners API covers your Whop partner activity: the users you referred onto Whop, the businesses you referred and the earnings generated from their processing volume, and the partner leaderboard.\n\nUse it to enroll as a Whop partner, list the users you referred, list your referred businesses and review their earnings, and see the partner leaderboard.\n\n# whop partners create\n\nEnroll as a Whop partner\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop partners earnings\n\nList referred business earnings\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The partner business ID (a coma_ identifier). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--status` | `string` | no | | Filter by earning status. |\n| `--first` | `number` | no | `20` | |\n| `--after` | `string` | no | | |\n| `--last` | `number` | no | | |\n| `--before` | `string` | no | | |\n| `--order` | `string` | no | | The field to sort earnings by. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--created_before` | `string` | no | | Only return earnings created before this timestamp. |\n| `--created_after` | `string` | no | | Only return earnings created after this timestamp. |\n\n---\n\n# whop partners get\n\nRetrieve a referred business\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The partner business ID (a coma_ identifier). |\n\n---\n\n# whop partners leaderboard\n\nRetrieve the leaderboard\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--period` | `string` | no | | Time window for the rankings. `day`, `month`, and `year` count earnings since the start of the current calendar day, month, or year; `last_30_days` counts earnings over the trailing 30 days; `all_time` ranks lifetime earnings. |\n\n---\n\n# whop partners list\n\nList referred businesses\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--status` | `string` | no | | Filter by referral status. |\n| `--has_earnings` | `boolean` | no | | When true, only businesses with pending or completed earnings paid to the caller. |\n| `--first` | `number` | no | `20` | Number of partner businesses to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | Number of partner businesses to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n| `--order` | `string` | no | | The field to sort partner businesses by. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--created_before` | `string` | no | | Only return partner businesses created before this timestamp. |\n| `--created_after` | `string` | no | | Only return partner businesses created after this timestamp. |\n| `--referred_user_id` | `string` | no | | Filter to referrals attributed to this user. For first-tier referrals, this is the referred account owner; for second-tier referrals, this is the partner you recruited. |\n| `--referred_username` | `string` | no | | Filter by the referred user's exact username. Ignored when `referred_user_id` is present. |\n| `--tier` | `string` | no | | Filter to only first-tier referrals or only second-tier referrals. |\n\n---\n\n# whop partners referred_users\n\nList the users the caller referred\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--has_businesses` | `boolean` | no | | When true, only referred users who brought at least one business onto Whop. |\n| `--has_earning_businesses` | `boolean` | no | | When true, only referred users with at least one business that has generated earnings. |\n| `--first` | `number` | no | `20` | Number of referred users to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | Number of referred users to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n",
101099
- "whop-bounties": "---\nname: whop-bounties\ndescription: Paid tasks with reviewed submissions and escrowed rewards. Run `whop bounties --help` for usage details.\nrequires_bin: whop\ncommand: whop bounties\n---\n\nA Bounty is a paid task posted by an account or user. The reward is held in escrow when the bounty publishes, workers submit proof of completed work, and each accepted submission is paid out until every winner slot fills.\n\nUse the Bounties API to create and publish a bounty, list an account's bounties for reporting or dashboards, list the bounties a user can work or has participated in, and retrieve a single bounty by ID.\n\n# whop bounties cancel\n\nCancel\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Bounty ID (`bnty_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop bounties create\n\nCreate Bounty\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--accepted_submissions_limit` | `number` | no | | Number of submissions that can be accepted (winner slots). Defaults to 1. The escrowed total is `gross_reward_amount` times this limit and must be at least $5. |\n| `--accepted_submissions_per_user_limit` | `number` | no | | How many winner slots one worker can win. Defaults to `1`. Wins plus proofs awaiting review never exceed this number, and a worker runs one attempt at a time. Cannot exceed `accepted_submissions_limit`. |\n| `--account_id` | `unknown` | no | | Account whose balance funds the bounty pool (`biz_` tag). Defaults to the caller's personal balance. Requires permission to move the account's funds. |\n| `--allowed_country_codes` | `unknown` | no | | Countries whose residents can work the bounty, as ISO 3166 alpha-2 codes. Empty means worldwide. |\n| `--business_goal_type` | `string` | no | | What the poster wants the work to achieve, declared once here. |\n| `--capture_spec` | `object` | no | | Per-bounty overrides of the served capture contract. Only accepted when `business_goal_type` is `data_capture`; omitted fields keep the platform defaults, and the resulting contract is echoed back as `capture_spec` on the bounty. |\n| `--description` | `string` | yes | | Full task instructions shown to workers. |\n| `--experience_id` | `unknown` | no | | Experience to host the bounty in (`exp_` tag). Any visibility \u2014 public for an open bounty, private for an invited one. Required unless account_id is set, in which case the bounty anchors in that account's public forum. |\n| `--frequency` | `string` | no | | How often the schedule creates a new bounty. Each occurrence is a separate bounty. Defaults to `once`; only applies with `publish_at`. |\n| `--gross_reward_amount` | `number` | yes | | Gross bounty-pool amount (USD) escrowed per accepted submission, in whole dollars. Platform fees and affiliate shares are paid from this amount. |\n| `--publish_at` | `unknown` | no | | ISO 8601 time to publish the bounty. When set, the bounty is created as a hidden draft and funded + published at this time instead of immediately. |\n| `--publish_at_timezone` | `unknown` | no | | IANA timezone for recurring occurrences. Required when publish_at is set. |\n| `--title` | `string` | yes | | Short name of the task shown to workers. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop bounties get\n\nRetrieve Bounty\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Bounty ID (`bnty_` tag). |\n\n---\n\n# whop bounties list\n\nList Bounties\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Scope the list to this account (`biz_` tag). Requires read access to the account; account API keys may pass their own account or a connected account. |\n| `--user_id` | `string` | no | | List the bounties this user participated in (`user_` tag). Must be the authenticated user. |\n| `--status` | `string` | no | | Filter by lifecycle state. |\n| `--query` | `string` | no | | Substring match on the bounty title or ID. |\n| `--created_after` | `string` | no | | Only bounties created after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Only bounties created before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Sort field. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | `20` | Number of bounties to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of bounties to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n\n---\n\n# whop bounties submissions\n\nList Public Submissions\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `bounty_id` | `string` | yes | The bounty whose public submissions to list (`bnty_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--status` | `string` | no | | Filter by lifecycle state. |\n| `--created_after` | `string` | no | | Only submissions created after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Only submissions created before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Sort field. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | `20` | Number of submissions to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of submissions to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n\n---\n\n# whop bounties update\n\nUpdate Bounty\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Bounty ID (`bnty_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--accepted_submissions_limit` | `number` | no | | Scheduled drafts only. Number of submissions that can be accepted (winner slots). |\n| `--accepted_submissions_per_user_limit` | `number` | no | | How many winner slots one worker can win. Defaults to `1`. Wins plus proofs awaiting review never exceed this number, and a worker runs one attempt at a time. Cannot exceed `accepted_submissions_limit`. Editable while the bounty is still open with nothing under review. |\n| `--allowed_country_codes` | `unknown` | no | | Replace the countries whose residents can work the bounty, as ISO 3166 alpha-2 codes. Empty means worldwide. |\n| `--business_goal_type` | `string` | no | | What the poster wants the work to achieve, declared once here. |\n| `--description` | `string` | no | | New full task instructions. |\n| `--frequency` | `string` | no | | Scheduled drafts only. How often the schedule creates a new bounty. |\n| `--gross_reward_amount` | `number` | no | | Scheduled drafts only. Gross bounty-pool amount (USD) escrowed per accepted submission. The escrowed total (this times accepted_submissions_limit) must stay at least $5. |\n| `--publish_at` | `unknown` | no | | Scheduled drafts only. New ISO 8601 time to publish the draft. Must be in the future. |\n| `--publish_at_timezone` | `unknown` | no | | Scheduled drafts only. IANA timezone for recurring occurrences. |\n| `--title` | `string` | no | | New short name of the task. |\n\n> Confirm with the user before executing this destructive command.\n",
101100
- "whop-bounty-submissions": "---\nname: whop-bounty-submissions\ndescription: Work submitted to a bounty, from attempt to payout. Run `whop bounty-submissions --help` for usage details.\nrequires_bin: whop\ncommand: whop bounty-submissions\n---\n\nA Bounty Submission is one worker's attempt on a bounty. It starts as an in-progress attempt, enters the review queue when proof is submitted, and ends approved (paid from the bounty's escrowed pool) or denied.\n\nUse the Bounty Submissions API to submit proof of completed work to a bounty, list the submissions you authored, and review the submissions on your bounties \u2014 across every bounty or narrowed to one.\n\n# whop bounty-submissions create\n\nCreate Bounty Submission\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--affiliate_code` | `unknown` | no | | Affiliate code crediting the referrer, when the worker arrived through one. |\n| `--bounty_id` | `string` | yes | | The bounty to submit to (`bnty_` tag). |\n| `--deliverable` | `unknown` | no | | The submitted work. Combine `urls`, `file_ids`, and `caption` freely; at least one link or file is required. |\n| `--metadata` | `unknown` | no | | Optional capture metadata describing where and how the footage was recorded. Persisted on the submission. On a `data_capture` bounty every field except `fov` is required whenever metadata is provided. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop bounty-submissions delete\n\nCancel Bounty Submission\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The bounty submission to act on (`btys_` tag). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop bounty-submissions get\n\nRetrieve Bounty Submission\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The bounty submission to act on (`btys_` tag). |\n\n---\n\n# whop bounty-submissions list\n\nList Bounty Submissions\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Scope the list to submissions on this account's bounties (`biz_` tag). Requires read access to the account. |\n| `--bounty_id` | `string` | no | | Only submissions on this bounty (`bnty_` tag). |\n| `--status` | `string` | no | | Filter by lifecycle state. |\n| `--created_after` | `string` | no | | Only submissions created after this ISO 8601 timestamp. |\n| `--created_before` | `string` | no | | Only submissions created before this ISO 8601 timestamp. |\n| `--order` | `string` | no | | Sort field. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | `20` | Number of submissions to return from the start of the window. |\n| `--after` | `string` | no | | Cursor to paginate forwards from. |\n| `--last` | `number` | no | | Number of submissions to return from the end of the window. |\n| `--before` | `string` | no | | Cursor to paginate backwards from. |\n\n---\n\n# whop bounty-submissions submit\n\nSubmit Bounty Submission\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The claimed attempt to submit for review (`btys_` tag). |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--deliverable` | `unknown` | no | | Work to attach to the submission. Combine `urls`, `file_ids`, and `caption` freely; all are optional. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n",
101101
- "whop-people": "---\nname: whop-people\ndescription: Visitors and customers of an account, with identity, purchase, and traffic profiles. Run `whop people --help` for usage details.\nrequires_bin: whop\ncommand: whop people\n---\n\nA Person is an identity-linked profile of a visitor or customer of an account, assembled from every [event](https://docs.whop.com/api-reference/beta/events/event) the person generated \u2014 pixel page views, ad clicks, leads, identifies, and payments. Each profile carries the person's known identities (names, emails, phones, user IDs), purchase history and LTV, geo/device profile, traffic sources, and the first and last marketing touches that reached them.\n\nUse the People API to list and segment the people of an account \u2014 filter by activity, purchases, traffic source, location, or marketing touch, and sort by value \u2014 or retrieve one person by person ID, user ID, email address, or phone number.\n\n# whop people get\n\nRetrieve Person\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The person ID, user ID, email address, or phone number to look up. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Optional for account API keys; required for credentials that can access multiple accounts. |\n\n---\n\n# whop people list\n\nList People\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Optional for account API keys; required for credentials that can access multiple accounts. |\n| `--query` | `string` | no | | Search people by name, email, phone, or whop user ID (case-insensitive substring match). |\n| `--source` | `array` | no | | 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| `--attribution_model` | `string` | no | | Attribution model the source filter matches against (defaults to last_touch). |\n| `--event_name` | `array` | no | | Only include people who fired any of these events, e.g. payment.completed or page.checkout.view. |\n| `--custom_event` | `string` | no | | Only include people who fired this custom pixel event. |\n| `--event_from` | `string` | no | | With event_to plus an event or source filter, switches to exact-population mode: person ids are resolved and paginated on the events side within this window (the same query the people metric counts), then hydrated per page. |\n| `--event_to` | `string` | no | | The inclusive end of the event window for exact-population mode. |\n| `--audience_id` | `string` | no | | 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| `--user_id` | `string` | no | | Only include the person linked to this whop user ID. |\n| `--email` | `string` | no | | Only include the person linked to this email address. |\n| `--phone` | `string` | no | | Only include the person linked to this phone number. |\n| `--country` | `string` | no | | Only include people whose most recent visit came from this ISO 3166-1 alpha-2 country code. |\n| `--has_purchased` | `boolean` | no | | true for customers only, false for people who have never purchased. |\n| `--contactable` | `boolean` | no | | true for people who have an email address or phone number \u2014 the ones an ad platform can match. |\n| `--first_seen_within_days` | `number` | no | | Only include people first seen within this many days, as a rolling window. |\n| `--last_seen_within_days` | `number` | no | | Only include people last seen within this many days, as a rolling window. |\n| `--first_seen_after` | `string` | no | | Only include people first seen at or after this ISO 8601 timestamp. |\n| `--first_seen_before` | `string` | no | | Only include people first seen before this ISO 8601 timestamp. |\n| `--last_seen_after` | `string` | no | | Only include people last seen at or after this ISO 8601 timestamp. |\n| `--last_seen_before` | `string` | no | | Only include people last seen before this ISO 8601 timestamp. |\n| `--first` | `number` | no | | The number of people to return (default 100, max 100). |\n| `--after` | `string` | no | | A cursor for fetching people after a previous page. |\n| `--before` | `string` | no | | A cursor for fetching people before a later page. |\n| `--order` | `string` | no | | Column to sort by. Defaults to last_seen_at. |\n| `--direction` | `string` | no | | Sort direction. Defaults to desc. |\n",
101102
- "whop-events": "---\nname: whop-events\ndescription: Conversion and engagement events tracked for attribution. Run `whop events --help` for usage details.\nrequires_bin: whop\ncommand: whop events\n---\n\nAn Event records conversion or engagement activity for an account, such as page views, purchases, or leads. Each event ties the action to the [person](https://docs.whop.com/api-reference/beta/people/person) who took it, so activity can be attributed to the ads and links that drove it.\n\nUse the Events API to send new tracking events, list recent identity-linked events for an account, and inspect the events recorded for a person. The resource also exposes an anonymized read mode \u2014 the pulse feed \u2014 a platform-wide snapshot of recent purchases that carries nothing identifying. The pulse feed is public; other Events endpoints require authentication and are scoped to an account.\n\nEvents are only as good as the pixel sending them, so [Validate Pixel](https://docs.whop.com/api-reference/beta/events/validate-pixel) answers whether an account's pixel is working: it reads the events the pixel has sent, and when you pass a `url` whose page hasn't sent any lately, it fetches that page and looks for the pixel in its source. Use it before launching an ad to confirm its destination is tracked, or in a setup flow to tell a merchant whether their install is live.\n\n# whop events create\n\nCreate Event\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | yes | | The account to associate with this event. |\n| `--action_source` | `unknown` | no | | Where the event originated. |\n| `--context` | `unknown` | no | | Tracking and attribution context. |\n| `--currency` | `unknown` | no | | ISO 4217 currency code. |\n| `--custom_name` | `unknown` | no | | Custom event name when event_name is 'custom'. Maximum 35 chars for this value. |\n| `--duration` | `number` | no | | For 'leave' events: milliseconds the visitor spent on the page. |\n| `--event_id` | `unknown` | no | | Client-provided identifier for deduplication. Generated if omitted. |\n| `--event_name` | `string` | yes | | The type of event.\n\nUse a standard event (lead, submit_application, contact, complete_registration, schedule, view_content, add_to_cart) or pass your own name directly for a custom event. |\n| `--event_time` | `unknown` | no | | When the event occurred. Defaults to now. |\n| `--plan_id` | `unknown` | no | | The plan associated with the event. |\n| `--product_id` | `unknown` | no | | The product associated with the event. |\n| `--referrer_url` | `unknown` | no | | The referring URL. |\n| `--resumed` | `boolean` | no | | For 'page' events: true when the page was restored from the back/forward cache. |\n| `--source` | `unknown` | no | | For 'identify' events: where the identity was captured (url, form, manual, iframe). |\n| `--title` | `unknown` | no | | For 'page' events: the document title. |\n| `--url` | `unknown` | no | | The URL where the event occurred. |\n| `--user` | `unknown` | no | | User identity and profile data. |\n| `--value` | `number` | no | | Monetary value associated with the event. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop events list\n\nList Events\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--identifier` | `string` | no | | 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| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Optional for account API keys; required for credentials that can access multiple accounts. |\n| `--from` | `string` | no | | Start of the time range as an ISO 8601 timestamp. Required when identifier is omitted. |\n| `--to` | `string` | no | | End of the time range as an ISO 8601 timestamp. Required when identifier is omitted; otherwise defaults to now. |\n| `--first` | `number` | no | | The number of events to return. |\n| `--after` | `string` | no | | A cursor for fetching events after a previous page. |\n| `--before` | `string` | no | | A cursor for fetching events before a later page. |\n| `--direction` | `string` | no | | The order events are returned in by time. Defaults to desc (most recent first); asc reads a journey forwards from where it starts. after and before always page forwards and backwards through that order. |\n| `--event` | `string` | no | | 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| `--source` | `string` | no | | Canonical source path, exact or with a trailing :* prefix (whop:<campaign>:*, ext:meta:*, referrer:<domain>, direct). Restricts the list to conversion targets attributed to that source \u2014 the debuggability twin of a metric cell's source parameter. |\n| `--attribution_model` | `string` | no | | Attribution model for the source filter (defaults to last_touch). |\n| `--country` | `string` | no | | Country codes to filter by, comma-separated. |\n| `--city` | `string` | no | | Cities to filter by, comma-separated. |\n| `--device` | `string` | no | | Device families to filter by, comma-separated (e.g. iPhone, Mac). |\n| `--browser` | `string` | no | | Browser families to filter by, comma-separated (e.g. Chrome, Mobile Safari). |\n| `--os` | `string` | no | | Operating system families to filter by, comma-separated (e.g. iOS, Windows). |\n| `--utm_source` | `string` | no | | utm_source values to filter by, comma-separated. |\n| `--hostname` | `string` | no | | Page hostnames to filter by, comma-separated. |\n| `--page` | `string` | no | | Page paths to filter by, comma-separated. |\n\n---\n\n# whop events pulse\n\nRetrieve the pulse feed\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--event` | `string` | no | | Filter to one or more types, comma separated \u2014 for example `purchase,card_spend`. These are the item's `type`, not its `event_name`: several types share the `ledger_line.created` event name. Omit for every type in the feed. Values outside the feed's own set are rejected. |\n| `--first` | `number` | no | | The number of events to return. |\n| `--after` | `string` | no | | A cursor for fetching events after a previous page. |\n| `--before` | `string` | no | | A cursor for fetching events before a later page. |\n\n---\n\n# whop events validate_pixel\n\nValidate Pixel\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account to check. Defaults to the authenticated account. |\n| `--url` | `string` | no | | A page to read for the pixel, e.g. an ad destination. Omit it to check the account from its events alone. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n",
101103
- "whop-recommended-actions": "---\nname: whop-recommended-actions\ndescription: Suggested next-step action chains for an account. Run `whop recommended-actions --help` for usage details.\nrequires_bin: whop\ncommand: whop recommended-actions\n---\n\nA Recommended Action Chain is a short, ordered sequence of dashboard actions \u2014 create a product, price it, publish it \u2014 suggested for an account based on what it already has. Seeded chains come from hand-written presets; generated chains, produced per account, share the same shape.\n\nUse the Recommended Actions API to list the chains recommended for an account and to record that a chain was run. Running a chain executes nothing server-side \u2014 the client follows each step's CTA itself; the run endpoint records the `recommended_action_chain.executed` analytics event.\n\n# whop recommended-actions create\n\nRun Recommended Action\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Chain ID from the list endpoint, e.g. `rac_seed_start_selling_9f2c1a7b04`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Defaults to the API key's own account. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop recommended-actions get\n\nRetrieve Recommended Action\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Chain ID from the list endpoint, e.g. `rac_seed_start_selling_9f2c1a7b04`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Defaults to the API key's own account. |\n\n---\n\n# whop recommended-actions list\n\nList Recommended Actions\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Defaults to the API key's own account. |\n",
101104
- "whop-ads": '---\nname: whop-ads\ndescription: "The creative: copy, assets, and destination URL. Run `whop ads --help` for usage details."\nrequires_bin: whop\ncommand: whop ads\n---\n\nAn Ad is the individual creative unit delivered by an [ad group](https://docs.whop.com/api-reference/beta/ad-groups/ad-group). It holds the copy, creative assets, and destination URL for one ad.\n\nUse the Ads API to list ads for an account, create ads inside ad groups, retrieve or update creative details, delete ads that should stop running, and pause or resume delivery.\n\n# whop ads create\n\nCreate an Ad\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--ad_group` | `object` | no | | An inline ad group to create (same shape as POST /ad_groups, including ad_campaign_id). Creates the ad group and the ad together. Provide this OR ad_group_id. |\n| `--ad_group_id` | `string` | no | | The existing ad group to create the ad in. Provide this OR ad_group, not both. |\n| `--call_to_action` | `string` | no | | The call-to-action button shown on the ad. |\n| `--creatives` | `array` | no | | The ad\'s creative assets. Each entry is an uploaded file id with an optional format; omit format for the original asset. Two or more entries with no format become a carousel (2-10 attachments), in order, sharing the ad\'s copy. |\n| `--descriptions` | `array` | no | | The description variants shown on the ad. |\n| `--headlines` | `array` | no | | The headline variants shown on the ad. |\n| `--lead_form` | `object` | no | | Instant lead form for the ad. Only allowed when the ad group\'s conversion_location is an instant-form destination (instant_forms, instant_forms_and_messenger, website_and_instant_forms). Mutually exclusive with lead_form_id. |\n| `--lead_form_id` | `string` | no | | Use an existing instant form instead of creating one \u2014 the form\'s platform ID, from a form already on the ad\'s Facebook page. Only allowed when the ad group\'s conversion_location is an instant-form destination. Mutually exclusive with lead_form. |\n| `--messaging_config` | `object` | no | | Click-to-message welcome copy: the greeting (message) and the ice-breaker prompt (keyword). |\n| `--multi_advertiser_ads` | `boolean` | no | | Whether the ad can appear alongside other advertisers\' ads in the same unit. Defaults to true. |\n| `--post_id` | `string` | no | | Promote an existing post instead of uploading creatives \u2014 a Facebook post or Instagram media id. Mutually exclusive with creatives. Pair with post_source. |\n| `--post_source` | `string` | no | | Identifies the network that owns `post_id`. The source is inferred from the ID shape when omitted. |\n| `--primary_texts` | `array` | no | | The primary text variants shown in the ad body. |\n| `--social_accounts` | `array` | no | | The social accounts the ad runs under \u2014 a connected Facebook page and, optionally, an Instagram profile. |\n| `--title` | `string` | no | | The display name of the ad. |\n| `--url` | `string` | no | | The URL the ad links to. |\n| `--url_parameters` | `object` | no | | Query parameters appended to the destination URL, keyed by parameter name. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ads delete\n\nDelete an Ad\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad ID. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ads duplicate\n\nDuplicate an Ad\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--count` | `number` | no | | Number of copies to create (1-10). Defaults to 1. |\n| `--preserve_engagement` | `boolean` | no | | Whether the copies keep the original post\'s engagement (likes, comments, shares). Defaults to false. |\n| `--target_ad_group_id` | `string` | no | | Ad group to duplicate into. Defaults to the ad\'s own ad group. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ads get\n\nRetrieve an Ad\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--stats_from` | `string` | no | | Start of the stats window. |\n| `--stats_to` | `string` | no | | End of the stats window. |\n| `--time_zone` | `string` | no | | IANA timezone the stats window is interpreted in. Defaults to UTC. |\n| `--attribution_model` | `string` | no | | Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise. |\n\n---\n\n# whop ads list\n\nList Ads\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account the ads belong to. Defaults to the account-scoped key\'s own account. |\n| `--ad_campaign_id` | `string` | no | | Only return ads in this ad campaign. |\n| `--ad_campaign_ids` | `array` | no | | 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` | no | | Only return ads in this ad group. |\n| `--ad_group_ids` | `array` | no | | Only return ads in these ad groups (max 100). Repeat the parameter for each id (ad_group_ids=a&ad_group_ids=b). |\n| `--status` | `string` | no | | Only return ads with this status. |\n| `--query` | `string` | no | | Filter ads by a title or ID substring. |\n| `--order` | `string` | no | | The field to sort by. Defaults to created_at. Stat columns (spend, impressions, \u2026) rank over the stats_from/stats_to window across the whole list, not just the current page. results, cost_per_result and return_on_ad_spend rank by the same Whop pixel-attributed values the response reports. |\n| `--direction` | `string` | no | | The sort direction. Defaults to desc. |\n| `--created_before` | `string` | no | | Only return ads created before this timestamp. |\n| `--created_after` | `string` | no | | Only return ads created after this timestamp. |\n| `--stats_from` | `string` | no | | Start of the stats window. Defaults to all-time. |\n| `--stats_to` | `string` | no | | End of the stats window. Defaults to now. |\n| `--time_zone` | `string` | no | | IANA timezone (e.g. America/New_York) the stats window is interpreted in. Bare stats_from/stats_to dates resolve to day boundaries on this clock. Defaults to UTC. |\n| `--attribution_model` | `string` | no | | Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise. |\n| `--first` | `number` | no | `20` | The number of ads to return. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | The number of ads to return from the end of the range. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop ads pause\n\nPause an Ad\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ads unpause\n\nUnpause an Ad\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ads update\n\nUpdate an Ad\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--call_to_action` | `string` | no | | The call-to-action button shown on the ad. |\n| `--creatives` | `array` | no | | The ad\'s creative assets. Each entry is an uploaded file id with an optional format; omit format for the original asset. Replaces a live ad\'s creative on the platform. Two or more entries with no format replace it with a carousel (2-10 attachments), in order, sharing the ad\'s copy. |\n| `--descriptions` | `array` | no | | The description variants shown on the ad. |\n| `--headlines` | `array` | no | | The headline variants shown on the ad. |\n| `--lead_form` | `object` | no | | Instant lead form for the ad. Only allowed when the ad group\'s conversion_location is an instant-form destination (instant_forms, instant_forms_and_messenger, website_and_instant_forms). Mutually exclusive with lead_form_id. |\n| `--lead_form_id` | `string` | no | | Use an existing instant form instead of creating one \u2014 the form\'s platform ID, from a form already on the ad\'s Facebook page. Only allowed when the ad group\'s conversion_location is an instant-form destination. Mutually exclusive with lead_form. Replaces a stored lead_form. |\n| `--messaging_config` | `object` | no | | Click-to-message welcome copy: the greeting (message) and the ice-breaker prompt (keyword). |\n| `--multi_advertiser_ads` | `boolean` | no | | Whether the ad can appear alongside other advertisers\' ads in the same unit. Defaults to true. |\n| `--post_id` | `string` | no | | Promote an existing post instead of uploading creatives \u2014 a Facebook post or Instagram media id. Mutually exclusive with creatives. Pair with post_source. |\n| `--post_source` | `string` | no | | Identifies the network that owns `post_id`. The source is inferred from the ID shape when omitted. |\n| `--primary_texts` | `array` | no | | The primary text variants shown in the ad body. |\n| `--social_accounts` | `array` | no | | The social accounts the ad runs under \u2014 a connected Facebook page and, optionally, an Instagram profile. |\n| `--title` | `string` | no | | The display name of the ad. |\n| `--url` | `string` | no | | The URL the ad links to. |\n| `--url_parameters` | `object` | no | | Query parameters appended to the destination URL, keyed by parameter name. |\n\n> Confirm with the user before executing this destructive command.\n\n## Launch playbook \u2014 from nothing to a live ad\n\nThree commands take you from nothing to a launchable ad: generate a creative, create the campaign + ad group + ad in one request, then flip the campaign to active. Structured flags (`--ad_group`, `--creatives`, `--ads_payment_methods`) take JSON strings.\n\n### One-time setup\n\n1. **Auth** \u2014 `whop login` (OAuth). First-time billing setup requires a user login; an API key can only reorder already-configured payment methods. If a command fails with a scope error saying your login predates the scope, run `whop login` again.\n2. **Facebook page** \u2014 `whop social-accounts list` must show a `"platform": "facebook"` entry. Three ways to get one:\n - **Already connected** \u2014 use its `sacc_` id as-is.\n - **Link a Meta Business account** \u2014 `whop social-accounts connect --platform meta_business --scopes \'["advertise"]\' --redirect_url <url>`, then send the user to the returned `authorize_url`.\n - **No page at all** \u2014 have Whop create one for the account: `whop social-accounts create --platform facebook`.\n3. **Ads payment method** \u2014 check with `whop accounts preferences --account_id <account_id>` (your `biz_` ID, from `whop accounts me`). If `ads_payment_methods` is null, configure balance billing:\n\n ```sh\n whop accounts update-preferences --account_id <account_id> --ads_payment_methods \'{"primary": {"type": "platform_balance"}}\'\n ```\n\n Only launching needs this \u2014 drafts work without. Fund the balance with `whop deposits create --amount 50` (returns a hosted deposit page URL).\n\n### 1. Generate a creative\n\n```sh\nwhop media generate --type image --prompt "A running club jogging across a bridge at sunrise, warm light" --wait\n```\n\n`--wait` blocks until the asset is terminal and returns `file.id` \u2014 use that as the creative. Billed from the balance (`amount_charged`); a failed generation auto-refunds, so adjust the prompt and retry. Video: `--type video` plus optional `--duration_seconds` (5/10/15), `--resolution` (480p\u20134k), and up to 4 `--reference_media` file IDs (first one seeds the opening frame).\n\n### 2. Create the whole tree as a draft \u2014 one request\n\n```sh\nwhop ads create \\\n --title "Run club launch ad" \\\n --primary_texts "Join 10,000 runners chasing their next PR together." \\\n --headlines "Find your stride" \\\n --call_to_action sign_up \\\n --url "https://whop.com/your-store-page" \\\n --creatives \'[{"id": "file_XXXXXXXX"}]\' \\\n --social_accounts \'[{"id": "sacc_XXXXXXXX"}]\' \\\n --ad_group \'{\n "title": "US broad",\n "conversion_location": "website",\n "regions": {"include": {"countries": ["US"]}},\n "ad_campaign": {"title": "Run club growth", "platform": "meta", "objective": "sales", "status": "draft", "budget_amount": 25, "budget_optimization": "ad_campaign"}\n }\'\n```\n\nField rules:\n\n| Field | Rule |\n|-------|------|\n| `creatives` | One entry with no `format` is required (the base asset). `square`/`vertical`/`horizontal` are optional crops on top. |\n| `url` | Required for website ads. A whop.com store page works as-is; an external page needs the Whop pixel installed. |\n| Budget | Default to CBO: `budget_amount` on the campaign with `budget_optimization: "ad_campaign"` (the network shifts spend to the best ad group). Per-ad-group `budget_amount` (ABO) is the manual alternative. One level owns it \u2014 never both. |\n| Targeting | Omit `demographics`/`placements`/`devices` for automatic optimization. `regions` uses ISO 3166 (`"US"`, `"US-CA"`). |\n| `lead_form` | Only with an instant-form `conversion_location`. |\n\nReuse existing containers by passing `--ad_group_id adgrp_x` instead of `--ad_group`, or `"ad_campaign_id": "adcamp_x"` inside `--ad_group` instead of the inline `ad_campaign`.\n\n### 3. Launch\n\n`"status": "draft"` above kept money out of it. Review, then launch \u2014 this is when spend starts and the payment method is enforced:\n\n```sh\nwhop ad-campaigns update adcamp_XXXXXXXX --status active\n```\n\n(Ready to spend immediately? Omit `"status": "draft"` and the one-shot create launches directly.)\n\n### 4. Monitor\n\n```sh\nwhop ads get ad_XXXXXXXX\n```\n\n`delivery_status` is the live state (a brief `in_review` for moderation is normal); `issues[]` carries a human-readable `message` for anything the network rejected asynchronously. Control delivery with `pause`/`unpause` on ads, ad groups, or campaigns. Edit copy or creatives with `whop ads update` \u2014 sending `creatives` replaces the whole set, so include the base entry.\n',
101105
- "whop-ad-campaigns": "---\nname: whop-ad-campaigns\ndescription: Platform, objective, and budget for a set of ads. Run `whop ad-campaigns --help` for usage details.\nrequires_bin: whop\ncommand: whop ad-campaigns\n---\n\nAn Ad Campaign is the top-level container for paid ads on an ad network. It sets the platform, objective, and budget strategy shared by its [ad groups](https://docs.whop.com/api-reference/beta/ad-groups/ad-group) and ads.\n\nUse the Ad Campaigns API to create campaigns, list campaigns for an account, retrieve or update campaign settings, and pause or resume campaign delivery.\n\n# whop ad-campaigns create\n\nCreate an Ad Campaign\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to create the campaign under. Defaults to the account-scoped key's own account. |\n| `--bid_type` | `string` | no | | How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, `maximum_target` never bids above a cap. Only for campaigns that own the budget. |\n| `--budget_amount` | `number` | no | | The campaign's budget, in the ad account's currency. Required when budget_optimization is `ad_campaign`; omit when each ad group sets its own budget. |\n| `--budget_optimization` | `string` | no | | Which level owns the budget: the whole campaign (`ad_campaign`) or each ad group individually (`ad_group`). Defaults to `ad_group`. |\n| `--budget_type` | `string` | no | | Whether the budget is spent per day (`daily`) or over the campaign's full run (`lifetime`). Defaults to `daily`. |\n| `--desired_cost_per_result` | `number` | no | | Cost per result to aim for (`average_target`) or never exceed (`maximum_target`). Only for campaigns that own the budget. |\n| `--ends_at` | `string` | no | | When the campaign stops delivering, as an ISO 8601 timestamp. Only for campaigns that own the budget. |\n| `--objective` | `string` | yes | | The goal the campaign optimizes toward. |\n| `--platform` | `string` | yes | | The ad network the campaign runs on. |\n| `--special_ad_categories` | `array` | no | | Regulated categories the campaign falls under. Ads in these categories are subject to extra targeting restrictions. |\n| `--starts_at` | `string` | no | | When the campaign starts delivering, as an ISO 8601 timestamp. Only for campaigns that own the budget. |\n| `--title` | `string` | yes | | The title of the campaign. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-campaigns delete\n\nDelete an Ad Campaign\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-campaigns duplicate\n\nDuplicate an Ad Campaign\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--count` | `number` | no | | Number of copies to create (1-10). Defaults to 1. |\n| `--preserve_engagement` | `boolean` | no | | Whether the copied ads keep the original posts' engagement (likes, comments, shares). Defaults to false. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-campaigns get\n\nRetrieve an Ad Campaign\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--stats_from` | `string` | no | | Start of the stats window. |\n| `--stats_to` | `string` | no | | End of the stats window. |\n| `--time_zone` | `string` | no | | IANA timezone the stats window is interpreted in. Defaults to UTC. |\n| `--attribution_model` | `string` | no | | Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise. |\n\n---\n\n# whop ad-campaigns list\n\nList Ad Campaigns\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account the campaigns belong to. Defaults to the account-scoped key's own account. |\n| `--status` | `string` | no | | Only return campaigns with this status. |\n| `--query` | `string` | no | | Filter campaigns by a title or ID substring. |\n| `--order` | `string` | no | | The field to sort by. Defaults to created_at. Stat columns (spend, impressions, \u2026) rank over the stats_from/stats_to window across the whole list, not just the current page. results, cost_per_result and return_on_ad_spend rank by the same Whop pixel-attributed values the response reports. |\n| `--direction` | `string` | no | | The sort direction. Defaults to desc. |\n| `--created_before` | `string` | no | | Only return campaigns created before this timestamp. |\n| `--created_after` | `string` | no | | Only return campaigns created after this timestamp. |\n| `--stats_from` | `string` | no | | Start of the stats window. Defaults to all-time. |\n| `--stats_to` | `string` | no | | End of the stats window. Defaults to now. |\n| `--time_zone` | `string` | no | | IANA timezone (e.g. America/New_York) the stats window is interpreted in. Bare stats_from/stats_to dates resolve to day boundaries on this clock. Defaults to UTC. |\n| `--attribution_model` | `string` | no | | Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise. |\n| `--first` | `number` | no | `20` | The number of campaigns to return. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | The number of campaigns to return from the end of the range. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop ad-campaigns pause\n\nPause an Ad Campaign\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-campaigns retry_payment\n\nRetry a Failed Ad Campaign Payment\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-campaigns unpause\n\nUnpause an Ad Campaign\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-campaigns update\n\nUpdate an Ad Campaign\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad campaign ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--bid_type` | `string` | no | | How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, `maximum_target` never bids above a cap. Switching to `minimum_cost` clears the cap amounts stored on the campaign's ad groups. Only for campaigns that own the budget. |\n| `--budget_amount` | `number` | no | | The campaign budget, in the account's currency. Interpreted as daily or lifetime per the campaign's existing budget type. |\n| `--budget_optimization` | `string` | no | | Which level owns the budget: the whole campaign (`ad_campaign`) or each ad group individually (`ad_group`). Only changeable before the campaign is live on the ad network; switching to `ad_campaign` requires budget_amount in the same request, and switching to `ad_group` clears the campaign budget. |\n| `--ends_at` | `string` | no | | When the campaign stops delivering, as an ISO 8601 timestamp. Only for campaigns that own the budget. |\n| `--special_ad_categories` | `array` | no | | Regulated categories the campaign falls under. Editable on any campaign, draft or launched; pass an empty array to clear. |\n| `--starts_at` | `string` | no | | When the campaign starts delivering, as an ISO 8601 timestamp. Only for campaigns that own the budget. |\n| `--status` | `string` | no | | Set to active to launch a draft campaign (moderates and pushes it live). Live-campaign pause and resume use the pause and unpause actions. |\n| `--title` | `string` | no | | The name of the campaign. |\n\n> Confirm with the user before executing this destructive command.\n",
101106
- "whop-ad-groups": "---\nname: whop-ad-groups\ndescription: Audience, placements, and schedule within a campaign. Run `whop ad-groups --help` for usage details.\nrequires_bin: whop\ncommand: whop ad-groups\n---\n\nAn Ad Group sits inside an [ad campaign](https://docs.whop.com/api-reference/beta/ad-campaigns/ad-campaign) and controls delivery for [ads](https://docs.whop.com/api-reference/beta/ads/ad). It sets the audience, placements, schedule, budget, and optimization goal for its ads.\n\nUse the Ad Groups API to create ad groups in campaigns, list or retrieve targeting and delivery settings, update budgets or targeting, delete groups that should stop running, and pause or resume delivery. It can also search the ad platform's targeting taxonomy for options to target and estimate how many people a draft targeting spec can reach.\n\n# whop ad-groups create\n\nCreate an Ad Group\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--ad_campaign_id` | `string` | yes | | The ad campaign to create the ad group in, prefixed `adcamp_`. |\n| `--audiences` | `object` | no | | Saved audiences to deliver to or exclude. Can't be combined with demographics.automatic. |\n| `--bid_type` | `string` | no | | How delivery bids are set in the ad auction. Target-based strategies use `desired_cost_per_result`. |\n| `--budget_amount` | `number` | no | | This ad group's budget, in the ad account's currency. Omit when the budget is set on the campaign instead. |\n| `--budget_type` | `string` | no | | Whether budget_amount is spent per day (`daily`) or over the ad group's full run (`lifetime`). |\n| `--conversion_event` | `unknown` | no | | The pixel event optimized for. A standard event, or any custom pixel event name. |\n| `--conversion_location` | `string` | no | | Where the outcome being optimized for occurs, such as a website visit, social-profile visit, messaging conversation, ad interaction, or lead-form submission. The lead form itself is set on the ad. |\n| `--demographics` | `object` | no | | Age, gender, and automatic-audience targeting. |\n| `--desired_cost_per_result` | `number` | no | | Cost per result to aim for (`average_target`) or never exceed (`maximum_target`). |\n| `--detailed_targeting` | `object` | no | | Interest, behavior, and demographic targeting, using categories from the ad platform's targeting taxonomy. Entries across interests, behaviors, and demographics are OR'd together (anyone matching any entry is reached), matching Ads Manager's detailed-targeting box. At most 100 entries per section. Can't be combined with demographics.automatic, and unavailable to campaigns with special_ad_categories. |\n| `--devices` | `object` | no | | Device platforms and operating systems to target. |\n| `--dynamic_creative` | `boolean` | no | | Let the ad platform automatically mix and match this ad group's creatives and copy to find the best-performing combinations. Set at creation; can't be changed afterward. |\n| `--ends_at` | `string` | no | | When the ad group stops delivering, as an ISO 8601 timestamp. Omit to run until paused. |\n| `--frequency_cap` | `object` | no | | Cap on how often one person sees ads from this ad group. Only available on campaigns with the `awareness` objective. |\n| `--languages` | `array` | no | | Languages to target, as ISO 639 codes such as `en` or `es`. Empty or omitted targets all languages. |\n| `--message_apps` | `array` | no | | Apps the conversation opens in. Required when setting `conversion_location` to `messaging`, and rejected unless the ad group's conversion location is `messaging`. |\n| `--minimum_daily_spend` | `number` | no | | Minimum the ad group tries to spend each day. |\n| `--optimization_goal` | `string` | no | | The result the ad group's delivery is optimized to get the most of. |\n| `--placements` | `unknown` | no | | `automatic` to let the ad platform choose placements, or the list of platforms and positions to target. Omit a platform's positions to target all of them.\n\nValid positions per platform:\n\n- `facebook`: `feed`, `right_hand_column`, `marketplace`, `search`, `profile_feed`, `notification`, `story`, `instream_video`, `facebook_reels`, `facebook_reels_overlay`, `biz_disco_feed`\n- `instagram`: `stream`, `story`, `explore`, `explore_home`, `reels`, `profile_feed`, `profile_reels`, `ig_search`\n- `messenger`: `story`\n- `audience_network`: `classic`, `rewarded_video`\n- `threads`: `threads_stream`\n- `whatsapp`: `status` |\n| `--regions` | `object` | no | | Locations to target and exclude. |\n| `--starts_at` | `string` | no | | When the ad group starts delivering, as an ISO 8601 timestamp. Omit to start as soon as it's active. |\n| `--status` | `string` | no | | Initial status (default: `active`). |\n| `--title` | `string` | no | | The display name of the ad group. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-groups delete\n\nDelete an Ad Group\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad group ID. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-groups duplicate\n\nDuplicate an Ad Group\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad group ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--count` | `number` | no | | Number of copies to create (1-10). Defaults to 1. |\n| `--preserve_engagement` | `boolean` | no | | Whether the copied ads keep the original posts' engagement (likes, comments, shares). Defaults to false. |\n| `--target_ad_campaign_id` | `string` | no | | Campaign to duplicate into. Defaults to the ad group's own campaign. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-groups estimate_reach\n\nEstimate Ad Group Reach\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account to estimate on behalf of. Defaults to the authenticated account. |\n| `--audiences` | `object` | no | | Saved audiences to deliver to or exclude. Can't be combined with demographics.automatic. |\n| `--demographics` | `object` | no | | Age, gender, and automatic-audience targeting. |\n| `--detailed_targeting` | `object` | no | | Interest, behavior, and demographic targeting, using categories from the ad platform's targeting taxonomy. Entries across interests, behaviors, and demographics are OR'd together (anyone matching any entry is reached), matching Ads Manager's detailed-targeting box. At most 100 entries per section. Can't be combined with demographics.automatic, and unavailable to campaigns with special_ad_categories. |\n| `--devices` | `object` | no | | Device platforms and operating systems to target. |\n| `--languages` | `array` | no | | Languages to target, as ISO 639 codes such as `en` or `es`. Empty or omitted targets all languages. |\n| `--platform` | `string` | yes | | The ad network the estimate runs on. |\n| `--regions` | `object` | no | | Locations to target and exclude. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-groups get\n\nRetrieve an Ad Group\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad group ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--stats_from` | `string` | no | | Start of the stats window. |\n| `--stats_to` | `string` | no | | End of the stats window. |\n| `--time_zone` | `string` | no | | IANA timezone the stats window is interpreted in. Defaults to UTC. |\n| `--attribution_model` | `string` | no | | Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise. |\n\n---\n\n# whop ad-groups list\n\nList Ad Groups\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account whose ad groups to list. Defaults to the authenticated account. |\n| `--ad_campaign_id` | `string` | no | | Filter to ad groups in this campaign. |\n| `--ad_campaign_ids` | `array` | no | | Filter to ad groups in these campaigns (max 100). Repeat the parameter for each id (ad_campaign_ids=a&ad_campaign_ids=b). |\n| `--status` | `string` | no | | Filter to ad groups with this status. |\n| `--query` | `string` | no | | Filter ad groups by a title or ID substring. |\n| `--order` | `string` | no | | The field to sort by. Defaults to created_at. Stat columns (spend, impressions, \u2026) rank over the stats_from/stats_to window across the whole list, not just the current page. results, cost_per_result and return_on_ad_spend rank by the same Whop pixel-attributed values the response reports. |\n| `--direction` | `string` | no | | The sort direction. Defaults to desc. |\n| `--created_before` | `string` | no | | Only return ad groups created before this timestamp. |\n| `--created_after` | `string` | no | | Only return ad groups created after this timestamp. |\n| `--stats_from` | `string` | no | | Start of the stats window. Defaults to all-time. |\n| `--stats_to` | `string` | no | | End of the stats window. Defaults to now. |\n| `--time_zone` | `string` | no | | IANA timezone (e.g. America/New_York) the stats window is interpreted in. Bare stats_from/stats_to dates resolve to day boundaries on this clock. Defaults to UTC. |\n| `--attribution_model` | `string` | no | | Attribution model the conversion stats count under (defaults to last_touch). Under both models a journey with any whop ad touch attributes to whop; the model picks which whop touch credits the entity and which non-whop source wins otherwise. |\n| `--first` | `number` | no | `20` | The number of ad groups to return. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | The number of ad groups to return from the end of the range. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n\n---\n\n# whop ad-groups pause\n\nPause an Ad Group\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad group ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-groups targeting_options\n\nSearch Targeting Options\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account to search on behalf of. Defaults to the authenticated account. |\n| `--platform` | `string` | yes | | The ad network whose targeting taxonomy to search. |\n| `--query` | `string` | no | | The search term. Blank browses the fixed lists; interests, work employers, job titles, schools, majors, and locations return nothing without one. |\n| `--types` | `array` | no | | Kinds of targeting options to search. Defaults to all of them. |\n| `--location_types` | `array` | no | | Narrow location results to these kinds of places. Only applies when `types` includes `locations`. |\n| `--country` | `string` | no | | Narrow location results to one country, as an ISO 3166-1 code such as `US`. Only applies when `types` includes `locations`. |\n| `--limit` | `number` | no | `25` | Maximum number of results per requested type. |\n\n---\n\n# whop ad-groups unpause\n\nUnpause an Ad Group\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad group ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop ad-groups update\n\nUpdate an Ad Group\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ad group ID. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--audiences` | `object` | no | | Saved audiences to deliver to or exclude. Can't be combined with demographics.automatic. |\n| `--bid_type` | `string` | no | | How delivery bids are set in the ad auction. Target-based strategies use `desired_cost_per_result`. |\n| `--budget_amount` | `number` | no | | This ad group's budget, in the ad account's currency. Omit when the budget is set on the campaign instead. |\n| `--budget_type` | `string` | no | | Whether budget_amount is spent per day (`daily`) or over the ad group's full run (`lifetime`). |\n| `--conversion_event` | `unknown` | no | | The pixel event optimized for. A standard event, or any custom pixel event name. |\n| `--conversion_location` | `string` | no | | Where the outcome being optimized for occurs, such as a website visit, social-profile visit, messaging conversation, ad interaction, or lead-form submission. The lead form itself is set on the ad. |\n| `--demographics` | `object` | no | | Age, gender, and automatic-audience targeting. |\n| `--desired_cost_per_result` | `number` | no | | Cost per result to aim for (`average_target`) or never exceed (`maximum_target`). |\n| `--detailed_targeting` | `object` | no | | Interest, behavior, and demographic targeting, using categories from the ad platform's targeting taxonomy. Entries across interests, behaviors, and demographics are OR'd together (anyone matching any entry is reached), matching Ads Manager's detailed-targeting box. At most 100 entries per section. Can't be combined with demographics.automatic, and unavailable to campaigns with special_ad_categories. |\n| `--devices` | `object` | no | | Device platforms and operating systems to target. |\n| `--ends_at` | `string` | no | | When the ad group stops delivering, as an ISO 8601 timestamp. Omit to run until paused. |\n| `--frequency_cap` | `object` | no | | Cap on how often one person sees ads from this ad group. Only available on campaigns with the `awareness` objective. |\n| `--languages` | `array` | no | | Languages to target, as ISO 639 codes such as `en` or `es`. Empty or omitted targets all languages. |\n| `--message_apps` | `array` | no | | Apps the conversation opens in. Required when setting `conversion_location` to `messaging`, and rejected unless the ad group's conversion location is `messaging`. |\n| `--minimum_daily_spend` | `number` | no | | Minimum the ad group tries to spend each day. |\n| `--optimization_goal` | `string` | no | | The result the ad group's delivery is optimized to get the most of. |\n| `--placements` | `unknown` | no | | `automatic` to let the ad platform choose placements, or the list of platforms and positions to target. Omit a platform's positions to target all of them.\n\nValid positions per platform:\n\n- `facebook`: `feed`, `right_hand_column`, `marketplace`, `search`, `profile_feed`, `notification`, `story`, `instream_video`, `facebook_reels`, `facebook_reels_overlay`, `biz_disco_feed`\n- `instagram`: `stream`, `story`, `explore`, `explore_home`, `reels`, `profile_feed`, `profile_reels`, `ig_search`\n- `messenger`: `story`\n- `audience_network`: `classic`, `rewarded_video`\n- `threads`: `threads_stream`\n- `whatsapp`: `status` |\n| `--regions` | `object` | no | | Locations to target and exclude. |\n| `--starts_at` | `string` | no | | When the ad group starts delivering, as an ISO 8601 timestamp. Omit to start as soon as it's active. |\n| `--status` | `string` | no | | Initial status (default: `active`). |\n| `--title` | `string` | no | | The display name of the ad group. |\n\n> Confirm with the user before executing this destructive command.\n",
101107
- "whop-audiences": '---\nname: whop-audiences\ndescription: Reusable targeting lists for ad groups. Run `whop audiences --help` for usage details.\nrequires_bin: whop\ncommand: whop audiences\n---\n\nAn Audience represents a customer list uploaded to Whop for ad targeting. Audiences belong to an account and sync to supported ad platforms as custom audiences.\n\nUse the Audiences API to create audiences from CSV uploads, monitor processing status, and list or delete audiences for an account. Created audiences are usable for targeting after processing reaches `ready` or `partial`.\n\n# whop audiences add_people\n\nAdd People\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Audience ID, prefixed `adaud_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--file_id` | `string` | yes | | The new customer CSV \u2014 a file id (`file_...`) returned by `POST /files`. Its headers must match the audience\'s saved column mapping. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop audiences create\n\nCreate Audience\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | yes | | Account ID, prefixed `biz_`. |\n| `--audience_type` | `string` | no | | What to create. Defaults to `custom` (CSV upload). |\n| `--auto_refresh` | `boolean` | no | | Filter audiences only, and set only at creation. `true` (the default) rebuilds membership from the filters twice a day. `false` keeps whoever matched at creation and never rebuilds. |\n| `--column_mapping` | `object` | no | | Custom audiences only. Maps supported identity fields to CSV column headers. Map at least one of `email` or `phone`. |\n| `--count` | `number` | no | | Lookalikes only. Number of lookalike audiences to create (1\u20136). |\n| `--file_id` | `string` | no | | Custom audiences only. The uploaded customer CSV \u2014 a file id (`file_...`) returned by `POST /files`. |\n| `--filters` | `object` | no | | Filter audiences only. The People filters that define membership, keyed exactly as `GET /people` accepts them \u2014 for example `{"os": "iOS", "country": "US"}`. Date filters must be rolling windows \u2014 `first_seen_within_days` or `last_seen_within_days` \u2014 so the audience re-anchors on every refresh; fixed dates such as `first_seen_after` are rejected. Source values are canonical source paths (`whop:<campaign>:<group>:<ad>`, `ext:<platform>:...`, `referrer:<domain>`, `direct`), exact or with a trailing `:*` wildcard. |\n| `--name` | `string` | no | | Audience display name. Required for custom audiences; lookalike names are generated from the source audience. |\n| `--percentage` | `number` | no | | Lookalikes only. Total similarity reach as a whole percent (1\u201320), sliced evenly across `count` \u2014 must be divisible by `count`. |\n| `--source_audience_id` | `string` | no | | Lookalikes only. The ready custom audience (`adaud_`) to build from; it needs at least 100 matched people. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop audiences delete\n\nDelete Audience\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Audience ID, prefixed `adaud_`. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop audiences list\n\nList Audiences\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. |\n| `--audience_id` | `string` | no | | Audience ID, prefixed `adaud_`, used to filter the response to one audience. |\n| `--audience_type` | `string` | no | | Filter by audience type: `custom` (uploaded lists) or `lookalike`. |\n| `--source_type` | `string` | no | | Filter by member source: `csv_upload` (uploaded lists) or `people_filter` (automatic audiences built from saved People filters). |\n| `--first` | `number` | no | | Number of audiences to return. Defaults to 20; maximum 100. |\n| `--after` | `string` | no | | Cursor for the next page of audiences. |\n\n---\n\n# whop audiences update\n\nUpdate Audience\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Audience ID, prefixed `adaud_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--filters` | `object` | no | | Replaces the People filters that define membership. The whole definition is replaced rather than merged, so send every filter you want to keep \u2014 a filter you leave out stops applying. Keys and values are the ones `GET /people` accepts, such as an `os` of `iOS` or a `country` of `US`, and at least one filter is required. Date filters must be rolling windows \u2014 `first_seen_within_days` or `last_seen_within_days` \u2014 so the audience re-anchors every time it rebuilds; fixed dates such as `first_seen_after` are rejected, as is `audience_id`. An array value holds at most 500 items, and each value at most 10 KB. Only an audience with a `source_type` of `people_filter` and `auto_refresh` of `true` accepts filters: an uploaded list has no filters to replace, and with auto refresh off the audience keeps the people it matched when it was built, so create a new audience instead. |\n| `--name` | `string` | no | | New audience display name. A blank value is ignored rather than clearing the name. |\n\n> Confirm with the user before executing this destructive command.\n',
101108
- "whop-media": "---\nname: whop-media\ndescription: AI-generated assets, billed from a balance, attachable wherever files are accepted. Run `whop media --help` for usage details.\nrequires_bin: whop\ncommand: whop media\n---\n\nA Media Asset is an AI-generated image or video created from a prompt and billed from an account balance. When generation finishes, the asset includes a file that can be attached anywhere Whop accepts files.\n\nUse the Media API to start a generation job and retrieve the asset while it processes or after it is ready.\n\n# whop media generate\n\nGenerate Media Asset\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Account ID, prefixed `biz_`. Defaults to the account the API key belongs to. |\n| `--duration_seconds` | `unknown` | no | | Video length in seconds. Video only; defaults to 5. |\n| `--prompt` | `string` | yes | | What to generate. Up to 2,000 characters. |\n| `--reference_media` | `array` | no | | Optional reference image file IDs (`file_` prefixed), up to 4. For video, a single reference seeds the opening frame; multiple references guide subject and style instead. |\n| `--resolution` | `string` | no | | Video resolution. Video only; defaults to `1080p`. `1080p` is not supported by Seedance 2.0 Fast or Mini; `4k` is only supported by Seedance 2.0. |\n| `--type` | `string` | yes | | The kind of media to generate. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop media get\n\nRetrieve Media Asset\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | Media asset ID, prefixed `media_`. |\n\n## Steps that finish in the browser\n\nSome commands respond with a URL the user must open in a browser to finish the flow (`authorize_url`, `session_url`, `deposit_url`, `checkout_url`) \u2014 the CLI cannot complete that step itself. When a response contains one of these fields, or the CLI prints \"Action required: open this link in the user's browser\", open that link in the user's browser for them, tell them what to complete there, then re-run the matching `get`/`list` command to confirm the step finished.\n",
101109
- "whop-social-accounts": "---\nname: whop-social-accounts\ndescription: Connected Facebook and Instagram accounts that run ads. Run `whop social-accounts --help` for usage details.\nrequires_bin: whop\ncommand: whop social-accounts\n---\n\nA Social Account represents an external profile connected to a Whop account or user, such as a Facebook page or Instagram account. Connecting a social account lets Whop run [ads](https://docs.whop.com/api-reference/beta/ads/ad) under that profile's identity and promote its existing posts.\n\nUse the Social Accounts API to list connected accounts, create a Whop-managed Facebook page, start an OAuth connection, disconnect a social account, and list a connected profile's posts or a Facebook page's lead forms.\n\n# whop social-accounts connect\n\nConnect a Social Account\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The Account (biz_ identifier) to connect the social account for. An account-scoped API key may omit this to default to its own account. |\n| `--platform` | `string` | yes | | The platform to connect the social account on. Supported options are `meta_business` and `tiktok`. |\n| `--redirect_url` | `string` | no | | The Whop URL to redirect the user to after they finish connecting. |\n| `--scopes` | `array` | no | | Capabilities to grant for the connected social account. Use `advertise` when connecting a Meta Business or TikTok account for ads. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop social-accounts create\n\nCreate a Social Account\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The Account (biz_ identifier) to create the social account for. An account-scoped API key may omit this to default to its own account. Account API keys cannot update their own account's branding through Update Account; use a user-authenticated path. |\n| `--platform` | `string` | yes | | The platform to create the social account on. `facebook` requires the account's `banner_image`, `logo`, and `description`; configure them with [Update Account](/api-reference/beta/accounts/update-account). |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop social-accounts delete\n\nDelete a Social Account\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ID of the social account to disconnect. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The Account that the social account is connected to. Provide either this or user_id. |\n| `--user_id` | `string` | no | | The User that the social account is connected to. Provide either this or account_id. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop social-accounts lead_forms\n\nList Social Account Lead Forms\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The social account (a sacc_ identifier) whose lead forms to list. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The Account (a biz_ identifier) the social account is connected to. |\n\n---\n\n# whop social-accounts list\n\nList Social Accounts\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The Account that the social accounts are connected to. Provide either this or user_id. |\n| `--user_id` | `string` | no | | The User that the social accounts are connected to. Provide either this or account_id. |\n| `--platform` | `string` | no | | Only return social accounts for the platform that is specified. |\n| `--verified` | `boolean` | no | | Only return social accounts that are verified on the platform. |\n| `--scopes` | `array` | no | | Only return social accounts that have these scopes. |\n| `--first` | `number` | no | `20` | The number of social accounts to return. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n| `--last` | `number` | no | | The number of social accounts to return from the end of the range. |\n| `--before` | `string` | no | | Cursor to fetch the page before (from page_info.start_cursor). |\n| `--order` | `string` | no | | The field to sort social accounts by. |\n| `--direction` | `string` | no | | Sort direction. |\n\n---\n\n# whop social-accounts posts\n\nList Social Account Posts\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The social account (a sacc_ identifier) whose posts to list. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The Account (a biz_ identifier) the social account is connected to. |\n| `--post_id` | `string` | no | | Return only the single post with this platform id, instead of the full list. |\n| `--first` | `number` | no | `20` | The number of posts to return. |\n| `--after` | `string` | no | | Cursor to fetch the page after (from page_info.end_cursor). |\n\n## Steps that finish in the browser\n\nSome commands respond with a URL the user must open in a browser to finish the flow (`authorize_url`, `session_url`, `deposit_url`, `checkout_url`) \u2014 the CLI cannot complete that step itself. When a response contains one of these fields, or the CLI prints \"Action required: open this link in the user's browser\", open that link in the user's browser for them, tell them what to complete there, then re-run the matching `get`/`list` command to confirm the step finished.\n",
101110
- "whop-apps": "---\nname: whop-apps\ndescription: \"Apps you build on Whop: metadata, hosted builds, runtime logs. Run `whop apps --help` for usage details.\"\nrequires_bin: whop\ncommand: whop apps\n---\n\nAn App is software you build on Whop. It can be a hosted web app served at `<route>.whop.app` or an API integration installed as an experience, and it belongs to the account that owns its credentials, settings, builds, and runtime logs.\n\nUse the Apps API to manage app configuration and, for hosted apps, read server runtime logs for console output, uncaught exceptions, and failed requests. Logs are retained for 7 days and can be filtered by build, level, time window, and message text.\n\n# whop apps create\n\nCreate App\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | The account to create the app for (`biz_` tag). Defaults to the account behind the presented credential. |\n| `--app_type` | `string` | no | | The type of app to create. Defaults to `b2c_app`. |\n| `--base_url` | `unknown` | no | | The base production URL where the app is hosted, such as `https://myapp.example.com`. |\n| `--icon` | `object` | no | | The icon image for the app in PNG, JPEG, or GIF format, referencing an uploaded file: `{ id }` for an existing attachment or `{ direct_upload_id }` for a new direct upload. |\n| `--name` | `string` | yes | | The display name for the app, shown to users on the app store and product pages. |\n| `--redirect_uris` | `array` | no | | The whitelisted OAuth callback URLs that users are redirected to after authorizing the app. |\n| `--route` | `unknown` | no | | The subdomain route where the app's hosted web builds are served, such as `myapp` for myapp.whop.app. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop apps delete\n\nDelete App\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | App ID (prefixed `app_`), the app's claimed route, or its proxy domain id. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop apps get\n\nRetrieve App\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | App ID (prefixed `app_`), the app's claimed route, or its proxy domain id. |\n\n---\n\n# whop apps list\n\nList Apps\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--account_id` | `string` | no | | Only return apps created by this account (`biz_` tag). With developer access to the account this includes its unlisted and hidden apps. |\n| `--app_type` | `string` | no | | 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. |\n| `--view_type` | `string` | no | | Only return apps supporting this view type, such as `dashboard` or `hub`. |\n| `--verified_apps_only` | `boolean` | no | | Whether to only return apps verified by Whop. Verified website templates \u2014 websites with a published web build \u2014 are included, even though websites are otherwise left out of app lists. |\n| `--query` | `string` | no | | A search string matched against app names. |\n| `--order` | `string` | no | | The field to sort apps by. Defaults to discoverable_at, showing the most recently published apps first. |\n| `--direction` | `string` | no | | Sort direction. |\n| `--first` | `number` | no | | The number of apps to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns apps after this position. |\n| `--last` | `number` | no | | The number of apps to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns apps before this position. |\n\n---\n\n# whop apps logs\n\nList App Logs\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | The ID of the app, which will look like app_*************. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--app_build_id` | `string` | no | | Only return logs from this build. |\n| `--level` | `string` | no | | Only return console lines of this level. |\n| `--query` | `string` | no | | Only return logs whose message contains this text (case-insensitive). |\n| `--created_after` | `string` | no | | Start of the time window as an ISO 8601 timestamp. Defaults to 7 days before created_before. |\n| `--created_before` | `string` | no | | End of the time window as an ISO 8601 timestamp. Defaults to now. |\n| `--first` | `number` | no | | The number of log lines to return (max 500). |\n| `--after` | `string` | no | | A cursor for fetching logs after a previous page. |\n| `--before` | `string` | no | | A cursor for fetching logs before a later page. |\n\n---\n\n# whop apps permissions\n\nUpdate App Permissions\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | App ID, prefixed `app_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--requested_permissions` | `array` | yes | | The full set of permissions the app requests on install; permissions not listed are removed. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop apps update\n\nUpdate App\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | App ID (prefixed `app_`), the app's claimed route, or its proxy domain id. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--app_store_description` | `string` | no | | The detailed description shown on the app store's in-depth app view page. |\n| `--app_type` | `string` | no | | The type of end-user the app is built for. Cannot be changed on an app whose type is already `website`. |\n| `--base_url` | `unknown` | no | | The base production URL where the app is hosted. Set to `null` to take the app proxy offline. |\n| `--dashboard_path` | `unknown` | no | | The URL path for the account dashboard view. |\n| `--description` | `string` | no | | A short description of the app shown in listings and search results. |\n| `--discover_path` | `unknown` | no | | The URL path for the discover view. |\n| `--experience_path` | `unknown` | no | | The URL path for the member-facing hub view, such as `/experiences/[experienceId]`. |\n| `--icon` | `object` | no | | The icon image for the app in PNG, JPEG, or GIF format, referencing an uploaded file: `{ id }` for an existing attachment or `{ direct_upload_id }` for a new direct upload. |\n| `--name` | `string` | no | | The display name for the app, shown to users on the app store and product pages. |\n| `--oauth_client_type` | `string` | no | | How the app authenticates at the OAuth token endpoint. |\n| `--openapi_path` | `unknown` | no | | The URL path to the app's OpenAPI spec file (requires the ai_chat capability). |\n| `--production_android_build_id` | `unknown` | no | | The app build (`abld_` tag) to serve as the Android production build, or `null` to unassign it. Same rules as `production_web_build_id`. |\n| `--production_ios_build_id` | `unknown` | no | | The app build (`abld_` tag) to serve as the iOS production build, or `null` to unassign it. Same rules as `production_web_build_id`. |\n| `--production_web_build_id` | `unknown` | no | | The app build (`abld_` tag) to serve as the web production build, or `null` to unassign it. The build must belong to this app, target web, and be in the draft or approved status; a draft build is queued for approval and takes over once approved. Requires the `developer:manage_builds` scope. |\n| `--redirect_uris` | `array` | no | | The whitelisted OAuth callback URLs users are redirected to after authorizing the app. |\n| `--required_scopes` | `array` | no | | The OAuth scopes the app requests from users when they install it. |\n| `--route` | `string` | no | | The subdomain route where the app's hosted web builds are served. |\n| `--secrets` | `object` | no | | Secrets to add or overwrite on the app, as an object of string values. Keys not included are left untouched; pass null or an empty string as the value to delete a secret. Encrypted at rest and injected into the app's hosted server runtime. |\n| `--skills_path` | `unknown` | no | | The URL path to the app's skills directory (requires the ai_chat capability). |\n| `--status` | `string` | no | | Controls whether the app is published on Whop discovery or accessible only through its direct link. Publishing requires a name, icon, and description. |\n\n> Confirm with the user before executing this destructive command.\n",
101111
- "whop-app-builds": "---\nname: whop-app-builds\ndescription: Versioned build artifacts deployed to an app's platforms. Run `whop app-builds --help` for usage details.\nrequires_bin: whop\ncommand: whop app-builds\n---\n\nAn App Build is a versioned artifact uploaded for an app \u2014 a hosted web archive, or an iOS/Android bundle. Builds start as drafts, go through review, and one approved build per platform is served to users as the production build.\n\nUse the App Builds API to upload a build for an app, list an app's builds with platform and status filters, retrieve a build, and promote a draft or approved build to production.\n\n# whop app-builds create\n\nCreate App Build\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--ai_prompt_id` | `string` | no | | The AI prompt that generated this build, if applicable. |\n| `--app_id` | `string` | no | | The app to create the build for, prefixed `app_`. Defaults to the app behind the presented credential. |\n| `--attachment` | `object` | yes | | The uploaded build file: `{ id }` for an existing file or `{ direct_upload_id }` for a completed direct upload. |\n| `--checksum` | `string` | yes | | A client-generated checksum of the build file, used to verify file integrity when unpacked. |\n| `--platform` | `string` | yes | | The target platform for the build. |\n| `--source_attachment` | `object` | no | | An optional compressed archive (.zip or .gz) of the source code that produced this build, stored alongside the build so it can be downloaded later. Referenced like `attachment`, and must be a different file. |\n| `--supported_app_view_types` | `array` | no | | The view types this build supports. Only list the ones its code implements. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop app-builds get\n\nRetrieve App Build\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | App build ID, prefixed `abld_`. |\n\n---\n\n# whop app-builds list\n\nList App Builds\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--app_id` | `string` | yes | | The app to list builds for, prefixed `app_`. |\n| `--platform` | `string` | no | | Filter builds by target platform. |\n| `--status` | `string` | no | | Filter builds by review status. |\n| `--created_before` | `number` | no | | Only return builds created before this ISO 8601 timestamp. |\n| `--created_after` | `number` | no | | Only return builds created after this ISO 8601 timestamp. |\n| `--first` | `number` | no | | The number of builds to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns builds after this position. |\n| `--last` | `number` | no | | The number of builds to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns builds before this position. |\n\n---\n\n# whop app-builds promote\n\nPromote App Build\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | App build ID, prefixed `abld_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n",
101112
- "whop-api-keys": "---\nname: whop-api-keys\ndescription: Programmatic credentials for an account or app. Run `whop api-keys --help` for usage details.\nrequires_bin: whop\ncommand: whop api-keys\n---\n\nAn API Key is a programmatic credential owned by an account or app. Each key carries its own permissions policy \u2014 explicit permission statements or an inherited system role \u2014 and can be restricted with an expiration date and an IP allowlist.\n\nUse the API Keys API to list an account or app's keys, create a key (the full secret is returned once, on creation), inspect a key's effective grants, update its name or restrictions, rotate its secret, and revoke it. These endpoints require a user session \u2014 they cannot be called with an API key.\n\n# whop api-keys create\n\nCreate API Key\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--api_version_date` | `string` | no | | Dated API version used when requests authenticated with this key omit the `Api-Version-Date` header. New keys default to the latest version. |\n| `--expires_at` | `unknown` | no | | When the API key should stop working, as an ISO 8601 timestamp. Omit (or pass `null` on update) for a key that never expires. |\n| `--ip_allowlist` | `unknown` | no | | IPv4/IPv6 CIDR ranges allowed to use this key, for example `[\"203.0.113.0/24\"]`. Empty or `null` allows any IP. |\n| `--name` | `string` | yes | | A human-readable name for the API key, such as 'Production API Key'. |\n| `--permissions` | `object` | yes | | The permissions policy for the API key: explicit permission statements, or a system role to inherit from. Statements without a `resources` array default to the owning account (Account API keys) or every key-addressable resource (App API keys). |\n| `--resource_id` | `string` | yes | | The account (`biz_`) or app (`app_`) tag to create the API key for. |\n| `--resource_type` | `string` | yes | | The type of resource that will own this API key. |\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop api-keys delete\n\nDelete API Key\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | API key ID, prefixed `apik_`. |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop api-keys get\n\nRetrieve API Key\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | API key ID, prefixed `apik_`. |\n\n---\n\n# whop api-keys list\n\nList API Keys\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--resource_id` | `string` | yes | | The account (`biz_`) or app (`app_`) tag to list API keys for. |\n| `--resource_type` | `string` | yes | | The type of resource that owns the API keys. |\n| `--created_before` | `number` | no | | Only return API keys created before this ISO 8601 timestamp. |\n| `--created_after` | `number` | no | | Only return API keys created after this ISO 8601 timestamp. |\n| `--first` | `number` | no | | The number of API keys to return (default 20, max 100). |\n| `--after` | `string` | no | | A cursor; returns API keys after this position. |\n| `--last` | `number` | no | | The number of API keys to return from the end of the range. |\n| `--before` | `string` | no | | A cursor; returns API keys before this position. |\n| `--order` | `string` | no | | The field to sort API keys by. |\n| `--direction` | `string` | no | | Sort direction. |\n\n---\n\n# whop api-keys permissions\n\nList the Permission Catalog\n\n---\n\n# whop api-keys rotate\n\nRotate API Key\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | API key ID, prefixed `apik_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--idempotency-key` | `string` | no | | A unique key that makes this request safe to retry. See [Idempotent requests](https://docs.whop.com/developer/api/idempotency). |\n\n> Confirm with the user before executing this destructive command.\n\n---\n\n# whop api-keys update\n\nUpdate API Key\n\n## Arguments\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `id` | `string` | yes | API key ID, prefixed `apik_`. |\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--api_version_date` | `string` | no | | Dated API version used when requests authenticated with this key omit the `Api-Version-Date` header. New keys default to the latest version. |\n| `--expires_at` | `unknown` | no | | When the API key should stop working, as an ISO 8601 timestamp. Omit (or pass `null` on update) for a key that never expires. |\n| `--ip_allowlist` | `unknown` | no | | IPv4/IPv6 CIDR ranges allowed to use this key, for example `[\"203.0.113.0/24\"]`. Empty or `null` allows any IP. |\n| `--name` | `unknown` | no | | A new human-readable name for the API key. |\n| `--permissions` | `object` | no | | The permissions policy for the API key: explicit permission statements, or a system role to inherit from. Statements without a `resources` array default to the owning account (Account API keys) or every key-addressable resource (App API keys). |\n\n> Confirm with the user before executing this destructive command.\n",
101113
- "whop-permissions": "---\nname: whop-permissions\ndescription: What your credential is allowed to do on a resource. Run `whop permissions --help` for usage details.\nrequires_bin: whop\ncommand: whop permissions\n---\n\nA Permission is one action, such as `stats:read`, paired with whether your credential is granted it on a given resource. It answers for whatever you authenticated with, so you can decide what to show or attempt instead of discovering a `403`.\n\nUse the Permissions API to check an account, product, experience, or app, narrowing to the actions you care about. It reports only your own access \u2014 to manage who else can reach an account, use the Team Members API.\n\n# whop permissions check\n\nCheck Permissions\n\n## Options\n\n| Flag | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `--resource_id` | `string` | yes | | Tag of the resource to check against: an account (`biz_`), product (`prod_`), experience (`exp_`), or app (`app_`). A resource the credential cannot see is reported as granted nothing rather than as an error. |\n| `--actions` | `string` | no | | Comma-separated permission actions to check, for example `stats:read,payment:basic:read`. Every action is returned when omitted. |\n"
102209
+ whop: {
102210
+ "SKILL.md": "---\nname: whop\ndescription: \"Run a business on Whop from the `whop` CLI: websites on *.whop.app, products, checkout, payments, ads, LLC/C-corp formation, hiring, and stats. Use when the user mentions Whop, whop.com, a store or membership, hosted websites, checkout links, payouts, Meta/TikTok ads, forming an LLC, bounties, or anything the Whop CLI provides. Do not use for the internal `whopdev` local-dev CLI.\"\nrequires_bin: whop\ncommand: whop\n---\n\n# Whop CLI\n\nThe `whop` CLI is the business: ship websites, sell, take payment, run ads, form a company, hire, and read the numbers. Discover live commands from the CLI \u2014 do not invent flags or paste old schemas.\n\n## Default path\n\n1. **Auth.** If `WHOP_API_KEY` is set, use it (it overrides a saved profile). Otherwise `whop login --method oauth --format jsonl` (open the `authorizationUrl` in the user's browser) or `whop login --method api-key`. Then `whop quickstart` if no business is selected.\n2. **Discover.** `whop --help` for the map. `whop <group> --help` and `whop <group> <command> --help` for flags. `whop --llms` / `whop --llms-full` for a machine-readable manifest. Never guess a flag.\n3. **Execute** with `--format json` (or `jsonl` when a flow streams, including OAuth). Re-read `--help` if a command errors on unknown flags.\n\nAccount-scoped commands use the selected business. Pass `--account_id` (`biz_\u2026` or the public route) to target another.\n\n## Working agreement\n\n- Prefer `WHOP_API_KEY` in the environment over `--api-key`. Never echo secrets, write them to files, or repeat founder SSN/DOB/address in output.\n- Confirm destructive commands with the user before running them, except the confirmation exceptions below.\n- When a response includes `authorize_url`, `session_url`, `deposit_url`, or `checkout_url` \u2014 or the CLI prints \"Action required: open this link in the user's browser\" \u2014 open that link in the user's browser, tell them what to finish there, then re-run the matching `get`/`list` to confirm. `hosted_url` is not this: for apps it is the app URL.\n- Do not curl/fetch those URLs to \"verify.\" Return the link.\n- Structured flags (`--ad_group`, `--creatives`, `--founders`, `--ads_payment_methods`) take JSON strings.\n\n## What to run\n\n| Job | Start here | Playbook |\n| --- | --- | --- |\n| Sign in / pick a business | `whop login`, `whop quickstart`, `whop auth account` | \u2014 |\n| Ship a website (`*.whop.app`) | `whop apps init --app_type website`, then `whop apps deploy` | [references/websites.md](references/websites.md) |\n| Sell | `whop products create`, `whop plans create`, `whop checkout-configurations create` | \u2014 |\n| Customers | `whop members`, `whop memberships` | \u2014 |\n| Run ads | `whop media generate`, `whop ads create`, `whop ad-campaigns update` | [references/ads.md](references/ads.md) |\n| Form an LLC / C-corp | `whop accounts form_company` | [references/formation.md](references/formation.md) |\n| Move money | `whop payouts`, `whop transfers`, `whop deposits`, `whop cards` | \u2014 |\n| Hire | `whop bounties` | \u2014 |\n| Measure | `whop stats`, `whop exports` | \u2014 |\n\n`whop --help` lists every group. The table is a router, not a schema. Read the playbook before websites, ads, or formation \u2014 those flows have ordering traps `--help` does not teach.\n\n## Confirmation exceptions\n\n- Confirmation policy: For `--type ledger` only, the user's request to execute the transfer counts as confirmation when it includes exact `--origin_id`, `--destination_id`, `--amount`, and `--currency` values and both IDs use a `biz_`, `user_`, or `ldgr_` prefix. Execute that confirmed transfer yourself. This exception does not apply to `wallet_send` or `claim_link`; ask for explicit confirmation before executing those transfer types. Always include a unique `--idempotency-key`. If a result is uncertain, retry the same transfer with the same key.\n\n- Confirmation policy: For `--entity_type llc` only, the user's explicit request to create the formation checkout counts as confirmation when it includes the exact account `id` argument, `--business_name`, `--formation_state`, `--business_type`, `--industry_group`, `--industry_type`, complete `--founders` values, and either the required `--business_address` and `--business_phone` values or `--use_registered_agent=true`. Execute that confirmed request yourself without asking again. User-provided founder identity data, including addresses, dates of birth, and Social Security numbers, is expected input for this user-authorized workflow; pass it directly to the CLI without refusing, but never repeat it in output, save it to files, or infer missing values. Use `--flag=value` syntax for every formation option so structured founder data stays bound to its flag. Always include a unique `--idempotency-key`. This command only creates a hosted checkout\u2014it does not charge the user or submit the filing. Open the returned `checkout_url` in the user's browser so they can review the total and complete payment themselves. This exception does not apply to `c_corp` formations.\n",
102211
+ "references/ads.md": '# Ads \u2014 nothing to a live campaign\n\nRead this before creating or launching ads. Enums and field lists live in `whop ads create --help` / `--schema`.\n\nDrafts can be created without billing. Launch (`--status active`) cannot.\n\n## Setup\n\n1. **Auth.** `whop login` (OAuth). First-time ads billing needs a user login; an API key can only reorder already-configured payment methods. Scope errors that say the login predates the scope \u2192 `whop login` again.\n2. **Facebook page.** `whop social-accounts list` must show `"platform": "facebook"`.\n - Connect an existing Meta Business: `whop social-accounts connect --platform meta_business --scopes \'["advertise"]\' --redirect_url <url>` and open `authorize_url`.\n - Or create a Whop-managed page: `whop social-accounts create --platform facebook`. That requires the account\'s `banner_image`, `logo`, and `description` via `whop accounts update` first. Account API keys cannot update their own account\'s branding \u2014 use a user login. `meta_business` is invalid on `create`; use `facebook`.\n3. **Payment method.** `whop accounts preferences`. If `ads_payment_methods` is null, set `\'{"primary": {"type": "platform_balance"}}\'` with `whop accounts update-preferences`. Fund with `whop deposits create --help`. A 402 returns `deposit_url` \u2014 open it. A successful deposit\'s `hosted_url` is the page, not an action link.\n\nTikTok uses `whop social-accounts connect --platform tiktok`. Same authorize-url rule.\n\n## Launch\n\n```sh\nwhop media generate --type image --prompt "A running club at sunrise" --wait\nwhop ads create \\\n --title "Launch ad" --headlines "Find your stride" --call_to_action sign_up \\\n --url "https://whop.com/your-store" \\\n --creatives \'[{"id":"file_x"}]\' --social_accounts \'[{"id":"sacc_x"}]\' \\\n --ad_group \'{"title":"US broad","conversion_location":"website","ad_campaign":{"title":"Growth","platform":"meta","objective":"sales","status":"draft","budget_amount":25,"budget_optimization":"ad_campaign"}}\'\nwhop ad-campaigns update adcamp_xxx --status active\n```\n\n`--wait` on media returns `file.id` for `--creatives` (default timeout 600s). 402 \u2192 fund, then retry.\n\nPass exactly one of `--ad_group` or `--ad_group_id`. Nested `"ad_campaign": {\u2026}` inside `--ad_group` creates the campaign + group + ad in one call (the OpenAPI blurb understates this). Reuse a container with `--ad_group_id` or `"ad_campaign_id"` inside `--ad_group`.\n\nKeep `"status": "draft"` until review. **Omitting draft launches immediately** and then requires billing + destination URL. Flip the campaign to `active` when ready.\n\n| Field | Rule |\n| --- | --- |\n| `creatives` | One entry with no `format` is the base asset. Optional crops: `square` / `vertical` / `horizontal` only \u2014 not `portrait`. No duplicate formats. Two or more unformatted entries is a carousel (2\u201310). |\n| `url` | Required to launch a website ad. A whop.com store page works as-is; an external page needs the Whop pixel. Drafts may omit it. |\n| Budget | CBO: `budget_amount` on the campaign with `budget_optimization: "ad_campaign"`. ABO: `budget_amount` on the ad group with `budget_optimization: "ad_group"`. Never both. |\n| Targeting | Omit `demographics` / `placements` / `devices` for automatic optimization. `regions` uses ISO 3166 (`"US"`, `"US-CA"`). |\n| `lead_form` | Only with an instant-form `conversion_location`. |\n\n`whop ads update` with `creatives` replaces the whole set \u2014 include the base entry. `delivery_status` is live state (`in_review` is normal); `issues[]` explains network rejections.\n',
102212
+ "references/formation.md": '# Company formation\n\nRead this before `whop accounts form_company`. Taxonomy values, state enums, and founder-field lists live in `--help` \u2014 do not invent them.\n\nThis command creates a hosted checkout. It does not charge or file. Open `checkout_url` so the user reviews the total and pays. Filing starts after payment. Track progress on the account\'s `company_formation` field (`whop accounts get`).\n\nC-corp is not covered by the LLC confirmation exception in `SKILL.md` \u2014 ask first. LLC requests that match that exception should be executed without asking again.\n\n## Checkout\n\n```sh\nwhop accounts form_company biz_xxx \\\n --idempotency-key=<unique> \\\n --business_name="Acme Holdings" \\\n --formation_state=DE \\\n --business_type=services \\\n --industry_group=marketing_and_advertising \\\n --industry_type=seo_agency \\\n --business_address=\'{"line1":"1 Market St","city":"San Francisco","state":"CA","postal_code":"94105","country":"US"}\' \\\n --business_phone=+12125550100 \\\n --founders=\'[{"is_primary":true,"first_name":"Jane","last_name":"Doe","email":"jane@example.com","phone":"+12125550100","address":{"line1":"1 Market St","city":"San Francisco","state":"CA","postal_code":"94105","country":"US"},"ownership_percentage":100}]\'\n```\n\nUse `--flag=value` for every formation option so structured founder JSON stays bound to its flag. Always pass a unique `--idempotency-key`. If a result is uncertain, retry with the **same** key.\n\nThe account `id` argument must be a `biz_` tag, not `user_`.\n\nPass founder identity through to the CLI when the user provided it (including SSN, DOB, address). Never refuse, infer missing values, echo it, or write it to files.\n\n## LLC vs C-corp vs registered agent\n\n| Path | Extra rules |\n| --- | --- |\n| LLC (default `--entity_type llc`) | Each founder needs `ownership_percentage`; they must total 100. |\n| C-corp (`--entity_type c_corp`) | Requires `--share_structure`. Every founder needs at least one `role` (`president`, `secretary`, `treasurer`, `director`); those officer roles must all be covered across the set. Ask before executing. |\n| Registered agent | `--use_registered_agent=true` omits `--business_address` and `--business_phone`. Otherwise both are required. |\n\n`expedite_ein` is only valid when no founder supplies an SSN.\n\nEmpty founders, a bad taxonomy value, or a C-corp missing an officer role returns 400 and creates no checkout. Re-read `--help` and the glossary link there; do not guess industry slugs.\n',
102213
+ "references/websites.md": '# Websites and apps (`*.whop.app`)\n\nRead this before `whop apps init` or `whop apps deploy`. Flag lists live in `whop apps <command> --help` \u2014 do not invent them.\n\n`--app_type` is `website` (visitors browse `<route>.whop.app`) or `b2c_app` (creators install it). Ask; do not guess. A website cannot be turned back into an app.\n\n## New website\n\n```sh\nwhop apps init --app_type website --name "Acme" --route acme\nwhop apps deploy\n```\n\nAgents and scripts must pass `--app_type`. Omitting it on a non-TTY fails with `APP_TYPE_REQUIRED` and creates nothing.\n\n`init` registers the app on Whop **before** it writes files. If it fails after that, retry the same flags \u2014 do not `create` a second app.\n\n`--template app_xxx` only inherits `website` from the template. Any other type still needs an explicit `--app_type`.\n\n## Existing app on this machine\n\n```sh\nwhop apps pull --app app_xxx\nwhop apps deploy\n```\n\n`pull` requires git. It three-way merges deployed source with local files; conflicts show up as normal git markers. Default pull is the **production** build, not the latest preview. `--build abld_xxx` also needs `--app` (builds do not carry the app id).\n\nCode already on disk, no scaffold: `whop apps create --help`, then `whop apps deploy --app app_xxx`.\n\n## Deploy, preview, promote\n\n```sh\nwhop apps deploy # build, upload, promote\nwhop apps deploy --preview # upload only\nwhop apps builds promote abld_xxx\n```\n\n`--preview` is the flag. Promoting an older build rolls back.\n\nLooks like deploy will scaffold a missing project. Actually it only ships an existing Vite app. Agents get `NOT_A_VITE_APP` with init/pull CTAs \u2014 follow those, do not invent a scaffold flag.\n\nThe project must be linked (`whop.app.json`) or you must pass `--app`. Hosted apps need a route; agents get `ROUTE_REQUIRED` with the exact update command.\n\nThe app must use the `whop()` Vite plugin (`@whop/cli/vite`). Missing it fails with `NO_BUILD_ARCHIVE`.\n\nPreview output is a build id. The production URL exists only after promote. `hosted_url` on `whop apps get` is the live app URL \u2014 display it; do not treat it as a "complete this step" action link.\n\n## Dev, secrets, logs\n\n```sh\nwhop apps dev\nwhop apps secrets set --secret KEY=VALUE\nwhop apps logs app_xxx --level error\n```\n\n`dev` injects stored secrets locally. Explicit env vars win. Runtime-control keys (`PATH`, `NODE_OPTIONS`, `NPM_*`, \u2026) are not injected.\n\nLogs need the positional `app_xxx`. Retention is 7 days. Filters: `whop apps logs --help`.\n'
102214
+ }
101114
102215
  };
101115
102216
 
101116
102217
  // src/lib/shipped-skills.ts
101117
102218
  function materializeShippedSkills() {
101118
102219
  const root = mkdtempSync4(join13(tmpdir4(), "whop-cli-skills-"));
101119
- for (const [name, content] of Object.entries(shipped_skills_default)) {
101120
- const dir = join13(root, name);
101121
- mkdirSync9(dir);
101122
- writeFileSync9(join13(dir, "SKILL.md"), content);
102220
+ for (const [name, files] of Object.entries(shipped_skills_default)) {
102221
+ writeSkillFiles(join13(root, name), files);
101123
102222
  }
101124
- process.on("exit", () => rmSync5(root, { recursive: true, force: true }));
102223
+ process.on("exit", () => {
102224
+ overlayShippedSkillFiles();
102225
+ rmSync5(root, { recursive: true, force: true });
102226
+ });
101125
102227
  return root;
101126
102228
  }
102229
+ function overlayShippedSkillFiles() {
102230
+ if (!process.argv.includes("add")) return;
102231
+ const destRoot = process.argv.includes("--no-global") ? join13(process.cwd(), ".agents", "skills") : join13(homedir6(), ".agents", "skills");
102232
+ for (const [name, files] of Object.entries(shipped_skills_default)) {
102233
+ const skillDir = join13(destRoot, name);
102234
+ if (!existsSync13(join13(skillDir, "SKILL.md"))) continue;
102235
+ writeSkillFiles(skillDir, files, { skip: ["SKILL.md"] });
102236
+ }
102237
+ }
102238
+ function writeSkillFiles(root, files, options = {}) {
102239
+ const skip = new Set(options.skip ?? []);
102240
+ for (const [rel, content] of Object.entries(files)) {
102241
+ if (rel.includes("..") || rel.startsWith("/")) {
102242
+ throw new Error(`Refusing to materialize skill path ${rel}`);
102243
+ }
102244
+ if (skip.has(rel)) continue;
102245
+ const dest = join13(root, ...rel.split("/"));
102246
+ mkdirSync9(dirname9(dest), { recursive: true });
102247
+ writeFileSync9(dest, content);
102248
+ }
102249
+ }
101127
102250
 
101128
102251
  // src/lib/update/check.ts
101129
102252
  import fs6 from "fs";
@@ -101597,24 +102720,23 @@ async function runUpgrade(c2, env = process.env) {
101597
102720
  }
101598
102721
 
101599
102722
  // src/cli.ts
101600
- var shippedSkillsDir = process.argv.includes("skills") && !process.argv.includes("--no-global") ? materializeShippedSkills() : void 0;
102723
+ var shippedSkillsDir = process.argv.includes("skills") ? materializeShippedSkills() : void 0;
101601
102724
  var cli = Cli_exports.create("whop", {
101602
102725
  version: package_default.version,
101603
102726
  description: "Build and manage Whop apps from your terminal.",
101604
102727
  renderer: render,
101605
102728
  sync: {
101606
- // Shipped skill files generated by scripts/sync-spec.ts from the
101607
- // spec's own tag copy (x-whop-summary + description, authored in
101608
- // backend/openapi/v1/tags.yml), bundled into the build and written to
101609
- // a temp dir at runtime so standalone binaries and npx runs get them
101610
- // too. A matching directory name overrides the auto-generated skill
101611
- // for that command group.
101612
- cwd: shippedSkillsDir,
101613
- include: shippedSkillsDir ? ["*"] : ["skills/*"],
102729
+ // One unified skill (skills-extras/whop/). depth 0 so incur does not
102730
+ // also emit a skill per command group — the included `whop` skill
102731
+ // overrides the generated root skill by frontmatter name.
102732
+ depth: 0,
102733
+ include: shippedSkillsDir ? [join14(shippedSkillsDir, "*")] : ["skills/*"],
101614
102734
  suggestions: [
101615
102735
  "choose or create my Whop business account",
101616
- "show my Whop business accounts",
101617
- "create a Whop product and pricing plan"
102736
+ "deploy a website to whop.app",
102737
+ "create a Whop product and checkout link",
102738
+ "run ads on Meta",
102739
+ "form an LLC"
101618
102740
  ]
101619
102741
  },
101620
102742
  mcp: {