@whop/cli 0.31.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/dist/index.js CHANGED
@@ -14152,7 +14152,7 @@ var native_spec_default = {
14152
14152
  termsOfService: "https://whop.com/tos-developer-api/",
14153
14153
  title: "Whop API",
14154
14154
  version: "1.0.0",
14155
- "x-api-version-date": "2026-10-29-4"
14155
+ "x-api-version-date": "2026-10-29-8"
14156
14156
  },
14157
14157
  servers: [
14158
14158
  {
@@ -14391,11 +14391,6 @@ var native_spec_default = {
14391
14391
  name: "Ad Pixels",
14392
14392
  "x-whop-summary": "Your own pixels that receive conversions from campaigns you claimed."
14393
14393
  },
14394
- {
14395
- description: "A conversion value rule changes the conversion values Whop sends to ad networks while Whop keeps recording the accurate values. Each rule belongs to an account and applies one value adjustment to a set of targets (the account, an ad campaign, an ad group, or an ad) and events. Every selected event applies to every selected target, and the most specific rule applies.\n\nUse the Ad Conversion Value Rules API to create, edit, pause, resume, and delete rules, and to find the rules that cover a campaign, ad group, or ad. Each write succeeds or fails as one transaction, and each conversion send uses the rules saved at that moment.\n",
14396
- name: "Ad Conversion Value Rules",
14397
- "x-whop-summary": "Modify how conversion events are delivered to ad networks."
14398
- },
14399
14394
  {
14400
14395
  description: "Stats 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 the metrics you can chart and retrieve one as a time series over a date range, or list reports and retrieve aggregates that are not bucketed over time, such as platform-wide payment trends.\n",
14401
14396
  name: "Stats",
@@ -14531,6 +14526,7 @@ var native_spec_default = {
14531
14526
  "Payouts",
14532
14527
  "Ledgers",
14533
14528
  "Cards",
14529
+ "Capital",
14534
14530
  "Cashback Rules",
14535
14531
  "Swaps",
14536
14532
  "Trades",
@@ -14568,14 +14564,7 @@ var native_spec_default = {
14568
14564
  {
14569
14565
  description: "Run and measure ad campaigns from your integration.",
14570
14566
  name: "Ads",
14571
- tags: [
14572
- "Ad Campaigns",
14573
- "Ad Groups",
14574
- "Ads",
14575
- "Audiences",
14576
- "Ad Pixels",
14577
- "Ad Conversion Value Rules"
14578
- ]
14567
+ tags: ["Ad Campaigns", "Ad Groups", "Ads", "Audiences", "Ad Pixels"]
14579
14568
  },
14580
14569
  {
14581
14570
  description: "Who visits, what converts, and how an account is performing.",
@@ -20483,704 +20472,6 @@ var native_spec_default = {
20483
20472
  ]
20484
20473
  }
20485
20474
  },
20486
- "/ad_conversion_value_rules": {
20487
- get: {
20488
- description: "Lists the conversion value rules you can read.",
20489
- operationId: "list",
20490
- parameters: [
20491
- {
20492
- $ref: "#/components/parameters/ApiVersionDate"
20493
- },
20494
- {
20495
- description: "Only rules belonging to this account, prefixed `biz_`.",
20496
- in: "query",
20497
- name: "account_id",
20498
- required: false,
20499
- schema: {
20500
- type: "string"
20501
- }
20502
- },
20503
- {
20504
- in: "query",
20505
- name: "status",
20506
- required: false,
20507
- schema: {
20508
- enum: ["active", "paused"],
20509
- type: "string"
20510
- }
20511
- },
20512
- {
20513
- in: "query",
20514
- name: "platform",
20515
- required: false,
20516
- schema: {
20517
- enum: ["tiktok", "meta", "google"],
20518
- type: "string"
20519
- }
20520
- },
20521
- {
20522
- description: "Campaign, ad group, or ad ID. Return rules covering this item, its ancestors, or its descendants.",
20523
- in: "query",
20524
- name: "resource_id",
20525
- required: false,
20526
- schema: {
20527
- type: "string"
20528
- }
20529
- },
20530
- {
20531
- description: "Number of results to return from the start of the range.",
20532
- in: "query",
20533
- name: "first",
20534
- required: false,
20535
- schema: {
20536
- default: 20,
20537
- maximum: 100,
20538
- type: "integer"
20539
- }
20540
- },
20541
- {
20542
- description: "Return results after this cursor. Use `page_info.end_cursor` from the previous response to fetch the next page.",
20543
- in: "query",
20544
- name: "after",
20545
- required: false,
20546
- schema: {
20547
- type: "string"
20548
- }
20549
- },
20550
- {
20551
- description: "Number of results to return from the end of the range.",
20552
- in: "query",
20553
- name: "last",
20554
- required: false,
20555
- schema: {
20556
- maximum: 100,
20557
- type: "integer"
20558
- }
20559
- },
20560
- {
20561
- description: "Return results before this cursor. Use `page_info.start_cursor` from the previous response to fetch the previous page.",
20562
- in: "query",
20563
- name: "before",
20564
- required: false,
20565
- schema: {
20566
- type: "string"
20567
- }
20568
- },
20569
- {
20570
- in: "query",
20571
- name: "order",
20572
- required: false,
20573
- schema: {
20574
- enum: ["created_at"],
20575
- type: "string"
20576
- }
20577
- },
20578
- {
20579
- in: "query",
20580
- name: "direction",
20581
- required: false,
20582
- schema: {
20583
- enum: ["asc", "desc"],
20584
- type: "string"
20585
- }
20586
- }
20587
- ],
20588
- responses: {
20589
- "200": {
20590
- content: {
20591
- "application/json": {
20592
- schema: {
20593
- properties: {
20594
- data: {
20595
- items: {
20596
- $ref: "#/components/schemas/AdConversionValueRule"
20597
- },
20598
- type: "array"
20599
- },
20600
- page_info: {
20601
- properties: {
20602
- end_cursor: {
20603
- example: null,
20604
- nullable: true,
20605
- type: "string"
20606
- },
20607
- has_next_page: {
20608
- example: false,
20609
- type: "boolean"
20610
- },
20611
- has_previous_page: {
20612
- example: false,
20613
- type: "boolean"
20614
- },
20615
- start_cursor: {
20616
- example: null,
20617
- nullable: true,
20618
- type: "string"
20619
- }
20620
- },
20621
- required: [
20622
- "start_cursor",
20623
- "end_cursor",
20624
- "has_next_page",
20625
- "has_previous_page"
20626
- ],
20627
- type: "object"
20628
- }
20629
- },
20630
- required: ["data", "page_info"],
20631
- type: "object"
20632
- }
20633
- }
20634
- },
20635
- description: "Rules"
20636
- }
20637
- },
20638
- security: [
20639
- {
20640
- bearerAuth: ["ad_campaign:basic:read"]
20641
- }
20642
- ],
20643
- summary: "List conversion value rules",
20644
- tags: ["Ad Conversion Value Rules"],
20645
- "x-mint": {
20646
- metadata: {
20647
- title: "List Conversion Value Rules",
20648
- sidebarTitle: "List Conversion Value Rules"
20649
- }
20650
- }
20651
- },
20652
- post: {
20653
- description: "Creates one rule covering every selected target and event combination. Active rules cannot overlap for the same target and event. Customer prices and Whop revenue stay unchanged.",
20654
- operationId: "create",
20655
- parameters: [
20656
- {
20657
- $ref: "#/components/parameters/ApiVersionDate"
20658
- },
20659
- {
20660
- $ref: "#/components/parameters/IdempotencyKey"
20661
- }
20662
- ],
20663
- requestBody: {
20664
- content: {
20665
- "application/json": {
20666
- schema: {
20667
- properties: {
20668
- account_id: {
20669
- description: "Business that owns the rule.",
20670
- example: "biz_xxxxxxxxxxxxxx",
20671
- type: "string"
20672
- },
20673
- adjustment_type: {
20674
- enum: ["fixed", "percentage"],
20675
- example: "fixed",
20676
- type: "string"
20677
- },
20678
- events: {
20679
- description: "Events adjusted on every selected target. A network that doesn't support a named custom event leaves it out.",
20680
- items: {
20681
- properties: {
20682
- custom_name: {
20683
- description: "Exact custom event name. Required for custom events; `null` for standard events.",
20684
- nullable: true,
20685
- type: "string"
20686
- },
20687
- event_name: {
20688
- enum: [
20689
- "purchase",
20690
- "subscribe",
20691
- "start_trial",
20692
- "lead",
20693
- "complete_registration",
20694
- "submit_application",
20695
- "schedule",
20696
- "contact",
20697
- "view_content",
20698
- "add_to_cart",
20699
- "custom"
20700
- ],
20701
- example: "lead",
20702
- type: "string"
20703
- }
20704
- },
20705
- required: ["event_name"],
20706
- type: "object"
20707
- },
20708
- maxItems: 100,
20709
- minItems: 1,
20710
- type: "array"
20711
- },
20712
- fixed_value: {
20713
- nullable: true,
20714
- properties: {
20715
- amount: {
20716
- description: "Decimal amount with at most 2 decimal places. Fixed values must be greater than 0 and at most 99999999.99.",
20717
- example: "60.00",
20718
- pattern: "^-?(?:[0-9]+(?:\\.[0-9]{1,2})?|\\.[0-9]{1,2})$",
20719
- type: "string"
20720
- },
20721
- currency: {
20722
- example: "usd",
20723
- type: "string"
20724
- }
20725
- },
20726
- required: ["amount", "currency"],
20727
- type: "object"
20728
- },
20729
- metadata: {
20730
- additionalProperties: {
20731
- type: "string"
20732
- },
20733
- type: "object"
20734
- },
20735
- percentage_change: {
20736
- description: "Signed percent change from negative 100 to 10000. The sent value cannot go below zero.",
20737
- maximum: 1e4,
20738
- minimum: -100,
20739
- multipleOf: 0.01,
20740
- nullable: true,
20741
- type: "number"
20742
- },
20743
- replace_rule_ids: {
20744
- description: "Exact IDs of active rules whose overlapping selections will be replaced. Other selections keep their values; remaining selections may split into separate rules. Broader rules remain as fallbacks for other items. Rules left with no selections are paused. Stale or incomplete conflict selections fail.",
20745
- items: {
20746
- type: "string"
20747
- },
20748
- maxItems: 1e3,
20749
- type: "array",
20750
- uniqueItems: true
20751
- },
20752
- status: {
20753
- description: "Initial rule status. Defaults to active.",
20754
- enum: ["active", "paused"],
20755
- example: "active",
20756
- type: "string"
20757
- },
20758
- targets: {
20759
- description: "Targets sharing one scope. Each target covers every network Whop runs it on, and every selected event applies to every target. At most 500 target, network, and event combinations.",
20760
- items: {
20761
- properties: {
20762
- resource_id: {
20763
- description: "Campaign, ad group, or ad ID. Null for a business target.",
20764
- nullable: true,
20765
- type: "string"
20766
- },
20767
- scope: {
20768
- enum: ["business", "campaign", "ad_group", "ad"],
20769
- example: "business",
20770
- type: "string"
20771
- }
20772
- },
20773
- required: ["scope"],
20774
- type: "object"
20775
- },
20776
- maxItems: 100,
20777
- minItems: 1,
20778
- type: "array"
20779
- }
20780
- },
20781
- required: [
20782
- "account_id",
20783
- "adjustment_type",
20784
- "targets",
20785
- "events"
20786
- ],
20787
- type: "object"
20788
- }
20789
- }
20790
- }
20791
- },
20792
- responses: {
20793
- "201": {
20794
- content: {
20795
- "application/json": {
20796
- schema: {
20797
- $ref: "#/components/schemas/AdConversionValueRule"
20798
- }
20799
- }
20800
- },
20801
- description: "Created"
20802
- },
20803
- "401": {
20804
- description: "Unauthorized"
20805
- },
20806
- "403": {
20807
- description: "Forbidden"
20808
- },
20809
- "409": {
20810
- $ref: "#/components/responses/Conflict"
20811
- }
20812
- },
20813
- security: [
20814
- {
20815
- bearerAuth: ["ad_campaign:update"]
20816
- }
20817
- ],
20818
- summary: "Create a conversion value rule",
20819
- tags: ["Ad Conversion Value Rules"],
20820
- "x-mint": {
20821
- metadata: {
20822
- title: "Create a Conversion Value Rule",
20823
- sidebarTitle: "Create a Conversion Value Rule"
20824
- }
20825
- }
20826
- }
20827
- },
20828
- "/ad_conversion_value_rules/{id}": {
20829
- delete: {
20830
- description: "Deletes a rule and deactivates all its coverage. The rule's stored settings are preserved.",
20831
- operationId: "delete",
20832
- responses: {
20833
- "200": {
20834
- content: {
20835
- "application/json": {
20836
- schema: {
20837
- properties: {
20838
- deleted: {
20839
- example: true,
20840
- type: "boolean"
20841
- },
20842
- id: {
20843
- example: "adcvr_xxxxxxxxxxxxxx",
20844
- type: "string"
20845
- }
20846
- },
20847
- required: ["id", "deleted"],
20848
- type: "object"
20849
- }
20850
- }
20851
- },
20852
- description: "Deleted"
20853
- }
20854
- },
20855
- security: [
20856
- {
20857
- bearerAuth: ["ad_campaign:update"]
20858
- }
20859
- ],
20860
- summary: "Delete a conversion value rule",
20861
- tags: ["Ad Conversion Value Rules"],
20862
- "x-mint": {
20863
- metadata: {
20864
- title: "Delete a Conversion Value Rule",
20865
- sidebarTitle: "Delete a Conversion Value Rule"
20866
- }
20867
- },
20868
- parameters: [
20869
- {
20870
- $ref: "#/components/parameters/ApiVersionDate"
20871
- },
20872
- {
20873
- description: "Conversion value rule ID, prefixed `adcvr_`.",
20874
- in: "path",
20875
- name: "id",
20876
- required: true,
20877
- schema: {
20878
- type: "string"
20879
- }
20880
- }
20881
- ]
20882
- },
20883
- get: {
20884
- description: "Retrieves a conversion value rule with its targets, events, and value adjustment.",
20885
- operationId: "get",
20886
- responses: {
20887
- "200": {
20888
- content: {
20889
- "application/json": {
20890
- schema: {
20891
- $ref: "#/components/schemas/AdConversionValueRule"
20892
- }
20893
- }
20894
- },
20895
- description: "Rule"
20896
- }
20897
- },
20898
- security: [
20899
- {
20900
- bearerAuth: ["ad_campaign:basic:read"]
20901
- }
20902
- ],
20903
- summary: "Retrieve a conversion value rule",
20904
- tags: ["Ad Conversion Value Rules"],
20905
- "x-mint": {
20906
- metadata: {
20907
- title: "Retrieve a Conversion Value Rule",
20908
- sidebarTitle: "Retrieve a Conversion Value Rule"
20909
- }
20910
- },
20911
- parameters: [
20912
- {
20913
- $ref: "#/components/parameters/ApiVersionDate"
20914
- },
20915
- {
20916
- description: "Conversion value rule ID, prefixed `adcvr_`.",
20917
- in: "path",
20918
- name: "id",
20919
- required: true,
20920
- schema: {
20921
- type: "string"
20922
- }
20923
- }
20924
- ]
20925
- },
20926
- patch: {
20927
- description: "Edits a rule without changing its status. Supplied `targets` or `events` replace that selection in full, and omitted fields stay unchanged. All changes succeed or fail together.",
20928
- operationId: "update",
20929
- parameters: [
20930
- {
20931
- $ref: "#/components/parameters/ApiVersionDate"
20932
- },
20933
- {
20934
- description: "Conversion value rule ID, prefixed `adcvr_`.",
20935
- in: "path",
20936
- name: "id",
20937
- required: true,
20938
- schema: {
20939
- type: "string"
20940
- }
20941
- }
20942
- ],
20943
- requestBody: {
20944
- content: {
20945
- "application/json": {
20946
- schema: {
20947
- properties: {
20948
- adjustment_type: {
20949
- enum: ["fixed", "percentage"],
20950
- example: "fixed",
20951
- type: "string"
20952
- },
20953
- events: {
20954
- description: "Events adjusted on every selected target. A network that doesn't support a named custom event leaves it out.",
20955
- items: {
20956
- properties: {
20957
- custom_name: {
20958
- description: "Exact custom event name. Required for custom events; `null` for standard events.",
20959
- nullable: true,
20960
- type: "string"
20961
- },
20962
- event_name: {
20963
- enum: [
20964
- "purchase",
20965
- "subscribe",
20966
- "start_trial",
20967
- "lead",
20968
- "complete_registration",
20969
- "submit_application",
20970
- "schedule",
20971
- "contact",
20972
- "view_content",
20973
- "add_to_cart",
20974
- "custom"
20975
- ],
20976
- example: "lead",
20977
- type: "string"
20978
- }
20979
- },
20980
- required: ["event_name"],
20981
- type: "object"
20982
- },
20983
- maxItems: 100,
20984
- minItems: 1,
20985
- type: "array"
20986
- },
20987
- fixed_value: {
20988
- nullable: true,
20989
- properties: {
20990
- amount: {
20991
- description: "Decimal amount with at most 2 decimal places. Fixed values must be greater than 0 and at most 99999999.99.",
20992
- example: "60.00",
20993
- pattern: "^-?(?:[0-9]+(?:\\.[0-9]{1,2})?|\\.[0-9]{1,2})$",
20994
- type: "string"
20995
- },
20996
- currency: {
20997
- example: "usd",
20998
- type: "string"
20999
- }
21000
- },
21001
- required: ["amount", "currency"],
21002
- type: "object"
21003
- },
21004
- metadata: {
21005
- additionalProperties: {
21006
- type: "string"
21007
- },
21008
- type: "object"
21009
- },
21010
- percentage_change: {
21011
- description: "Signed percent change from negative 100 to 10000. The sent value cannot go below zero.",
21012
- maximum: 1e4,
21013
- minimum: -100,
21014
- multipleOf: 0.01,
21015
- nullable: true,
21016
- type: "number"
21017
- },
21018
- replace_rule_ids: {
21019
- description: "Exact IDs of active rules whose overlapping selections will be replaced. Other selections keep their values; remaining selections may split into separate rules. Broader rules remain as fallbacks for other items. Rules left with no selections are paused. Stale or incomplete conflict selections fail.",
21020
- items: {
21021
- type: "string"
21022
- },
21023
- maxItems: 1e3,
21024
- type: "array",
21025
- uniqueItems: true
21026
- },
21027
- targets: {
21028
- description: "Targets sharing one scope. Each target covers every network Whop runs it on, and every selected event applies to every target. At most 500 target, network, and event combinations.",
21029
- items: {
21030
- properties: {
21031
- resource_id: {
21032
- description: "Campaign, ad group, or ad ID. Null for a business target.",
21033
- nullable: true,
21034
- type: "string"
21035
- },
21036
- scope: {
21037
- enum: ["business", "campaign", "ad_group", "ad"],
21038
- example: "business",
21039
- type: "string"
21040
- }
21041
- },
21042
- required: ["scope"],
21043
- type: "object"
21044
- },
21045
- maxItems: 100,
21046
- minItems: 1,
21047
- type: "array"
21048
- }
21049
- },
21050
- type: "object"
21051
- }
21052
- }
21053
- }
21054
- },
21055
- responses: {
21056
- "200": {
21057
- content: {
21058
- "application/json": {
21059
- schema: {
21060
- $ref: "#/components/schemas/AdConversionValueRule"
21061
- }
21062
- }
21063
- },
21064
- description: "Updated"
21065
- }
21066
- },
21067
- security: [
21068
- {
21069
- bearerAuth: ["ad_campaign:update"]
21070
- }
21071
- ],
21072
- summary: "Update a conversion value rule",
21073
- tags: ["Ad Conversion Value Rules"],
21074
- "x-mint": {
21075
- metadata: {
21076
- title: "Update a Conversion Value Rule",
21077
- sidebarTitle: "Update a Conversion Value Rule"
21078
- }
21079
- }
21080
- }
21081
- },
21082
- "/ad_conversion_value_rules/{id}/pause": {
21083
- post: {
21084
- description: "Pauses the rule across all selected targets and events.",
21085
- operationId: "pause",
21086
- parameters: [
21087
- {
21088
- $ref: "#/components/parameters/ApiVersionDate"
21089
- },
21090
- {
21091
- description: "Conversion value rule ID, prefixed `adcvr_`.",
21092
- in: "path",
21093
- name: "id",
21094
- required: true,
21095
- schema: {
21096
- type: "string"
21097
- }
21098
- },
21099
- {
21100
- $ref: "#/components/parameters/IdempotencyKey"
21101
- }
21102
- ],
21103
- responses: {
21104
- "200": {
21105
- content: {
21106
- "application/json": {
21107
- schema: {
21108
- $ref: "#/components/schemas/AdConversionValueRule"
21109
- }
21110
- }
21111
- },
21112
- description: "Rule"
21113
- },
21114
- "409": {
21115
- $ref: "#/components/responses/Conflict"
21116
- }
21117
- },
21118
- security: [
21119
- {
21120
- bearerAuth: ["ad_campaign:update"]
21121
- }
21122
- ],
21123
- summary: "Pause a conversion value rule",
21124
- tags: ["Ad Conversion Value Rules"],
21125
- "x-mint": {
21126
- metadata: {
21127
- title: "Pause a Conversion Value Rule",
21128
- sidebarTitle: "Pause a Conversion Value Rule"
21129
- }
21130
- }
21131
- }
21132
- },
21133
- "/ad_conversion_value_rules/{id}/unpause": {
21134
- post: {
21135
- description: "Resumes the rule and automatically replaces overlapping selections in the same transaction. Other selections keep their values, and broader rules remain as defaults. Rules with no remaining selections are paused. Resuming an already-active rule makes no changes.",
21136
- operationId: "unpause",
21137
- parameters: [
21138
- {
21139
- $ref: "#/components/parameters/ApiVersionDate"
21140
- },
21141
- {
21142
- description: "Conversion value rule ID, prefixed `adcvr_`.",
21143
- in: "path",
21144
- name: "id",
21145
- required: true,
21146
- schema: {
21147
- type: "string"
21148
- }
21149
- },
21150
- {
21151
- $ref: "#/components/parameters/IdempotencyKey"
21152
- }
21153
- ],
21154
- responses: {
21155
- "200": {
21156
- content: {
21157
- "application/json": {
21158
- schema: {
21159
- $ref: "#/components/schemas/AdConversionValueRule"
21160
- }
21161
- }
21162
- },
21163
- description: "Rule"
21164
- },
21165
- "409": {
21166
- $ref: "#/components/responses/Conflict"
21167
- }
21168
- },
21169
- security: [
21170
- {
21171
- bearerAuth: ["ad_campaign:update"]
21172
- }
21173
- ],
21174
- summary: "Unpause a conversion value rule",
21175
- tags: ["Ad Conversion Value Rules"],
21176
- "x-mint": {
21177
- metadata: {
21178
- title: "Unpause a Conversion Value Rule",
21179
- sidebarTitle: "Unpause a Conversion Value Rule"
21180
- }
21181
- }
21182
- }
21183
- },
21184
20475
  "/ad_groups": {
21185
20476
  get: {
21186
20477
  description: "Lists ad groups for the account, newest first.",
@@ -22922,7 +22213,7 @@ var native_spec_default = {
22922
22213
  },
22923
22214
  "/ad_stats": {
22924
22215
  post: {
22925
- description: "Records a runner's stats for one of their ads in one hour, and pays them for the spend. Send the ad's totals so far for an hour that started in the last 24 hours; they replace what the ad held for that hour, and its ad group's and campaign's hours are rebuilt from their ads. The spend can go up but never down. Reporting on a campaign starts with the hour of its first recorded report; earlier hours are refused. Spend over what is left of a budget (the runner's share of the day, the campaign's daily budget or the ad group's budget) is refused with the most the ad can record. Takes the runner's Whop session, a user API key, or a user OAuth token with `ad_campaign:update`. A token without that scope gets a 403, and anyone not holding the ad's campaign gets a 404.",
22216
+ description: "Records a runner's stats for one of their ads in one hour, and pays them for the spend. Send the ad's totals so far for an hour that started in the last 24 hours; they replace what the ad held for that hour, and its ad group's and campaign's hours are rebuilt from their ads. The spend can go up but never down. Reporting on a campaign starts with the hour of its first recorded report; earlier hours are refused. The spend is recorded and paid exactly as sent, with no markup added, so send it with the runner's markup already applied. Takes the runner's Whop session, a user API key, or a user OAuth token with `ad_campaign:update`. A token without that scope gets a 403, and anyone not holding the ad's campaign gets a 404.",
22926
22217
  operationId: "report-stats",
22927
22218
  parameters: [
22928
22219
  {
@@ -22959,7 +22250,7 @@ var native_spec_default = {
22959
22250
  type: ["integer", "string"]
22960
22251
  },
22961
22252
  spend: {
22962
- description: "USD spent on the ad in the hour so far, to the cent.",
22253
+ description: "The USD to be paid for the ad's hour so far, to the cent: what the ad spent plus any markup, such as 105.00 for 100.00 spent with a 5% markup.",
22963
22254
  example: 75.5,
22964
22255
  type: ["number", "string"]
22965
22256
  }
@@ -22990,7 +22281,7 @@ var native_spec_default = {
22990
22281
  }
22991
22282
  }
22992
22283
  },
22993
- description: "spend over the budget"
22284
+ description: "more clicks than impressions"
22994
22285
  },
22995
22286
  "401": {
22996
22287
  $ref: "#/components/responses/Unauthorized",
@@ -33190,7 +32481,7 @@ var native_spec_default = {
33190
32481
  },
33191
32482
  "404": {
33192
32483
  $ref: "#/components/responses/NotFound",
33193
- description: "a record-only issuer signal Whop does not forward"
32484
+ description: "no such dispute alert"
33194
32485
  }
33195
32486
  },
33196
32487
  security: [
@@ -39579,9 +38870,8 @@ var native_spec_default = {
39579
38870
  type: "string"
39580
38871
  },
39581
38872
  platform: {
39582
- description: "The platform to connect the external account on. Use `meta_business` to connect Meta Business assets, which is how Facebook Pages and Instagram accounts are connected \u2014 there is no separate `instagram` value. Use `tiktok` for TikTok accounts, `snapchat` for Snapchat Public Profiles, `linkedin` to connect the authenticated user\u2019s LinkedIn profile, `youtube` to connect their YouTube channel, or `x` to connect their X profile. Use `quickbooks` to connect the account\u2019s QuickBooks Online company: pass `account_id`, omit `scopes`, and the user picks the company in QuickBooks.",
38873
+ description: "The platform to connect the external account on. Use `tiktok` to connect the authenticated user\u2019s TikTok profile, `linkedin` for their LinkedIn profile, `youtube` for their YouTube channel, or `x` for their X profile. Use `snapchat` for Snapchat Public Profiles. Use `quickbooks` to connect the account\u2019s QuickBooks Online company: pass `account_id`, omit `scopes`, and the user picks the company in QuickBooks.",
39583
38874
  enum: [
39584
- "meta_business",
39585
38875
  "tiktok",
39586
38876
  "linkedin",
39587
38877
  "youtube",
@@ -39589,7 +38879,7 @@ var native_spec_default = {
39589
38879
  "snapchat",
39590
38880
  "quickbooks"
39591
38881
  ],
39592
- example: "meta_business",
38882
+ example: "snapchat",
39593
38883
  type: "string"
39594
38884
  },
39595
38885
  redirect_url: {
@@ -39598,7 +38888,7 @@ var native_spec_default = {
39598
38888
  type: "string"
39599
38889
  },
39600
38890
  scopes: {
39601
- description: "The connection purpose. For `meta_business` and `snapchat`, `advertise` is required and connects company advertising assets. For `linkedin`, `youtube`, and `x`, omit scopes to connect the authenticated user\u2019s profile; advertising is not supported. For `tiktok`, omit scopes to connect the authenticated user\u2019s profile, or pass `advertise` to connect company advertising assets. For `quickbooks`, omit scopes; the connection belongs to the account in `account_id`. Profile connections still request the platform permissions needed to read the profile.",
38891
+ description: "The connection purpose. For `snapchat`, `advertise` is required and connects company advertising assets. For `linkedin`, `tiktok`, `youtube`, and `x`, omit scopes to connect the authenticated user\u2019s profile. For `quickbooks`, omit scopes; the connection belongs to the account in `account_id`. Profile connections still request the platform permissions needed to read the profile.",
39602
38892
  items: {
39603
38893
  enum: ["advertise"],
39604
38894
  example: "advertise",
@@ -39622,7 +38912,7 @@ var native_spec_default = {
39622
38912
  properties: {
39623
38913
  authorize_url: {
39624
38914
  description: "The OAuth authorization URL to redirect the user to.",
39625
- example: "https://www.facebook.com/v25.0/dialog/oauth",
38915
+ example: "https://accounts.snapchat.com/login/oauth2/authorize",
39626
38916
  type: "string"
39627
38917
  }
39628
38918
  },
@@ -53856,7 +53146,7 @@ var native_spec_default = {
53856
53146
  type: ["string", "null"]
53857
53147
  },
53858
53148
  email: {
53859
- description: "The buyer's email, resolving or creating the user the payment belongs to. With `confirmation_token` it overrides the email the token carries, and is ignored when the token was created by a signed-in buyer; with a `card_present` `payment_method` it names a buyer the point of sale already knows, otherwise the sale belongs to a guest until a buyer is attached; with a `paypal` `payment_method` it names the buyer and is required unless `member_id` is provided. Ignored with `member_id`.",
53149
+ description: "The buyer's email, resolving or creating the user the payment belongs to. With `confirmation_token` it overrides the email the token carries, and is ignored when the token was created by a signed-in buyer; with a `card_present` `payment_method` it names a buyer the point of sale already knows, otherwise the sale belongs to a guest until a buyer is attached; with a `paypal` `payment_method` it names the buyer, and when it and `member_id` are both omitted the buyer is the PayPal account that approves the payment. Ignored with `member_id`.",
53860
53150
  example: "dana@shinetime.example",
53861
53151
  type: ["string", "null"]
53862
53152
  },
@@ -54151,7 +53441,7 @@ var native_spec_default = {
54151
53441
  type: "array"
54152
53442
  },
54153
53443
  member_id: {
54154
- description: "The member to charge, prefixed `mber_`. Required with `payment_method_id` unless `confirmation_token` is provided. With a `paypal` `payment_method` it names the buyer instead of `email`, and must belong to a user.",
53444
+ description: "The member to charge, prefixed `mber_`. Required with `payment_method_id` unless `confirmation_token` is provided. With a `paypal` `payment_method` it names the buyer instead of `email`, and must belong to a user; omit both to take the buyer from the PayPal account that approves.",
54155
53445
  example: "mber_xxxxxxxxxxxxxx",
54156
53446
  type: ["string", "null"]
54157
53447
  },
@@ -54186,6 +53476,17 @@ var native_spec_default = {
54186
53476
  required: ["platform"],
54187
53477
  type: "object"
54188
53478
  },
53479
+ paypal: {
53480
+ description: "Options for a `paypal` payment method.",
53481
+ properties: {
53482
+ request_shipping: {
53483
+ description: "Has PayPal ask the buyer for a shipping address. Tax is recalculated for each address the buyer picks before they approve, so the total they approve is the total charged, and the address they confirm is returned on the payment as `shipping_address`. Cannot be combined with `shipping_address`. Defaults to false.",
53484
+ example: true,
53485
+ type: "boolean"
53486
+ }
53487
+ },
53488
+ type: "object"
53489
+ },
54189
53490
  type: {
54190
53491
  description: "The kind of payment method; the member named after it carries its details.",
54191
53492
  enum: ["card_present", "paypal"],
@@ -66656,9 +65957,8 @@ var native_spec_default = {
66656
65957
  type: "string"
66657
65958
  },
66658
65959
  platform: {
66659
- description: "The platform to connect the external account on. Use `meta_business` to connect Meta Business assets, which is how Facebook Pages and Instagram accounts are connected \u2014 there is no separate `instagram` value. Use `tiktok` for TikTok accounts, `snapchat` for Snapchat Public Profiles, `linkedin` to connect the authenticated user\u2019s LinkedIn profile, `youtube` to connect their YouTube channel, or `x` to connect their X profile. Use `quickbooks` to connect the account\u2019s QuickBooks Online company: pass `account_id`, omit `scopes`, and the user picks the company in QuickBooks.",
65960
+ description: "The platform to connect the external account on. Use `tiktok` to connect the authenticated user\u2019s TikTok profile, `linkedin` for their LinkedIn profile, `youtube` for their YouTube channel, or `x` for their X profile. Use `snapchat` for Snapchat Public Profiles. Use `quickbooks` to connect the account\u2019s QuickBooks Online company: pass `account_id`, omit `scopes`, and the user picks the company in QuickBooks.",
66660
65961
  enum: [
66661
- "meta_business",
66662
65962
  "tiktok",
66663
65963
  "linkedin",
66664
65964
  "youtube",
@@ -66666,7 +65966,7 @@ var native_spec_default = {
66666
65966
  "snapchat",
66667
65967
  "quickbooks"
66668
65968
  ],
66669
- example: "meta_business",
65969
+ example: "snapchat",
66670
65970
  type: "string"
66671
65971
  },
66672
65972
  redirect_url: {
@@ -66675,7 +65975,7 @@ var native_spec_default = {
66675
65975
  type: "string"
66676
65976
  },
66677
65977
  scopes: {
66678
- description: "The connection purpose. For `meta_business` and `snapchat`, `advertise` is required and connects company advertising assets. For `linkedin`, `youtube`, and `x`, omit scopes to connect the authenticated user\u2019s profile; advertising is not supported. For `tiktok`, omit scopes to connect the authenticated user\u2019s profile, or pass `advertise` to connect company advertising assets. For `quickbooks`, omit scopes; the connection belongs to the account in `account_id`. Profile connections still request the platform permissions needed to read the profile.",
65978
+ description: "The connection purpose. For `snapchat`, `advertise` is required and connects company advertising assets. For `linkedin`, `tiktok`, `youtube`, and `x`, omit scopes to connect the authenticated user\u2019s profile. For `quickbooks`, omit scopes; the connection belongs to the account in `account_id`. Profile connections still request the platform permissions needed to read the profile.",
66679
65979
  items: {
66680
65980
  enum: ["advertise"],
66681
65981
  example: "advertise",
@@ -66698,7 +65998,7 @@ var native_spec_default = {
66698
65998
  schema: {
66699
65999
  properties: {
66700
66000
  authorize_url: {
66701
- example: "https://www.facebook.com/v25.0/dialog/oauth",
66001
+ example: "https://accounts.snapchat.com/login/oauth2/authorize",
66702
66002
  type: "string"
66703
66003
  }
66704
66004
  },
@@ -72267,7 +71567,7 @@ var native_spec_default = {
72267
71567
  requested_scopes: {
72268
71568
  description: "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.",
72269
71569
  items: {
72270
- example: "profile",
71570
+ example: "openid",
72271
71571
  type: "string"
72272
71572
  },
72273
71573
  type: "array"
@@ -78960,7 +78260,7 @@ var native_spec_default = {
78960
78260
  properties: {
78961
78261
  api_version_date: {
78962
78262
  description: "The dated API version (Api-Version-Date) to pin this webhook's payloads to. Omit to leave the webhook unpinned, tracking the current payload shape.",
78963
- example: "2026-10-29-4",
78263
+ example: "2026-10-29-8",
78964
78264
  type: ["string", "null"]
78965
78265
  },
78966
78266
  child_resource_events: {
@@ -79336,7 +78636,7 @@ var native_spec_default = {
79336
78636
  properties: {
79337
78637
  api_version_date: {
79338
78638
  description: "The dated API version (Api-Version-Date) to pin this webhook's payloads to. Only valid for `v1` webhooks. Omit to leave the current pin unchanged, or pass `null` to unpin and track the current payload shape.",
79339
- example: "2026-10-29-4",
78639
+ example: "2026-10-29-8",
79340
78640
  type: ["string", "null"]
79341
78641
  },
79342
78642
  child_resource_events: {
@@ -80225,7 +79525,7 @@ var native_spec_default = {
80225
79525
  example: {
80226
79526
  account_id: "biz_xxxxxxxxxxxxxx",
80227
79527
  api_version: "v1",
80228
- api_version_date: "2026-10-29-4",
79528
+ api_version_date: "2026-10-29-8",
80229
79529
  data: {
80230
79530
  ads_spend_usd: null,
80231
79531
  balances: [],
@@ -80546,7 +79846,7 @@ var native_spec_default = {
80546
79846
  example: {
80547
79847
  account_id: "biz_xxxxxxxxxxxxxx",
80548
79848
  api_version: "v1",
80549
- api_version_date: "2026-10-29-4",
79849
+ api_version_date: "2026-10-29-8",
80550
79850
  data: {
80551
79851
  ads_spend_usd: null,
80552
79852
  balances: [],
@@ -80867,7 +80167,7 @@ var native_spec_default = {
80867
80167
  example: {
80868
80168
  account_id: "biz_xxxxxxxxxxxxxx",
80869
80169
  api_version: "v1",
80870
- api_version_date: "2026-10-29-4",
80170
+ api_version_date: "2026-10-29-8",
80871
80171
  data: {
80872
80172
  account_id: "biz_xxxxxxxxxxxxxx",
80873
80173
  disabled_at: "2026-01-01T12:00:00.000Z",
@@ -80997,7 +80297,7 @@ var native_spec_default = {
80997
80297
  example: {
80998
80298
  account_id: "biz_xxxxxxxxxxxxxx",
80999
80299
  api_version: "v1",
81000
- api_version_date: "2026-10-29-4",
80300
+ api_version_date: "2026-10-29-8",
81001
80301
  data: {
81002
80302
  ads_spend_usd: null,
81003
80303
  balances: [],
@@ -81318,7 +80618,7 @@ var native_spec_default = {
81318
80618
  example: {
81319
80619
  account_id: "biz_xxxxxxxxxxxxxx",
81320
80620
  api_version: "v1",
81321
- api_version_date: "2026-10-29-4",
80621
+ api_version_date: "2026-10-29-8",
81322
80622
  data: {
81323
80623
  ad_campaign: {
81324
80624
  id: "adcamp_xxxxxxxxxxxxxx"
@@ -81453,14 +80753,14 @@ var native_spec_default = {
81453
80753
  descriptions: {
81454
80754
  items: {
81455
80755
  $ref: "#/components/schemas/AdText",
81456
- description: "The description shown on the ad. Entries with a null language are the ad's own copy; an ad that runs in other languages also carries one entry per language."
80756
+ description: "The description shown on the ad."
81457
80757
  },
81458
80758
  type: "array"
81459
80759
  },
81460
80760
  headlines: {
81461
80761
  items: {
81462
80762
  $ref: "#/components/schemas/AdText",
81463
- description: "The headline shown on the ad. Entries with a null language are the ad's own copy; an ad that runs in other languages also carries one entry per language."
80763
+ description: "The headline shown on the ad."
81464
80764
  },
81465
80765
  type: "array"
81466
80766
  },
@@ -81479,7 +80779,7 @@ var native_spec_default = {
81479
80779
  primary_texts: {
81480
80780
  items: {
81481
80781
  $ref: "#/components/schemas/AdText",
81482
- description: "The primary text shown in the ad body. Entries with a null language are the ad's own copy (several make text variations); an ad that runs in other languages also carries one entry per language."
80782
+ description: "The primary text shown in the ad body. Several entries make text variations."
81483
80783
  },
81484
80784
  type: "array"
81485
80785
  },
@@ -81618,7 +80918,7 @@ var native_spec_default = {
81618
80918
  example: {
81619
80919
  account_id: "biz_xxxxxxxxxxxxxx",
81620
80920
  api_version: "v1",
81621
- api_version_date: "2026-10-29-4",
80921
+ api_version_date: "2026-10-29-8",
81622
80922
  data: {
81623
80923
  bid_type: null,
81624
80924
  budget_amount: 50,
@@ -81716,6 +81016,7 @@ var native_spec_default = {
81716
81016
  description: "Whether the campaign's ads are delivering right now, and if not, why. Content review is in_review; a campaign waiting to start is processing. Account billing failures set payment_failed without changing the configured status. Successful payment retry clears that block and recalculates delivery. When several states apply at once, the highest-precedence one is returned.",
81717
81017
  enum: [
81718
81018
  "payment_failed",
81019
+ "waiting_for_ein",
81719
81020
  "in_appeal",
81720
81021
  "all_ads_rejected",
81721
81022
  "draft",
@@ -81930,7 +81231,7 @@ var native_spec_default = {
81930
81231
  example: {
81931
81232
  account_id: "biz_xxxxxxxxxxxxxx",
81932
81233
  api_version: "v1",
81933
- api_version_date: "2026-10-29-4",
81234
+ api_version_date: "2026-10-29-8",
81934
81235
  data: {
81935
81236
  bid_type: null,
81936
81237
  budget_amount: 50,
@@ -82031,6 +81332,7 @@ var native_spec_default = {
82031
81332
  description: "Whether the campaign's ads are delivering right now, and if not, why. Content review is in_review; a campaign waiting to start is processing. Account billing failures set payment_failed without changing the configured status. Successful payment retry clears that block and recalculates delivery. When several states apply at once, the highest-precedence one is returned.",
82032
81333
  enum: [
82033
81334
  "payment_failed",
81335
+ "waiting_for_ein",
82034
81336
  "in_appeal",
82035
81337
  "all_ads_rejected",
82036
81338
  "draft",
@@ -82242,7 +81544,7 @@ var native_spec_default = {
82242
81544
  example: {
82243
81545
  account_id: "biz_xxxxxxxxxxxxxx",
82244
81546
  api_version: "v1",
82245
- api_version_date: "2026-10-29-4",
81547
+ api_version_date: "2026-10-29-8",
82246
81548
  data: {
82247
81549
  ad_campaign: {
82248
81550
  id: "adcamp_xxxxxxxxxxxxxx"
@@ -82605,7 +81907,7 @@ var native_spec_default = {
82605
81907
  example: {
82606
81908
  account_id: "biz_xxxxxxxxxxxxxx",
82607
81909
  api_version: "v1",
82608
- api_version_date: "2026-10-29-4",
81910
+ api_version_date: "2026-10-29-8",
82609
81911
  data: {
82610
81912
  account: {
82611
81913
  id: "biz_xxxxxxxxxxxxx2",
@@ -82742,7 +82044,7 @@ var native_spec_default = {
82742
82044
  example: {
82743
82045
  account_id: "biz_xxxxxxxxxxxxxx",
82744
82046
  api_version: "v1",
82745
- api_version_date: "2026-10-29-4",
82047
+ api_version_date: "2026-10-29-8",
82746
82048
  data: {
82747
82049
  account: {
82748
82050
  id: "biz_xxxxxxxxxxxxx2",
@@ -82879,7 +82181,7 @@ var native_spec_default = {
82879
82181
  example: {
82880
82182
  account_id: "biz_xxxxxxxxxxxxxx",
82881
82183
  api_version: "v1",
82882
- api_version_date: "2026-10-29-4",
82184
+ api_version_date: "2026-10-29-8",
82883
82185
  data: {
82884
82186
  billing: null,
82885
82187
  canceled_at: null,
@@ -83202,7 +82504,7 @@ var native_spec_default = {
83202
82504
  example: {
83203
82505
  account_id: "biz_xxxxxxxxxxxxxx",
83204
82506
  api_version: "v1",
83205
- api_version_date: "2026-10-29-4",
82507
+ api_version_date: "2026-10-29-8",
83206
82508
  data: {
83207
82509
  billing: null,
83208
82510
  canceled_at: null,
@@ -83525,7 +82827,7 @@ var native_spec_default = {
83525
82827
  example: {
83526
82828
  account_id: "biz_xxxxxxxxxxxxxx",
83527
82829
  api_version: "v1",
83528
- api_version_date: "2026-10-29-4",
82830
+ api_version_date: "2026-10-29-8",
83529
82831
  data: {
83530
82832
  billing: null,
83531
82833
  canceled_at: null,
@@ -83848,7 +83150,7 @@ var native_spec_default = {
83848
83150
  example: {
83849
83151
  account_id: "biz_xxxxxxxxxxxxxx",
83850
83152
  api_version: "v1",
83851
- api_version_date: "2026-10-29-4",
83153
+ api_version_date: "2026-10-29-8",
83852
83154
  data: {
83853
83155
  billing: null,
83854
83156
  canceled_at: null,
@@ -84171,7 +83473,7 @@ var native_spec_default = {
84171
83473
  example: {
84172
83474
  account_id: "biz_xxxxxxxxxxxxxx",
84173
83475
  api_version: "v1",
84174
- api_version_date: "2026-10-29-4",
83476
+ api_version_date: "2026-10-29-8",
84175
83477
  data: {
84176
83478
  hosted_url: null,
84177
83479
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84321,7 +83623,7 @@ var native_spec_default = {
84321
83623
  example: {
84322
83624
  account_id: "biz_xxxxxxxxxxxxxx",
84323
83625
  api_version: "v1",
84324
- api_version_date: "2026-10-29-4",
83626
+ api_version_date: "2026-10-29-8",
84325
83627
  data: {
84326
83628
  hosted_url: null,
84327
83629
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84471,7 +83773,7 @@ var native_spec_default = {
84471
83773
  example: {
84472
83774
  account_id: "biz_xxxxxxxxxxxxxx",
84473
83775
  api_version: "v1",
84474
- api_version_date: "2026-10-29-4",
83776
+ api_version_date: "2026-10-29-8",
84475
83777
  data: {
84476
83778
  hosted_url: null,
84477
83779
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84621,7 +83923,7 @@ var native_spec_default = {
84621
83923
  example: {
84622
83924
  account_id: "biz_xxxxxxxxxxxxxx",
84623
83925
  api_version: "v1",
84624
- api_version_date: "2026-10-29-4",
83926
+ api_version_date: "2026-10-29-8",
84625
83927
  data: {
84626
83928
  hosted_url: null,
84627
83929
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84771,7 +84073,7 @@ var native_spec_default = {
84771
84073
  example: {
84772
84074
  account_id: "biz_xxxxxxxxxxxxxx",
84773
84075
  api_version: "v1",
84774
- api_version_date: "2026-10-29-4",
84076
+ api_version_date: "2026-10-29-8",
84775
84077
  data: {
84776
84078
  card_id: "icrd_xxxxxxxxxxxxxx",
84777
84079
  cardholder_id: null,
@@ -84902,7 +84204,7 @@ var native_spec_default = {
84902
84204
  example: {
84903
84205
  account_id: "biz_xxxxxxxxxxxxxx",
84904
84206
  api_version: "v1",
84905
- api_version_date: "2026-10-29-4",
84207
+ api_version_date: "2026-10-29-8",
84906
84208
  data: {
84907
84209
  card_id: "icrd_xxxxxxxxxxxxxx",
84908
84210
  cardholder_id: null,
@@ -85033,7 +84335,7 @@ var native_spec_default = {
85033
84335
  example: {
85034
84336
  account_id: "biz_xxxxxxxxxxxxxx",
85035
84337
  api_version: "v1",
85036
- api_version_date: "2026-10-29-4",
84338
+ api_version_date: "2026-10-29-8",
85037
84339
  data: {
85038
84340
  card_id: "icrd_xxxxxxxxxxxxxx",
85039
84341
  cardholder_id: null,
@@ -85164,7 +84466,7 @@ var native_spec_default = {
85164
84466
  example: {
85165
84467
  account_id: "biz_xxxxxxxxxxxxxx",
85166
84468
  api_version: "v1",
85167
- api_version_date: "2026-10-29-4",
84469
+ api_version_date: "2026-10-29-8",
85168
84470
  data: {
85169
84471
  card_id: "icrd_xxxxxxxxxxxxxx",
85170
84472
  cardholder_id: null,
@@ -85295,7 +84597,7 @@ var native_spec_default = {
85295
84597
  example: {
85296
84598
  account_id: "biz_xxxxxxxxxxxxxx",
85297
84599
  api_version: "v1",
85298
- api_version_date: "2026-10-29-4",
84600
+ api_version_date: "2026-10-29-8",
85299
84601
  data: {
85300
84602
  card_id: "icrd_xxxxxxxxxxxxxx",
85301
84603
  cardholder_id: null,
@@ -85426,7 +84728,7 @@ var native_spec_default = {
85426
84728
  example: {
85427
84729
  account_id: "biz_xxxxxxxxxxxxxx",
85428
84730
  api_version: "v1",
85429
- api_version_date: "2026-10-29-4",
84731
+ api_version_date: "2026-10-29-8",
85430
84732
  data: {
85431
84733
  amount: "75000000000",
85432
84734
  available_at: null,
@@ -85558,7 +84860,7 @@ var native_spec_default = {
85558
84860
  example: {
85559
84861
  account_id: "biz_xxxxxxxxxxxxxx",
85560
84862
  api_version: "v1",
85561
- api_version_date: "2026-10-29-4",
84863
+ api_version_date: "2026-10-29-8",
85562
84864
  data: {
85563
84865
  acceptable: true,
85564
84866
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -85739,7 +85041,7 @@ var native_spec_default = {
85739
85041
  example: {
85740
85042
  account_id: "biz_xxxxxxxxxxxxxx",
85741
85043
  api_version: "v1",
85742
- api_version_date: "2026-10-29-4",
85044
+ api_version_date: "2026-10-29-8",
85743
85045
  data: {
85744
85046
  acceptable: false,
85745
85047
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -85920,7 +85222,7 @@ var native_spec_default = {
85920
85222
  example: {
85921
85223
  account_id: "biz_xxxxxxxxxxxxxx",
85922
85224
  api_version: "v1",
85923
- api_version_date: "2026-10-29-4",
85225
+ api_version_date: "2026-10-29-8",
85924
85226
  data: {
85925
85227
  account_id: null,
85926
85228
  amount: 25,
@@ -86052,7 +85354,7 @@ var native_spec_default = {
86052
85354
  example: {
86053
85355
  account_id: "biz_xxxxxxxxxxxxxx",
86054
85356
  api_version: "v1",
86055
- api_version_date: "2026-10-29-4",
85357
+ api_version_date: "2026-10-29-8",
86056
85358
  data: {
86057
85359
  account_id: "biz_xxxxxxxxxxxxxx",
86058
85360
  apple_pay: null,
@@ -86187,7 +85489,7 @@ var native_spec_default = {
86187
85489
  example: {
86188
85490
  account_id: "biz_xxxxxxxxxxxxxx",
86189
85491
  api_version: "v1",
86190
- api_version_date: "2026-10-29-4",
85492
+ api_version_date: "2026-10-29-8",
86191
85493
  data: {
86192
85494
  account_id: "biz_xxxxxxxxxxxxxx",
86193
85495
  apple_pay: null,
@@ -86322,7 +85624,7 @@ var native_spec_default = {
86322
85624
  example: {
86323
85625
  account_id: "biz_xxxxxxxxxxxxxx",
86324
85626
  api_version: "v1",
86325
- api_version_date: "2026-10-29-4",
85627
+ api_version_date: "2026-10-29-8",
86326
85628
  data: {
86327
85629
  account_id: "biz_xxxxxxxxxxxxxx",
86328
85630
  apple_pay: null,
@@ -86457,7 +85759,7 @@ var native_spec_default = {
86457
85759
  example: {
86458
85760
  account_id: "biz_xxxxxxxxxxxxxx",
86459
85761
  api_version: "v1",
86460
- api_version_date: "2026-10-29-4",
85762
+ api_version_date: "2026-10-29-8",
86461
85763
  data: {
86462
85764
  created_at: "2026-01-01T12:00:00.000Z",
86463
85765
  download_url: "https://s3.amazonaws.com/uploads/exports/members-export.csv",
@@ -86578,7 +85880,7 @@ var native_spec_default = {
86578
85880
  example: {
86579
85881
  account_id: "biz_xxxxxxxxxxxxxx",
86580
85882
  api_version: "v1",
86581
- api_version_date: "2026-10-29-4",
85883
+ api_version_date: "2026-10-29-8",
86582
85884
  data: {
86583
85885
  created_at: "2026-01-01T12:00:00.000Z",
86584
85886
  download_url: null,
@@ -86699,7 +86001,7 @@ var native_spec_default = {
86699
86001
  example: {
86700
86002
  account_id: "biz_xxxxxxxxxxxxxx",
86701
86003
  api_version: "v1",
86702
- api_version_date: "2026-10-29-4",
86004
+ api_version_date: "2026-10-29-8",
86703
86005
  data: {
86704
86006
  amount: "512345000000",
86705
86007
  available_at: "2026-01-01T12:00:00.000Z",
@@ -86836,7 +86138,7 @@ var native_spec_default = {
86836
86138
  example: {
86837
86139
  account_id: "biz_xxxxxxxxxxxxxx",
86838
86140
  api_version: "v1",
86839
- api_version_date: "2026-10-29-4",
86141
+ api_version_date: "2026-10-29-8",
86840
86142
  data: {
86841
86143
  id: "idpf_xxxxxxxxxxxxxx"
86842
86144
  },
@@ -86958,7 +86260,7 @@ var native_spec_default = {
86958
86260
  example: {
86959
86261
  account_id: "biz_xxxxxxxxxxxxxx",
86960
86262
  api_version: "v1",
86961
- api_version_date: "2026-10-29-4",
86263
+ api_version_date: "2026-10-29-8",
86962
86264
  data: {
86963
86265
  access_level: "customer",
86964
86266
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -87105,7 +86407,7 @@ var native_spec_default = {
87105
86407
  example: {
87106
86408
  account_id: "biz_xxxxxxxxxxxxxx",
87107
86409
  api_version: "v1",
87108
- api_version_date: "2026-10-29-4",
86410
+ api_version_date: "2026-10-29-8",
87109
86411
  data: {
87110
86412
  access_level: "customer",
87111
86413
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -87252,7 +86554,7 @@ var native_spec_default = {
87252
86554
  example: {
87253
86555
  account_id: "biz_xxxxxxxxxxxxxx",
87254
86556
  api_version: "v1",
87255
- api_version_date: "2026-10-29-4",
86557
+ api_version_date: "2026-10-29-8",
87256
86558
  data: {
87257
86559
  account: {
87258
86560
  id: "biz_xxxxxxxxxxxxxx",
@@ -87418,7 +86720,7 @@ var native_spec_default = {
87418
86720
  example: {
87419
86721
  account_id: "biz_xxxxxxxxxxxxxx",
87420
86722
  api_version: "v1",
87421
- api_version_date: "2026-10-29-4",
86723
+ api_version_date: "2026-10-29-8",
87422
86724
  data: {
87423
86725
  account: {
87424
86726
  id: "biz_xxxxxxxxxxxxxx",
@@ -87590,7 +86892,7 @@ var native_spec_default = {
87590
86892
  example: {
87591
86893
  account_id: "biz_xxxxxxxxxxxxxx",
87592
86894
  api_version: "v1",
87593
- api_version_date: "2026-10-29-4",
86895
+ api_version_date: "2026-10-29-8",
87594
86896
  data: {
87595
86897
  account: {
87596
86898
  id: "biz_xxxxxxxxxxxxxx",
@@ -87756,7 +87058,7 @@ var native_spec_default = {
87756
87058
  example: {
87757
87059
  account_id: "biz_xxxxxxxxxxxxxx",
87758
87060
  api_version: "v1",
87759
- api_version_date: "2026-10-29-4",
87061
+ api_version_date: "2026-10-29-8",
87760
87062
  data: {
87761
87063
  account_id: "biz_xxxxxxxxxxxxxx",
87762
87064
  amount_after_fees: {
@@ -88042,7 +87344,7 @@ var native_spec_default = {
88042
87344
  example: {
88043
87345
  account_id: "biz_xxxxxxxxxxxxxx",
88044
87346
  api_version: "v1",
88045
- api_version_date: "2026-10-29-4",
87347
+ api_version_date: "2026-10-29-8",
88046
87348
  data: {
88047
87349
  account_id: "biz_xxxxxxxxxxxxxx",
88048
87350
  amount_after_fees: {
@@ -88328,7 +87630,7 @@ var native_spec_default = {
88328
87630
  example: {
88329
87631
  account_id: "biz_xxxxxxxxxxxxxx",
88330
87632
  api_version: "v1",
88331
- api_version_date: "2026-10-29-4",
87633
+ api_version_date: "2026-10-29-8",
88332
87634
  data: {
88333
87635
  account_id: "biz_xxxxxxxxxxxxxx",
88334
87636
  amount_after_fees: {
@@ -88614,7 +87916,7 @@ var native_spec_default = {
88614
87916
  example: {
88615
87917
  account_id: "biz_xxxxxxxxxxxxxx",
88616
87918
  api_version: "v1",
88617
- api_version_date: "2026-10-29-4",
87919
+ api_version_date: "2026-10-29-8",
88618
87920
  data: {
88619
87921
  account_id: "biz_xxxxxxxxxxxxxx",
88620
87922
  amount_after_fees: {
@@ -88900,7 +88202,7 @@ var native_spec_default = {
88900
88202
  example: {
88901
88203
  account_id: "biz_xxxxxxxxxxxxxx",
88902
88204
  api_version: "v1",
88903
- api_version_date: "2026-10-29-4",
88205
+ api_version_date: "2026-10-29-8",
88904
88206
  data: {
88905
88207
  account_id: "biz_xxxxxxxxxxxxxx",
88906
88208
  amount_after_fees: {
@@ -89180,7 +88482,7 @@ var native_spec_default = {
89180
88482
  example: {
89181
88483
  account_id: "biz_xxxxxxxxxxxxxx",
89182
88484
  api_version: "v1",
89183
- api_version_date: "2026-10-29-4",
88485
+ api_version_date: "2026-10-29-8",
89184
88486
  data: {
89185
88487
  account_id: "biz_xxxxxxxxxxxxxx",
89186
88488
  amount_after_fees: {
@@ -89472,7 +88774,7 @@ var native_spec_default = {
89472
88774
  example: {
89473
88775
  account_id: "biz_xxxxxxxxxxxxxx",
89474
88776
  api_version: "v1",
89475
- api_version_date: "2026-10-29-4",
88777
+ api_version_date: "2026-10-29-8",
89476
88778
  data: {
89477
88779
  account_id: "biz_xxxxxxxxxxxxxx",
89478
88780
  amount_after_fees: {
@@ -89758,7 +89060,7 @@ var native_spec_default = {
89758
89060
  example: {
89759
89061
  account_id: "biz_xxxxxxxxxxxxxx",
89760
89062
  api_version: "v1",
89761
- api_version_date: "2026-10-29-4",
89063
+ api_version_date: "2026-10-29-8",
89762
89064
  data: {
89763
89065
  amount: "10.0",
89764
89066
  cancelable: false,
@@ -90153,7 +89455,7 @@ var native_spec_default = {
90153
89455
  example: {
90154
89456
  account_id: "biz_xxxxxxxxxxxxxx",
90155
89457
  api_version: "v1",
90156
- api_version_date: "2026-10-29-4",
89458
+ api_version_date: "2026-10-29-8",
90157
89459
  data: {
90158
89460
  amount: "10.0",
90159
89461
  cancelable: false,
@@ -90545,7 +89847,7 @@ var native_spec_default = {
90545
89847
  example: {
90546
89848
  account_id: "biz_xxxxxxxxxxxxxx",
90547
89849
  api_version: "v1",
90548
- api_version_date: "2026-10-29-4",
89850
+ api_version_date: "2026-10-29-8",
90549
89851
  data: {
90550
89852
  amount: "10.0",
90551
89853
  cancelable: false,
@@ -90933,7 +90235,7 @@ var native_spec_default = {
90933
90235
  example: {
90934
90236
  account_id: "biz_xxxxxxxxxxxxxx",
90935
90237
  api_version: "v1",
90936
- api_version_date: "2026-10-29-4",
90238
+ api_version_date: "2026-10-29-8",
90937
90239
  data: {
90938
90240
  account_reference: "4483",
90939
90241
  bank_verification_state: null,
@@ -91416,7 +90718,7 @@ var native_spec_default = {
91416
90718
  example: {
91417
90719
  account_id: "biz_xxxxxxxxxxxxxx",
91418
90720
  api_version: "v1",
91419
- api_version_date: "2026-10-29-4",
90721
+ api_version_date: "2026-10-29-8",
91420
90722
  data: {
91421
90723
  account: {
91422
90724
  id: "biz_xxxxxxxxxxxxxx",
@@ -91720,7 +91022,7 @@ var native_spec_default = {
91720
91022
  example: {
91721
91023
  account_id: "biz_xxxxxxxxxxxxxx",
91722
91024
  api_version: "v1",
91723
- api_version_date: "2026-10-29-4",
91025
+ api_version_date: "2026-10-29-8",
91724
91026
  data: {
91725
91027
  account: {
91726
91028
  id: "biz_xxxxxxxxxxxxxx",
@@ -92024,7 +91326,7 @@ var native_spec_default = {
92024
91326
  example: {
92025
91327
  account_id: "biz_xxxxxxxxxxxxxx",
92026
91328
  api_version: "v1",
92027
- api_version_date: "2026-10-29-4",
91329
+ api_version_date: "2026-10-29-8",
92028
91330
  data: {
92029
91331
  account: {
92030
91332
  id: "biz_xxxxxxxxxxxxxx",
@@ -92328,7 +91630,7 @@ var native_spec_default = {
92328
91630
  example: {
92329
91631
  account_id: "biz_xxxxxxxxxxxxxx",
92330
91632
  api_version: "v1",
92331
- api_version_date: "2026-10-29-4",
91633
+ api_version_date: "2026-10-29-8",
92332
91634
  data: {
92333
91635
  account: {
92334
91636
  id: "biz_xxxxxxxxxxxxxx",
@@ -92480,7 +91782,7 @@ var native_spec_default = {
92480
91782
  example: {
92481
91783
  account_id: "biz_xxxxxxxxxxxxxx",
92482
91784
  api_version: "v1",
92483
- api_version_date: "2026-10-29-4",
91785
+ api_version_date: "2026-10-29-8",
92484
91786
  data: {
92485
91787
  account: {
92486
91788
  id: "biz_xxxxxxxxxxxxxx",
@@ -92632,7 +91934,7 @@ var native_spec_default = {
92632
91934
  example: {
92633
91935
  account_id: "biz_xxxxxxxxxxxxxx",
92634
91936
  api_version: "v1",
92635
- api_version_date: "2026-10-29-4",
91937
+ api_version_date: "2026-10-29-8",
92636
91938
  data: {
92637
91939
  account: {
92638
91940
  id: "biz_xxxxxxxxxxxxxx",
@@ -92784,7 +92086,7 @@ var native_spec_default = {
92784
92086
  example: {
92785
92087
  account_id: "biz_xxxxxxxxxxxxxx",
92786
92088
  api_version: "v1",
92787
- api_version_date: "2026-10-29-4",
92089
+ api_version_date: "2026-10-29-8",
92788
92090
  data: {
92789
92091
  account: {
92790
92092
  id: "biz_xxxxxxxxxxxxxx",
@@ -92936,7 +92238,7 @@ var native_spec_default = {
92936
92238
  example: {
92937
92239
  account_id: "biz_xxxxxxxxxxxxxx",
92938
92240
  api_version: "v1",
92939
- api_version_date: "2026-10-29-4",
92241
+ api_version_date: "2026-10-29-8",
92940
92242
  data: {
92941
92243
  account: {
92942
92244
  id: "biz_xxxxxxxxxxxxxx",
@@ -93088,7 +92390,7 @@ var native_spec_default = {
93088
92390
  example: {
93089
92391
  account_id: "biz_xxxxxxxxxxxxxx",
93090
92392
  api_version: "v1",
93091
- api_version_date: "2026-10-29-4",
92393
+ api_version_date: "2026-10-29-8",
93092
92394
  data: {
93093
92395
  account: {
93094
92396
  id: "biz_xxxxxxxxxxxxxx",
@@ -93248,7 +92550,7 @@ var native_spec_default = {
93248
92550
  example: {
93249
92551
  account_id: "biz_xxxxxxxxxxxxxx",
93250
92552
  api_version: "v1",
93251
- api_version_date: "2026-10-29-4",
92553
+ api_version_date: "2026-10-29-8",
93252
92554
  data: {
93253
92555
  account: {
93254
92556
  id: "biz_xxxxxxxxxxxxxx",
@@ -93408,7 +92710,7 @@ var native_spec_default = {
93408
92710
  example: {
93409
92711
  account_id: "biz_xxxxxxxxxxxxxx",
93410
92712
  api_version: "v1",
93411
- api_version_date: "2026-10-29-4",
92713
+ api_version_date: "2026-10-29-8",
93412
92714
  data: {
93413
92715
  account: {
93414
92716
  id: "biz_xxxxxxxxxxxxxx",
@@ -93568,7 +92870,7 @@ var native_spec_default = {
93568
92870
  example: {
93569
92871
  account_id: "biz_xxxxxxxxxxxxxx",
93570
92872
  api_version: "v1",
93571
- api_version_date: "2026-10-29-4",
92873
+ api_version_date: "2026-10-29-8",
93572
92874
  data: {
93573
92875
  account_id: "biz_xxxxxxxxxxxxxx",
93574
92876
  checkout_configuration_id: null,
@@ -93709,7 +93011,7 @@ var native_spec_default = {
93709
93011
  example: {
93710
93012
  account_id: "biz_xxxxxxxxxxxxxx",
93711
93013
  api_version: "v1",
93712
- api_version_date: "2026-10-29-4",
93014
+ api_version_date: "2026-10-29-8",
93713
93015
  data: {
93714
93016
  account_id: "biz_xxxxxxxxxxxxxx",
93715
93017
  checkout_configuration_id: null,
@@ -93853,7 +93155,7 @@ var native_spec_default = {
93853
93155
  example: {
93854
93156
  account_id: "biz_xxxxxxxxxxxxxx",
93855
93157
  api_version: "v1",
93856
- api_version_date: "2026-10-29-4",
93158
+ api_version_date: "2026-10-29-8",
93857
93159
  data: {
93858
93160
  account_id: "biz_xxxxxxxxxxxxxx",
93859
93161
  checkout_configuration_id: null,
@@ -94032,7 +93334,7 @@ var native_spec_default = {
94032
93334
  example: {
94033
93335
  account_id: "biz_xxxxxxxxxxxxxx",
94034
93336
  api_version: "v1",
94035
- api_version_date: "2026-10-29-4",
93337
+ api_version_date: "2026-10-29-8",
94036
93338
  data: {
94037
93339
  account_id: "biz_xxxxxxxxxxxxxx",
94038
93340
  carrier: "ups",
@@ -94156,7 +93458,7 @@ var native_spec_default = {
94156
93458
  example: {
94157
93459
  account_id: "biz_xxxxxxxxxxxxxx",
94158
93460
  api_version: "v1",
94159
- api_version_date: "2026-10-29-4",
93461
+ api_version_date: "2026-10-29-8",
94160
93462
  data: {
94161
93463
  account_id: "biz_xxxxxxxxxxxxxx",
94162
93464
  carrier: "ups",
@@ -94280,7 +93582,7 @@ var native_spec_default = {
94280
93582
  example: {
94281
93583
  account_id: "biz_xxxxxxxxxxxxxx",
94282
93584
  api_version: "v1",
94283
- api_version_date: "2026-10-29-4",
93585
+ api_version_date: "2026-10-29-8",
94284
93586
  data: {
94285
93587
  account: {
94286
93588
  id: "biz_xxxxxxxxxxxxxx",
@@ -94512,7 +93814,7 @@ var native_spec_default = {
94512
93814
  example: {
94513
93815
  account_id: "biz_xxxxxxxxxxxxxx",
94514
93816
  api_version: "v1",
94515
- api_version_date: "2026-10-29-4",
93817
+ api_version_date: "2026-10-29-8",
94516
93818
  data: {
94517
93819
  amount: {
94518
93820
  amount: "250.00",
@@ -94835,7 +94137,7 @@ var native_spec_default = {
94835
94137
  example: {
94836
94138
  account_id: "biz_xxxxxxxxxxxxxx",
94837
94139
  api_version: "v1",
94838
- api_version_date: "2026-10-29-4",
94140
+ api_version_date: "2026-10-29-8",
94839
94141
  data: {
94840
94142
  amount: {
94841
94143
  amount: "250.00",
@@ -95158,7 +94460,7 @@ var native_spec_default = {
95158
94460
  example: {
95159
94461
  account_id: "biz_xxxxxxxxxxxxxx",
95160
94462
  api_version: "v1",
95161
- api_version_date: "2026-10-29-4",
94463
+ api_version_date: "2026-10-29-8",
95162
94464
  data: {
95163
94465
  amount: null,
95164
94466
  created_at: "2026-01-01T12:00:00.000Z",
@@ -95437,7 +94739,7 @@ var native_spec_default = {
95437
94739
  name: "Api-Version-Date",
95438
94740
  required: false,
95439
94741
  schema: {
95440
- example: "2026-10-29-4",
94742
+ example: "2026-10-29-8",
95441
94743
  type: "string"
95442
94744
  }
95443
94745
  },
@@ -100381,6 +99683,29 @@ var native_spec_default = {
100381
99683
  example: 1,
100382
99684
  type: "integer"
100383
99685
  },
99686
+ levels: {
99687
+ items: {
99688
+ $ref: "#/components/schemas/AccountProcessingOfferLevel",
99689
+ description: "Every level from `0` through `10`, with the monthly qualifying spend it takes and its card processing percentage in each card region."
99690
+ },
99691
+ type: "array"
99692
+ },
99693
+ monthly_ads_spend: {
99694
+ $ref: "#/components/schemas/Money",
99695
+ description: "Charged Whop Ads spend this calendar month across every account the owner owns, in USD."
99696
+ },
99697
+ monthly_card_spend: {
99698
+ $ref: "#/components/schemas/Money",
99699
+ description: "Effective Whop Card spend this calendar month across every account the owner owns, in USD."
99700
+ },
99701
+ monthly_qualifying_spend: {
99702
+ $ref: "#/components/schemas/Money",
99703
+ description: "Qualifying spend this calendar month across every account the owner owns, in USD: Whop Ads spend, Whop Card spend, and a tenth of perpetual trading volume."
99704
+ },
99705
+ monthly_trading_volume: {
99706
+ $ref: "#/components/schemas/Money",
99707
+ description: "Perpetual trading notional volume this calendar month across every account the owner owns, in USD."
99708
+ },
100384
99709
  points: {
100385
99710
  description: "Points earned this month across every account the owner owns.",
100386
99711
  example: 41e3,
@@ -100395,6 +99720,11 @@ var native_spec_default = {
100395
99720
  example: 59e3,
100396
99721
  type: ["integer", "null"]
100397
99722
  },
99723
+ processing_rate_percentage: {
99724
+ description: "The standard US and Canada card processing percentage at `current`, before any account's custom rate.",
99725
+ example: 2.6,
99726
+ type: "number"
99727
+ },
100398
99728
  resets_at: {
100399
99729
  description: "When this month's points reset to zero, as an ISO 8601 timestamp.",
100400
99730
  example: "2026-01-01T12:00:00.000Z",
@@ -100407,6 +99737,12 @@ var native_spec_default = {
100407
99737
  "points_by_source",
100408
99738
  "points_to_next",
100409
99739
  "resets_at",
99740
+ "processing_rate_percentage",
99741
+ "monthly_qualifying_spend",
99742
+ "monthly_ads_spend",
99743
+ "monthly_card_spend",
99744
+ "monthly_trading_volume",
99745
+ "levels",
100410
99746
  "boosted"
100411
99747
  ],
100412
99748
  type: "object"
@@ -100682,6 +100018,61 @@ var native_spec_default = {
100682
100018
  ],
100683
100019
  type: "object"
100684
100020
  },
100021
+ AccountProcessingOfferLevel: {
100022
+ properties: {
100023
+ level: {
100024
+ description: "The processing level.",
100025
+ example: 0,
100026
+ type: "integer"
100027
+ },
100028
+ minimum_spend: {
100029
+ $ref: "#/components/schemas/Money",
100030
+ description: "The monthly qualifying spend required to reach this level."
100031
+ },
100032
+ processing_rate_percentage: {
100033
+ description: "The standard US and Canada card processing percentage at this level, regardless of the account's custom rate.",
100034
+ example: 2.7,
100035
+ type: "number"
100036
+ },
100037
+ regional_rates: {
100038
+ items: {
100039
+ $ref: "#/components/schemas/AccountProcessingOfferRegionalRate",
100040
+ description: "The card processing percentage at this level for each card region, starting with US and Canada."
100041
+ },
100042
+ type: "array"
100043
+ }
100044
+ },
100045
+ required: [
100046
+ "level",
100047
+ "minimum_spend",
100048
+ "processing_rate_percentage",
100049
+ "regional_rates"
100050
+ ],
100051
+ type: "object"
100052
+ },
100053
+ AccountProcessingOfferRegionalRate: {
100054
+ properties: {
100055
+ processing_rate_percentage: {
100056
+ description: "The standard card processing percentage at this level for cards from this region, regardless of the account's custom rate.",
100057
+ example: 1.7,
100058
+ type: "number"
100059
+ },
100060
+ region: {
100061
+ description: "The card region this fee applies to.",
100062
+ enum: [
100063
+ "us_and_canada",
100064
+ "europe_uk_and_australia",
100065
+ "latin_america",
100066
+ "peru",
100067
+ "brazil"
100068
+ ],
100069
+ example: "europe_uk_and_australia",
100070
+ type: "string"
100071
+ }
100072
+ },
100073
+ required: ["region", "processing_rate_percentage"],
100074
+ type: "object"
100075
+ },
100685
100076
  AccountRecommendedAction: {
100686
100077
  properties: {
100687
100078
  action: {
@@ -101512,7 +100903,7 @@ var native_spec_default = {
101512
100903
  descriptions: {
101513
100904
  items: {
101514
100905
  $ref: "#/components/schemas/AdText",
101515
- description: "The description shown on the ad. Entries with a null language are the ad's own copy; an ad that runs in other languages also carries one entry per language."
100906
+ description: "The description shown on the ad."
101516
100907
  },
101517
100908
  type: "array"
101518
100909
  },
@@ -101524,7 +100915,7 @@ var native_spec_default = {
101524
100915
  headlines: {
101525
100916
  items: {
101526
100917
  $ref: "#/components/schemas/AdText",
101527
- description: "The headline shown on the ad. Entries with a null language are the ad's own copy; an ad that runs in other languages also carries one entry per language."
100918
+ description: "The headline shown on the ad."
101528
100919
  },
101529
100920
  type: "array"
101530
100921
  },
@@ -101563,7 +100954,7 @@ var native_spec_default = {
101563
100954
  primary_texts: {
101564
100955
  items: {
101565
100956
  $ref: "#/components/schemas/AdText",
101566
- description: "The primary text shown in the ad body. Entries with a null language are the ad's own copy (several make text variations); an ad that runs in other languages also carries one entry per language."
100957
+ description: "The primary text shown in the ad body. Several entries make text variations."
101567
100958
  },
101568
100959
  type: "array"
101569
100960
  },
@@ -101928,6 +101319,7 @@ var native_spec_default = {
101928
101319
  description: "Whether the campaign's ads are delivering right now, and if not, why. Content review is in_review; a campaign waiting to start is processing. Account billing failures set payment_failed without changing the configured status. Successful payment retry clears that block and recalculates delivery. When several states apply at once, the highest-precedence one is returned.",
101929
101320
  enum: [
101930
101321
  "payment_failed",
101322
+ "waiting_for_ein",
101931
101323
  "in_appeal",
101932
101324
  "all_ads_rejected",
101933
101325
  "draft",
@@ -102219,142 +101611,6 @@ var native_spec_default = {
102219
101611
  ],
102220
101612
  type: "object"
102221
101613
  },
102222
- AdConversionValueRule: {
102223
- properties: {
102224
- account_id: {
102225
- description: "Business that owns this shared, editable rule.",
102226
- example: "biz_xxxxxxxxxxxxxx",
102227
- type: "string"
102228
- },
102229
- adjustment_type: {
102230
- description: "Set a fixed amount or change the original value by a signed percentage.",
102231
- enum: ["fixed", "percentage"],
102232
- example: "fixed",
102233
- type: "string"
102234
- },
102235
- created_at: {
102236
- description: "When the rule was created, as an ISO 8601 timestamp.",
102237
- example: "2026-01-01T12:00:00.000Z",
102238
- type: "string"
102239
- },
102240
- events: {
102241
- items: {
102242
- $ref: "#/components/schemas/AdConversionValueRuleEvent",
102243
- description: "Events adjusted on every selected target."
102244
- },
102245
- type: "array"
102246
- },
102247
- fixed_value: {
102248
- description: "Amount sent for a fixed rule. Null for a percentage rule.",
102249
- oneOf: [
102250
- {
102251
- $ref: "#/components/schemas/Money"
102252
- },
102253
- {
102254
- type: "null"
102255
- }
102256
- ]
102257
- },
102258
- id: {
102259
- description: "Conversion value rule ID, prefixed adcvr_.",
102260
- example: "adcvr_xxxxxxxxxxxxxx",
102261
- type: "string"
102262
- },
102263
- metadata: {
102264
- description: "Free-form string keys and values for the caller.",
102265
- example: {},
102266
- type: "object"
102267
- },
102268
- percentage_change: {
102269
- description: "Signed percent change: 20 increases by 20%, negative 20 decreases by 20%. The sent value cannot go below zero. Null for a fixed rule.",
102270
- example: null,
102271
- type: ["number", "null"]
102272
- },
102273
- status: {
102274
- description: "Whether this rule is active or paused.",
102275
- enum: ["active", "paused"],
102276
- example: "active",
102277
- type: "string"
102278
- },
102279
- targets: {
102280
- items: {
102281
- $ref: "#/components/schemas/AdConversionValueRuleTarget",
102282
- description: "Targets covered by this rule. Every selected event applies to every target."
102283
- },
102284
- type: "array"
102285
- },
102286
- updated_at: {
102287
- description: "When the rule was edited, as an ISO 8601 timestamp.",
102288
- example: "2026-01-01T12:00:00.000Z",
102289
- type: "string"
102290
- }
102291
- },
102292
- required: [
102293
- "id",
102294
- "account_id",
102295
- "status",
102296
- "targets",
102297
- "events",
102298
- "adjustment_type",
102299
- "fixed_value",
102300
- "percentage_change",
102301
- "metadata",
102302
- "created_at",
102303
- "updated_at"
102304
- ],
102305
- type: "object"
102306
- },
102307
- AdConversionValueRuleEvent: {
102308
- properties: {
102309
- custom_name: {
102310
- description: "Exact custom event name. Null for standard events.",
102311
- example: null,
102312
- type: ["string", "null"]
102313
- },
102314
- event_name: {
102315
- description: "Event to adjust. Purchase includes Whop purchases and external purchase events.",
102316
- enum: [
102317
- "purchase",
102318
- "subscribe",
102319
- "start_trial",
102320
- "lead",
102321
- "complete_registration",
102322
- "submit_application",
102323
- "schedule",
102324
- "contact",
102325
- "view_content",
102326
- "add_to_cart",
102327
- "custom"
102328
- ],
102329
- example: "lead",
102330
- type: "string"
102331
- }
102332
- },
102333
- required: ["event_name", "custom_name"],
102334
- type: "object"
102335
- },
102336
- AdConversionValueRuleTarget: {
102337
- properties: {
102338
- resource_id: {
102339
- description: "Selected campaign, ad group, or ad ID. Null for a business target.",
102340
- example: null,
102341
- type: ["string", "null"]
102342
- },
102343
- resource_title: {
102344
- description: "Name of the selected item. Null when it is no longer available.",
102345
- example: "Shine Time Auto Detailing",
102346
- type: ["string", "null"]
102347
- },
102348
- scope: {
102349
- description: "Business, campaign, ad group, or ad covered by this target.",
102350
- enum: ["business", "campaign", "ad_group", "ad"],
102351
- example: "business",
102352
- type: "string"
102353
- }
102354
- },
102355
- required: ["scope", "resource_id", "resource_title"],
102356
- type: "object"
102357
- },
102358
101614
  AdCreative: {
102359
101615
  properties: {
102360
101616
  crop: {
@@ -102380,7 +101636,7 @@ var native_spec_default = {
102380
101636
  type: "string"
102381
101637
  },
102382
101638
  language: {
102383
- description: "ISO 639 code of the language this image or video is shown for, such as `es`. On an ad that runs in several languages, the ad's own creative carries the language its copy is written in. It's `null` on an ad that runs in one language.",
101639
+ description: "Always `null`. Translations are no longer available.",
102384
101640
  example: null,
102385
101641
  type: ["string", "null"]
102386
101642
  },
@@ -103083,7 +102339,7 @@ var native_spec_default = {
103083
102339
  AdGroupDemographics: {
103084
102340
  properties: {
103085
102341
  automatic: {
103086
- description: "Whether automatic audience targeting is on. When `true`, delivery can reach beyond the ages, genders, and detailed targeting you set, treating them as suggestions.",
102342
+ description: "Whether automatic audience targeting is on. When `true`, delivery can reach beyond the ages and genders you set, treating them as suggestions.",
103087
102343
  example: false,
103088
102344
  type: "boolean"
103089
102345
  },
@@ -103111,7 +102367,7 @@ var native_spec_default = {
103111
102367
  description: "Age, gender, and automatic-audience targeting.",
103112
102368
  properties: {
103113
102369
  automatic: {
103114
- description: "Turn on automatic audience targeting: delivery can reach beyond the ages, genders, and detailed targeting you set, treating them as suggestions.",
102370
+ description: "Turn on automatic audience targeting: delivery can reach beyond the ages and genders you set, treating them as suggestions.",
103115
102371
  example: false,
103116
102372
  type: "boolean"
103117
102373
  },
@@ -103608,8 +102864,8 @@ var native_spec_default = {
103608
102864
  AdText: {
103609
102865
  properties: {
103610
102866
  language: {
103611
- description: "ISO 639 code of the language this text is in, such as `es`. On an ad that runs in several languages, the ad's own copy carries the language it is written in. It's `null` on an ad that runs in one language.",
103612
- example: "en",
102867
+ description: "Always `null`. Translations are no longer available.",
102868
+ example: null,
103613
102869
  type: ["string", "null"]
103614
102870
  },
103615
102871
  text: {
@@ -103707,9 +102963,11 @@ var native_spec_default = {
103707
102963
  "2026-10-29-1",
103708
102964
  "2026-10-29-2",
103709
102965
  "2026-10-29-3",
103710
- "2026-10-29-4"
102966
+ "2026-10-29-4",
102967
+ "2026-10-29-5",
102968
+ "2026-10-29-8"
103711
102969
  ],
103712
- example: "2026-10-29-4",
102970
+ example: "2026-10-29-8",
103713
102971
  type: "string"
103714
102972
  },
103715
102973
  created_at: {
@@ -104803,7 +104061,7 @@ var native_spec_default = {
104803
104061
  },
104804
104062
  name: {
104805
104063
  description: "Human-readable name of the action.",
104806
- example: "company:basic:read",
104064
+ example: "Read business information",
104807
104065
  type: "string"
104808
104066
  }
104809
104067
  },
@@ -104853,7 +104111,7 @@ var native_spec_default = {
104853
104111
  type: "string"
104854
104112
  },
104855
104113
  error_message: {
104856
- description: "Processing error message. `null` unless processing is partial or failed.",
104114
+ description: "Why a `pending` audience hasn't started, or why a `partial` or `failed` one isn't fully built. `null` when there is nothing to report.",
104857
104115
  example: "412 of 1,000 rows had no email or phone number, so the list could not be matched.",
104858
104116
  type: ["string", "null"]
104859
104117
  },
@@ -104932,7 +104190,7 @@ var native_spec_default = {
104932
104190
  type: "string"
104933
104191
  },
104934
104192
  status: {
104935
- description: "Current state of audience creation. `syncing` means Whop is sending matched rows to connected ad accounts. When status is `partial` or `failed`, `error_message` explains what went wrong.",
104193
+ description: "Current state of audience creation. `syncing` means Whop is sending matched rows to connected ad accounts. When a `pending` audience is waiting on something, such as an ad account to upload to, `error_message` says what. When status is `partial` or `failed`, `error_message` explains what went wrong.",
104936
104194
  enum: [
104937
104195
  "pending",
104938
104196
  "processing",
@@ -109033,7 +108291,7 @@ var native_spec_default = {
109033
108291
  properties: {
109034
108292
  error: {
109035
108293
  description: "Why this external account currently can't be used for advertising \u2014 a failed share or a Meta-side restriction. Null when the account is healthy.",
109036
- example: "You don't have permission to share this account. Ask an admin of its Meta Business Portfolio to grant you full control, then share it again.",
108294
+ example: "You don't have permission to share this account with Whop. Contact Whop support for help.",
109037
108295
  type: ["string", "null"]
109038
108296
  },
109039
108297
  external_id: {
@@ -112870,6 +112128,29 @@ var native_spec_default = {
112870
112128
  example: 1,
112871
112129
  type: "integer"
112872
112130
  },
112131
+ levels: {
112132
+ items: {
112133
+ $ref: "#/components/schemas/AccountProcessingOfferLevel",
112134
+ description: "Every level from `0` through `10`, with the monthly qualifying spend it takes and its card processing percentage in each card region."
112135
+ },
112136
+ type: "array"
112137
+ },
112138
+ monthly_ads_spend: {
112139
+ $ref: "#/components/schemas/Money",
112140
+ description: "Charged Whop Ads spend this calendar month across every account the owner owns, in USD."
112141
+ },
112142
+ monthly_card_spend: {
112143
+ $ref: "#/components/schemas/Money",
112144
+ description: "Effective Whop Card spend this calendar month across every account the owner owns, in USD."
112145
+ },
112146
+ monthly_qualifying_spend: {
112147
+ $ref: "#/components/schemas/Money",
112148
+ description: "Qualifying spend this calendar month across every account the owner owns, in USD: Whop Ads spend, Whop Card spend, and a tenth of perpetual trading volume."
112149
+ },
112150
+ monthly_trading_volume: {
112151
+ $ref: "#/components/schemas/Money",
112152
+ description: "Perpetual trading notional volume this calendar month across every account the owner owns, in USD."
112153
+ },
112873
112154
  points: {
112874
112155
  description: "Points earned this month across every account the owner owns.",
112875
112156
  example: 41e3,
@@ -112884,6 +112165,11 @@ var native_spec_default = {
112884
112165
  example: 59e3,
112885
112166
  type: ["integer", "null"]
112886
112167
  },
112168
+ processing_rate_percentage: {
112169
+ description: "The standard US and Canada card processing percentage at `current`, before any account's custom rate.",
112170
+ example: 2.6,
112171
+ type: "number"
112172
+ },
112887
112173
  resets_at: {
112888
112174
  description: "When this month's points reset to zero, as an ISO 8601 timestamp.",
112889
112175
  example: "2026-01-01T12:00:00.000Z",
@@ -112895,7 +112181,13 @@ var native_spec_default = {
112895
112181
  "points",
112896
112182
  "points_by_source",
112897
112183
  "points_to_next",
112898
- "resets_at"
112184
+ "resets_at",
112185
+ "processing_rate_percentage",
112186
+ "monthly_qualifying_spend",
112187
+ "monthly_ads_spend",
112188
+ "monthly_card_spend",
112189
+ "monthly_trading_volume",
112190
+ "levels"
112899
112191
  ],
112900
112192
  type: "object"
112901
112193
  },
@@ -121930,7 +121222,7 @@ var native_spec_default = {
121930
121222
  },
121931
121223
  api_version_date: {
121932
121224
  description: "The dated API version (Api-Version-Date) that v1 payloads for this endpoint are pinned to: events serialize exactly like a REST read at this version (the native serializer where the resource has one). Null when unpinned \u2014 legacy (v2/v5) webhooks, and v1 webhooks on the legacy payload shape.",
121933
- example: "2026-10-29-4",
121225
+ example: "2026-10-29-8",
121934
121226
  type: ["string", "null"]
121935
121227
  },
121936
121228
  child_resource_events: {
@@ -122363,7 +121655,7 @@ var native_spec_default = {
122363
121655
  },
122364
121656
  api_version_date: {
122365
121657
  description: "The dated API version (Api-Version-Date) that v1 payloads for this endpoint are pinned to: events serialize exactly like a REST read at this version (the native serializer where the resource has one). Null when unpinned \u2014 legacy (v2/v5) webhooks, and v1 webhooks on the legacy payload shape.",
122366
- example: "2026-10-29-4",
121658
+ example: "2026-10-29-8",
122367
121659
  type: ["string", "null"]
122368
121660
  },
122369
121661
  child_resource_events: {
@@ -122694,7 +121986,7 @@ var apps_spec_default = {
122694
121986
  termsOfService: "https://whop.com/tos-developer-api/",
122695
121987
  title: "Whop API",
122696
121988
  version: "1.0.0",
122697
- "x-api-version-date": "2026-10-29-4"
121989
+ "x-api-version-date": "2026-10-29-8"
122698
121990
  },
122699
121991
  paths: {
122700
121992
  "/app_builds": {
@@ -125076,7 +124368,7 @@ var apps_spec_default = {
125076
124368
  },
125077
124369
  name: {
125078
124370
  description: "Human-readable name of the action.",
125079
- example: "company:basic:read",
124371
+ example: "Read business information",
125080
124372
  type: "string"
125081
124373
  }
125082
124374
  },
@@ -125091,7 +124383,7 @@ var apps_spec_default = {
125091
124383
  name: "Api-Version-Date",
125092
124384
  required: false,
125093
124385
  schema: {
125094
- example: "2026-10-29-4",
124386
+ example: "2026-10-29-8",
125095
124387
  type: "string"
125096
124388
  }
125097
124389
  },
@@ -125170,7 +124462,7 @@ var files_spec_default = {
125170
124462
  termsOfService: "https://whop.com/tos-developer-api/",
125171
124463
  title: "Whop API",
125172
124464
  version: "1.0.0",
125173
- "x-api-version-date": "2026-10-29-4"
124465
+ "x-api-version-date": "2026-10-29-8"
125174
124466
  },
125175
124467
  paths: {
125176
124468
  "/files": {
@@ -125748,7 +125040,7 @@ var files_spec_default = {
125748
125040
  name: "Api-Version-Date",
125749
125041
  required: false,
125750
125042
  schema: {
125751
- example: "2026-10-29-4",
125043
+ example: "2026-10-29-8",
125752
125044
  type: "string"
125753
125045
  }
125754
125046
  },
@@ -125889,7 +125181,7 @@ async function announceActionUrl(url, {
125889
125181
  // package.json
125890
125182
  var package_default = {
125891
125183
  name: "@whop/cli",
125892
- version: "0.31.0",
125184
+ version: "0.32.0",
125893
125185
  description: "The Whop CLI \u2014 build and manage Whop apps from your terminal. Human and agent friendly.",
125894
125186
  keywords: [
125895
125187
  "agent",
@@ -128349,12 +127641,6 @@ var groups_default = [
128349
127641
  description: "Your own pixels that receive conversions from campaigns you claimed.",
128350
127642
  group: "Ads"
128351
127643
  },
128352
- {
128353
- name: "ad-conversion-value-rules",
128354
- tag: "Ad Conversion Value Rules",
128355
- description: "Modify how conversion events are delivered to ad networks.",
128356
- group: "Ads"
128357
- },
128358
127644
  {
128359
127645
  name: "stats",
128360
127646
  tag: "Stats",
@@ -132736,11 +132022,11 @@ function sleep2(ms) {
132736
132022
  return new Promise((resolve10) => setTimeout(resolve10, ms));
132737
132023
  }
132738
132024
 
132739
- // src/pay/command.ts
132025
+ // src/send/command.ts
132740
132026
  import { randomUUID } from "crypto";
132741
132027
  import { stripVTControlCharacters } from "util";
132742
132028
 
132743
- // src/pay/view.ts
132029
+ // src/send/view.ts
132744
132030
  import {
132745
132031
  confirm as confirm2,
132746
132032
  intro,
@@ -132769,7 +132055,7 @@ var c = {
132769
132055
  error: chalk3.red.bold
132770
132056
  };
132771
132057
 
132772
- // src/pay/view.ts
132058
+ // src/send/view.ts
132773
132059
  function formatMoney(amount2, currency) {
132774
132060
  const code = currency.toUpperCase();
132775
132061
  try {
@@ -132782,10 +132068,10 @@ function formatMoney(amount2, currency) {
132782
132068
  }
132783
132069
  }
132784
132070
  var terminalView = {
132785
- begin: () => intro("whop pay"),
132071
+ begin: () => intro("whop send"),
132786
132072
  chooseRecipient: async (candidates) => {
132787
132073
  const choice = await select4({
132788
- message: "Who do you want to pay?",
132074
+ message: "Who do you want to send to?",
132789
132075
  options: candidates.map((candidate) => ({
132790
132076
  value: candidate,
132791
132077
  label: [
@@ -132869,16 +132155,16 @@ function row(label, value) {
132869
132155
  return `${c.muted(label.padEnd(6))}${value}`;
132870
132156
  }
132871
132157
 
132872
- // src/pay/command.ts
132873
- var payArgs = external_exports.object({
132158
+ // src/send/command.ts
132159
+ var sendArgs = external_exports.object({
132874
132160
  recipient: external_exports.string().describe(
132875
- "Who to pay: an @username, an email address, a user_, biz_ or ldgr_ ID, or a name to search for"
132161
+ "Who to send to: an @username, an email address, a user_, biz_ or ldgr_ ID, or a name to search for"
132876
132162
  ),
132877
132163
  amount: external_exports.coerce.number().positive().describe("How much to send, in major units: 10 is ten dollars")
132878
132164
  });
132879
- var payOptions = external_exports.object({
132165
+ var sendOptions = external_exports.object({
132880
132166
  from: external_exports.string().optional().describe(
132881
- "Business balance to pay from: a biz_ or ldgr_ ID. Defaults to the business the CLI is using."
132167
+ "Business balance to send from: a biz_ or ldgr_ ID. Defaults to the business the CLI is using."
132882
132168
  ),
132883
132169
  currency: external_exports.string().default("usd").describe("Currency to send, such as usd"),
132884
132170
  notes: external_exports.string().optional().describe("A short note describing the payment"),
@@ -132893,7 +132179,7 @@ var payOptions = external_exports.object({
132893
132179
  )
132894
132180
  });
132895
132181
  var MAX_DISPLAY_LENGTH = 80;
132896
- var PayError = class extends Error {
132182
+ var SendError = class extends Error {
132897
132183
  constructor(details) {
132898
132184
  super(details.message);
132899
132185
  this.details = details;
@@ -132909,7 +132195,7 @@ function parseRecipient(input) {
132909
132195
  if (value.includes("@")) return { kind: "email", value };
132910
132196
  return { kind: "name", value };
132911
132197
  }
132912
- async function runPay(ctx, dependencies) {
132198
+ async function runSend(ctx, dependencies) {
132913
132199
  const canPrompt = !ctx.agent && !ctx.formatExplicit;
132914
132200
  const mode = ctx.options["dry-run"] ? "preview" : ctx.options.yes ? "send" : canPrompt ? "ask" : "hand-back";
132915
132201
  const input = parseRecipient(ctx.args.recipient);
@@ -132921,7 +132207,7 @@ async function runPay(ctx, dependencies) {
132921
132207
  };
132922
132208
  try {
132923
132209
  if (mode === "send" && input.kind === "name") {
132924
- throw new PayError({
132210
+ throw new SendError({
132925
132211
  code: "RECIPIENT_NOT_EXACT",
132926
132212
  message: `--yes needs an exact recipient, and "${input.value}" is a name search that could match someone else. Pass their @username, email address or ID.`,
132927
132213
  retryable: true,
@@ -132929,7 +132215,7 @@ async function runPay(ctx, dependencies) {
132929
132215
  description: "Check who the name matches:",
132930
132216
  commands: [
132931
132217
  {
132932
- command: payCommand(input.value, ctx.args.amount, flags, [
132218
+ command: commandLine(input.value, ctx.args.amount, flags, [
132933
132219
  "--dry-run"
132934
132220
  ])
132935
132221
  }
@@ -132950,7 +132236,7 @@ async function runPay(ctx, dependencies) {
132950
132236
  input,
132951
132237
  originId,
132952
132238
  profile,
132953
- (term) => payCommand(term, ctx.args.amount, { ...flags, from: originId })
132239
+ (term) => commandLine(term, ctx.args.amount, { ...flags, from: originId })
132954
132240
  ),
132955
132241
  amount: ctx.args.amount,
132956
132242
  currency: flags.currency,
@@ -132962,7 +132248,7 @@ async function runPay(ctx, dependencies) {
132962
132248
  commands: [{ command: sendCommand(plan) }]
132963
132249
  };
132964
132250
  if (mode === "hand-back") {
132965
- throw new PayError({
132251
+ throw new SendError({
132966
132252
  code: "CONFIRMATION_REQUIRED",
132967
132253
  message: `${summarize(plan)}. Nothing was sent: confirm with the user, then re-run with --yes.`,
132968
132254
  retryable: true,
@@ -132975,11 +132261,11 @@ async function runPay(ctx, dependencies) {
132975
132261
  return ctx.ok(plan, { cta: send });
132976
132262
  }
132977
132263
  if (mode === "ask" && !await view.confirmPayment(plan)) {
132978
- throw new PayError({ code: "CANCELLED", message: "Nothing was sent." });
132264
+ throw new SendError({ code: "CANCELLED", message: "Nothing was sent." });
132979
132265
  }
132980
132266
  const transfer = canPrompt ? await view.sending(plan, () => sendPayment(dependencies, plan)) : await sendPayment(dependencies, plan);
132981
132267
  if (transfer.status === "failed") {
132982
- throw new PayError({
132268
+ throw new SendError({
132983
132269
  code: "TRANSFER_FAILED",
132984
132270
  message: `Transfer ${transfer.id} failed${transfer.failure_reason ? `: ${transfer.failure_reason}` : "."}`,
132985
132271
  retryable: false,
@@ -133005,7 +132291,7 @@ async function runPay(ctx, dependencies) {
133005
132291
  }
133006
132292
  });
133007
132293
  } catch (error) {
133008
- if (error instanceof PayError) return ctx.error(error.details);
132294
+ if (error instanceof SendError) return ctx.error(error.details);
133009
132295
  if (error instanceof PromptCancelledError) {
133010
132296
  return ctx.error({
133011
132297
  code: "CANCELLED",
@@ -133021,9 +132307,9 @@ async function runPay(ctx, dependencies) {
133021
132307
  }
133022
132308
  async function resolveOrigin(dependencies, profile, from) {
133023
132309
  if (from === "me" || from?.startsWith("user_")) {
133024
- throw new PayError({
132310
+ throw new SendError({
133025
132311
  code: "PERSONAL_BALANCE_UNSUPPORTED",
133026
- message: "The CLI can only pay from a business balance: Whop doesn't let apps, including this CLI, send from a personal one. Send from your personal balance in the Whop app.",
132312
+ message: "The CLI can only send from a business balance: Whop doesn't let apps, including this CLI, move money out of a personal one. Send from your personal balance in the Whop app.",
133027
132313
  retryable: false
133028
132314
  });
133029
132315
  }
@@ -133031,7 +132317,7 @@ async function resolveOrigin(dependencies, profile, from) {
133031
132317
  const accountId = await dependencies.activeAccountId();
133032
132318
  if (accountId) return accountId;
133033
132319
  if (profile?.accountId) {
133034
- throw new PayError({
132320
+ throw new SendError({
133035
132321
  code: "SESSION_EXPIRED",
133036
132322
  message: "Your saved login can't be used anymore. Log in again with `whop login`.",
133037
132323
  retryable: true,
@@ -133040,9 +132326,9 @@ async function resolveOrigin(dependencies, profile, from) {
133040
132326
  }
133041
132327
  });
133042
132328
  }
133043
- throw new PayError({
132329
+ throw new SendError({
133044
132330
  code: "NO_ACCOUNT",
133045
- message: "No business selected to pay from. Pass --from, or choose a business with `whop quickstart`.",
132331
+ message: "No business selected to send from. Pass --from, or choose a business with `whop quickstart`.",
133046
132332
  retryable: true,
133047
132333
  cta: {
133048
132334
  commands: [{ command: "quickstart", description: "Choose a business" }]
@@ -133063,18 +132349,18 @@ async function resolveRecipient(dependencies, originId, input, canPrompt) {
133063
132349
  if (candidates.length === 1) return candidates[0];
133064
132350
  if (candidates.length > 1) {
133065
132351
  if (canPrompt) return dependencies.view.chooseRecipient(candidates);
133066
- throw new PayError({
132352
+ throw new SendError({
133067
132353
  code: "AMBIGUOUS_RECIPIENT",
133068
- message: `"${input.value}" matches ${candidates.length} recipients: ${candidates.map(identifyRecipient).join("; ")}. Pay one of them by ID.`,
132354
+ message: `"${input.value}" matches ${candidates.length} recipients: ${candidates.map(identifyRecipient).join("; ")}. Send to one of them by ID.`,
133069
132355
  retryable: true
133070
132356
  });
133071
132357
  }
133072
132358
  return input.kind === "id" ? unnamed(input.value) : null;
133073
132359
  }
133074
132360
  function recipientNotFound(input, originId, profile, searchCommand) {
133075
- const apiKeyNote = profile?.method === "oauth" ? "" : " An API key only sees its own team, so pay them by their user_ ID.";
132361
+ const apiKeyNote = profile?.method === "oauth" ? "" : " An API key only sees its own team, so send to their user_ ID.";
133076
132362
  if (input.kind === "username") {
133077
- throw new PayError({
132363
+ throw new SendError({
133078
132364
  code: "RECIPIENT_NOT_FOUND",
133079
132365
  message: `No Whop user has the username ${input.value}. @ matches a username exactly, so leave it off to search.${apiKeyNote}`,
133080
132366
  retryable: false,
@@ -133084,9 +132370,9 @@ function recipientNotFound(input, originId, profile, searchCommand) {
133084
132370
  }
133085
132371
  });
133086
132372
  }
133087
- throw new PayError({
132373
+ throw new SendError({
133088
132374
  code: "RECIPIENT_NOT_FOUND",
133089
- message: `No one matching "${input.value}" can be paid from ${originId}. Try their @username, email address or ID.${apiKeyNote}`,
132375
+ message: `No one matching "${input.value}" can receive money from ${originId}. Try their @username, email address or ID.${apiKeyNote}`,
133090
132376
  retryable: false
133091
132377
  });
133092
132378
  }
@@ -133112,13 +132398,13 @@ async function sendPayment(dependencies, plan) {
133112
132398
  );
133113
132399
  } catch (error) {
133114
132400
  if (error instanceof GeneratedCommandError && isDefiniteRejection(error)) {
133115
- throw new PayError({
132401
+ throw new SendError({
133116
132402
  code: error.code,
133117
132403
  message: error.message,
133118
132404
  retryable: false
133119
132405
  });
133120
132406
  }
133121
- throw new PayError({
132407
+ throw new SendError({
133122
132408
  ...error instanceof GeneratedCommandError ? { code: error.code, message: error.message } : {
133123
132409
  code: "SEND_UNCONFIRMED",
133124
132410
  message: `Couldn't confirm whether the payment went through: ${error instanceof Error ? error.message : String(error)}`
@@ -133162,9 +132448,9 @@ function identifyRecipient(recipient) {
133162
132448
  function summarize(plan) {
133163
132449
  return `Send ${formatMoney(plan.amount, plan.currency)} from ${plan.origin_id} to ${identifyRecipient(plan.recipient)}`;
133164
132450
  }
133165
- function payCommand(recipient, amount2, flags, extra = []) {
132451
+ function commandLine(recipient, amount2, flags, extra = []) {
133166
132452
  return [
133167
- "pay",
132453
+ "send",
133168
132454
  shellQuote(recipient),
133169
132455
  String(amount2),
133170
132456
  ...flags.from ? [`--from ${shellQuote(flags.from)}`] : [],
@@ -133174,7 +132460,7 @@ function payCommand(recipient, amount2, flags, extra = []) {
133174
132460
  ].join(" ");
133175
132461
  }
133176
132462
  function sendCommand(plan) {
133177
- return payCommand(
132463
+ return commandLine(
133178
132464
  plan.recipient.destination_id,
133179
132465
  plan.amount,
133180
132466
  { from: plan.origin_id, currency: plan.currency, notes: plan.notes },
@@ -133184,7 +132470,7 @@ function sendCommand(plan) {
133184
132470
  function shellQuote(value) {
133185
132471
  return /^[\w@.+-]+$/.test(value) ? value : `'${value.replaceAll("'", `'\\''`)}'`;
133186
132472
  }
133187
- async function buildPayCommand() {
132473
+ async function buildSendCommand() {
133188
132474
  const transfers = await generateTagCommands("Transfers");
133189
132475
  const recipients = generatedCommand(transfers, "recipients");
133190
132476
  const create2 = generatedCommand(transfers, "create");
@@ -133201,23 +132487,23 @@ async function buildPayCommand() {
133201
132487
  newIdempotencyKey: randomUUID
133202
132488
  };
133203
132489
  return {
133204
- description: "Pay a person or business on Whop from a balance",
133205
- args: payArgs,
133206
- options: payOptions,
132490
+ description: "Send money to a person or business on Whop from a balance",
132491
+ args: sendArgs,
132492
+ options: sendOptions,
133207
132493
  examples: [
133208
132494
  {
133209
132495
  args: { recipient: "@sam", amount: 10 },
133210
- description: "Pay a Whop user 10 USD from your business"
132496
+ description: "Send 10 USD to a Whop user from your business"
133211
132497
  },
133212
132498
  {
133213
132499
  args: { recipient: "sam@example.com", amount: 25 },
133214
132500
  options: { notes: "Design work" },
133215
- description: "Pay an email address, with a note"
132501
+ description: "Send to an email address, with a note"
133216
132502
  },
133217
132503
  {
133218
132504
  args: { recipient: "@sam", amount: 10 },
133219
132505
  options: { "dry-run": true },
133220
- description: "See who would be paid, without sending"
132506
+ description: "See who would receive it, without sending"
133221
132507
  }
133222
132508
  ],
133223
132509
  hint: "A terminal asks before sending. Scripts and agents get CONFIRMATION_REQUIRED with the exact command to run once the user confirms; agents should start with --dry-run.",
@@ -133230,7 +132516,7 @@ async function buildPayCommand() {
133230
132516
  readOnlyHint: false
133231
132517
  }
133232
132518
  },
133233
- run: (c2) => runPay(c2, dependencies)
132519
+ run: (c2) => runSend(c2, dependencies)
133234
132520
  };
133235
132521
  }
133236
132522
 
@@ -133805,7 +133091,7 @@ import { dirname as dirname9, join as join15 } from "path";
133805
133091
  // src/api/shipped-skills.json
133806
133092
  var shipped_skills_default = {
133807
133093
  whop: {
133808
- "SKILL.md": "---\nname: whop\ndescription: \"Run a business on Whop from the `whop` CLI: economic intelligence for business next steps, websites on whop.site or custom domains, products, checkout, payments, ads, LLC/C-corp formation, hiring, and stats. Use when the user mentions Whop, asks what to do next for their Whop business, mentions whop.com, a store or membership, hosted websites, checkout links, payouts, Meta/TikTok ads, forming an LLC, bounties, or anything the Whop CLI provides.\"\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## Find the best next steps\n\nWhen the caller asks how to grow, improve their business, or decide what to do next, use `whop economic-intelligence` as the source of the recommended actions. Present the actions it returns, preserving any priority it supplies. Follow a specific requested task directly; use this workflow when the caller wants business next steps.\n\n1. Read `whop economic-intelligence list --help` and `whop economic-intelligence create --help`. Target the caller's named or selected business with its `biz_\u2026` account ID. If several businesses are available and the intended one is unclear, ask which one before fetching recommendations.\n2. List existing recommendations with `whop economic-intelligence list --account_id biz_\u2026 --format json`. Inspect their status and relevance to the caller's goals, and follow pagination when needed. Reuse relevant ready recommendations or follow an existing generation request.\n3. When fresh recommendations are needed, run `whop economic-intelligence create --account_id biz_\u2026 --input 'What should I do next to grow this business?' --idempotency-key <unique-key> --format json`. Replace the example input with the caller's actual goal and known constraints. Reuse the same key if retrying an uncertain request.\n4. Generation is asynchronous. Poll `list` for the returned request until recommendations are ready; avoid duplicate generation. Stop on a reported failure and surface the reason. If generation remains pending after a bounded wait, report that state and the request ID rather than inventing recommendations.\n5. Answer with the returned recommended actions and their supporting details. Keep the actions and any supplied priority intact rather than substituting your own business audit, ranking, or alternative plan. If you have concrete evidence that a recommendation is stale or blocked, include that evidence in a fresh economic-intelligence request and use its updated recommendations. Check execution prerequisites when carrying out a chosen action.\n6. Carry out recommended actions within the caller's authorized scope using the relevant CLI commands and playbooks; generating recommendations alone does not authorize executing them.\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- To pay someone, run `whop pay <recipient> <amount> --dry-run --format json` first and show the user who it resolved to. Once they confirm, run the command it returns, which pays 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.\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| Find or generate business next steps | `whop economic-intelligence list`, `whop economic-intelligence create` | Find the best next steps above |\n| Ship a website (whop.site or your own domain) | `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 pay`, `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 balance` 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 `claim_link`; ask for explicit confirmation before creating a claim link. 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_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",
133094
+ "SKILL.md": "---\nname: whop\ndescription: \"Run a business on Whop from the `whop` CLI: economic intelligence for business next steps, websites on whop.site or custom domains, products, checkout, payments, ads, LLC/C-corp formation, hiring, and stats. Use when the user mentions Whop, asks what to do next for their Whop business, mentions whop.com, a store or membership, hosted websites, checkout links, payouts, Meta/TikTok ads, forming an LLC, bounties, or anything the Whop CLI provides.\"\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## Find the best next steps\n\nWhen the caller asks how to grow, improve their business, or decide what to do next, use `whop economic-intelligence` as the source of the recommended actions. Present the actions it returns, preserving any priority it supplies. Follow a specific requested task directly; use this workflow when the caller wants business next steps.\n\n1. Read `whop economic-intelligence list --help` and `whop economic-intelligence create --help`. Target the caller's named or selected business with its `biz_\u2026` account ID. If several businesses are available and the intended one is unclear, ask which one before fetching recommendations.\n2. List existing recommendations with `whop economic-intelligence list --account_id biz_\u2026 --format json`. Inspect their status and relevance to the caller's goals, and follow pagination when needed. Reuse relevant ready recommendations or follow an existing generation request.\n3. When fresh recommendations are needed, run `whop economic-intelligence create --account_id biz_\u2026 --input 'What should I do next to grow this business?' --idempotency-key <unique-key> --format json`. Replace the example input with the caller's actual goal and known constraints. Reuse the same key if retrying an uncertain request.\n4. Generation is asynchronous. Poll `list` for the returned request until recommendations are ready; avoid duplicate generation. Stop on a reported failure and surface the reason. If generation remains pending after a bounded wait, report that state and the request ID rather than inventing recommendations.\n5. Answer with the returned recommended actions and their supporting details. Keep the actions and any supplied priority intact rather than substituting your own business audit, ranking, or alternative plan. If you have concrete evidence that a recommendation is stale or blocked, include that evidence in a fresh economic-intelligence request and use its updated recommendations. Check execution prerequisites when carrying out a chosen action.\n6. Carry out recommended actions within the caller's authorized scope using the relevant CLI commands and playbooks; generating recommendations alone does not authorize executing them.\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- 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.\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| Find or generate business next steps | `whop economic-intelligence list`, `whop economic-intelligence create` | Find the best next steps above |\n| Ship a website (whop.site or your own domain) | `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 send`, `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 balance` 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 `claim_link`; ask for explicit confirmation before creating a claim link. 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_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",
133809
133095
  "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. **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\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"}]\' \\\n --ad_group \'{"title":"US broad","ad_campaign":{"title":"Growth","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` / `devices` for automatic optimization. `regions` uses ISO 3166 (`"US"`, `"US-CA"`). |\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',
133810
133096
  "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\nRecommend incorporating in Wyoming (`WY`) because formations are completed the same day.\n\n## Checkout\n\n```sh\nwhop accounts form_company biz_xxx \\\n --idempotency-key=<unique> \\\n --business_name="Acme Holdings" \\\n --formation_state=WY \\\n --business_type=services \\\n --industry_type=search_engine_optimization \\\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',
133811
133097
  "references/websites.md": '# Websites and apps\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 it at its domains) 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" --domain acme\nwhop apps deploy\n```\n\n`--domain` takes a whop.site name (`acme` \u2192 `acme.whop.site`) or a domain the account already has. It defaults to the name\'s whop.site address. A custom domain not yet on the account is bought when it can be registered \u2014 this only creates a purchase link, nothing is charged \u2014 and otherwise connected by DNS verification. `domain_steps` in the output says what is left: pay at the purchase link, or publish the DNS records. Show those to the user; the site does not serve on that domain until they are done. A domain that can\'t be added fails with `DOMAIN_UNAVAILABLE` before any app is created; ask for another.\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, run the `whop apps init --app app_xxx` command the error prints \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\nAn app that has never been deployed, such as a website created on whop.com, has nothing to pull: `pull` fails with `APP_HAS_NO_SOURCE`. Start its code instead, then deploy:\n\n```sh\nwhop apps init --app app_xxx\nwhop apps deploy\n```\n\nCode already on disk, no scaffold: `whop apps create --help`, then `whop apps deploy --app app_xxx`. Link with `--app`; never write `whop.app.json` by hand.\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`. A deploy needs somewhere to serve: any domain on the app \u2014 a whop.site address or a custom domain \u2014 will do. Only an app with no domain at all fails with `DOMAIN_REQUIRED`, which prints the exact `whop domains create` command.\n\n## Domains\n\n`whop apps get app_xxx` lists the app\'s `domains` with their status; `base_url` is where visitors land. Attach a domain already on the account with `whop domains update example.com --website \'{"app_id":"app_xxx"}\'`. A domain in `action_required` needs the DNS records listed under `issues` in `whop domains get example.com`; after they are added, run `whop domains check example.com`.\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## Experimentation\n\nSplit traffic between the live production build and one next build of the same app. Whop hosting assigns visitors, serves the bound build, and records exposures. Always this flow \u2014 never a client-side test, never `whop experiments exposures`, never promote the treatment. One active experiment per app.\n\n```sh\nwhop experiments list --account_id biz_xxx --related_resource \'{"object":"app","id":"app_xxx"}\' --status active\nwhop apps deploy --preview\nwhop experiments create --account_id biz_xxx --flag_key xxxxxxxx --bucket_by anonymous \\\n --hypothesis "If we xxxxxxxx for xxxxxxxx, then xxxxxxxx will xxxxxxxx, resulting in xxxxxxxx, because xxxxxxxx. Created by xxxxxxxx." \\\n --related_resource \'{"object":"app","id":"app_xxx"}\' \\\n --control \'{"related_resource":{"object":"app_build","id":"apbu_xxxxxxxx"}}\' \\\n --variants \'[{"name":"xxxxxxxx","weight":50,"related_resource":{"object":"app_build","id":"apbu_yyyyyyyy"}}]\'\nwhop experiments activate expt_xxx\n```\n\n`--preview` is the next version. Control is `production_web_build.id` from `whop apps get`. Related resource is the app. Each arm must bind a different build. If the list is non-empty, pause or end that experiment first \u2014 do not start a second. Then activate. Hosting does the rest. Flags: `whop experiments create --help`.\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'
@@ -134410,7 +133696,7 @@ cli.command("quickstart", {
134410
133696
  outputPolicy: "agent-only",
134411
133697
  run: (c2) => runQuickstart(c2)
134412
133698
  });
134413
- cli.command("pay", await buildPayCommand());
133699
+ cli.command("send", await buildSendCommand());
134414
133700
  cli.command("report-feedback", buildFeedbackCommand("report_feedback"));
134415
133701
  cli.command("ask-question", buildFeedbackCommand("ask_question"));
134416
133702
  cli.command(await buildAppGroup());
@@ -134493,8 +133779,8 @@ var DEVELOPER_LABEL = "Developer";
134493
133779
  var EXTRA_SECTION_COMMANDS = {
134494
133780
  Money: [
134495
133781
  {
134496
- name: "pay",
134497
- description: "Pay a person or business by @username, email, or ID"
133782
+ name: "send",
133783
+ description: "Send money to a person or business by @username, email, or ID"
134498
133784
  }
134499
133785
  ],
134500
133786
  [DEVELOPER_LABEL]: [