@whop/cli 0.31.0 → 0.33.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-30"
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.",
@@ -19790,16 +19779,6 @@ var native_spec_default = {
19790
19779
  example: "biz_xxxxxxxxxxxxxx",
19791
19780
  type: "string"
19792
19781
  },
19793
- bid_type: {
19794
- description: "How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, `maximum_target` never bids above a cap. Only for campaigns that own the budget.",
19795
- enum: [
19796
- "minimum_cost",
19797
- "average_target",
19798
- "maximum_target"
19799
- ],
19800
- example: "average_target",
19801
- type: "string"
19802
- },
19803
19782
  budget_amount: {
19804
19783
  description: "The campaign's budget in USD, which is what it is stored and billed in. Required when budget_optimization is `ad_campaign` (or send budget_amount_local instead); omit when each ad group sets its own budget.",
19805
19784
  example: 25,
@@ -20091,16 +20070,6 @@ var native_spec_default = {
20091
20070
  "application/json": {
20092
20071
  schema: {
20093
20072
  properties: {
20094
- bid_type: {
20095
- description: "How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, `maximum_target` never bids above a cap. Switching to `minimum_cost` clears the cap amounts stored on the campaign's ad groups. Only for campaigns that own the budget.",
20096
- enum: [
20097
- "minimum_cost",
20098
- "average_target",
20099
- "maximum_target"
20100
- ],
20101
- example: "average_target",
20102
- type: "string"
20103
- },
20104
20073
  budget_amount: {
20105
20074
  description: "The campaign budget in USD, which is what it is stored and billed in. Interpreted as daily or lifetime per the campaign's budget type, including a budget_type sent in the same request.",
20106
20075
  example: 40,
@@ -20483,704 +20452,6 @@ var native_spec_default = {
20483
20452
  ]
20484
20453
  }
20485
20454
  },
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
20455
  "/ad_groups": {
21185
20456
  get: {
21186
20457
  description: "Lists ad groups for the account, newest first.",
@@ -22922,7 +22193,7 @@ var native_spec_default = {
22922
22193
  },
22923
22194
  "/ad_stats": {
22924
22195
  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.",
22196
+ 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
22197
  operationId: "report-stats",
22927
22198
  parameters: [
22928
22199
  {
@@ -22959,7 +22230,7 @@ var native_spec_default = {
22959
22230
  type: ["integer", "string"]
22960
22231
  },
22961
22232
  spend: {
22962
- description: "USD spent on the ad in the hour so far, to the cent.",
22233
+ 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
22234
  example: 75.5,
22964
22235
  type: ["number", "string"]
22965
22236
  }
@@ -22990,7 +22261,7 @@ var native_spec_default = {
22990
22261
  }
22991
22262
  }
22992
22263
  },
22993
- description: "spend over the budget"
22264
+ description: "more clicks than impressions"
22994
22265
  },
22995
22266
  "401": {
22996
22267
  $ref: "#/components/responses/Unauthorized",
@@ -33190,7 +32461,7 @@ var native_spec_default = {
33190
32461
  },
33191
32462
  "404": {
33192
32463
  $ref: "#/components/responses/NotFound",
33193
- description: "a record-only issuer signal Whop does not forward"
32464
+ description: "no such dispute alert"
33194
32465
  }
33195
32466
  },
33196
32467
  security: [
@@ -39579,9 +38850,8 @@ var native_spec_default = {
39579
38850
  type: "string"
39580
38851
  },
39581
38852
  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.",
38853
+ 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
38854
  enum: [
39584
- "meta_business",
39585
38855
  "tiktok",
39586
38856
  "linkedin",
39587
38857
  "youtube",
@@ -39589,7 +38859,7 @@ var native_spec_default = {
39589
38859
  "snapchat",
39590
38860
  "quickbooks"
39591
38861
  ],
39592
- example: "meta_business",
38862
+ example: "snapchat",
39593
38863
  type: "string"
39594
38864
  },
39595
38865
  redirect_url: {
@@ -39598,7 +38868,7 @@ var native_spec_default = {
39598
38868
  type: "string"
39599
38869
  },
39600
38870
  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.",
38871
+ 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
38872
  items: {
39603
38873
  enum: ["advertise"],
39604
38874
  example: "advertise",
@@ -39622,7 +38892,7 @@ var native_spec_default = {
39622
38892
  properties: {
39623
38893
  authorize_url: {
39624
38894
  description: "The OAuth authorization URL to redirect the user to.",
39625
- example: "https://www.facebook.com/v25.0/dialog/oauth",
38895
+ example: "https://accounts.snapchat.com/login/oauth2/authorize",
39626
38896
  type: "string"
39627
38897
  }
39628
38898
  },
@@ -42695,8 +41965,8 @@ var native_spec_default = {
42695
41965
  type: ["object", "null"]
42696
41966
  },
42697
41967
  buyer_fee_percentage: {
42698
- description: "The buyer's adjustable fee in percentage points, with at most two decimal places.",
42699
- example: 2.5,
41968
+ description: "The buyer's adjustable fee in percentage points, with at most two decimal places: `0` for none, or between 5 and 100. The account keeps it, and Whop waives its take rate on the invoice.",
41969
+ example: 5,
42700
41970
  maximum: 100,
42701
41971
  minimum: 0,
42702
41972
  type: "number"
@@ -43205,8 +42475,8 @@ var native_spec_default = {
43205
42475
  type: ["object", "null"]
43206
42476
  },
43207
42477
  buyer_fee_percentage: {
43208
- description: "The buyer's adjustable fee in percentage points, with at most two decimal places.",
43209
- example: 2.5,
42478
+ description: "The buyer's adjustable fee in percentage points, with at most two decimal places: `0` for none, or between 5 and 100. The account keeps it, and Whop waives its take rate on the invoice.",
42479
+ example: 5,
43210
42480
  maximum: 100,
43211
42481
  minimum: 0,
43212
42482
  type: "number"
@@ -43588,6 +42858,85 @@ var native_spec_default = {
43588
42858
  }
43589
42859
  }
43590
42860
  },
42861
+ "/invoices/{id}/charge": {
42862
+ post: {
42863
+ description: "Charges an open invoice now to one of its customer's saved payment methods, canceling any charge scheduled for later. The charge completes asynchronously: the invoice becomes `paid`, or, if declined, stays `open` and its recipients are emailed the `checkout_link`. Refused for drafts and while another payment is in progress.",
42864
+ operationId: "charge",
42865
+ parameters: [
42866
+ {
42867
+ $ref: "#/components/parameters/ApiVersionDate"
42868
+ },
42869
+ {
42870
+ description: "The invoice's pay_ ID.",
42871
+ in: "path",
42872
+ name: "id",
42873
+ required: true,
42874
+ schema: {
42875
+ type: "string"
42876
+ }
42877
+ },
42878
+ {
42879
+ $ref: "#/components/parameters/IdempotencyKey"
42880
+ }
42881
+ ],
42882
+ requestBody: {
42883
+ content: {
42884
+ "application/json": {
42885
+ schema: {
42886
+ additionalProperties: false,
42887
+ properties: {
42888
+ payment_method_id: {
42889
+ description: "The saved payment method to charge, prefixed `payt_`. It must belong to the invoice's customer and be chargeable without the customer present. Omit it to charge the invoice's own `payment_method_id`.",
42890
+ example: "payt_xxxxxxxxxxxxxx",
42891
+ type: ["string", "null"]
42892
+ }
42893
+ },
42894
+ type: "object"
42895
+ }
42896
+ }
42897
+ }
42898
+ },
42899
+ responses: {
42900
+ "200": {
42901
+ content: {
42902
+ "application/json": {
42903
+ schema: {
42904
+ $ref: "#/components/schemas/Invoice"
42905
+ }
42906
+ }
42907
+ },
42908
+ description: "charge started"
42909
+ },
42910
+ "400": {
42911
+ $ref: "#/components/responses/InvalidParameters",
42912
+ description: "invoice cannot be charged"
42913
+ },
42914
+ "401": {
42915
+ $ref: "#/components/responses/Unauthorized",
42916
+ description: "unauthenticated"
42917
+ },
42918
+ "403": {
42919
+ $ref: "#/components/responses/Forbidden",
42920
+ description: "missing permission"
42921
+ },
42922
+ "404": {
42923
+ $ref: "#/components/responses/NotFound",
42924
+ description: "invoice not found"
42925
+ },
42926
+ "409": {
42927
+ $ref: "#/components/responses/Conflict",
42928
+ description: "a payment is already in progress"
42929
+ }
42930
+ },
42931
+ security: [
42932
+ {
42933
+ bearerAuth: ["payment:charge"]
42934
+ }
42935
+ ],
42936
+ summary: "Charge Invoice",
42937
+ tags: ["Invoices"]
42938
+ }
42939
+ },
43591
42940
  "/invoices/{id}/generate_pdf": {
43592
42941
  post: {
43593
42942
  description: "Generates the invoice as a PDF and returns a short-lived link to download it. A draft shows its estimated totals. The buyer's name and email need `member:basic:read` and `member:email:read`, and the Pay now link on an open invoice needs `payment:charge`, or `invoice:create` or `invoice:update` when it has no `payment_method_id`. Each call generates a new file and link, so this endpoint does not replay `Idempotency-Key` responses.",
@@ -44870,6 +44219,83 @@ var native_spec_default = {
44870
44219
  }
44871
44220
  }
44872
44221
  ]
44222
+ },
44223
+ patch: {
44224
+ description: "Sets the name the account uses for a member. Every invoice for this member shows it as the customer name, paid invoices included, in place of the user's own name. It does not change the user's Whop profile.",
44225
+ operationId: "update",
44226
+ parameters: [
44227
+ {
44228
+ $ref: "#/components/parameters/ApiVersionDate"
44229
+ },
44230
+ {
44231
+ description: "Member ID (`mber_` tag).",
44232
+ in: "path",
44233
+ name: "id",
44234
+ required: true,
44235
+ schema: {
44236
+ type: "string"
44237
+ }
44238
+ }
44239
+ ],
44240
+ requestBody: {
44241
+ content: {
44242
+ "application/json": {
44243
+ schema: {
44244
+ additionalProperties: false,
44245
+ properties: {
44246
+ name: {
44247
+ description: "The customer name to show on this member's invoices, at most 255 bytes. Leading and trailing spaces are trimmed. `null` or a blank string clears it, so invoices show the user's own name again.",
44248
+ example: "Northwind Legal LLP",
44249
+ maxLength: 255,
44250
+ type: ["string", "null"]
44251
+ }
44252
+ },
44253
+ type: "object"
44254
+ }
44255
+ }
44256
+ },
44257
+ required: true
44258
+ },
44259
+ responses: {
44260
+ "200": {
44261
+ content: {
44262
+ "application/json": {
44263
+ schema: {
44264
+ $ref: "#/components/schemas/Member"
44265
+ }
44266
+ }
44267
+ },
44268
+ description: "member updated"
44269
+ },
44270
+ "400": {
44271
+ $ref: "#/components/responses/InvalidParameters",
44272
+ description: "invalid name"
44273
+ },
44274
+ "401": {
44275
+ $ref: "#/components/responses/Unauthorized",
44276
+ description: "unauthenticated"
44277
+ },
44278
+ "403": {
44279
+ $ref: "#/components/responses/Forbidden",
44280
+ description: "credential lacks member:manage on the member's account"
44281
+ },
44282
+ "404": {
44283
+ $ref: "#/components/responses/NotFound",
44284
+ description: "unknown member"
44285
+ }
44286
+ },
44287
+ security: [
44288
+ {
44289
+ bearerAuth: ["member:manage"]
44290
+ }
44291
+ ],
44292
+ summary: "Update Member",
44293
+ tags: ["Members"],
44294
+ "x-mint": {
44295
+ metadata: {
44296
+ sidebarTitle: "Update"
44297
+ }
44298
+ }
44873
44299
  }
44874
44300
  },
44875
44301
  "/members/{id}/logs": {
@@ -48008,7 +47434,7 @@ var native_spec_default = {
48008
47434
  }
48009
47435
  },
48010
47436
  {
48011
- description: "Filter the authenticated partner's CPA offers by status. Use offered for every state after qualification.",
47437
+ description: "Filter the authenticated partner's CPA offers by status, or with referring_account_id, the CPA terms of the reps the caller manages. Use offered for every state after qualification.",
48012
47438
  in: "query",
48013
47439
  name: "advance_status",
48014
47440
  required: false,
@@ -48265,7 +47691,7 @@ var native_spec_default = {
48265
47691
  type: ["object", "null"]
48266
47692
  },
48267
47693
  commission_advance: {
48268
- description: "CPA terms for the referring partner. Omitted for other callers. An offer token requires partner:commission_advance:accept permission.",
47694
+ description: "CPA terms for the referring partner. Read with referring_account_id, the business's owner sees every rep's terms and a manager sees those of the reps below them, read-only. Omitted for other callers. An offer token is only for the referring partner and requires partner:commission_advance:accept permission.",
48269
47695
  oneOf: [
48270
47696
  {
48271
47697
  $ref: "#/components/schemas/PartnerAdvance"
@@ -48778,7 +48204,7 @@ var native_spec_default = {
48778
48204
  type: ["object", "null"]
48779
48205
  },
48780
48206
  commission_advance: {
48781
- description: "CPA terms for the referring partner. Omitted for other callers. An offer token requires partner:commission_advance:accept permission.",
48207
+ description: "CPA terms for the referring partner. Read with referring_account_id, the business's owner sees every rep's terms and a manager sees those of the reps below them, read-only. Omitted for other callers. An offer token is only for the referring partner and requires partner:commission_advance:accept permission.",
48782
48208
  oneOf: [
48783
48209
  {
48784
48210
  $ref: "#/components/schemas/PartnerAdvance"
@@ -49525,9 +48951,14 @@ var native_spec_default = {
49525
48951
  },
49526
48952
  commission_amount_usd: {
49527
48953
  description: "What the referrer earns, in USD. Null until the earning settles.",
49528
- example: "1.00",
48954
+ example: "3.00",
49529
48955
  type: ["string", "null"]
49530
48956
  },
48957
+ covered_by_commission_advance: {
48958
+ description: "Whether an upfront commission advance replaces this commission, including covered earnings that are still awaiting settlement.",
48959
+ example: false,
48960
+ type: "boolean"
48961
+ },
49531
48962
  created_at: {
49532
48963
  example: "2026-01-01T12:00:00.000Z",
49533
48964
  format: "date-time",
@@ -49636,7 +49067,7 @@ var native_spec_default = {
49636
49067
  type: ["object", "null"]
49637
49068
  },
49638
49069
  projected_commission_amount_usd: {
49639
- description: "Estimated commission while awaiting settlement. Null when no estimate is available or the earning has settled.",
49070
+ description: "Estimated commission while awaiting settlement. Zero when a funded commission advance covers the earning. Null when no estimate is available or the earning has settled.",
49640
49071
  oneOf: [
49641
49072
  {
49642
49073
  $ref: "#/components/schemas/Money"
@@ -49896,7 +49327,7 @@ var native_spec_default = {
49896
49327
  },
49897
49328
  transaction_amount_usd: {
49898
49329
  description: "The underlying transaction amount the commission's income comes from, in USD.",
49899
- example: "10.00",
49330
+ example: "30.00",
49900
49331
  type: "string"
49901
49332
  }
49902
49333
  },
@@ -49912,6 +49343,7 @@ var native_spec_default = {
49912
49343
  "payout_percentage",
49913
49344
  "commission_amount_usd",
49914
49345
  "projected_commission_amount_usd",
49346
+ "covered_by_commission_advance",
49915
49347
  "financial_activity",
49916
49348
  "cancelation_reason",
49917
49349
  "created_at",
@@ -50123,7 +49555,7 @@ var native_spec_default = {
50123
49555
  type: ["object", "null"]
50124
49556
  },
50125
49557
  commission_advance: {
50126
- description: "CPA terms for the referring partner. Omitted for other callers. An offer token requires partner:commission_advance:accept permission.",
49558
+ description: "CPA terms for the referring partner. Read with referring_account_id, the business's owner sees every rep's terms and a manager sees those of the reps below them, read-only. Omitted for other callers. An offer token is only for the referring partner and requires partner:commission_advance:accept permission.",
50127
49559
  oneOf: [
50128
49560
  {
50129
49561
  $ref: "#/components/schemas/PartnerAdvance"
@@ -53856,7 +53288,7 @@ var native_spec_default = {
53856
53288
  type: ["string", "null"]
53857
53289
  },
53858
53290
  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`.",
53291
+ 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
53292
  example: "dana@shinetime.example",
53861
53293
  type: ["string", "null"]
53862
53294
  },
@@ -54151,7 +53583,7 @@ var native_spec_default = {
54151
53583
  type: "array"
54152
53584
  },
54153
53585
  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.",
53586
+ 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
53587
  example: "mber_xxxxxxxxxxxxxx",
54156
53588
  type: ["string", "null"]
54157
53589
  },
@@ -54186,6 +53618,17 @@ var native_spec_default = {
54186
53618
  required: ["platform"],
54187
53619
  type: "object"
54188
53620
  },
53621
+ paypal: {
53622
+ description: "Options for a `paypal` payment method.",
53623
+ properties: {
53624
+ request_shipping: {
53625
+ 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.",
53626
+ example: true,
53627
+ type: "boolean"
53628
+ }
53629
+ },
53630
+ type: "object"
53631
+ },
54189
53632
  type: {
54190
53633
  description: "The kind of payment method; the member named after it carries its details.",
54191
53634
  enum: ["card_present", "paypal"],
@@ -66656,9 +66099,8 @@ var native_spec_default = {
66656
66099
  type: "string"
66657
66100
  },
66658
66101
  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.",
66102
+ 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
66103
  enum: [
66661
- "meta_business",
66662
66104
  "tiktok",
66663
66105
  "linkedin",
66664
66106
  "youtube",
@@ -66666,7 +66108,7 @@ var native_spec_default = {
66666
66108
  "snapchat",
66667
66109
  "quickbooks"
66668
66110
  ],
66669
- example: "meta_business",
66111
+ example: "snapchat",
66670
66112
  type: "string"
66671
66113
  },
66672
66114
  redirect_url: {
@@ -66675,7 +66117,7 @@ var native_spec_default = {
66675
66117
  type: "string"
66676
66118
  },
66677
66119
  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.",
66120
+ 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
66121
  items: {
66680
66122
  enum: ["advertise"],
66681
66123
  example: "advertise",
@@ -66698,7 +66140,7 @@ var native_spec_default = {
66698
66140
  schema: {
66699
66141
  properties: {
66700
66142
  authorize_url: {
66701
- example: "https://www.facebook.com/v25.0/dialog/oauth",
66143
+ example: "https://accounts.snapchat.com/login/oauth2/authorize",
66702
66144
  type: "string"
66703
66145
  }
66704
66146
  },
@@ -72267,7 +71709,7 @@ var native_spec_default = {
72267
71709
  requested_scopes: {
72268
71710
  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
71711
  items: {
72270
- example: "profile",
71712
+ example: "openid",
72271
71713
  type: "string"
72272
71714
  },
72273
71715
  type: "array"
@@ -73436,6 +72878,11 @@ var native_spec_default = {
73436
72878
  example: "Interior specialist. Leather, upholstery, and odor removal.",
73437
72879
  type: "string"
73438
72880
  },
72881
+ date_of_birth: {
72882
+ description: "The user's date of birth as an ISO 8601 date, like `1998-04-23`. The user must be at least 13. Global profile only; refused with `account_id`.",
72883
+ format: "date",
72884
+ type: "string"
72885
+ },
73439
72886
  name: {
73440
72887
  example: "Tanya Cole",
73441
72888
  type: "string"
@@ -78960,7 +78407,7 @@ var native_spec_default = {
78960
78407
  properties: {
78961
78408
  api_version_date: {
78962
78409
  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",
78410
+ example: "2026-01-01",
78964
78411
  type: ["string", "null"]
78965
78412
  },
78966
78413
  child_resource_events: {
@@ -79336,7 +78783,7 @@ var native_spec_default = {
79336
78783
  properties: {
79337
78784
  api_version_date: {
79338
78785
  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",
78786
+ example: "2026-01-01",
79340
78787
  type: ["string", "null"]
79341
78788
  },
79342
78789
  child_resource_events: {
@@ -80225,7 +79672,7 @@ var native_spec_default = {
80225
79672
  example: {
80226
79673
  account_id: "biz_xxxxxxxxxxxxxx",
80227
79674
  api_version: "v1",
80228
- api_version_date: "2026-10-29-4",
79675
+ api_version_date: "2026-10-30",
80229
79676
  data: {
80230
79677
  ads_spend_usd: null,
80231
79678
  balances: [],
@@ -80546,7 +79993,7 @@ var native_spec_default = {
80546
79993
  example: {
80547
79994
  account_id: "biz_xxxxxxxxxxxxxx",
80548
79995
  api_version: "v1",
80549
- api_version_date: "2026-10-29-4",
79996
+ api_version_date: "2026-10-30",
80550
79997
  data: {
80551
79998
  ads_spend_usd: null,
80552
79999
  balances: [],
@@ -80867,7 +80314,7 @@ var native_spec_default = {
80867
80314
  example: {
80868
80315
  account_id: "biz_xxxxxxxxxxxxxx",
80869
80316
  api_version: "v1",
80870
- api_version_date: "2026-10-29-4",
80317
+ api_version_date: "2026-10-30",
80871
80318
  data: {
80872
80319
  account_id: "biz_xxxxxxxxxxxxxx",
80873
80320
  disabled_at: "2026-01-01T12:00:00.000Z",
@@ -80997,7 +80444,7 @@ var native_spec_default = {
80997
80444
  example: {
80998
80445
  account_id: "biz_xxxxxxxxxxxxxx",
80999
80446
  api_version: "v1",
81000
- api_version_date: "2026-10-29-4",
80447
+ api_version_date: "2026-10-30",
81001
80448
  data: {
81002
80449
  ads_spend_usd: null,
81003
80450
  balances: [],
@@ -81318,7 +80765,7 @@ var native_spec_default = {
81318
80765
  example: {
81319
80766
  account_id: "biz_xxxxxxxxxxxxxx",
81320
80767
  api_version: "v1",
81321
- api_version_date: "2026-10-29-4",
80768
+ api_version_date: "2026-10-30",
81322
80769
  data: {
81323
80770
  ad_campaign: {
81324
80771
  id: "adcamp_xxxxxxxxxxxxxx"
@@ -81453,14 +80900,14 @@ var native_spec_default = {
81453
80900
  descriptions: {
81454
80901
  items: {
81455
80902
  $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."
80903
+ description: "The description shown on the ad."
81457
80904
  },
81458
80905
  type: "array"
81459
80906
  },
81460
80907
  headlines: {
81461
80908
  items: {
81462
80909
  $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."
80910
+ description: "The headline shown on the ad."
81464
80911
  },
81465
80912
  type: "array"
81466
80913
  },
@@ -81479,7 +80926,7 @@ var native_spec_default = {
81479
80926
  primary_texts: {
81480
80927
  items: {
81481
80928
  $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."
80929
+ description: "The primary text shown in the ad body. Several entries make text variations."
81483
80930
  },
81484
80931
  type: "array"
81485
80932
  },
@@ -81618,9 +81065,8 @@ var native_spec_default = {
81618
81065
  example: {
81619
81066
  account_id: "biz_xxxxxxxxxxxxxx",
81620
81067
  api_version: "v1",
81621
- api_version_date: "2026-10-29-4",
81068
+ api_version_date: "2026-10-30",
81622
81069
  data: {
81623
- bid_type: null,
81624
81070
  budget_amount: 50,
81625
81071
  budget_amount_local: 50,
81626
81072
  budget_currency: "usd",
@@ -81663,25 +81109,14 @@ var native_spec_default = {
81663
81109
  },
81664
81110
  data: {
81665
81111
  properties: {
81666
- bid_type: {
81667
- description: "How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, and `maximum_target` never bids above a cap.",
81668
- enum: [
81669
- "minimum_cost",
81670
- "average_target",
81671
- "maximum_target",
81672
- null
81673
- ],
81674
- example: "average_target",
81675
- type: ["string", "null"]
81676
- },
81677
81112
  budget_amount: {
81678
81113
  description: "The campaign's budget in USD, which is what it is stored and billed in. `null` when each ad group sets its own budget instead.",
81679
- example: 25,
81114
+ example: 50,
81680
81115
  type: ["number", "null"]
81681
81116
  },
81682
81117
  budget_amount_local: {
81683
81118
  description: "The same budget stated in `budget_currency` at today's exchange rate, for display in the account's ads reporting currency. `null` when `budget_amount` is.",
81684
- example: 25,
81119
+ example: 50,
81685
81120
  type: ["number", "null"]
81686
81121
  },
81687
81122
  budget_currency: {
@@ -81692,7 +81127,7 @@ var native_spec_default = {
81692
81127
  budget_optimization: {
81693
81128
  description: "Which level owns the budget: the whole campaign (`ad_campaign`) or each ad group individually (`ad_group`).",
81694
81129
  enum: ["ad_campaign", "ad_group", null],
81695
- example: "ad_campaign",
81130
+ example: "ad_group",
81696
81131
  type: ["string", "null"]
81697
81132
  },
81698
81133
  budget_type: {
@@ -81716,6 +81151,7 @@ var native_spec_default = {
81716
81151
  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
81152
  enum: [
81718
81153
  "payment_failed",
81154
+ "waiting_for_ein",
81719
81155
  "in_appeal",
81720
81156
  "all_ads_rejected",
81721
81157
  "draft",
@@ -81731,7 +81167,7 @@ var native_spec_default = {
81731
81167
  "ad_groups_off",
81732
81168
  "active"
81733
81169
  ],
81734
- example: "draft",
81170
+ example: "issues",
81735
81171
  type: "string"
81736
81172
  },
81737
81173
  desired_cost_per_result: {
@@ -81804,12 +81240,12 @@ var native_spec_default = {
81804
81240
  "imported",
81805
81241
  "duplicating"
81806
81242
  ],
81807
- example: "draft",
81243
+ example: "active",
81808
81244
  type: "string"
81809
81245
  },
81810
81246
  title: {
81811
81247
  description: "Display name of the ad campaign.",
81812
- example: "Now hiring mobile detailers \u2014 Austin",
81248
+ example: "Ceramic coating \u2014 Austin leads",
81813
81249
  type: "string"
81814
81250
  },
81815
81251
  updated_at: {
@@ -81930,9 +81366,8 @@ var native_spec_default = {
81930
81366
  example: {
81931
81367
  account_id: "biz_xxxxxxxxxxxxxx",
81932
81368
  api_version: "v1",
81933
- api_version_date: "2026-10-29-4",
81369
+ api_version_date: "2026-10-30",
81934
81370
  data: {
81935
- bid_type: null,
81936
81371
  budget_amount: 50,
81937
81372
  budget_amount_local: 50,
81938
81373
  budget_currency: "usd",
@@ -81978,25 +81413,14 @@ var native_spec_default = {
81978
81413
  },
81979
81414
  data: {
81980
81415
  properties: {
81981
- bid_type: {
81982
- description: "How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, and `maximum_target` never bids above a cap.",
81983
- enum: [
81984
- "minimum_cost",
81985
- "average_target",
81986
- "maximum_target",
81987
- null
81988
- ],
81989
- example: "average_target",
81990
- type: ["string", "null"]
81991
- },
81992
81416
  budget_amount: {
81993
81417
  description: "The campaign's budget in USD, which is what it is stored and billed in. `null` when each ad group sets its own budget instead.",
81994
- example: 25,
81418
+ example: 50,
81995
81419
  type: ["number", "null"]
81996
81420
  },
81997
81421
  budget_amount_local: {
81998
81422
  description: "The same budget stated in `budget_currency` at today's exchange rate, for display in the account's ads reporting currency. `null` when `budget_amount` is.",
81999
- example: 25,
81423
+ example: 50,
82000
81424
  type: ["number", "null"]
82001
81425
  },
82002
81426
  budget_currency: {
@@ -82007,7 +81431,7 @@ var native_spec_default = {
82007
81431
  budget_optimization: {
82008
81432
  description: "Which level owns the budget: the whole campaign (`ad_campaign`) or each ad group individually (`ad_group`).",
82009
81433
  enum: ["ad_campaign", "ad_group", null],
82010
- example: "ad_campaign",
81434
+ example: "ad_group",
82011
81435
  type: ["string", "null"]
82012
81436
  },
82013
81437
  budget_type: {
@@ -82031,6 +81455,7 @@ var native_spec_default = {
82031
81455
  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
81456
  enum: [
82033
81457
  "payment_failed",
81458
+ "waiting_for_ein",
82034
81459
  "in_appeal",
82035
81460
  "all_ads_rejected",
82036
81461
  "draft",
@@ -82046,7 +81471,7 @@ var native_spec_default = {
82046
81471
  "ad_groups_off",
82047
81472
  "active"
82048
81473
  ],
82049
- example: "draft",
81474
+ example: "issues",
82050
81475
  type: "string"
82051
81476
  },
82052
81477
  desired_cost_per_result: {
@@ -82119,12 +81544,12 @@ var native_spec_default = {
82119
81544
  "imported",
82120
81545
  "duplicating"
82121
81546
  ],
82122
- example: "draft",
81547
+ example: "active",
82123
81548
  type: "string"
82124
81549
  },
82125
81550
  title: {
82126
81551
  description: "Display name of the ad campaign.",
82127
- example: "Now hiring mobile detailers \u2014 Austin",
81552
+ example: "Ceramic coating \u2014 Austin leads",
82128
81553
  type: "string"
82129
81554
  },
82130
81555
  updated_at: {
@@ -82242,7 +81667,7 @@ var native_spec_default = {
82242
81667
  example: {
82243
81668
  account_id: "biz_xxxxxxxxxxxxxx",
82244
81669
  api_version: "v1",
82245
- api_version_date: "2026-10-29-4",
81670
+ api_version_date: "2026-10-30",
82246
81671
  data: {
82247
81672
  ad_campaign: {
82248
81673
  id: "adcamp_xxxxxxxxxxxxxx"
@@ -82605,7 +82030,7 @@ var native_spec_default = {
82605
82030
  example: {
82606
82031
  account_id: "biz_xxxxxxxxxxxxxx",
82607
82032
  api_version: "v1",
82608
- api_version_date: "2026-10-29-4",
82033
+ api_version_date: "2026-10-30",
82609
82034
  data: {
82610
82035
  account: {
82611
82036
  id: "biz_xxxxxxxxxxxxx2",
@@ -82742,7 +82167,7 @@ var native_spec_default = {
82742
82167
  example: {
82743
82168
  account_id: "biz_xxxxxxxxxxxxxx",
82744
82169
  api_version: "v1",
82745
- api_version_date: "2026-10-29-4",
82170
+ api_version_date: "2026-10-30",
82746
82171
  data: {
82747
82172
  account: {
82748
82173
  id: "biz_xxxxxxxxxxxxx2",
@@ -82879,7 +82304,7 @@ var native_spec_default = {
82879
82304
  example: {
82880
82305
  account_id: "biz_xxxxxxxxxxxxxx",
82881
82306
  api_version: "v1",
82882
- api_version_date: "2026-10-29-4",
82307
+ api_version_date: "2026-10-30",
82883
82308
  data: {
82884
82309
  billing: null,
82885
82310
  canceled_at: null,
@@ -83202,7 +82627,7 @@ var native_spec_default = {
83202
82627
  example: {
83203
82628
  account_id: "biz_xxxxxxxxxxxxxx",
83204
82629
  api_version: "v1",
83205
- api_version_date: "2026-10-29-4",
82630
+ api_version_date: "2026-10-30",
83206
82631
  data: {
83207
82632
  billing: null,
83208
82633
  canceled_at: null,
@@ -83525,7 +82950,7 @@ var native_spec_default = {
83525
82950
  example: {
83526
82951
  account_id: "biz_xxxxxxxxxxxxxx",
83527
82952
  api_version: "v1",
83528
- api_version_date: "2026-10-29-4",
82953
+ api_version_date: "2026-10-30",
83529
82954
  data: {
83530
82955
  billing: null,
83531
82956
  canceled_at: null,
@@ -83848,7 +83273,7 @@ var native_spec_default = {
83848
83273
  example: {
83849
83274
  account_id: "biz_xxxxxxxxxxxxxx",
83850
83275
  api_version: "v1",
83851
- api_version_date: "2026-10-29-4",
83276
+ api_version_date: "2026-10-30",
83852
83277
  data: {
83853
83278
  billing: null,
83854
83279
  canceled_at: null,
@@ -84171,7 +83596,7 @@ var native_spec_default = {
84171
83596
  example: {
84172
83597
  account_id: "biz_xxxxxxxxxxxxxx",
84173
83598
  api_version: "v1",
84174
- api_version_date: "2026-10-29-4",
83599
+ api_version_date: "2026-10-30",
84175
83600
  data: {
84176
83601
  hosted_url: null,
84177
83602
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84321,7 +83746,7 @@ var native_spec_default = {
84321
83746
  example: {
84322
83747
  account_id: "biz_xxxxxxxxxxxxxx",
84323
83748
  api_version: "v1",
84324
- api_version_date: "2026-10-29-4",
83749
+ api_version_date: "2026-10-30",
84325
83750
  data: {
84326
83751
  hosted_url: null,
84327
83752
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84471,7 +83896,7 @@ var native_spec_default = {
84471
83896
  example: {
84472
83897
  account_id: "biz_xxxxxxxxxxxxxx",
84473
83898
  api_version: "v1",
84474
- api_version_date: "2026-10-29-4",
83899
+ api_version_date: "2026-10-30",
84475
83900
  data: {
84476
83901
  hosted_url: null,
84477
83902
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84621,7 +84046,7 @@ var native_spec_default = {
84621
84046
  example: {
84622
84047
  account_id: "biz_xxxxxxxxxxxxxx",
84623
84048
  api_version: "v1",
84624
- api_version_date: "2026-10-29-4",
84049
+ api_version_date: "2026-10-30",
84625
84050
  data: {
84626
84051
  hosted_url: null,
84627
84052
  id: "ciac_xxxxxxxxxxxxxx",
@@ -84771,7 +84196,7 @@ var native_spec_default = {
84771
84196
  example: {
84772
84197
  account_id: "biz_xxxxxxxxxxxxxx",
84773
84198
  api_version: "v1",
84774
- api_version_date: "2026-10-29-4",
84199
+ api_version_date: "2026-10-30",
84775
84200
  data: {
84776
84201
  card_id: "icrd_xxxxxxxxxxxxxx",
84777
84202
  cardholder_id: null,
@@ -84902,7 +84327,7 @@ var native_spec_default = {
84902
84327
  example: {
84903
84328
  account_id: "biz_xxxxxxxxxxxxxx",
84904
84329
  api_version: "v1",
84905
- api_version_date: "2026-10-29-4",
84330
+ api_version_date: "2026-10-30",
84906
84331
  data: {
84907
84332
  card_id: "icrd_xxxxxxxxxxxxxx",
84908
84333
  cardholder_id: null,
@@ -85033,7 +84458,7 @@ var native_spec_default = {
85033
84458
  example: {
85034
84459
  account_id: "biz_xxxxxxxxxxxxxx",
85035
84460
  api_version: "v1",
85036
- api_version_date: "2026-10-29-4",
84461
+ api_version_date: "2026-10-30",
85037
84462
  data: {
85038
84463
  card_id: "icrd_xxxxxxxxxxxxxx",
85039
84464
  cardholder_id: null,
@@ -85164,7 +84589,7 @@ var native_spec_default = {
85164
84589
  example: {
85165
84590
  account_id: "biz_xxxxxxxxxxxxxx",
85166
84591
  api_version: "v1",
85167
- api_version_date: "2026-10-29-4",
84592
+ api_version_date: "2026-10-30",
85168
84593
  data: {
85169
84594
  card_id: "icrd_xxxxxxxxxxxxxx",
85170
84595
  cardholder_id: null,
@@ -85295,7 +84720,7 @@ var native_spec_default = {
85295
84720
  example: {
85296
84721
  account_id: "biz_xxxxxxxxxxxxxx",
85297
84722
  api_version: "v1",
85298
- api_version_date: "2026-10-29-4",
84723
+ api_version_date: "2026-10-30",
85299
84724
  data: {
85300
84725
  card_id: "icrd_xxxxxxxxxxxxxx",
85301
84726
  cardholder_id: null,
@@ -85426,7 +84851,7 @@ var native_spec_default = {
85426
84851
  example: {
85427
84852
  account_id: "biz_xxxxxxxxxxxxxx",
85428
84853
  api_version: "v1",
85429
- api_version_date: "2026-10-29-4",
84854
+ api_version_date: "2026-10-30",
85430
84855
  data: {
85431
84856
  amount: "75000000000",
85432
84857
  available_at: null,
@@ -85558,7 +84983,7 @@ var native_spec_default = {
85558
84983
  example: {
85559
84984
  account_id: "biz_xxxxxxxxxxxxxx",
85560
84985
  api_version: "v1",
85561
- api_version_date: "2026-10-29-4",
84986
+ api_version_date: "2026-10-30",
85562
84987
  data: {
85563
84988
  acceptable: true,
85564
84989
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -85594,6 +85019,7 @@ var native_spec_default = {
85594
85019
  evidence_locked_reason: null,
85595
85020
  evidence_submitted_at: null,
85596
85021
  fee: null,
85022
+ fee_charged: false,
85597
85023
  id: "dspt_xxxxxxxxxxxxxx",
85598
85024
  inquiry: false,
85599
85025
  issuer_comments: [],
@@ -85739,7 +85165,7 @@ var native_spec_default = {
85739
85165
  example: {
85740
85166
  account_id: "biz_xxxxxxxxxxxxxx",
85741
85167
  api_version: "v1",
85742
- api_version_date: "2026-10-29-4",
85168
+ api_version_date: "2026-10-30",
85743
85169
  data: {
85744
85170
  acceptable: false,
85745
85171
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -85775,6 +85201,7 @@ var native_spec_default = {
85775
85201
  evidence_locked_reason: "submitted",
85776
85202
  evidence_submitted_at: "2026-01-01T12:00:00.000Z",
85777
85203
  fee: null,
85204
+ fee_charged: false,
85778
85205
  id: "dspt_xxxxxxxxxxxxxx",
85779
85206
  inquiry: false,
85780
85207
  issuer_comments: [],
@@ -85920,7 +85347,7 @@ var native_spec_default = {
85920
85347
  example: {
85921
85348
  account_id: "biz_xxxxxxxxxxxxxx",
85922
85349
  api_version: "v1",
85923
- api_version_date: "2026-10-29-4",
85350
+ api_version_date: "2026-10-30",
85924
85351
  data: {
85925
85352
  account_id: null,
85926
85353
  amount: 25,
@@ -86052,7 +85479,7 @@ var native_spec_default = {
86052
85479
  example: {
86053
85480
  account_id: "biz_xxxxxxxxxxxxxx",
86054
85481
  api_version: "v1",
86055
- api_version_date: "2026-10-29-4",
85482
+ api_version_date: "2026-10-30",
86056
85483
  data: {
86057
85484
  account_id: "biz_xxxxxxxxxxxxxx",
86058
85485
  apple_pay: null,
@@ -86187,7 +85614,7 @@ var native_spec_default = {
86187
85614
  example: {
86188
85615
  account_id: "biz_xxxxxxxxxxxxxx",
86189
85616
  api_version: "v1",
86190
- api_version_date: "2026-10-29-4",
85617
+ api_version_date: "2026-10-30",
86191
85618
  data: {
86192
85619
  account_id: "biz_xxxxxxxxxxxxxx",
86193
85620
  apple_pay: null,
@@ -86322,7 +85749,7 @@ var native_spec_default = {
86322
85749
  example: {
86323
85750
  account_id: "biz_xxxxxxxxxxxxxx",
86324
85751
  api_version: "v1",
86325
- api_version_date: "2026-10-29-4",
85752
+ api_version_date: "2026-10-30",
86326
85753
  data: {
86327
85754
  account_id: "biz_xxxxxxxxxxxxxx",
86328
85755
  apple_pay: null,
@@ -86457,7 +85884,7 @@ var native_spec_default = {
86457
85884
  example: {
86458
85885
  account_id: "biz_xxxxxxxxxxxxxx",
86459
85886
  api_version: "v1",
86460
- api_version_date: "2026-10-29-4",
85887
+ api_version_date: "2026-10-30",
86461
85888
  data: {
86462
85889
  created_at: "2026-01-01T12:00:00.000Z",
86463
85890
  download_url: "https://s3.amazonaws.com/uploads/exports/members-export.csv",
@@ -86578,7 +86005,7 @@ var native_spec_default = {
86578
86005
  example: {
86579
86006
  account_id: "biz_xxxxxxxxxxxxxx",
86580
86007
  api_version: "v1",
86581
- api_version_date: "2026-10-29-4",
86008
+ api_version_date: "2026-10-30",
86582
86009
  data: {
86583
86010
  created_at: "2026-01-01T12:00:00.000Z",
86584
86011
  download_url: null,
@@ -86699,7 +86126,7 @@ var native_spec_default = {
86699
86126
  example: {
86700
86127
  account_id: "biz_xxxxxxxxxxxxxx",
86701
86128
  api_version: "v1",
86702
- api_version_date: "2026-10-29-4",
86129
+ api_version_date: "2026-10-30",
86703
86130
  data: {
86704
86131
  amount: "512345000000",
86705
86132
  available_at: "2026-01-01T12:00:00.000Z",
@@ -86836,7 +86263,7 @@ var native_spec_default = {
86836
86263
  example: {
86837
86264
  account_id: "biz_xxxxxxxxxxxxxx",
86838
86265
  api_version: "v1",
86839
- api_version_date: "2026-10-29-4",
86266
+ api_version_date: "2026-10-30",
86840
86267
  data: {
86841
86268
  id: "idpf_xxxxxxxxxxxxxx"
86842
86269
  },
@@ -86958,7 +86385,7 @@ var native_spec_default = {
86958
86385
  example: {
86959
86386
  account_id: "biz_xxxxxxxxxxxxxx",
86960
86387
  api_version: "v1",
86961
- api_version_date: "2026-10-29-4",
86388
+ api_version_date: "2026-10-30",
86962
86389
  data: {
86963
86390
  access_level: "customer",
86964
86391
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -86976,6 +86403,7 @@ var native_spec_default = {
86976
86403
  last_accessed_at: "2026-01-01T12:00:00.000Z",
86977
86404
  most_recent_action: "joined",
86978
86405
  most_recent_action_at: "2026-01-01T12:00:00.000Z",
86406
+ name: null,
86979
86407
  phone_number: null,
86980
86408
  status: "joined",
86981
86409
  token_balance: 0,
@@ -87105,7 +86533,7 @@ var native_spec_default = {
87105
86533
  example: {
87106
86534
  account_id: "biz_xxxxxxxxxxxxxx",
87107
86535
  api_version: "v1",
87108
- api_version_date: "2026-10-29-4",
86536
+ api_version_date: "2026-10-30",
87109
86537
  data: {
87110
86538
  access_level: "customer",
87111
86539
  account_id: "biz_xxxxxxxxxxxxxx",
@@ -87123,6 +86551,7 @@ var native_spec_default = {
87123
86551
  last_accessed_at: "2026-01-01T12:00:00.000Z",
87124
86552
  most_recent_action: null,
87125
86553
  most_recent_action_at: null,
86554
+ name: null,
87126
86555
  phone_number: null,
87127
86556
  status: "joined",
87128
86557
  token_balance: 0,
@@ -87252,7 +86681,7 @@ var native_spec_default = {
87252
86681
  example: {
87253
86682
  account_id: "biz_xxxxxxxxxxxxxx",
87254
86683
  api_version: "v1",
87255
- api_version_date: "2026-10-29-4",
86684
+ api_version_date: "2026-10-30",
87256
86685
  data: {
87257
86686
  account: {
87258
86687
  id: "biz_xxxxxxxxxxxxxx",
@@ -87418,7 +86847,7 @@ var native_spec_default = {
87418
86847
  example: {
87419
86848
  account_id: "biz_xxxxxxxxxxxxxx",
87420
86849
  api_version: "v1",
87421
- api_version_date: "2026-10-29-4",
86850
+ api_version_date: "2026-10-30",
87422
86851
  data: {
87423
86852
  account: {
87424
86853
  id: "biz_xxxxxxxxxxxxxx",
@@ -87590,7 +87019,7 @@ var native_spec_default = {
87590
87019
  example: {
87591
87020
  account_id: "biz_xxxxxxxxxxxxxx",
87592
87021
  api_version: "v1",
87593
- api_version_date: "2026-10-29-4",
87022
+ api_version_date: "2026-10-30",
87594
87023
  data: {
87595
87024
  account: {
87596
87025
  id: "biz_xxxxxxxxxxxxxx",
@@ -87756,7 +87185,7 @@ var native_spec_default = {
87756
87185
  example: {
87757
87186
  account_id: "biz_xxxxxxxxxxxxxx",
87758
87187
  api_version: "v1",
87759
- api_version_date: "2026-10-29-4",
87188
+ api_version_date: "2026-10-30",
87760
87189
  data: {
87761
87190
  account_id: "biz_xxxxxxxxxxxxxx",
87762
87191
  amount_after_fees: {
@@ -88042,7 +87471,7 @@ var native_spec_default = {
88042
87471
  example: {
88043
87472
  account_id: "biz_xxxxxxxxxxxxxx",
88044
87473
  api_version: "v1",
88045
- api_version_date: "2026-10-29-4",
87474
+ api_version_date: "2026-10-30",
88046
87475
  data: {
88047
87476
  account_id: "biz_xxxxxxxxxxxxxx",
88048
87477
  amount_after_fees: {
@@ -88328,7 +87757,7 @@ var native_spec_default = {
88328
87757
  example: {
88329
87758
  account_id: "biz_xxxxxxxxxxxxxx",
88330
87759
  api_version: "v1",
88331
- api_version_date: "2026-10-29-4",
87760
+ api_version_date: "2026-10-30",
88332
87761
  data: {
88333
87762
  account_id: "biz_xxxxxxxxxxxxxx",
88334
87763
  amount_after_fees: {
@@ -88614,7 +88043,7 @@ var native_spec_default = {
88614
88043
  example: {
88615
88044
  account_id: "biz_xxxxxxxxxxxxxx",
88616
88045
  api_version: "v1",
88617
- api_version_date: "2026-10-29-4",
88046
+ api_version_date: "2026-10-30",
88618
88047
  data: {
88619
88048
  account_id: "biz_xxxxxxxxxxxxxx",
88620
88049
  amount_after_fees: {
@@ -88900,7 +88329,7 @@ var native_spec_default = {
88900
88329
  example: {
88901
88330
  account_id: "biz_xxxxxxxxxxxxxx",
88902
88331
  api_version: "v1",
88903
- api_version_date: "2026-10-29-4",
88332
+ api_version_date: "2026-10-30",
88904
88333
  data: {
88905
88334
  account_id: "biz_xxxxxxxxxxxxxx",
88906
88335
  amount_after_fees: {
@@ -89180,7 +88609,7 @@ var native_spec_default = {
89180
88609
  example: {
89181
88610
  account_id: "biz_xxxxxxxxxxxxxx",
89182
88611
  api_version: "v1",
89183
- api_version_date: "2026-10-29-4",
88612
+ api_version_date: "2026-10-30",
89184
88613
  data: {
89185
88614
  account_id: "biz_xxxxxxxxxxxxxx",
89186
88615
  amount_after_fees: {
@@ -89472,7 +88901,7 @@ var native_spec_default = {
89472
88901
  example: {
89473
88902
  account_id: "biz_xxxxxxxxxxxxxx",
89474
88903
  api_version: "v1",
89475
- api_version_date: "2026-10-29-4",
88904
+ api_version_date: "2026-10-30",
89476
88905
  data: {
89477
88906
  account_id: "biz_xxxxxxxxxxxxxx",
89478
88907
  amount_after_fees: {
@@ -89758,7 +89187,7 @@ var native_spec_default = {
89758
89187
  example: {
89759
89188
  account_id: "biz_xxxxxxxxxxxxxx",
89760
89189
  api_version: "v1",
89761
- api_version_date: "2026-10-29-4",
89190
+ api_version_date: "2026-10-30",
89762
89191
  data: {
89763
89192
  amount: "10.0",
89764
89193
  cancelable: false,
@@ -90153,7 +89582,7 @@ var native_spec_default = {
90153
89582
  example: {
90154
89583
  account_id: "biz_xxxxxxxxxxxxxx",
90155
89584
  api_version: "v1",
90156
- api_version_date: "2026-10-29-4",
89585
+ api_version_date: "2026-10-30",
90157
89586
  data: {
90158
89587
  amount: "10.0",
90159
89588
  cancelable: false,
@@ -90545,7 +89974,7 @@ var native_spec_default = {
90545
89974
  example: {
90546
89975
  account_id: "biz_xxxxxxxxxxxxxx",
90547
89976
  api_version: "v1",
90548
- api_version_date: "2026-10-29-4",
89977
+ api_version_date: "2026-10-30",
90549
89978
  data: {
90550
89979
  amount: "10.0",
90551
89980
  cancelable: false,
@@ -90933,7 +90362,7 @@ var native_spec_default = {
90933
90362
  example: {
90934
90363
  account_id: "biz_xxxxxxxxxxxxxx",
90935
90364
  api_version: "v1",
90936
- api_version_date: "2026-10-29-4",
90365
+ api_version_date: "2026-10-30",
90937
90366
  data: {
90938
90367
  account_reference: "4483",
90939
90368
  bank_verification_state: null,
@@ -91416,7 +90845,7 @@ var native_spec_default = {
91416
90845
  example: {
91417
90846
  account_id: "biz_xxxxxxxxxxxxxx",
91418
90847
  api_version: "v1",
91419
- api_version_date: "2026-10-29-4",
90848
+ api_version_date: "2026-10-30",
91420
90849
  data: {
91421
90850
  account: {
91422
90851
  id: "biz_xxxxxxxxxxxxxx",
@@ -91720,7 +91149,7 @@ var native_spec_default = {
91720
91149
  example: {
91721
91150
  account_id: "biz_xxxxxxxxxxxxxx",
91722
91151
  api_version: "v1",
91723
- api_version_date: "2026-10-29-4",
91152
+ api_version_date: "2026-10-30",
91724
91153
  data: {
91725
91154
  account: {
91726
91155
  id: "biz_xxxxxxxxxxxxxx",
@@ -92024,7 +91453,7 @@ var native_spec_default = {
92024
91453
  example: {
92025
91454
  account_id: "biz_xxxxxxxxxxxxxx",
92026
91455
  api_version: "v1",
92027
- api_version_date: "2026-10-29-4",
91456
+ api_version_date: "2026-10-30",
92028
91457
  data: {
92029
91458
  account: {
92030
91459
  id: "biz_xxxxxxxxxxxxxx",
@@ -92328,7 +91757,7 @@ var native_spec_default = {
92328
91757
  example: {
92329
91758
  account_id: "biz_xxxxxxxxxxxxxx",
92330
91759
  api_version: "v1",
92331
- api_version_date: "2026-10-29-4",
91760
+ api_version_date: "2026-10-30",
92332
91761
  data: {
92333
91762
  account: {
92334
91763
  id: "biz_xxxxxxxxxxxxxx",
@@ -92480,7 +91909,7 @@ var native_spec_default = {
92480
91909
  example: {
92481
91910
  account_id: "biz_xxxxxxxxxxxxxx",
92482
91911
  api_version: "v1",
92483
- api_version_date: "2026-10-29-4",
91912
+ api_version_date: "2026-10-30",
92484
91913
  data: {
92485
91914
  account: {
92486
91915
  id: "biz_xxxxxxxxxxxxxx",
@@ -92632,7 +92061,7 @@ var native_spec_default = {
92632
92061
  example: {
92633
92062
  account_id: "biz_xxxxxxxxxxxxxx",
92634
92063
  api_version: "v1",
92635
- api_version_date: "2026-10-29-4",
92064
+ api_version_date: "2026-10-30",
92636
92065
  data: {
92637
92066
  account: {
92638
92067
  id: "biz_xxxxxxxxxxxxxx",
@@ -92784,7 +92213,7 @@ var native_spec_default = {
92784
92213
  example: {
92785
92214
  account_id: "biz_xxxxxxxxxxxxxx",
92786
92215
  api_version: "v1",
92787
- api_version_date: "2026-10-29-4",
92216
+ api_version_date: "2026-10-30",
92788
92217
  data: {
92789
92218
  account: {
92790
92219
  id: "biz_xxxxxxxxxxxxxx",
@@ -92936,7 +92365,7 @@ var native_spec_default = {
92936
92365
  example: {
92937
92366
  account_id: "biz_xxxxxxxxxxxxxx",
92938
92367
  api_version: "v1",
92939
- api_version_date: "2026-10-29-4",
92368
+ api_version_date: "2026-10-30",
92940
92369
  data: {
92941
92370
  account: {
92942
92371
  id: "biz_xxxxxxxxxxxxxx",
@@ -93088,7 +92517,7 @@ var native_spec_default = {
93088
92517
  example: {
93089
92518
  account_id: "biz_xxxxxxxxxxxxxx",
93090
92519
  api_version: "v1",
93091
- api_version_date: "2026-10-29-4",
92520
+ api_version_date: "2026-10-30",
93092
92521
  data: {
93093
92522
  account: {
93094
92523
  id: "biz_xxxxxxxxxxxxxx",
@@ -93248,7 +92677,7 @@ var native_spec_default = {
93248
92677
  example: {
93249
92678
  account_id: "biz_xxxxxxxxxxxxxx",
93250
92679
  api_version: "v1",
93251
- api_version_date: "2026-10-29-4",
92680
+ api_version_date: "2026-10-30",
93252
92681
  data: {
93253
92682
  account: {
93254
92683
  id: "biz_xxxxxxxxxxxxxx",
@@ -93408,7 +92837,7 @@ var native_spec_default = {
93408
92837
  example: {
93409
92838
  account_id: "biz_xxxxxxxxxxxxxx",
93410
92839
  api_version: "v1",
93411
- api_version_date: "2026-10-29-4",
92840
+ api_version_date: "2026-10-30",
93412
92841
  data: {
93413
92842
  account: {
93414
92843
  id: "biz_xxxxxxxxxxxxxx",
@@ -93568,7 +92997,7 @@ var native_spec_default = {
93568
92997
  example: {
93569
92998
  account_id: "biz_xxxxxxxxxxxxxx",
93570
92999
  api_version: "v1",
93571
- api_version_date: "2026-10-29-4",
93000
+ api_version_date: "2026-10-30",
93572
93001
  data: {
93573
93002
  account_id: "biz_xxxxxxxxxxxxxx",
93574
93003
  checkout_configuration_id: null,
@@ -93709,7 +93138,7 @@ var native_spec_default = {
93709
93138
  example: {
93710
93139
  account_id: "biz_xxxxxxxxxxxxxx",
93711
93140
  api_version: "v1",
93712
- api_version_date: "2026-10-29-4",
93141
+ api_version_date: "2026-10-30",
93713
93142
  data: {
93714
93143
  account_id: "biz_xxxxxxxxxxxxxx",
93715
93144
  checkout_configuration_id: null,
@@ -93853,7 +93282,7 @@ var native_spec_default = {
93853
93282
  example: {
93854
93283
  account_id: "biz_xxxxxxxxxxxxxx",
93855
93284
  api_version: "v1",
93856
- api_version_date: "2026-10-29-4",
93285
+ api_version_date: "2026-10-30",
93857
93286
  data: {
93858
93287
  account_id: "biz_xxxxxxxxxxxxxx",
93859
93288
  checkout_configuration_id: null,
@@ -94032,7 +93461,7 @@ var native_spec_default = {
94032
93461
  example: {
94033
93462
  account_id: "biz_xxxxxxxxxxxxxx",
94034
93463
  api_version: "v1",
94035
- api_version_date: "2026-10-29-4",
93464
+ api_version_date: "2026-10-30",
94036
93465
  data: {
94037
93466
  account_id: "biz_xxxxxxxxxxxxxx",
94038
93467
  carrier: "ups",
@@ -94156,7 +93585,7 @@ var native_spec_default = {
94156
93585
  example: {
94157
93586
  account_id: "biz_xxxxxxxxxxxxxx",
94158
93587
  api_version: "v1",
94159
- api_version_date: "2026-10-29-4",
93588
+ api_version_date: "2026-10-30",
94160
93589
  data: {
94161
93590
  account_id: "biz_xxxxxxxxxxxxxx",
94162
93591
  carrier: "ups",
@@ -94280,7 +93709,7 @@ var native_spec_default = {
94280
93709
  example: {
94281
93710
  account_id: "biz_xxxxxxxxxxxxxx",
94282
93711
  api_version: "v1",
94283
- api_version_date: "2026-10-29-4",
93712
+ api_version_date: "2026-10-30",
94284
93713
  data: {
94285
93714
  account: {
94286
93715
  id: "biz_xxxxxxxxxxxxxx",
@@ -94512,7 +93941,7 @@ var native_spec_default = {
94512
93941
  example: {
94513
93942
  account_id: "biz_xxxxxxxxxxxxxx",
94514
93943
  api_version: "v1",
94515
- api_version_date: "2026-10-29-4",
93944
+ api_version_date: "2026-10-30",
94516
93945
  data: {
94517
93946
  amount: {
94518
93947
  amount: "250.00",
@@ -94835,7 +94264,7 @@ var native_spec_default = {
94835
94264
  example: {
94836
94265
  account_id: "biz_xxxxxxxxxxxxxx",
94837
94266
  api_version: "v1",
94838
- api_version_date: "2026-10-29-4",
94267
+ api_version_date: "2026-10-30",
94839
94268
  data: {
94840
94269
  amount: {
94841
94270
  amount: "250.00",
@@ -95158,7 +94587,7 @@ var native_spec_default = {
95158
94587
  example: {
95159
94588
  account_id: "biz_xxxxxxxxxxxxxx",
95160
94589
  api_version: "v1",
95161
- api_version_date: "2026-10-29-4",
94590
+ api_version_date: "2026-10-30",
95162
94591
  data: {
95163
94592
  amount: null,
95164
94593
  created_at: "2026-01-01T12:00:00.000Z",
@@ -95437,7 +94866,7 @@ var native_spec_default = {
95437
94866
  name: "Api-Version-Date",
95438
94867
  required: false,
95439
94868
  schema: {
95440
- example: "2026-10-29-4",
94869
+ example: "2026-10-30",
95441
94870
  type: "string"
95442
94871
  }
95443
94872
  },
@@ -100381,6 +99810,29 @@ var native_spec_default = {
100381
99810
  example: 1,
100382
99811
  type: "integer"
100383
99812
  },
99813
+ levels: {
99814
+ items: {
99815
+ $ref: "#/components/schemas/AccountProcessingOfferLevel",
99816
+ description: "Every level from `0` through `10`, with the monthly qualifying spend it takes and its card processing percentage in each card region."
99817
+ },
99818
+ type: "array"
99819
+ },
99820
+ monthly_ads_spend: {
99821
+ $ref: "#/components/schemas/Money",
99822
+ description: "Charged Whop Ads spend this calendar month across every account the owner owns, in USD."
99823
+ },
99824
+ monthly_card_spend: {
99825
+ $ref: "#/components/schemas/Money",
99826
+ description: "Effective Whop Card spend this calendar month across every account the owner owns, in USD."
99827
+ },
99828
+ monthly_qualifying_spend: {
99829
+ $ref: "#/components/schemas/Money",
99830
+ 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."
99831
+ },
99832
+ monthly_trading_volume: {
99833
+ $ref: "#/components/schemas/Money",
99834
+ description: "Perpetual trading notional volume this calendar month across every account the owner owns, in USD."
99835
+ },
100384
99836
  points: {
100385
99837
  description: "Points earned this month across every account the owner owns.",
100386
99838
  example: 41e3,
@@ -100395,6 +99847,11 @@ var native_spec_default = {
100395
99847
  example: 59e3,
100396
99848
  type: ["integer", "null"]
100397
99849
  },
99850
+ processing_rate_percentage: {
99851
+ description: "The standard US and Canada card processing percentage at `current`, before any account's custom rate.",
99852
+ example: 2.6,
99853
+ type: "number"
99854
+ },
100398
99855
  resets_at: {
100399
99856
  description: "When this month's points reset to zero, as an ISO 8601 timestamp.",
100400
99857
  example: "2026-01-01T12:00:00.000Z",
@@ -100407,6 +99864,12 @@ var native_spec_default = {
100407
99864
  "points_by_source",
100408
99865
  "points_to_next",
100409
99866
  "resets_at",
99867
+ "processing_rate_percentage",
99868
+ "monthly_qualifying_spend",
99869
+ "monthly_ads_spend",
99870
+ "monthly_card_spend",
99871
+ "monthly_trading_volume",
99872
+ "levels",
100410
99873
  "boosted"
100411
99874
  ],
100412
99875
  type: "object"
@@ -100682,6 +100145,61 @@ var native_spec_default = {
100682
100145
  ],
100683
100146
  type: "object"
100684
100147
  },
100148
+ AccountProcessingOfferLevel: {
100149
+ properties: {
100150
+ level: {
100151
+ description: "The processing level.",
100152
+ example: 0,
100153
+ type: "integer"
100154
+ },
100155
+ minimum_spend: {
100156
+ $ref: "#/components/schemas/Money",
100157
+ description: "The monthly qualifying spend required to reach this level."
100158
+ },
100159
+ processing_rate_percentage: {
100160
+ description: "The standard US and Canada card processing percentage at this level, regardless of the account's custom rate.",
100161
+ example: 2.7,
100162
+ type: "number"
100163
+ },
100164
+ regional_rates: {
100165
+ items: {
100166
+ $ref: "#/components/schemas/AccountProcessingOfferRegionalRate",
100167
+ description: "The card processing percentage at this level for each card region, starting with US and Canada."
100168
+ },
100169
+ type: "array"
100170
+ }
100171
+ },
100172
+ required: [
100173
+ "level",
100174
+ "minimum_spend",
100175
+ "processing_rate_percentage",
100176
+ "regional_rates"
100177
+ ],
100178
+ type: "object"
100179
+ },
100180
+ AccountProcessingOfferRegionalRate: {
100181
+ properties: {
100182
+ processing_rate_percentage: {
100183
+ description: "The standard card processing percentage at this level for cards from this region, regardless of the account's custom rate.",
100184
+ example: 1.7,
100185
+ type: "number"
100186
+ },
100187
+ region: {
100188
+ description: "The card region this fee applies to.",
100189
+ enum: [
100190
+ "us_and_canada",
100191
+ "europe_uk_and_australia",
100192
+ "latin_america",
100193
+ "peru",
100194
+ "brazil"
100195
+ ],
100196
+ example: "europe_uk_and_australia",
100197
+ type: "string"
100198
+ }
100199
+ },
100200
+ required: ["region", "processing_rate_percentage"],
100201
+ type: "object"
100202
+ },
100685
100203
  AccountRecommendedAction: {
100686
100204
  properties: {
100687
100205
  action: {
@@ -101512,7 +101030,7 @@ var native_spec_default = {
101512
101030
  descriptions: {
101513
101031
  items: {
101514
101032
  $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."
101033
+ description: "The description shown on the ad."
101516
101034
  },
101517
101035
  type: "array"
101518
101036
  },
@@ -101524,7 +101042,7 @@ var native_spec_default = {
101524
101042
  headlines: {
101525
101043
  items: {
101526
101044
  $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."
101045
+ description: "The headline shown on the ad."
101528
101046
  },
101529
101047
  type: "array"
101530
101048
  },
@@ -101563,7 +101081,7 @@ var native_spec_default = {
101563
101081
  primary_texts: {
101564
101082
  items: {
101565
101083
  $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."
101084
+ description: "The primary text shown in the ad body. Several entries make text variations."
101567
101085
  },
101568
101086
  type: "array"
101569
101087
  },
@@ -101769,20 +101287,14 @@ var native_spec_default = {
101769
101287
  example: 165,
101770
101288
  type: "number"
101771
101289
  },
101772
- bid_type: {
101773
- description: "How delivery bids in the ad auction: `minimum_cost` gets the most results for the budget, `average_target` holds an average cost per result, and `maximum_target` never bids above a cap.",
101774
- enum: ["minimum_cost", "average_target", "maximum_target", null],
101775
- example: "average_target",
101776
- type: ["string", "null"]
101777
- },
101778
101290
  budget_amount: {
101779
101291
  description: "The campaign's budget in USD, which is what it is stored and billed in. `null` when each ad group sets its own budget instead.",
101780
- example: 25,
101292
+ example: 50,
101781
101293
  type: ["number", "null"]
101782
101294
  },
101783
101295
  budget_amount_local: {
101784
101296
  description: "The same budget stated in `budget_currency` at today's exchange rate, for display in the account's ads reporting currency. `null` when `budget_amount` is.",
101785
- example: 25,
101297
+ example: 50,
101786
101298
  type: ["number", "null"]
101787
101299
  },
101788
101300
  budget_currency: {
@@ -101793,7 +101305,7 @@ var native_spec_default = {
101793
101305
  budget_optimization: {
101794
101306
  description: "Which level owns the budget: the whole campaign (`ad_campaign`) or each ad group individually (`ad_group`).",
101795
101307
  enum: ["ad_campaign", "ad_group", null],
101796
- example: "ad_campaign",
101308
+ example: "ad_group",
101797
101309
  type: ["string", "null"]
101798
101310
  },
101799
101311
  budget_type: {
@@ -101928,6 +101440,7 @@ var native_spec_default = {
101928
101440
  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
101441
  enum: [
101930
101442
  "payment_failed",
101443
+ "waiting_for_ein",
101931
101444
  "in_appeal",
101932
101445
  "all_ads_rejected",
101933
101446
  "draft",
@@ -101943,7 +101456,7 @@ var native_spec_default = {
101943
101456
  "ad_groups_off",
101944
101457
  "active"
101945
101458
  ],
101946
- example: "draft",
101459
+ example: "issues",
101947
101460
  type: "string"
101948
101461
  },
101949
101462
  desired_cost_per_result: {
@@ -102109,7 +101622,7 @@ var native_spec_default = {
102109
101622
  "imported",
102110
101623
  "duplicating"
102111
101624
  ],
102112
- example: "draft",
101625
+ example: "active",
102113
101626
  type: "string"
102114
101627
  },
102115
101628
  submitted_application_value: {
@@ -102124,7 +101637,7 @@ var native_spec_default = {
102124
101637
  },
102125
101638
  title: {
102126
101639
  description: "Display name of the ad campaign.",
102127
- example: "Now hiring mobile detailers \u2014 Austin",
101640
+ example: "Ceramic coating \u2014 Austin leads",
102128
101641
  type: "string"
102129
101642
  },
102130
101643
  unique_click_through_rate: {
@@ -102219,142 +101732,6 @@ var native_spec_default = {
102219
101732
  ],
102220
101733
  type: "object"
102221
101734
  },
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
101735
  AdCreative: {
102359
101736
  properties: {
102360
101737
  crop: {
@@ -102380,7 +101757,7 @@ var native_spec_default = {
102380
101757
  type: "string"
102381
101758
  },
102382
101759
  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.",
101760
+ description: "Always `null`. Translations are no longer available.",
102384
101761
  example: null,
102385
101762
  type: ["string", "null"]
102386
101763
  },
@@ -103083,7 +102460,7 @@ var native_spec_default = {
103083
102460
  AdGroupDemographics: {
103084
102461
  properties: {
103085
102462
  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.",
102463
+ description: "Whether automatic audience targeting is on. When `true`, delivery can reach beyond the ages and genders you set, treating them as suggestions.",
103087
102464
  example: false,
103088
102465
  type: "boolean"
103089
102466
  },
@@ -103111,7 +102488,7 @@ var native_spec_default = {
103111
102488
  description: "Age, gender, and automatic-audience targeting.",
103112
102489
  properties: {
103113
102490
  automatic: {
103114
- description: "Turn on automatic audience targeting: delivery can reach beyond the ages, genders, and detailed targeting you set, treating them as suggestions.",
102491
+ description: "Turn on automatic audience targeting: delivery can reach beyond the ages and genders you set, treating them as suggestions.",
103115
102492
  example: false,
103116
102493
  type: "boolean"
103117
102494
  },
@@ -103608,8 +102985,8 @@ var native_spec_default = {
103608
102985
  AdText: {
103609
102986
  properties: {
103610
102987
  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",
102988
+ description: "Always `null`. Translations are no longer available.",
102989
+ example: null,
103613
102990
  type: ["string", "null"]
103614
102991
  },
103615
102992
  text: {
@@ -103707,9 +103084,12 @@ var native_spec_default = {
103707
103084
  "2026-10-29-1",
103708
103085
  "2026-10-29-2",
103709
103086
  "2026-10-29-3",
103710
- "2026-10-29-4"
103087
+ "2026-10-29-4",
103088
+ "2026-10-29-5",
103089
+ "2026-10-29-8",
103090
+ "2026-10-30"
103711
103091
  ],
103712
- example: "2026-10-29-4",
103092
+ example: "2026-10-30",
103713
103093
  type: "string"
103714
103094
  },
103715
103095
  created_at: {
@@ -104803,7 +104183,7 @@ var native_spec_default = {
104803
104183
  },
104804
104184
  name: {
104805
104185
  description: "Human-readable name of the action.",
104806
- example: "company:basic:read",
104186
+ example: "Read business information",
104807
104187
  type: "string"
104808
104188
  }
104809
104189
  },
@@ -104853,7 +104233,7 @@ var native_spec_default = {
104853
104233
  type: "string"
104854
104234
  },
104855
104235
  error_message: {
104856
- description: "Processing error message. `null` unless processing is partial or failed.",
104236
+ 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
104237
  example: "412 of 1,000 rows had no email or phone number, so the list could not be matched.",
104858
104238
  type: ["string", "null"]
104859
104239
  },
@@ -104932,7 +104312,7 @@ var native_spec_default = {
104932
104312
  type: "string"
104933
104313
  },
104934
104314
  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.",
104315
+ 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
104316
  enum: [
104937
104317
  "pending",
104938
104318
  "processing",
@@ -106733,7 +106113,7 @@ var native_spec_default = {
106733
106113
  type: ["string", "null"]
106734
106114
  },
106735
106115
  fee: {
106736
- description: "The dispute fee charged to the seller, in the currency it was collected in. `null` when no fee was charged, such as for an inquiry or a Visa RDR resolution.",
106116
+ description: "The dispute fee charged to the account, in the currency it was collected in. `null` when `fee_charged` is false.",
106737
106117
  oneOf: [
106738
106118
  {
106739
106119
  $ref: "#/components/schemas/Money"
@@ -106743,6 +106123,11 @@ var native_spec_default = {
106743
106123
  }
106744
106124
  ]
106745
106125
  },
106126
+ fee_charged: {
106127
+ description: "Whether Whop charged the account a dispute fee for this one. `false` when the payment was fully refunded before the dispute was opened, for a Visa RDR resolution, and for an inquiry.",
106128
+ example: false,
106129
+ type: "boolean"
106130
+ },
106746
106131
  id: {
106747
106132
  description: "Dispute ID, prefixed `dspt_`.",
106748
106133
  example: "dspt_xxxxxxxxxxxxxx",
@@ -106832,6 +106217,7 @@ var native_spec_default = {
106832
106217
  "inquiry",
106833
106218
  "amount",
106834
106219
  "currency",
106220
+ "fee_charged",
106835
106221
  "fee",
106836
106222
  "reason",
106837
106223
  "reason_code",
@@ -109033,7 +108419,7 @@ var native_spec_default = {
109033
108419
  properties: {
109034
108420
  error: {
109035
108421
  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.",
108422
+ example: "You don't have permission to share this account with Whop. Contact Whop support for help.",
109037
108423
  type: ["string", "null"]
109038
108424
  },
109039
108425
  external_id: {
@@ -110163,7 +109549,7 @@ var native_spec_default = {
110163
109549
  type: ["string", "null"]
110164
109550
  },
110165
109551
  payment_method_id: {
110166
- example: null,
109552
+ example: "payt_xxxxxxxxxxxxxx",
110167
109553
  type: ["string", "null"]
110168
109554
  },
110169
109555
  recipient_emails: {
@@ -111923,6 +111309,11 @@ var native_spec_default = {
111923
111309
  example: "2026-01-01T12:00:00.000Z",
111924
111310
  type: ["string", "null"]
111925
111311
  },
111312
+ name: {
111313
+ description: "The name the account gave this customer with `PATCH /members/:id`. Invoices show it as the customer name on every invoice for this member, in place of the user's own name. `null` when the account has not set one.",
111314
+ example: "Northwind Legal LLP",
111315
+ type: ["string", "null"]
111316
+ },
111926
111317
  phone_number: {
111927
111318
  description: "The member's phone number: the most recent number collected (or verified) at checkout, otherwise their account number when they have shared one with this seller. `null` without `member:phone:read` on the account, or when there is neither.",
111928
111319
  example: "+xxxxxxxxxxx",
@@ -111961,6 +111352,7 @@ var native_spec_default = {
111961
111352
  "access_level",
111962
111353
  "status",
111963
111354
  "display_name",
111355
+ "name",
111964
111356
  "email",
111965
111357
  "most_recent_action",
111966
111358
  "most_recent_action_at",
@@ -112870,6 +112262,29 @@ var native_spec_default = {
112870
112262
  example: 1,
112871
112263
  type: "integer"
112872
112264
  },
112265
+ levels: {
112266
+ items: {
112267
+ $ref: "#/components/schemas/AccountProcessingOfferLevel",
112268
+ description: "Every level from `0` through `10`, with the monthly qualifying spend it takes and its card processing percentage in each card region."
112269
+ },
112270
+ type: "array"
112271
+ },
112272
+ monthly_ads_spend: {
112273
+ $ref: "#/components/schemas/Money",
112274
+ description: "Charged Whop Ads spend this calendar month across every account the owner owns, in USD."
112275
+ },
112276
+ monthly_card_spend: {
112277
+ $ref: "#/components/schemas/Money",
112278
+ description: "Effective Whop Card spend this calendar month across every account the owner owns, in USD."
112279
+ },
112280
+ monthly_qualifying_spend: {
112281
+ $ref: "#/components/schemas/Money",
112282
+ 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."
112283
+ },
112284
+ monthly_trading_volume: {
112285
+ $ref: "#/components/schemas/Money",
112286
+ description: "Perpetual trading notional volume this calendar month across every account the owner owns, in USD."
112287
+ },
112873
112288
  points: {
112874
112289
  description: "Points earned this month across every account the owner owns.",
112875
112290
  example: 41e3,
@@ -112884,6 +112299,11 @@ var native_spec_default = {
112884
112299
  example: 59e3,
112885
112300
  type: ["integer", "null"]
112886
112301
  },
112302
+ processing_rate_percentage: {
112303
+ description: "The standard US and Canada card processing percentage at `current`, before any account's custom rate.",
112304
+ example: 2.6,
112305
+ type: "number"
112306
+ },
112887
112307
  resets_at: {
112888
112308
  description: "When this month's points reset to zero, as an ISO 8601 timestamp.",
112889
112309
  example: "2026-01-01T12:00:00.000Z",
@@ -112895,7 +112315,13 @@ var native_spec_default = {
112895
112315
  "points",
112896
112316
  "points_by_source",
112897
112317
  "points_to_next",
112898
- "resets_at"
112318
+ "resets_at",
112319
+ "processing_rate_percentage",
112320
+ "monthly_qualifying_spend",
112321
+ "monthly_ads_spend",
112322
+ "monthly_card_spend",
112323
+ "monthly_trading_volume",
112324
+ "levels"
112899
112325
  ],
112900
112326
  type: "object"
112901
112327
  },
@@ -120139,6 +119565,11 @@ var native_spec_default = {
120139
119565
  example: "2026-01-01T12:00:00.000Z",
120140
119566
  type: "string"
120141
119567
  },
119568
+ date_of_birth: {
119569
+ description: "The user's date of birth as an ISO 8601 date, like `1998-04-23`. Populated only on the self view (retrieved with the reserved id `me`) for callers with email-read scope; `null` otherwise, or when the user has not set one.",
119570
+ example: null,
119571
+ type: ["string", "null"]
119572
+ },
120142
119573
  earnings_usd: {
120143
119574
  description: "The user's gross USD income over time, including a Partner commission breakdown. Populated only on single-user self reads for callers with balance-read scope; `null` otherwise.",
120144
119575
  oneOf: [
@@ -120241,6 +119672,7 @@ var native_spec_default = {
120241
119672
  "profile_picture",
120242
119673
  "banner",
120243
119674
  "email",
119675
+ "date_of_birth",
120244
119676
  "balance",
120245
119677
  "total_usd",
120246
119678
  "balances",
@@ -121930,7 +121362,7 @@ var native_spec_default = {
121930
121362
  },
121931
121363
  api_version_date: {
121932
121364
  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",
121365
+ example: "2026-01-01",
121934
121366
  type: ["string", "null"]
121935
121367
  },
121936
121368
  child_resource_events: {
@@ -122363,7 +121795,7 @@ var native_spec_default = {
122363
121795
  },
122364
121796
  api_version_date: {
122365
121797
  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",
121798
+ example: "2026-01-01",
122367
121799
  type: ["string", "null"]
122368
121800
  },
122369
121801
  child_resource_events: {
@@ -122694,7 +122126,7 @@ var apps_spec_default = {
122694
122126
  termsOfService: "https://whop.com/tos-developer-api/",
122695
122127
  title: "Whop API",
122696
122128
  version: "1.0.0",
122697
- "x-api-version-date": "2026-10-29-4"
122129
+ "x-api-version-date": "2026-10-30"
122698
122130
  },
122699
122131
  paths: {
122700
122132
  "/app_builds": {
@@ -125076,7 +124508,7 @@ var apps_spec_default = {
125076
124508
  },
125077
124509
  name: {
125078
124510
  description: "Human-readable name of the action.",
125079
- example: "company:basic:read",
124511
+ example: "Read business information",
125080
124512
  type: "string"
125081
124513
  }
125082
124514
  },
@@ -125091,7 +124523,7 @@ var apps_spec_default = {
125091
124523
  name: "Api-Version-Date",
125092
124524
  required: false,
125093
124525
  schema: {
125094
- example: "2026-10-29-4",
124526
+ example: "2026-10-30",
125095
124527
  type: "string"
125096
124528
  }
125097
124529
  },
@@ -125170,7 +124602,7 @@ var files_spec_default = {
125170
124602
  termsOfService: "https://whop.com/tos-developer-api/",
125171
124603
  title: "Whop API",
125172
124604
  version: "1.0.0",
125173
- "x-api-version-date": "2026-10-29-4"
124605
+ "x-api-version-date": "2026-10-30"
125174
124606
  },
125175
124607
  paths: {
125176
124608
  "/files": {
@@ -125748,7 +125180,7 @@ var files_spec_default = {
125748
125180
  name: "Api-Version-Date",
125749
125181
  required: false,
125750
125182
  schema: {
125751
- example: "2026-10-29-4",
125183
+ example: "2026-10-30",
125752
125184
  type: "string"
125753
125185
  }
125754
125186
  },
@@ -125889,7 +125321,7 @@ async function announceActionUrl(url, {
125889
125321
  // package.json
125890
125322
  var package_default = {
125891
125323
  name: "@whop/cli",
125892
- version: "0.31.0",
125324
+ version: "0.33.0",
125893
125325
  description: "The Whop CLI \u2014 build and manage Whop apps from your terminal. Human and agent friendly.",
125894
125326
  keywords: [
125895
125327
  "agent",
@@ -128349,12 +127781,6 @@ var groups_default = [
128349
127781
  description: "Your own pixels that receive conversions from campaigns you claimed.",
128350
127782
  group: "Ads"
128351
127783
  },
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
127784
  {
128359
127785
  name: "stats",
128360
127786
  tag: "Stats",
@@ -132736,11 +132162,11 @@ function sleep2(ms) {
132736
132162
  return new Promise((resolve10) => setTimeout(resolve10, ms));
132737
132163
  }
132738
132164
 
132739
- // src/pay/command.ts
132165
+ // src/send/command.ts
132740
132166
  import { randomUUID } from "crypto";
132741
132167
  import { stripVTControlCharacters } from "util";
132742
132168
 
132743
- // src/pay/view.ts
132169
+ // src/send/view.ts
132744
132170
  import {
132745
132171
  confirm as confirm2,
132746
132172
  intro,
@@ -132769,7 +132195,7 @@ var c = {
132769
132195
  error: chalk3.red.bold
132770
132196
  };
132771
132197
 
132772
- // src/pay/view.ts
132198
+ // src/send/view.ts
132773
132199
  function formatMoney(amount2, currency) {
132774
132200
  const code = currency.toUpperCase();
132775
132201
  try {
@@ -132782,10 +132208,10 @@ function formatMoney(amount2, currency) {
132782
132208
  }
132783
132209
  }
132784
132210
  var terminalView = {
132785
- begin: () => intro("whop pay"),
132211
+ begin: () => intro("whop send"),
132786
132212
  chooseRecipient: async (candidates) => {
132787
132213
  const choice = await select4({
132788
- message: "Who do you want to pay?",
132214
+ message: "Who do you want to send to?",
132789
132215
  options: candidates.map((candidate) => ({
132790
132216
  value: candidate,
132791
132217
  label: [
@@ -132869,16 +132295,16 @@ function row(label, value) {
132869
132295
  return `${c.muted(label.padEnd(6))}${value}`;
132870
132296
  }
132871
132297
 
132872
- // src/pay/command.ts
132873
- var payArgs = external_exports.object({
132298
+ // src/send/command.ts
132299
+ var sendArgs = external_exports.object({
132874
132300
  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"
132301
+ "Who to send to: an @username, an email address, a user_, biz_ or ldgr_ ID, or a name to search for"
132876
132302
  ),
132877
132303
  amount: external_exports.coerce.number().positive().describe("How much to send, in major units: 10 is ten dollars")
132878
132304
  });
132879
- var payOptions = external_exports.object({
132305
+ var sendOptions = external_exports.object({
132880
132306
  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."
132307
+ "Business balance to send from: a biz_ or ldgr_ ID. Defaults to the business the CLI is using."
132882
132308
  ),
132883
132309
  currency: external_exports.string().default("usd").describe("Currency to send, such as usd"),
132884
132310
  notes: external_exports.string().optional().describe("A short note describing the payment"),
@@ -132893,7 +132319,7 @@ var payOptions = external_exports.object({
132893
132319
  )
132894
132320
  });
132895
132321
  var MAX_DISPLAY_LENGTH = 80;
132896
- var PayError = class extends Error {
132322
+ var SendError = class extends Error {
132897
132323
  constructor(details) {
132898
132324
  super(details.message);
132899
132325
  this.details = details;
@@ -132909,7 +132335,7 @@ function parseRecipient(input) {
132909
132335
  if (value.includes("@")) return { kind: "email", value };
132910
132336
  return { kind: "name", value };
132911
132337
  }
132912
- async function runPay(ctx, dependencies) {
132338
+ async function runSend(ctx, dependencies) {
132913
132339
  const canPrompt = !ctx.agent && !ctx.formatExplicit;
132914
132340
  const mode = ctx.options["dry-run"] ? "preview" : ctx.options.yes ? "send" : canPrompt ? "ask" : "hand-back";
132915
132341
  const input = parseRecipient(ctx.args.recipient);
@@ -132921,7 +132347,7 @@ async function runPay(ctx, dependencies) {
132921
132347
  };
132922
132348
  try {
132923
132349
  if (mode === "send" && input.kind === "name") {
132924
- throw new PayError({
132350
+ throw new SendError({
132925
132351
  code: "RECIPIENT_NOT_EXACT",
132926
132352
  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
132353
  retryable: true,
@@ -132929,7 +132355,7 @@ async function runPay(ctx, dependencies) {
132929
132355
  description: "Check who the name matches:",
132930
132356
  commands: [
132931
132357
  {
132932
- command: payCommand(input.value, ctx.args.amount, flags, [
132358
+ command: commandLine(input.value, ctx.args.amount, flags, [
132933
132359
  "--dry-run"
132934
132360
  ])
132935
132361
  }
@@ -132950,7 +132376,7 @@ async function runPay(ctx, dependencies) {
132950
132376
  input,
132951
132377
  originId,
132952
132378
  profile,
132953
- (term) => payCommand(term, ctx.args.amount, { ...flags, from: originId })
132379
+ (term) => commandLine(term, ctx.args.amount, { ...flags, from: originId })
132954
132380
  ),
132955
132381
  amount: ctx.args.amount,
132956
132382
  currency: flags.currency,
@@ -132962,7 +132388,7 @@ async function runPay(ctx, dependencies) {
132962
132388
  commands: [{ command: sendCommand(plan) }]
132963
132389
  };
132964
132390
  if (mode === "hand-back") {
132965
- throw new PayError({
132391
+ throw new SendError({
132966
132392
  code: "CONFIRMATION_REQUIRED",
132967
132393
  message: `${summarize(plan)}. Nothing was sent: confirm with the user, then re-run with --yes.`,
132968
132394
  retryable: true,
@@ -132975,11 +132401,11 @@ async function runPay(ctx, dependencies) {
132975
132401
  return ctx.ok(plan, { cta: send });
132976
132402
  }
132977
132403
  if (mode === "ask" && !await view.confirmPayment(plan)) {
132978
- throw new PayError({ code: "CANCELLED", message: "Nothing was sent." });
132404
+ throw new SendError({ code: "CANCELLED", message: "Nothing was sent." });
132979
132405
  }
132980
132406
  const transfer = canPrompt ? await view.sending(plan, () => sendPayment(dependencies, plan)) : await sendPayment(dependencies, plan);
132981
132407
  if (transfer.status === "failed") {
132982
- throw new PayError({
132408
+ throw new SendError({
132983
132409
  code: "TRANSFER_FAILED",
132984
132410
  message: `Transfer ${transfer.id} failed${transfer.failure_reason ? `: ${transfer.failure_reason}` : "."}`,
132985
132411
  retryable: false,
@@ -133005,7 +132431,7 @@ async function runPay(ctx, dependencies) {
133005
132431
  }
133006
132432
  });
133007
132433
  } catch (error) {
133008
- if (error instanceof PayError) return ctx.error(error.details);
132434
+ if (error instanceof SendError) return ctx.error(error.details);
133009
132435
  if (error instanceof PromptCancelledError) {
133010
132436
  return ctx.error({
133011
132437
  code: "CANCELLED",
@@ -133021,9 +132447,9 @@ async function runPay(ctx, dependencies) {
133021
132447
  }
133022
132448
  async function resolveOrigin(dependencies, profile, from) {
133023
132449
  if (from === "me" || from?.startsWith("user_")) {
133024
- throw new PayError({
132450
+ throw new SendError({
133025
132451
  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.",
132452
+ 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
132453
  retryable: false
133028
132454
  });
133029
132455
  }
@@ -133031,7 +132457,7 @@ async function resolveOrigin(dependencies, profile, from) {
133031
132457
  const accountId = await dependencies.activeAccountId();
133032
132458
  if (accountId) return accountId;
133033
132459
  if (profile?.accountId) {
133034
- throw new PayError({
132460
+ throw new SendError({
133035
132461
  code: "SESSION_EXPIRED",
133036
132462
  message: "Your saved login can't be used anymore. Log in again with `whop login`.",
133037
132463
  retryable: true,
@@ -133040,9 +132466,9 @@ async function resolveOrigin(dependencies, profile, from) {
133040
132466
  }
133041
132467
  });
133042
132468
  }
133043
- throw new PayError({
132469
+ throw new SendError({
133044
132470
  code: "NO_ACCOUNT",
133045
- message: "No business selected to pay from. Pass --from, or choose a business with `whop quickstart`.",
132471
+ message: "No business selected to send from. Pass --from, or choose a business with `whop quickstart`.",
133046
132472
  retryable: true,
133047
132473
  cta: {
133048
132474
  commands: [{ command: "quickstart", description: "Choose a business" }]
@@ -133063,18 +132489,18 @@ async function resolveRecipient(dependencies, originId, input, canPrompt) {
133063
132489
  if (candidates.length === 1) return candidates[0];
133064
132490
  if (candidates.length > 1) {
133065
132491
  if (canPrompt) return dependencies.view.chooseRecipient(candidates);
133066
- throw new PayError({
132492
+ throw new SendError({
133067
132493
  code: "AMBIGUOUS_RECIPIENT",
133068
- message: `"${input.value}" matches ${candidates.length} recipients: ${candidates.map(identifyRecipient).join("; ")}. Pay one of them by ID.`,
132494
+ message: `"${input.value}" matches ${candidates.length} recipients: ${candidates.map(identifyRecipient).join("; ")}. Send to one of them by ID.`,
133069
132495
  retryable: true
133070
132496
  });
133071
132497
  }
133072
132498
  return input.kind === "id" ? unnamed(input.value) : null;
133073
132499
  }
133074
132500
  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.";
132501
+ const apiKeyNote = profile?.method === "oauth" ? "" : " An API key only sees its own team, so send to their user_ ID.";
133076
132502
  if (input.kind === "username") {
133077
- throw new PayError({
132503
+ throw new SendError({
133078
132504
  code: "RECIPIENT_NOT_FOUND",
133079
132505
  message: `No Whop user has the username ${input.value}. @ matches a username exactly, so leave it off to search.${apiKeyNote}`,
133080
132506
  retryable: false,
@@ -133084,9 +132510,9 @@ function recipientNotFound(input, originId, profile, searchCommand) {
133084
132510
  }
133085
132511
  });
133086
132512
  }
133087
- throw new PayError({
132513
+ throw new SendError({
133088
132514
  code: "RECIPIENT_NOT_FOUND",
133089
- message: `No one matching "${input.value}" can be paid from ${originId}. Try their @username, email address or ID.${apiKeyNote}`,
132515
+ message: `No one matching "${input.value}" can receive money from ${originId}. Try their @username, email address or ID.${apiKeyNote}`,
133090
132516
  retryable: false
133091
132517
  });
133092
132518
  }
@@ -133112,13 +132538,13 @@ async function sendPayment(dependencies, plan) {
133112
132538
  );
133113
132539
  } catch (error) {
133114
132540
  if (error instanceof GeneratedCommandError && isDefiniteRejection(error)) {
133115
- throw new PayError({
132541
+ throw new SendError({
133116
132542
  code: error.code,
133117
132543
  message: error.message,
133118
132544
  retryable: false
133119
132545
  });
133120
132546
  }
133121
- throw new PayError({
132547
+ throw new SendError({
133122
132548
  ...error instanceof GeneratedCommandError ? { code: error.code, message: error.message } : {
133123
132549
  code: "SEND_UNCONFIRMED",
133124
132550
  message: `Couldn't confirm whether the payment went through: ${error instanceof Error ? error.message : String(error)}`
@@ -133162,9 +132588,9 @@ function identifyRecipient(recipient) {
133162
132588
  function summarize(plan) {
133163
132589
  return `Send ${formatMoney(plan.amount, plan.currency)} from ${plan.origin_id} to ${identifyRecipient(plan.recipient)}`;
133164
132590
  }
133165
- function payCommand(recipient, amount2, flags, extra = []) {
132591
+ function commandLine(recipient, amount2, flags, extra = []) {
133166
132592
  return [
133167
- "pay",
132593
+ "send",
133168
132594
  shellQuote(recipient),
133169
132595
  String(amount2),
133170
132596
  ...flags.from ? [`--from ${shellQuote(flags.from)}`] : [],
@@ -133174,7 +132600,7 @@ function payCommand(recipient, amount2, flags, extra = []) {
133174
132600
  ].join(" ");
133175
132601
  }
133176
132602
  function sendCommand(plan) {
133177
- return payCommand(
132603
+ return commandLine(
133178
132604
  plan.recipient.destination_id,
133179
132605
  plan.amount,
133180
132606
  { from: plan.origin_id, currency: plan.currency, notes: plan.notes },
@@ -133184,7 +132610,7 @@ function sendCommand(plan) {
133184
132610
  function shellQuote(value) {
133185
132611
  return /^[\w@.+-]+$/.test(value) ? value : `'${value.replaceAll("'", `'\\''`)}'`;
133186
132612
  }
133187
- async function buildPayCommand() {
132613
+ async function buildSendCommand() {
133188
132614
  const transfers = await generateTagCommands("Transfers");
133189
132615
  const recipients = generatedCommand(transfers, "recipients");
133190
132616
  const create2 = generatedCommand(transfers, "create");
@@ -133201,23 +132627,23 @@ async function buildPayCommand() {
133201
132627
  newIdempotencyKey: randomUUID
133202
132628
  };
133203
132629
  return {
133204
- description: "Pay a person or business on Whop from a balance",
133205
- args: payArgs,
133206
- options: payOptions,
132630
+ description: "Send money to a person or business on Whop from a balance",
132631
+ args: sendArgs,
132632
+ options: sendOptions,
133207
132633
  examples: [
133208
132634
  {
133209
132635
  args: { recipient: "@sam", amount: 10 },
133210
- description: "Pay a Whop user 10 USD from your business"
132636
+ description: "Send 10 USD to a Whop user from your business"
133211
132637
  },
133212
132638
  {
133213
132639
  args: { recipient: "sam@example.com", amount: 25 },
133214
132640
  options: { notes: "Design work" },
133215
- description: "Pay an email address, with a note"
132641
+ description: "Send to an email address, with a note"
133216
132642
  },
133217
132643
  {
133218
132644
  args: { recipient: "@sam", amount: 10 },
133219
132645
  options: { "dry-run": true },
133220
- description: "See who would be paid, without sending"
132646
+ description: "See who would receive it, without sending"
133221
132647
  }
133222
132648
  ],
133223
132649
  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 +132656,7 @@ async function buildPayCommand() {
133230
132656
  readOnlyHint: false
133231
132657
  }
133232
132658
  },
133233
- run: (c2) => runPay(c2, dependencies)
132659
+ run: (c2) => runSend(c2, dependencies)
133234
132660
  };
133235
132661
  }
133236
132662
 
@@ -133805,7 +133231,7 @@ import { dirname as dirname9, join as join15 } from "path";
133805
133231
  // src/api/shipped-skills.json
133806
133232
  var shipped_skills_default = {
133807
133233
  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",
133234
+ "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
133235
  "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
133236
  "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
133237
  "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 +133836,7 @@ cli.command("quickstart", {
134410
133836
  outputPolicy: "agent-only",
134411
133837
  run: (c2) => runQuickstart(c2)
134412
133838
  });
134413
- cli.command("pay", await buildPayCommand());
133839
+ cli.command("send", await buildSendCommand());
134414
133840
  cli.command("report-feedback", buildFeedbackCommand("report_feedback"));
134415
133841
  cli.command("ask-question", buildFeedbackCommand("ask_question"));
134416
133842
  cli.command(await buildAppGroup());
@@ -134493,8 +133919,8 @@ var DEVELOPER_LABEL = "Developer";
134493
133919
  var EXTRA_SECTION_COMMANDS = {
134494
133920
  Money: [
134495
133921
  {
134496
- name: "pay",
134497
- description: "Pay a person or business by @username, email, or ID"
133922
+ name: "send",
133923
+ description: "Send money to a person or business by @username, email, or ID"
134498
133924
  }
134499
133925
  ],
134500
133926
  [DEVELOPER_LABEL]: [