wefunder 1.0.1 → 1.1.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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -11
  3. data/lib/wefunder/client.rb +127 -12
  4. data/lib/wefunder/version.rb +1 -1
  5. data/lib/wefunder/webhooks.rb +5 -2
  6. data/lib/wefunder_generated/api/activity_api.rb +0 -92
  7. data/lib/wefunder_generated/api/explore_api.rb +24 -6
  8. data/lib/wefunder_generated/api/intents_api.rb +2 -2
  9. data/lib/wefunder_generated/api/investment_delta_api.rb +4 -4
  10. data/lib/wefunder_generated/api/investments_api.rb +2 -2
  11. data/lib/wefunder_generated/api/member_links_api.rb +287 -0
  12. data/lib/wefunder_generated/api/partner_invites_sessions_api.rb +374 -0
  13. data/lib/wefunder_generated/api/portfolio_api.rb +2 -2
  14. data/lib/wefunder_generated/api/referral_codes_api.rb +374 -0
  15. data/lib/wefunder_generated/api/syndicate_deals_api.rb +2 -140
  16. data/lib/wefunder_generated/api/syndicate_members_api.rb +216 -0
  17. data/lib/wefunder_generated/api/syndicate_statistics_api.rb +2 -2
  18. data/lib/wefunder_generated/api/users_api.rb +4 -4
  19. data/lib/wefunder_generated/models/audit_event_attributes.rb +1 -0
  20. data/lib/wefunder_generated/models/campaign.rb +1 -1
  21. data/lib/wefunder_generated/models/company_attributes.rb +88 -1
  22. data/lib/wefunder_generated/models/company_disclosures_attributes_ratios.rb +13 -2
  23. data/lib/wefunder_generated/models/create_intent_request.rb +2 -2
  24. data/lib/wefunder_generated/models/{webhook_subscription_with_secret2_envelope.rb → create_offering_investment_session_request.rb} +17 -10
  25. data/lib/wefunder_generated/models/{attribution_stats_envelope.rb → create_offering_member_link_request.rb} +10 -10
  26. data/lib/wefunder_generated/models/{create_partner_invite_request.rb → create_referral_code_request.rb} +58 -63
  27. data/lib/wefunder_generated/models/{attribution_stats_period.rb → create_syndicate_join_session_request.rb} +17 -19
  28. data/lib/wefunder_generated/models/{anonymized_attribution.rb → create_syndicate_join_session_request_join_session.rb} +81 -53
  29. data/lib/wefunder_generated/models/create_webhook_endpoint_request.rb +11 -1
  30. data/lib/wefunder_generated/models/fiscal_year_financials.rb +25 -1
  31. data/lib/wefunder_generated/models/intent_attributes.rb +1 -0
  32. data/lib/wefunder_generated/models/investment_delta_record.rb +4 -4
  33. data/lib/wefunder_generated/models/investment_session_attributes.rb +1 -0
  34. data/lib/wefunder_generated/models/investment_session_create_input.rb +13 -2
  35. data/lib/wefunder_generated/models/investment_session_envelope.rb +1 -1
  36. data/lib/wefunder_generated/models/invite_link_attributes.rb +47 -4
  37. data/lib/wefunder_generated/models/invite_link_attributes_events_inner.rb +12 -1
  38. data/lib/wefunder_generated/models/invite_link_envelope.rb +1 -1
  39. data/lib/wefunder_generated/models/{full_attribution_status.rb → member_link.rb} +34 -24
  40. data/lib/wefunder_generated/models/{marketing_partner.rb → member_link_attributes.rb} +60 -44
  41. data/lib/wefunder_generated/models/{attribution_me_envelope.rb → member_link_create_input.rb} +40 -10
  42. data/lib/wefunder_generated/models/{spv_with_meta_envelope.rb → member_link_envelope.rb} +5 -5
  43. data/lib/wefunder_generated/models/{spv_list_envelope.rb → member_link_list_envelope.rb} +5 -5
  44. data/lib/wefunder_generated/models/{full_attribution_investor.rb → member_link_list_envelope_meta.rb} +28 -29
  45. data/lib/wefunder_generated/models/offering_attributes.rb +34 -1
  46. data/lib/wefunder_generated/models/offering_list_envelope_meta.rb +57 -3
  47. data/lib/wefunder_generated/models/portfolio_company_ref.rb +16 -5
  48. data/lib/wefunder_generated/models/portfolio_position_attributes.rb +13 -2
  49. data/lib/wefunder_generated/models/portfolio_security_terms.rb +15 -2
  50. data/lib/wefunder_generated/models/{spv_status.rb → referral_code.rb} +4 -4
  51. data/lib/wefunder_generated/models/{webhook_subscription.rb → referral_code_attributes.rb} +51 -63
  52. data/lib/wefunder_generated/models/{anonymized_attribution_status.rb → referral_code_attributes_target.rb} +36 -27
  53. data/lib/wefunder_generated/models/{spv_status_envelope.rb → referral_code_envelope.rb} +5 -5
  54. data/lib/wefunder_generated/models/{spv_with_meta_envelope_meta.rb → referral_code_envelope_meta.rb} +3 -3
  55. data/lib/wefunder_generated/models/{partner_investor_list_envelope.rb → referral_code_list_envelope.rb} +5 -5
  56. data/lib/wefunder_generated/models/{attribution_campaign_summary.rb → referral_code_list_envelope_meta.rb} +36 -35
  57. data/lib/wefunder_generated/models/{spv_status_attributes.rb → referral_code_stats_company.rb} +70 -47
  58. data/lib/wefunder_generated/models/referral_code_stats_envelope.rb +223 -0
  59. data/lib/wefunder_generated/models/{partner_investor.rb → referral_code_stats_envelope_data.rb} +4 -5
  60. data/lib/wefunder_generated/models/{syndicate_deal_finalize_intent_envelope_meta.rb → referral_code_stats_envelope_data_attributes.rb} +56 -10
  61. data/lib/wefunder_generated/models/{webhook_endpoint_envelope_meta.rb → referral_code_stats_envelope_meta.rb} +32 -4
  62. data/lib/wefunder_generated/models/{full_attribution.rb → referral_code_utm.rb} +130 -56
  63. data/lib/wefunder_generated/models/{attribution_me.rb → referral_code_visits.rb} +23 -25
  64. data/lib/wefunder_generated/models/{attribution_campaign_access.rb → referral_cohort.rb} +29 -28
  65. data/lib/wefunder_generated/models/referral_cohort_investors.rb +224 -0
  66. data/lib/wefunder_generated/models/syndicate_attributes.rb +11 -1
  67. data/lib/wefunder_generated/models/{syndicate_deal_close_intent_envelope.rb → syndicate_deal_created_envelope.rb} +5 -5
  68. data/lib/wefunder_generated/models/{attribution_campaign_summary_list_envelope.rb → syndicate_deal_created_envelope_meta.rb} +11 -12
  69. data/lib/wefunder_generated/models/{attribution_user.rb → syndicate_deal_created_envelope_meta_target_company.rb} +5 -14
  70. data/lib/wefunder_generated/models/{marketing_partner_envelope.rb → syndicate_deal_readiness_envelope.rb} +4 -4
  71. data/lib/wefunder_generated/models/syndicate_deal_readiness_envelope_data.rb +267 -0
  72. data/lib/wefunder_generated/models/{attribution_partner.rb → syndicate_deal_readiness_envelope_data_attributes.rb} +27 -33
  73. data/lib/wefunder_generated/models/{webhook_delivery.rb → syndicate_deal_readiness_item.rb} +55 -61
  74. data/lib/wefunder_generated/models/syndicate_statistics_attributes.rb +2 -2
  75. data/lib/wefunder_generated/models/test_webhook_endpoint_request.rb +2 -2
  76. data/lib/wefunder_generated/models/{webhook_test_result_envelope.rb → update_referral_code_request.rb} +47 -10
  77. data/lib/wefunder_generated/models/user_attributes.rb +1 -0
  78. data/lib/wefunder_generated/models/webhook_endpoint_attributes.rb +23 -1
  79. data/lib/wefunder_generated/models/webhook_endpoint_envelope.rb +1 -1
  80. data/lib/wefunder_generated/models/webhook_endpoint_test_result_envelope.rb +1 -1
  81. data/lib/wefunder_generated.rb +38 -63
  82. metadata +40 -65
  83. data/lib/wefunder_generated/api/attribution_api.rb +0 -182
  84. data/lib/wefunder_generated/api/attribution_partners_api.rb +0 -392
  85. data/lib/wefunder_generated/api/attribution_webhooks_api.rb +0 -504
  86. data/lib/wefunder_generated/models/anonymized_attribution_attribution.rb +0 -330
  87. data/lib/wefunder_generated/models/attributed_investment_list_envelope.rb +0 -226
  88. data/lib/wefunder_generated/models/attributed_investment_list_envelope_data_inner.rb +0 -105
  89. data/lib/wefunder_generated/models/attributed_investment_list_envelope_meta.rb +0 -295
  90. data/lib/wefunder_generated/models/attribution_stats.rb +0 -266
  91. data/lib/wefunder_generated/models/attribution_stats_by_campaign_inner.rb +0 -232
  92. data/lib/wefunder_generated/models/attribution_stats_by_source_inner.rb +0 -232
  93. data/lib/wefunder_generated/models/attribution_stats_quality_breakdown.rb +0 -236
  94. data/lib/wefunder_generated/models/attribution_stats_totals.rb +0 -245
  95. data/lib/wefunder_generated/models/create_webhook_subscription_request.rb +0 -263
  96. data/lib/wefunder_generated/models/full_attribution_attribution.rb +0 -326
  97. data/lib/wefunder_generated/models/partner_investment_list_envelope.rb +0 -225
  98. data/lib/wefunder_generated/models/partner_investor_attributes.rb +0 -264
  99. data/lib/wefunder_generated/models/partner_invite.rb +0 -360
  100. data/lib/wefunder_generated/models/partner_invite_envelope.rb +0 -214
  101. data/lib/wefunder_generated/models/partner_invite_list_envelope.rb +0 -216
  102. data/lib/wefunder_generated/models/register_as_partner_request.rb +0 -232
  103. data/lib/wefunder_generated/models/syndicate_deal_close_intent_envelope_meta.rb +0 -214
  104. data/lib/wefunder_generated/models/syndicate_deal_finalize_intent_envelope.rb +0 -224
  105. data/lib/wefunder_generated/models/webhook_subscription_envelope.rb +0 -214
  106. data/lib/wefunder_generated/models/webhook_subscription_list_envelope.rb +0 -225
  107. data/lib/wefunder_generated/models/webhook_subscription_list_envelope_meta.rb +0 -225
  108. data/lib/wefunder_generated/models/webhook_subscription_with_recent_deliveries_envelope.rb +0 -214
  109. data/lib/wefunder_generated/models/webhook_subscription_with_recent_deliveries_envelope_data.rb +0 -322
  110. data/lib/wefunder_generated/models/webhook_subscription_with_secret2_envelope_data.rb +0 -320
  111. data/lib/wefunder_generated/models/webhook_subscription_with_secret_envelope.rb +0 -214
  112. data/lib/wefunder_generated/models/webhook_subscription_with_secret_envelope_data.rb +0 -320
  113. data/lib/wefunder_generated/models/webhook_test_result.rb +0 -233
@@ -0,0 +1,374 @@
1
+ =begin
2
+ #Wefunder API v2
3
+
4
+ #OAuth 2.0 API for accessing Wefunder data programmatically. ## Authentication This API uses OAuth 2.0 for authentication. To get started: 1. Create an OAuth application at `/oauth/applications` 2. Get your Client ID and Client Secret 3. Implement the OAuth 2.0 Authorization Code flow 4. Use the access token to make API requests ## Versioning The API is versioned by the dated `Wefunder-Version` request header (`YYYY-MM-DD`), never by the URL. Resolution is header → your application's pinned version → latest; every response carries `Wefunder-Version` (the version that handled it) and `Wefunder-Version-Latest`. An unknown value returns `400 invalid_request` naming the valid versions. Current: `2026-10-01`. ## Rate Limits - Standard API: 1,000 requests/hour per token - Admin API: 10,000 requests/hour per token ## Base URL All API requests should be made to: `https://api.wefunder.com` (no version in the path).
5
+
6
+ The version of the OpenAPI document: 2.0
7
+ Contact: api@wefunder.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module WefunderGenerated
16
+ class ReferralCodesApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Create a referral code
23
+ # Mints a referral code for your application. No relationship with the company is needed. Put it on any wefunder.com link as `?wfr=<id>`. Before its first code, your organization must accept the referral attribution terms once: Wefunder does not pay partners per referral, and a partner may not be compensated per referral unless it is a registered broker-dealer. Until an owner or admin accepts them in the developer portal, this returns `422 attribution_terms_required` with `details.acceptance_url`. An application may have at most 500 active codes (`422 quota_exceeded`); deactivate codes you no longer use. UTM presets fill blank `utm_*` fields on visits that carry the code. A `source` or `campaign` starting with `wf_` is reserved for Wefunder's own channels and returns `422 reserved_utm_prefix`. Idempotency keys are not supported here: a retried request may create a second code, which you can deactivate.
24
+ # @param create_referral_code_request [CreateReferralCodeRequest]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [ReferralCodeEnvelope]
27
+ def create_referral_code(create_referral_code_request, opts = {})
28
+ data, _status_code, _headers = create_referral_code_with_http_info(create_referral_code_request, opts)
29
+ data
30
+ end
31
+
32
+ # Create a referral code
33
+ # Mints a referral code for your application. No relationship with the company is needed. Put it on any wefunder.com link as &#x60;?wfr&#x3D;&lt;id&gt;&#x60;. Before its first code, your organization must accept the referral attribution terms once: Wefunder does not pay partners per referral, and a partner may not be compensated per referral unless it is a registered broker-dealer. Until an owner or admin accepts them in the developer portal, this returns &#x60;422 attribution_terms_required&#x60; with &#x60;details.acceptance_url&#x60;. An application may have at most 500 active codes (&#x60;422 quota_exceeded&#x60;); deactivate codes you no longer use. UTM presets fill blank &#x60;utm_*&#x60; fields on visits that carry the code. A &#x60;source&#x60; or &#x60;campaign&#x60; starting with &#x60;wf_&#x60; is reserved for Wefunder&#39;s own channels and returns &#x60;422 reserved_utm_prefix&#x60;. Idempotency keys are not supported here: a retried request may create a second code, which you can deactivate.
34
+ # @param create_referral_code_request [CreateReferralCodeRequest]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(ReferralCodeEnvelope, Integer, Hash)>] ReferralCodeEnvelope data, response status code and response headers
37
+ def create_referral_code_with_http_info(create_referral_code_request, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: ReferralCodesApi.create_referral_code ...'
40
+ end
41
+ # verify the required parameter 'create_referral_code_request' is set
42
+ if @api_client.config.client_side_validation && create_referral_code_request.nil?
43
+ fail ArgumentError, "Missing the required parameter 'create_referral_code_request' when calling ReferralCodesApi.create_referral_code"
44
+ end
45
+ # resource path
46
+ local_var_path = '/referral_codes'
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+ # HTTP header 'Content-Type'
56
+ content_type = @api_client.select_header_content_type(['application/json'])
57
+ if !content_type.nil?
58
+ header_params['Content-Type'] = content_type
59
+ end
60
+
61
+ # form parameters
62
+ form_params = opts[:form_params] || {}
63
+
64
+ # http body (model)
65
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(create_referral_code_request)
66
+
67
+ # return_type
68
+ return_type = opts[:debug_return_type] || 'ReferralCodeEnvelope'
69
+
70
+ # auth_names
71
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
72
+
73
+ new_options = opts.merge(
74
+ :operation => :"ReferralCodesApi.create_referral_code",
75
+ :header_params => header_params,
76
+ :query_params => query_params,
77
+ :form_params => form_params,
78
+ :body => post_body,
79
+ :auth_names => auth_names,
80
+ :return_type => return_type
81
+ )
82
+
83
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
84
+ if @api_client.config.debugging
85
+ @api_client.config.logger.debug "API called: ReferralCodesApi#create_referral_code\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
86
+ end
87
+ return data, status_code, headers
88
+ end
89
+
90
+ # Retrieve a referral code
91
+ # @param id [String] The referral code id (&#x60;ref_…&#x60;).
92
+ # @param [Hash] opts the optional parameters
93
+ # @return [ReferralCodeEnvelope]
94
+ def get_referral_code(id, opts = {})
95
+ data, _status_code, _headers = get_referral_code_with_http_info(id, opts)
96
+ data
97
+ end
98
+
99
+ # Retrieve a referral code
100
+ # @param id [String] The referral code id (&#x60;ref_…&#x60;).
101
+ # @param [Hash] opts the optional parameters
102
+ # @return [Array<(ReferralCodeEnvelope, Integer, Hash)>] ReferralCodeEnvelope data, response status code and response headers
103
+ def get_referral_code_with_http_info(id, opts = {})
104
+ if @api_client.config.debugging
105
+ @api_client.config.logger.debug 'Calling API: ReferralCodesApi.get_referral_code ...'
106
+ end
107
+ # verify the required parameter 'id' is set
108
+ if @api_client.config.client_side_validation && id.nil?
109
+ fail ArgumentError, "Missing the required parameter 'id' when calling ReferralCodesApi.get_referral_code"
110
+ end
111
+ # resource path
112
+ local_var_path = '/referral_codes/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
113
+
114
+ # query parameters
115
+ query_params = opts[:query_params] || {}
116
+
117
+ # header parameters
118
+ header_params = opts[:header_params] || {}
119
+ # HTTP header 'Accept' (if needed)
120
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
121
+
122
+ # form parameters
123
+ form_params = opts[:form_params] || {}
124
+
125
+ # http body (model)
126
+ post_body = opts[:debug_body]
127
+
128
+ # return_type
129
+ return_type = opts[:debug_return_type] || 'ReferralCodeEnvelope'
130
+
131
+ # auth_names
132
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
133
+
134
+ new_options = opts.merge(
135
+ :operation => :"ReferralCodesApi.get_referral_code",
136
+ :header_params => header_params,
137
+ :query_params => query_params,
138
+ :form_params => form_params,
139
+ :body => post_body,
140
+ :auth_names => auth_names,
141
+ :return_type => return_type
142
+ )
143
+
144
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
145
+ if @api_client.config.debugging
146
+ @api_client.config.logger.debug "API called: ReferralCodesApi#get_referral_code\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
147
+ end
148
+ return data, status_code, headers
149
+ end
150
+
151
+ # Referral code stats
152
+ # What your code produced, per company. Your access to each company decides what you see: - **Counts** (any app): for each company in the code's scope, one cell per ISO week (Monday to Sunday, UTC) with the unique investors referred that week as a range, `{min, max}`. Ranges are never exact, currently of width 3 and starting at zero, so `{0, 2}` also means none. Each week is published once, early on the following Monday, and never revised; the current week has no cell. There are no totals across weeks or companies, and no amounts. - **Rows** (your app is installed on the company with `read:attribution:anonymized`, or at founder tier with `read:attribution:full`): that company's referred investments instead of ranges, anonymized or in full. A targeted code's scope is its target; an untargeted code's scope is every company its visitors landed on. `visits` and `unique_visitors` are a daily snapshot up to the end of `visits_as_of` (UTC). Paginated over companies; each company's weekly series is complete.
153
+ # @param id [String] The referral code id (&#x60;ref_…&#x60;).
154
+ # @param [Hash] opts the optional parameters
155
+ # @option opts [Integer] :cursor Cursor-based pagination token. Use the &#x60;next_cursor&#x60; value from the previous response&#39;s &#x60;meta&#x60; object to retrieve the next page of results. Omit this parameter to retrieve the first page.
156
+ # @option opts [String] :company_id Only this company (&#x60;co_…&#x60;). Use it with &#x60;investments_cursor&#x60; to page an installed company&#39;s rows.
157
+ # @option opts [Integer] :investments_cursor With &#x60;company_id&#x60;, the &#x60;investments_next_cursor&#x60; from the previous page of that company&#39;s rows.
158
+ # @option opts [Integer] :per_page (default to 25)
159
+ # @return [ReferralCodeStatsEnvelope]
160
+ def get_referral_code_stats(id, opts = {})
161
+ data, _status_code, _headers = get_referral_code_stats_with_http_info(id, opts)
162
+ data
163
+ end
164
+
165
+ # Referral code stats
166
+ # What your code produced, per company. Your access to each company decides what you see: - **Counts** (any app): for each company in the code&#39;s scope, one cell per ISO week (Monday to Sunday, UTC) with the unique investors referred that week as a range, &#x60;{min, max}&#x60;. Ranges are never exact, currently of width 3 and starting at zero, so &#x60;{0, 2}&#x60; also means none. Each week is published once, early on the following Monday, and never revised; the current week has no cell. There are no totals across weeks or companies, and no amounts. - **Rows** (your app is installed on the company with &#x60;read:attribution:anonymized&#x60;, or at founder tier with &#x60;read:attribution:full&#x60;): that company&#39;s referred investments instead of ranges, anonymized or in full. A targeted code&#39;s scope is its target; an untargeted code&#39;s scope is every company its visitors landed on. &#x60;visits&#x60; and &#x60;unique_visitors&#x60; are a daily snapshot up to the end of &#x60;visits_as_of&#x60; (UTC). Paginated over companies; each company&#39;s weekly series is complete.
167
+ # @param id [String] The referral code id (&#x60;ref_…&#x60;).
168
+ # @param [Hash] opts the optional parameters
169
+ # @option opts [Integer] :cursor Cursor-based pagination token. Use the &#x60;next_cursor&#x60; value from the previous response&#39;s &#x60;meta&#x60; object to retrieve the next page of results. Omit this parameter to retrieve the first page.
170
+ # @option opts [String] :company_id Only this company (&#x60;co_…&#x60;). Use it with &#x60;investments_cursor&#x60; to page an installed company&#39;s rows.
171
+ # @option opts [Integer] :investments_cursor With &#x60;company_id&#x60;, the &#x60;investments_next_cursor&#x60; from the previous page of that company&#39;s rows.
172
+ # @option opts [Integer] :per_page (default to 25)
173
+ # @return [Array<(ReferralCodeStatsEnvelope, Integer, Hash)>] ReferralCodeStatsEnvelope data, response status code and response headers
174
+ def get_referral_code_stats_with_http_info(id, opts = {})
175
+ if @api_client.config.debugging
176
+ @api_client.config.logger.debug 'Calling API: ReferralCodesApi.get_referral_code_stats ...'
177
+ end
178
+ # verify the required parameter 'id' is set
179
+ if @api_client.config.client_side_validation && id.nil?
180
+ fail ArgumentError, "Missing the required parameter 'id' when calling ReferralCodesApi.get_referral_code_stats"
181
+ end
182
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 100
183
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling ReferralCodesApi.get_referral_code_stats, must be smaller than or equal to 100.'
184
+ end
185
+
186
+ # resource path
187
+ local_var_path = '/referral_codes/{id}/stats'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
188
+
189
+ # query parameters
190
+ query_params = opts[:query_params] || {}
191
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
192
+ query_params[:'company_id'] = opts[:'company_id'] if !opts[:'company_id'].nil?
193
+ query_params[:'investments_cursor'] = opts[:'investments_cursor'] if !opts[:'investments_cursor'].nil?
194
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
195
+
196
+ # header parameters
197
+ header_params = opts[:header_params] || {}
198
+ # HTTP header 'Accept' (if needed)
199
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
200
+
201
+ # form parameters
202
+ form_params = opts[:form_params] || {}
203
+
204
+ # http body (model)
205
+ post_body = opts[:debug_body]
206
+
207
+ # return_type
208
+ return_type = opts[:debug_return_type] || 'ReferralCodeStatsEnvelope'
209
+
210
+ # auth_names
211
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
212
+
213
+ new_options = opts.merge(
214
+ :operation => :"ReferralCodesApi.get_referral_code_stats",
215
+ :header_params => header_params,
216
+ :query_params => query_params,
217
+ :form_params => form_params,
218
+ :body => post_body,
219
+ :auth_names => auth_names,
220
+ :return_type => return_type
221
+ )
222
+
223
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
224
+ if @api_client.config.debugging
225
+ @api_client.config.logger.debug "API called: ReferralCodesApi#get_referral_code_stats\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
226
+ end
227
+ return data, status_code, headers
228
+ end
229
+
230
+ # List referral codes
231
+ # The referral codes your application created, newest first. A referral code records that a visitor arrived through your link (`?wfr=ref_…`); it never changes what the visitor sees and grants no access. Filter with `active=true` or `active=false`. Every referral code operation takes your application's own server key (a `client_credentials` token). A user or installation token gets `403 app_credentials_required`.
232
+ # @param [Hash] opts the optional parameters
233
+ # @option opts [Boolean] :active
234
+ # @option opts [Integer] :cursor Cursor-based pagination token. Use the &#x60;next_cursor&#x60; value from the previous response&#39;s &#x60;meta&#x60; object to retrieve the next page of results. Omit this parameter to retrieve the first page.
235
+ # @option opts [Integer] :per_page (default to 25)
236
+ # @return [ReferralCodeListEnvelope]
237
+ def list_referral_codes(opts = {})
238
+ data, _status_code, _headers = list_referral_codes_with_http_info(opts)
239
+ data
240
+ end
241
+
242
+ # List referral codes
243
+ # The referral codes your application created, newest first. A referral code records that a visitor arrived through your link (&#x60;?wfr&#x3D;ref_…&#x60;); it never changes what the visitor sees and grants no access. Filter with &#x60;active&#x3D;true&#x60; or &#x60;active&#x3D;false&#x60;. Every referral code operation takes your application&#39;s own server key (a &#x60;client_credentials&#x60; token). A user or installation token gets &#x60;403 app_credentials_required&#x60;.
244
+ # @param [Hash] opts the optional parameters
245
+ # @option opts [Boolean] :active
246
+ # @option opts [Integer] :cursor Cursor-based pagination token. Use the &#x60;next_cursor&#x60; value from the previous response&#39;s &#x60;meta&#x60; object to retrieve the next page of results. Omit this parameter to retrieve the first page.
247
+ # @option opts [Integer] :per_page (default to 25)
248
+ # @return [Array<(ReferralCodeListEnvelope, Integer, Hash)>] ReferralCodeListEnvelope data, response status code and response headers
249
+ def list_referral_codes_with_http_info(opts = {})
250
+ if @api_client.config.debugging
251
+ @api_client.config.logger.debug 'Calling API: ReferralCodesApi.list_referral_codes ...'
252
+ end
253
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 100
254
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling ReferralCodesApi.list_referral_codes, must be smaller than or equal to 100.'
255
+ end
256
+
257
+ # resource path
258
+ local_var_path = '/referral_codes'
259
+
260
+ # query parameters
261
+ query_params = opts[:query_params] || {}
262
+ query_params[:'active'] = opts[:'active'] if !opts[:'active'].nil?
263
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
264
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
265
+
266
+ # header parameters
267
+ header_params = opts[:header_params] || {}
268
+ # HTTP header 'Accept' (if needed)
269
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
270
+
271
+ # form parameters
272
+ form_params = opts[:form_params] || {}
273
+
274
+ # http body (model)
275
+ post_body = opts[:debug_body]
276
+
277
+ # return_type
278
+ return_type = opts[:debug_return_type] || 'ReferralCodeListEnvelope'
279
+
280
+ # auth_names
281
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
282
+
283
+ new_options = opts.merge(
284
+ :operation => :"ReferralCodesApi.list_referral_codes",
285
+ :header_params => header_params,
286
+ :query_params => query_params,
287
+ :form_params => form_params,
288
+ :body => post_body,
289
+ :auth_names => auth_names,
290
+ :return_type => return_type
291
+ )
292
+
293
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
294
+ if @api_client.config.debugging
295
+ @api_client.config.logger.debug "API called: ReferralCodesApi#list_referral_codes\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
296
+ end
297
+ return data, status_code, headers
298
+ end
299
+
300
+ # Update a referral code
301
+ # Changes the label, pauses or resumes the code (`active`), or replaces its UTM presets. The target is fixed at creation. A paused code is ignored on arrival; existing cookies still credit investments for up to 30 days. Reactivating counts against the 500 active codes.
302
+ # @param id [String] The referral code id (&#x60;ref_…&#x60;).
303
+ # @param update_referral_code_request [UpdateReferralCodeRequest]
304
+ # @param [Hash] opts the optional parameters
305
+ # @return [ReferralCodeEnvelope]
306
+ def update_referral_code(id, update_referral_code_request, opts = {})
307
+ data, _status_code, _headers = update_referral_code_with_http_info(id, update_referral_code_request, opts)
308
+ data
309
+ end
310
+
311
+ # Update a referral code
312
+ # Changes the label, pauses or resumes the code (&#x60;active&#x60;), or replaces its UTM presets. The target is fixed at creation. A paused code is ignored on arrival; existing cookies still credit investments for up to 30 days. Reactivating counts against the 500 active codes.
313
+ # @param id [String] The referral code id (&#x60;ref_…&#x60;).
314
+ # @param update_referral_code_request [UpdateReferralCodeRequest]
315
+ # @param [Hash] opts the optional parameters
316
+ # @return [Array<(ReferralCodeEnvelope, Integer, Hash)>] ReferralCodeEnvelope data, response status code and response headers
317
+ def update_referral_code_with_http_info(id, update_referral_code_request, opts = {})
318
+ if @api_client.config.debugging
319
+ @api_client.config.logger.debug 'Calling API: ReferralCodesApi.update_referral_code ...'
320
+ end
321
+ # verify the required parameter 'id' is set
322
+ if @api_client.config.client_side_validation && id.nil?
323
+ fail ArgumentError, "Missing the required parameter 'id' when calling ReferralCodesApi.update_referral_code"
324
+ end
325
+ # verify the required parameter 'update_referral_code_request' is set
326
+ if @api_client.config.client_side_validation && update_referral_code_request.nil?
327
+ fail ArgumentError, "Missing the required parameter 'update_referral_code_request' when calling ReferralCodesApi.update_referral_code"
328
+ end
329
+ # resource path
330
+ local_var_path = '/referral_codes/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
331
+
332
+ # query parameters
333
+ query_params = opts[:query_params] || {}
334
+
335
+ # header parameters
336
+ header_params = opts[:header_params] || {}
337
+ # HTTP header 'Accept' (if needed)
338
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
339
+ # HTTP header 'Content-Type'
340
+ content_type = @api_client.select_header_content_type(['application/json'])
341
+ if !content_type.nil?
342
+ header_params['Content-Type'] = content_type
343
+ end
344
+
345
+ # form parameters
346
+ form_params = opts[:form_params] || {}
347
+
348
+ # http body (model)
349
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(update_referral_code_request)
350
+
351
+ # return_type
352
+ return_type = opts[:debug_return_type] || 'ReferralCodeEnvelope'
353
+
354
+ # auth_names
355
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
356
+
357
+ new_options = opts.merge(
358
+ :operation => :"ReferralCodesApi.update_referral_code",
359
+ :header_params => header_params,
360
+ :query_params => query_params,
361
+ :form_params => form_params,
362
+ :body => post_body,
363
+ :auth_names => auth_names,
364
+ :return_type => return_type
365
+ )
366
+
367
+ data, status_code, headers = @api_client.call_api(:PATCH, local_var_path, new_options)
368
+ if @api_client.config.debugging
369
+ @api_client.config.logger.debug "API called: ReferralCodesApi#update_referral_code\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
370
+ end
371
+ return data, status_code, headers
372
+ end
373
+ end
374
+ end
@@ -19,144 +19,6 @@ module WefunderGenerated
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
- # Close deal
23
- # Closing a deal is irreversible and requires human approval through the Intent system. This endpoint server-mints a pending `syndicates.close_deal` intent and returns the deal under `data` plus the intent's `review_url` under `meta.close_deal_intent`. The deal is not transitioned until a permitted human approves the intent in the Wefunder UI. Idempotent: a repeated call returns the same pending intent rather than minting a duplicate.
24
- # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
25
- # @param fundraise_id [String] The deal&#39;s id (&#x60;ofr_...&#x60;), as returned by the deals list. Integer ids are internal and not accepted.
26
- # @param [Hash] opts the optional parameters
27
- # @return [SyndicateDealCloseIntentEnvelope]
28
- def close_syndicate_deal(syndicate_id, fundraise_id, opts = {})
29
- data, _status_code, _headers = close_syndicate_deal_with_http_info(syndicate_id, fundraise_id, opts)
30
- data
31
- end
32
-
33
- # Close deal
34
- # Closing a deal is irreversible and requires human approval through the Intent system. This endpoint server-mints a pending &#x60;syndicates.close_deal&#x60; intent and returns the deal under &#x60;data&#x60; plus the intent&#39;s &#x60;review_url&#x60; under &#x60;meta.close_deal_intent&#x60;. The deal is not transitioned until a permitted human approves the intent in the Wefunder UI. Idempotent: a repeated call returns the same pending intent rather than minting a duplicate.
35
- # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
36
- # @param fundraise_id [String] The deal&#39;s id (&#x60;ofr_...&#x60;), as returned by the deals list. Integer ids are internal and not accepted.
37
- # @param [Hash] opts the optional parameters
38
- # @return [Array<(SyndicateDealCloseIntentEnvelope, Integer, Hash)>] SyndicateDealCloseIntentEnvelope data, response status code and response headers
39
- def close_syndicate_deal_with_http_info(syndicate_id, fundraise_id, opts = {})
40
- if @api_client.config.debugging
41
- @api_client.config.logger.debug 'Calling API: SyndicateDealsApi.close_syndicate_deal ...'
42
- end
43
- # verify the required parameter 'syndicate_id' is set
44
- if @api_client.config.client_side_validation && syndicate_id.nil?
45
- fail ArgumentError, "Missing the required parameter 'syndicate_id' when calling SyndicateDealsApi.close_syndicate_deal"
46
- end
47
- # verify the required parameter 'fundraise_id' is set
48
- if @api_client.config.client_side_validation && fundraise_id.nil?
49
- fail ArgumentError, "Missing the required parameter 'fundraise_id' when calling SyndicateDealsApi.close_syndicate_deal"
50
- end
51
- # resource path
52
- local_var_path = '/syndicates/{syndicate_id}/deals/{fundraise_id}/close'.sub('{' + 'syndicate_id' + '}', CGI.escape(syndicate_id.to_s)).sub('{' + 'fundraise_id' + '}', CGI.escape(fundraise_id.to_s))
53
-
54
- # query parameters
55
- query_params = opts[:query_params] || {}
56
-
57
- # header parameters
58
- header_params = opts[:header_params] || {}
59
- # HTTP header 'Accept' (if needed)
60
- header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
61
-
62
- # form parameters
63
- form_params = opts[:form_params] || {}
64
-
65
- # http body (model)
66
- post_body = opts[:debug_body]
67
-
68
- # return_type
69
- return_type = opts[:debug_return_type] || 'SyndicateDealCloseIntentEnvelope'
70
-
71
- # auth_names
72
- auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
73
-
74
- new_options = opts.merge(
75
- :operation => :"SyndicateDealsApi.close_syndicate_deal",
76
- :header_params => header_params,
77
- :query_params => query_params,
78
- :form_params => form_params,
79
- :body => post_body,
80
- :auth_names => auth_names,
81
- :return_type => return_type
82
- )
83
-
84
- data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
85
- if @api_client.config.debugging
86
- @api_client.config.logger.debug "API called: SyndicateDealsApi#close_syndicate_deal\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
87
- end
88
- return data, status_code, headers
89
- end
90
-
91
- # Finalize deal
92
- # Finalizing a deal is irreversible and requires human approval through the Intent system. This endpoint server-mints a pending `syndicates.finalize_deal` intent and returns the deal under `data` plus the intent's `review_url` under `meta.finalize_deal_intent`. The finalize runs only when a permitted human approves the intent in the Wefunder UI. Idempotent: a repeated call returns the same pending intent rather than minting a duplicate.
93
- # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
94
- # @param fundraise_id [String] The deal&#39;s id (&#x60;ofr_...&#x60;), as returned by the deals list. Integer ids are internal and not accepted.
95
- # @param [Hash] opts the optional parameters
96
- # @return [SyndicateDealFinalizeIntentEnvelope]
97
- def finalize_syndicate_deal(syndicate_id, fundraise_id, opts = {})
98
- data, _status_code, _headers = finalize_syndicate_deal_with_http_info(syndicate_id, fundraise_id, opts)
99
- data
100
- end
101
-
102
- # Finalize deal
103
- # Finalizing a deal is irreversible and requires human approval through the Intent system. This endpoint server-mints a pending &#x60;syndicates.finalize_deal&#x60; intent and returns the deal under &#x60;data&#x60; plus the intent&#39;s &#x60;review_url&#x60; under &#x60;meta.finalize_deal_intent&#x60;. The finalize runs only when a permitted human approves the intent in the Wefunder UI. Idempotent: a repeated call returns the same pending intent rather than minting a duplicate.
104
- # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
105
- # @param fundraise_id [String] The deal&#39;s id (&#x60;ofr_...&#x60;), as returned by the deals list. Integer ids are internal and not accepted.
106
- # @param [Hash] opts the optional parameters
107
- # @return [Array<(SyndicateDealFinalizeIntentEnvelope, Integer, Hash)>] SyndicateDealFinalizeIntentEnvelope data, response status code and response headers
108
- def finalize_syndicate_deal_with_http_info(syndicate_id, fundraise_id, opts = {})
109
- if @api_client.config.debugging
110
- @api_client.config.logger.debug 'Calling API: SyndicateDealsApi.finalize_syndicate_deal ...'
111
- end
112
- # verify the required parameter 'syndicate_id' is set
113
- if @api_client.config.client_side_validation && syndicate_id.nil?
114
- fail ArgumentError, "Missing the required parameter 'syndicate_id' when calling SyndicateDealsApi.finalize_syndicate_deal"
115
- end
116
- # verify the required parameter 'fundraise_id' is set
117
- if @api_client.config.client_side_validation && fundraise_id.nil?
118
- fail ArgumentError, "Missing the required parameter 'fundraise_id' when calling SyndicateDealsApi.finalize_syndicate_deal"
119
- end
120
- # resource path
121
- local_var_path = '/syndicates/{syndicate_id}/deals/{fundraise_id}/finalize'.sub('{' + 'syndicate_id' + '}', CGI.escape(syndicate_id.to_s)).sub('{' + 'fundraise_id' + '}', CGI.escape(fundraise_id.to_s))
122
-
123
- # query parameters
124
- query_params = opts[:query_params] || {}
125
-
126
- # header parameters
127
- header_params = opts[:header_params] || {}
128
- # HTTP header 'Accept' (if needed)
129
- header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
130
-
131
- # form parameters
132
- form_params = opts[:form_params] || {}
133
-
134
- # http body (model)
135
- post_body = opts[:debug_body]
136
-
137
- # return_type
138
- return_type = opts[:debug_return_type] || 'SyndicateDealFinalizeIntentEnvelope'
139
-
140
- # auth_names
141
- auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
142
-
143
- new_options = opts.merge(
144
- :operation => :"SyndicateDealsApi.finalize_syndicate_deal",
145
- :header_params => header_params,
146
- :query_params => query_params,
147
- :form_params => form_params,
148
- :body => post_body,
149
- :auth_names => auth_names,
150
- :return_type => return_type
151
- )
152
-
153
- data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
154
- if @api_client.config.debugging
155
- @api_client.config.logger.debug "API called: SyndicateDealsApi#finalize_syndicate_deal\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
156
- end
157
- return data, status_code, headers
158
- end
159
-
160
22
  # Get deal details
161
23
  # Returns full details for a specific deal including investor breakdown.
162
24
  # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
@@ -306,7 +168,7 @@ module WefunderGenerated
306
168
  end
307
169
 
308
170
  # List deals
309
- # Returns the syndicate's **live** deals (open, oversubscribed, or closing) with status, terms, and metrics. Closed and upcoming rounds are not listed; `statistics.total_deals` counts all linked rounds.
171
+ # Returns the syndicate's **live** deals (open, oversubscribed, or closing) with status, terms, and metrics. Closed and upcoming rounds are not listed; `statistics.total_deals` counts the same visible deal set in every state. The visible set is every round of the syndicate's directory companies except invite-only companies' rounds and testing-the-waters rounds; a syndicate with no directory companies falls back to its explicitly linked rounds, excluding invite-only companies' rounds only.
310
172
  # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
311
173
  # @param [Hash] opts the optional parameters
312
174
  # @option opts [String] :cursor Opaque cursor from the previous response&#39;s &#x60;meta.next_cursor&#x60;.
@@ -318,7 +180,7 @@ module WefunderGenerated
318
180
  end
319
181
 
320
182
  # List deals
321
- # Returns the syndicate&#39;s **live** deals (open, oversubscribed, or closing) with status, terms, and metrics. Closed and upcoming rounds are not listed; &#x60;statistics.total_deals&#x60; counts all linked rounds.
183
+ # Returns the syndicate&#39;s **live** deals (open, oversubscribed, or closing) with status, terms, and metrics. Closed and upcoming rounds are not listed; &#x60;statistics.total_deals&#x60; counts the same visible deal set in every state. The visible set is every round of the syndicate&#39;s directory companies except invite-only companies&#39; rounds and testing-the-waters rounds; a syndicate with no directory companies falls back to its explicitly linked rounds, excluding invite-only companies&#39; rounds only.
322
184
  # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
323
185
  # @param [Hash] opts the optional parameters
324
186
  # @option opts [String] :cursor Opaque cursor from the previous response&#39;s &#x60;meta.next_cursor&#x60;.