@whop/cli 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whop/cli",
3
- "version": "0.30.0",
3
+ "version": "0.32.0",
4
4
  "description": "The Whop CLI — build and manage Whop apps from your terminal. Human and agent friendly.",
5
5
  "keywords": [
6
6
  "agent",
@@ -35,6 +35,7 @@ When the caller asks how to grow, improve their business, or decide what to do n
35
35
  - When a response includes `authorize_url`, `session_url`, `deposit_url`, or `checkout_url` — or the CLI prints "Action required: open this link in the user's browser" — 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.
36
36
  - Do not curl/fetch those URLs to "verify." Return the link.
37
37
  - Structured flags (`--ad_group`, `--creatives`, `--founders`, `--ads_payment_methods`) take JSON strings.
38
+ - To send money, run `whop send <recipient> <amount> --dry-run --format json` first and show the user who it resolved to. Once they confirm, run the command it returns, which sends to the resolved ID with `--yes`. A request that already names the recipient's `user_`, `biz_` or `ldgr_` ID, the amount and the currency is the confirmation.
38
39
 
39
40
  ## What to run
40
41
 
@@ -47,7 +48,7 @@ When the caller asks how to grow, improve their business, or decide what to do n
47
48
  | Customers | `whop members`, `whop memberships` | — |
48
49
  | Run ads | `whop media generate`, `whop ads create`, `whop ad-campaigns update` | [references/ads.md](references/ads.md) |
49
50
  | Form an LLC / C-corp | `whop accounts form_company` | [references/formation.md](references/formation.md) |
50
- | Move money | `whop payouts`, `whop transfers`, `whop deposits`, `whop cards` | — |
51
+ | Move money | `whop send`, `whop payouts`, `whop transfers`, `whop deposits`, `whop cards` | — |
51
52
  | Hire | `whop bounties` | — |
52
53
  | Measure | `whop stats`, `whop exports` | — |
53
54
 
@@ -7,12 +7,7 @@ Drafts can be created without billing. Launch (`--status active`) cannot.
7
7
  ## Setup
8
8
 
9
9
  1. **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 → `whop login` again.
10
- 2. **Facebook page.** `whop external-accounts list` must show `"platform": "facebook"`.
11
- - Connect an existing Meta Business: `whop external-accounts connect --platform meta_business --scopes '["advertise"]' --redirect_url <url>` and open `authorize_url`.
12
- - Or create a Whop-managed page: `whop external-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 — use a user login. `meta_business` is invalid on `create`; use `facebook`.
13
- 3. **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` — open it. A successful deposit's `hosted_url` is the page, not an action link.
14
-
15
- TikTok uses `whop external-accounts connect --platform tiktok`. Same authorize-url rule.
10
+ 2. **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` — open it. A successful deposit's `hosted_url` is the page, not an action link.
16
11
 
17
12
  ## Launch
18
13
 
@@ -21,8 +16,8 @@ whop media generate --type image --prompt "A running club at sunrise" --wait
21
16
  whop ads create \
22
17
  --title "Launch ad" --headlines "Find your stride" --call_to_action sign_up \
23
18
  --url "https://whop.com/your-store" \
24
- --creatives '[{"id":"file_x"}]' --external_accounts '[{"id":"sacc_x"}]' \
25
- --ad_group '{"title":"US broad","conversion_location":"website","ad_campaign":{"title":"Growth","platform":"whop","objective":"sales","status":"draft","budget_amount":25,"budget_optimization":"ad_campaign"}}'
19
+ --creatives '[{"id":"file_x"}]' \
20
+ --ad_group '{"title":"US broad","ad_campaign":{"title":"Growth","objective":"sales","status":"draft","budget_amount":25,"budget_optimization":"ad_campaign"}}'
26
21
  whop ad-campaigns update adcamp_xxx --status active
27
22
  ```
28
23
 
@@ -37,7 +32,6 @@ Keep `"status": "draft"` until review. **Omitting draft launches immediately** a
37
32
  | `creatives` | One entry with no `format` is the base asset. Optional crops: `square` / `vertical` / `horizontal` only — not `portrait`. No duplicate formats. Two or more unformatted entries is a carousel (2–10). |
38
33
  | `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. |
39
34
  | 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. |
40
- | Targeting | Omit `demographics` / `placements` / `devices` for automatic optimization. `regions` uses ISO 3166 (`"US"`, `"US-CA"`). |
41
- | `lead_form` | Only with an instant-form `conversion_location`. |
35
+ | Targeting | Omit `demographics` / `devices` for automatic optimization. `regions` uses ISO 3166 (`"US"`, `"US-CA"`). |
42
36
 
43
37
  `whop ads update` with `creatives` replaces the whole set — include the base entry. `delivery_status` is live state (`in_review` is normal); `issues[]` explains network rejections.
@@ -1,45 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
3
- var __create = Object.create;
4
- var __defProp = Object.defineProperty;
5
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
- var __getOwnPropNames = Object.getOwnPropertyNames;
7
- var __getProtoOf = Object.getPrototypeOf;
8
- var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
11
- }) : x)(function(x) {
12
- if (typeof require !== "undefined") return require.apply(this, arguments);
13
- throw Error('Dynamic require of "' + x + '" is not supported');
14
- });
15
- var __commonJS = (cb, mod) => function __require2() {
16
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
17
- };
18
- var __export = (target, all) => {
19
- for (var name in all)
20
- __defProp(target, name, { get: all[name], enumerable: true });
21
- };
22
- var __copyProps = (to, from, except, desc) => {
23
- if (from && typeof from === "object" || typeof from === "function") {
24
- for (let key of __getOwnPropNames(from))
25
- if (!__hasOwnProp.call(to, key) && key !== except)
26
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
27
- }
28
- return to;
29
- };
30
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
31
- // If the importer is in node compatibility mode or this is not an ESM
32
- // file that has been converted to a CommonJS file using a Babel-
33
- // compatible transform (i.e. "__esModule" has not been set), then set
34
- // "default" to the CommonJS "module.exports" for node compatibility.
35
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
36
- mod
37
- ));
38
-
39
- export {
40
- __require,
41
- __commonJS,
42
- __export,
43
- __toESM
44
- };
45
- //# sourceMappingURL=chunk-M2N2M5EJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}