wefunder 0.1.0.beta1

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 (361) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +263 -0
  4. data/lib/wefunder/client.rb +283 -0
  5. data/lib/wefunder/errors.rb +87 -0
  6. data/lib/wefunder/oauth.rb +135 -0
  7. data/lib/wefunder/pagination.rb +52 -0
  8. data/lib/wefunder/token_manager.rb +80 -0
  9. data/lib/wefunder/transport.rb +93 -0
  10. data/lib/wefunder/version.rb +5 -0
  11. data/lib/wefunder/webhooks.rb +238 -0
  12. data/lib/wefunder.rb +26 -0
  13. data/lib/wefunder_generated/api/activity_api.rb +234 -0
  14. data/lib/wefunder_generated/api/attribution_api.rb +182 -0
  15. data/lib/wefunder_generated/api/attribution_partners_api.rb +392 -0
  16. data/lib/wefunder_generated/api/attribution_webhooks_api.rb +504 -0
  17. data/lib/wefunder_generated/api/campaigns_api.rb +82 -0
  18. data/lib/wefunder_generated/api/companies_api.rb +101 -0
  19. data/lib/wefunder_generated/api/explore_api.rb +633 -0
  20. data/lib/wefunder_generated/api/installations_api.rb +405 -0
  21. data/lib/wefunder_generated/api/intents_api.rb +301 -0
  22. data/lib/wefunder_generated/api/investment_delta_api.rb +99 -0
  23. data/lib/wefunder_generated/api/investments_api.rb +238 -0
  24. data/lib/wefunder_generated/api/portfolio_api.rb +166 -0
  25. data/lib/wefunder_generated/api/syndicate_deals_api.rb +381 -0
  26. data/lib/wefunder_generated/api/syndicate_members_api.rb +976 -0
  27. data/lib/wefunder_generated/api/syndicate_portfolio_api.rb +178 -0
  28. data/lib/wefunder_generated/api/syndicate_statistics_api.rb +85 -0
  29. data/lib/wefunder_generated/api/syndicates_api.rb +226 -0
  30. data/lib/wefunder_generated/api/users_api.rb +329 -0
  31. data/lib/wefunder_generated/api/webhook_endpoints_api.rb +539 -0
  32. data/lib/wefunder_generated/api_client.rb +437 -0
  33. data/lib/wefunder_generated/api_error.rb +58 -0
  34. data/lib/wefunder_generated/configuration.rb +392 -0
  35. data/lib/wefunder_generated/models/anonymized_attribution.rb +298 -0
  36. data/lib/wefunder_generated/models/anonymized_attribution_attribution.rb +330 -0
  37. data/lib/wefunder_generated/models/anonymized_attribution_status.rb +260 -0
  38. data/lib/wefunder_generated/models/attributed_investment_list_envelope.rb +226 -0
  39. data/lib/wefunder_generated/models/attributed_investment_list_envelope_data_inner.rb +105 -0
  40. data/lib/wefunder_generated/models/attributed_investment_list_envelope_meta.rb +295 -0
  41. data/lib/wefunder_generated/models/attribution_campaign_access.rb +241 -0
  42. data/lib/wefunder_generated/models/attribution_campaign_summary.rb +251 -0
  43. data/lib/wefunder_generated/models/attribution_campaign_summary_list_envelope.rb +216 -0
  44. data/lib/wefunder_generated/models/attribution_me.rb +235 -0
  45. data/lib/wefunder_generated/models/attribution_me_envelope.rb +214 -0
  46. data/lib/wefunder_generated/models/attribution_partner.rb +275 -0
  47. data/lib/wefunder_generated/models/attribution_stats.rb +266 -0
  48. data/lib/wefunder_generated/models/attribution_stats_by_campaign_inner.rb +232 -0
  49. data/lib/wefunder_generated/models/attribution_stats_by_source_inner.rb +232 -0
  50. data/lib/wefunder_generated/models/attribution_stats_envelope.rb +214 -0
  51. data/lib/wefunder_generated/models/attribution_stats_period.rb +223 -0
  52. data/lib/wefunder_generated/models/attribution_stats_quality_breakdown.rb +236 -0
  53. data/lib/wefunder_generated/models/attribution_stats_totals.rb +245 -0
  54. data/lib/wefunder_generated/models/attribution_user.rb +232 -0
  55. data/lib/wefunder_generated/models/audit_event.rb +234 -0
  56. data/lib/wefunder_generated/models/audit_event_attributes.rb +391 -0
  57. data/lib/wefunder_generated/models/audit_event_list_envelope.rb +225 -0
  58. data/lib/wefunder_generated/models/bulk_invite_link_create_input.rb +243 -0
  59. data/lib/wefunder_generated/models/bulk_invite_link_envelope.rb +237 -0
  60. data/lib/wefunder_generated/models/bulk_invite_link_envelope_errors_inner.rb +233 -0
  61. data/lib/wefunder_generated/models/bulk_invite_link_envelope_meta.rb +232 -0
  62. data/lib/wefunder_generated/models/campaign.rb +232 -0
  63. data/lib/wefunder_generated/models/campaign_attributes.rb +301 -0
  64. data/lib/wefunder_generated/models/campaign_list_envelope.rb +225 -0
  65. data/lib/wefunder_generated/models/comment_proposal_envelope.rb +274 -0
  66. data/lib/wefunder_generated/models/comment_proposal_envelope_draft.rb +260 -0
  67. data/lib/wefunder_generated/models/comment_proposal_envelope_proposal.rb +286 -0
  68. data/lib/wefunder_generated/models/comment_proposal_envelope_related_questions_inner.rb +264 -0
  69. data/lib/wefunder_generated/models/company.rb +234 -0
  70. data/lib/wefunder_generated/models/company_attributes.rb +318 -0
  71. data/lib/wefunder_generated/models/company_attributes_location.rb +235 -0
  72. data/lib/wefunder_generated/models/company_disclosures.rb +268 -0
  73. data/lib/wefunder_generated/models/company_disclosures_attributes.rb +434 -0
  74. data/lib/wefunder_generated/models/company_disclosures_attributes_business.rb +255 -0
  75. data/lib/wefunder_generated/models/company_disclosures_attributes_capital_structure_inner.rb +255 -0
  76. data/lib/wefunder_generated/models/company_disclosures_attributes_current_position.rb +281 -0
  77. data/lib/wefunder_generated/models/company_disclosures_attributes_filing.rb +256 -0
  78. data/lib/wefunder_generated/models/company_disclosures_attributes_financial_statements.rb +233 -0
  79. data/lib/wefunder_generated/models/company_disclosures_attributes_outstanding_debts.rb +227 -0
  80. data/lib/wefunder_generated/models/company_disclosures_attributes_outstanding_debts_items_inner.rb +255 -0
  81. data/lib/wefunder_generated/models/company_disclosures_attributes_outstanding_notes_inner.rb +284 -0
  82. data/lib/wefunder_generated/models/company_disclosures_attributes_prior_offerings_inner.rb +266 -0
  83. data/lib/wefunder_generated/models/company_disclosures_attributes_ratios.rb +272 -0
  84. data/lib/wefunder_generated/models/company_disclosures_attributes_related_parties.rb +226 -0
  85. data/lib/wefunder_generated/models/company_disclosures_attributes_related_parties_parties_inner.rb +265 -0
  86. data/lib/wefunder_generated/models/company_disclosures_attributes_use_of_funds_inner.rb +226 -0
  87. data/lib/wefunder_generated/models/company_disclosures_attributes_voting_power_inner.rb +236 -0
  88. data/lib/wefunder_generated/models/company_disclosures_envelope.rb +214 -0
  89. data/lib/wefunder_generated/models/company_envelope.rb +214 -0
  90. data/lib/wefunder_generated/models/company_pitch.rb +268 -0
  91. data/lib/wefunder_generated/models/company_pitch_attributes.rb +311 -0
  92. data/lib/wefunder_generated/models/company_pitch_attributes_perks.rb +248 -0
  93. data/lib/wefunder_generated/models/company_pitch_attributes_story.rb +255 -0
  94. data/lib/wefunder_generated/models/company_pitch_envelope.rb +214 -0
  95. data/lib/wefunder_generated/models/company_question.rb +268 -0
  96. data/lib/wefunder_generated/models/company_question_attributes.rb +329 -0
  97. data/lib/wefunder_generated/models/company_question_attributes_answers_inner.rb +253 -0
  98. data/lib/wefunder_generated/models/company_question_list_envelope.rb +225 -0
  99. data/lib/wefunder_generated/models/company_question_list_envelope_meta.rb +301 -0
  100. data/lib/wefunder_generated/models/company_question_person.rb +247 -0
  101. data/lib/wefunder_generated/models/company_search_result.rb +268 -0
  102. data/lib/wefunder_generated/models/company_search_result_attributes.rb +266 -0
  103. data/lib/wefunder_generated/models/company_search_result_list_envelope.rb +225 -0
  104. data/lib/wefunder_generated/models/company_search_result_list_envelope_meta.rb +223 -0
  105. data/lib/wefunder_generated/models/company_totals.rb +249 -0
  106. data/lib/wefunder_generated/models/company_update.rb +269 -0
  107. data/lib/wefunder_generated/models/company_update_attributes.rb +350 -0
  108. data/lib/wefunder_generated/models/company_update_attributes_author.rb +215 -0
  109. data/lib/wefunder_generated/models/company_update_envelope.rb +214 -0
  110. data/lib/wefunder_generated/models/company_update_list_envelope.rb +225 -0
  111. data/lib/wefunder_generated/models/company_update_list_envelope_meta.rb +243 -0
  112. data/lib/wefunder_generated/models/connected_app.rb +233 -0
  113. data/lib/wefunder_generated/models/connected_app_attributes.rb +258 -0
  114. data/lib/wefunder_generated/models/connected_app_list_envelope.rb +216 -0
  115. data/lib/wefunder_generated/models/connected_app_revocation.rb +223 -0
  116. data/lib/wefunder_generated/models/connected_app_revocation_envelope.rb +214 -0
  117. data/lib/wefunder_generated/models/convertible_note_security.rb +266 -0
  118. data/lib/wefunder_generated/models/convertible_note_security_terms.rb +266 -0
  119. data/lib/wefunder_generated/models/create_installation_request.rb +294 -0
  120. data/lib/wefunder_generated/models/create_installation_token_request.rb +216 -0
  121. data/lib/wefunder_generated/models/create_intent_request.rb +320 -0
  122. data/lib/wefunder_generated/models/create_partner_invite_request.rb +287 -0
  123. data/lib/wefunder_generated/models/create_webhook_endpoint_request.rb +291 -0
  124. data/lib/wefunder_generated/models/create_webhook_subscription_request.rb +263 -0
  125. data/lib/wefunder_generated/models/current_raise.rb +288 -0
  126. data/lib/wefunder_generated/models/deal_investor.rb +234 -0
  127. data/lib/wefunder_generated/models/deal_investor_attributes.rb +321 -0
  128. data/lib/wefunder_generated/models/deal_investor_list_envelope.rb +225 -0
  129. data/lib/wefunder_generated/models/deal_investor_list_envelope_meta.rb +252 -0
  130. data/lib/wefunder_generated/models/debt_security.rb +266 -0
  131. data/lib/wefunder_generated/models/debt_security_terms.rb +235 -0
  132. data/lib/wefunder_generated/models/delete_webhook_endpoint200_response.rb +214 -0
  133. data/lib/wefunder_generated/models/delete_webhook_endpoint200_response_data.rb +232 -0
  134. data/lib/wefunder_generated/models/disclosure_document.rb +224 -0
  135. data/lib/wefunder_generated/models/disclosure_person.rb +254 -0
  136. data/lib/wefunder_generated/models/eligible_target_list_envelope.rb +225 -0
  137. data/lib/wefunder_generated/models/eligible_target_list_envelope_data_inner.rb +295 -0
  138. data/lib/wefunder_generated/models/equity_security.rb +266 -0
  139. data/lib/wefunder_generated/models/equity_security_terms.rb +271 -0
  140. data/lib/wefunder_generated/models/error.rb +214 -0
  141. data/lib/wefunder_generated/models/error_error.rb +254 -0
  142. data/lib/wefunder_generated/models/exemption.rb +271 -0
  143. data/lib/wefunder_generated/models/fiscal_year_financials.rb +296 -0
  144. data/lib/wefunder_generated/models/follow_state_envelope.rb +214 -0
  145. data/lib/wefunder_generated/models/follow_state_envelope_data.rb +268 -0
  146. data/lib/wefunder_generated/models/follow_state_envelope_data_attributes.rb +225 -0
  147. data/lib/wefunder_generated/models/followed_company.rb +268 -0
  148. data/lib/wefunder_generated/models/followed_company_attributes.rb +275 -0
  149. data/lib/wefunder_generated/models/followed_company_list_envelope.rb +225 -0
  150. data/lib/wefunder_generated/models/full_attribution.rb +272 -0
  151. data/lib/wefunder_generated/models/full_attribution_attribution.rb +326 -0
  152. data/lib/wefunder_generated/models/full_attribution_investor.rb +242 -0
  153. data/lib/wefunder_generated/models/full_attribution_status.rb +257 -0
  154. data/lib/wefunder_generated/models/fund_security.rb +267 -0
  155. data/lib/wefunder_generated/models/installation.rb +233 -0
  156. data/lib/wefunder_generated/models/installation_attributes.rb +307 -0
  157. data/lib/wefunder_generated/models/installation_attributes_target.rb +267 -0
  158. data/lib/wefunder_generated/models/installation_envelope.rb +223 -0
  159. data/lib/wefunder_generated/models/installation_list_envelope.rb +225 -0
  160. data/lib/wefunder_generated/models/installation_list_envelope_meta.rb +214 -0
  161. data/lib/wefunder_generated/models/installation_token_envelope.rb +232 -0
  162. data/lib/wefunder_generated/models/installation_token_envelope_token.rb +252 -0
  163. data/lib/wefunder_generated/models/intent.rb +234 -0
  164. data/lib/wefunder_generated/models/intent_attributes.rb +375 -0
  165. data/lib/wefunder_generated/models/intent_attributes_resource_id.rb +106 -0
  166. data/lib/wefunder_generated/models/intent_envelope.rb +214 -0
  167. data/lib/wefunder_generated/models/intent_list_envelope.rb +225 -0
  168. data/lib/wefunder_generated/models/intent_preview_envelope.rb +214 -0
  169. data/lib/wefunder_generated/models/intent_preview_envelope_data.rb +257 -0
  170. data/lib/wefunder_generated/models/intent_preview_envelope_data_attributes.rb +262 -0
  171. data/lib/wefunder_generated/models/intent_review.rb +234 -0
  172. data/lib/wefunder_generated/models/investment_change_list_envelope.rb +225 -0
  173. data/lib/wefunder_generated/models/investment_change_list_envelope_meta.rb +285 -0
  174. data/lib/wefunder_generated/models/investment_delta_record.rb +504 -0
  175. data/lib/wefunder_generated/models/investment_delta_record_amounts.rb +251 -0
  176. data/lib/wefunder_generated/models/investment_delta_record_blockers_inner.rb +224 -0
  177. data/lib/wefunder_generated/models/investment_delta_record_contracts_inner.rb +234 -0
  178. data/lib/wefunder_generated/models/investment_delta_record_investor.rb +286 -0
  179. data/lib/wefunder_generated/models/investment_envelope.rb +223 -0
  180. data/lib/wefunder_generated/models/investment_envelope_meta.rb +270 -0
  181. data/lib/wefunder_generated/models/investment_list_envelope.rb +225 -0
  182. data/lib/wefunder_generated/models/investment_list_envelope_meta.rb +288 -0
  183. data/lib/wefunder_generated/models/investment_session.rb +232 -0
  184. data/lib/wefunder_generated/models/investment_session_attributes.rb +384 -0
  185. data/lib/wefunder_generated/models/investment_session_attributes_events_inner.rb +232 -0
  186. data/lib/wefunder_generated/models/investment_session_create_input.rb +331 -0
  187. data/lib/wefunder_generated/models/investment_session_envelope.rb +223 -0
  188. data/lib/wefunder_generated/models/investment_session_list_envelope.rb +225 -0
  189. data/lib/wefunder_generated/models/investment_session_list_envelope_meta.rb +242 -0
  190. data/lib/wefunder_generated/models/investor.rb +233 -0
  191. data/lib/wefunder_generated/models/investor_attributes.rb +262 -0
  192. data/lib/wefunder_generated/models/investor_envelope.rb +214 -0
  193. data/lib/wefunder_generated/models/investor_list_envelope.rb +225 -0
  194. data/lib/wefunder_generated/models/invite_link.rb +233 -0
  195. data/lib/wefunder_generated/models/invite_link_attributes.rb +375 -0
  196. data/lib/wefunder_generated/models/invite_link_attributes_events_inner.rb +243 -0
  197. data/lib/wefunder_generated/models/invite_link_create_input.rb +295 -0
  198. data/lib/wefunder_generated/models/invite_link_envelope.rb +223 -0
  199. data/lib/wefunder_generated/models/invite_link_list_envelope.rb +225 -0
  200. data/lib/wefunder_generated/models/invite_link_update_input.rb +227 -0
  201. data/lib/wefunder_generated/models/invite_syndicate_member_request.rb +277 -0
  202. data/lib/wefunder_generated/models/marketing_partner.rb +295 -0
  203. data/lib/wefunder_generated/models/marketing_partner_envelope.rb +214 -0
  204. data/lib/wefunder_generated/models/member_investment.rb +234 -0
  205. data/lib/wefunder_generated/models/member_investment_attributes.rb +301 -0
  206. data/lib/wefunder_generated/models/member_investment_list_envelope.rb +225 -0
  207. data/lib/wefunder_generated/models/member_investment_list_envelope_meta.rb +225 -0
  208. data/lib/wefunder_generated/models/my_company.rb +268 -0
  209. data/lib/wefunder_generated/models/my_company_attributes.rb +257 -0
  210. data/lib/wefunder_generated/models/my_company_list_envelope.rb +225 -0
  211. data/lib/wefunder_generated/models/offering.rb +267 -0
  212. data/lib/wefunder_generated/models/offering_attributes.rb +469 -0
  213. data/lib/wefunder_generated/models/offering_attributes_intended_security.rb +258 -0
  214. data/lib/wefunder_generated/models/offering_attributes_security.rb +105 -0
  215. data/lib/wefunder_generated/models/offering_envelope.rb +214 -0
  216. data/lib/wefunder_generated/models/offering_list_envelope.rb +225 -0
  217. data/lib/wefunder_generated/models/offering_list_envelope_meta.rb +265 -0
  218. data/lib/wefunder_generated/models/offering_stats_envelope.rb +223 -0
  219. data/lib/wefunder_generated/models/offering_stats_envelope_data.rb +253 -0
  220. data/lib/wefunder_generated/models/offering_stats_envelope_data_by_status_value.rb +232 -0
  221. data/lib/wefunder_generated/models/offering_stats_envelope_data_total.rb +233 -0
  222. data/lib/wefunder_generated/models/offering_stats_envelope_meta.rb +258 -0
  223. data/lib/wefunder_generated/models/offering_warnings_inner.rb +257 -0
  224. data/lib/wefunder_generated/models/other_security.rb +267 -0
  225. data/lib/wefunder_generated/models/other_security_terms.rb +235 -0
  226. data/lib/wefunder_generated/models/pagination_meta.rb +234 -0
  227. data/lib/wefunder_generated/models/pagination_meta_next_cursor.rb +106 -0
  228. data/lib/wefunder_generated/models/partner_investment.rb +232 -0
  229. data/lib/wefunder_generated/models/partner_investment_attributes.rb +305 -0
  230. data/lib/wefunder_generated/models/partner_investment_attributes_accreditation.rb +289 -0
  231. data/lib/wefunder_generated/models/partner_investment_envelope.rb +214 -0
  232. data/lib/wefunder_generated/models/partner_investment_list_envelope.rb +225 -0
  233. data/lib/wefunder_generated/models/partner_investor.rb +233 -0
  234. data/lib/wefunder_generated/models/partner_investor_attributes.rb +264 -0
  235. data/lib/wefunder_generated/models/partner_investor_list_envelope.rb +225 -0
  236. data/lib/wefunder_generated/models/partner_invite.rb +360 -0
  237. data/lib/wefunder_generated/models/partner_invite_envelope.rb +214 -0
  238. data/lib/wefunder_generated/models/partner_invite_list_envelope.rb +216 -0
  239. data/lib/wefunder_generated/models/partner_webhook_event.rb +257 -0
  240. data/lib/wefunder_generated/models/partner_webhook_event_envelope.rb +214 -0
  241. data/lib/wefunder_generated/models/partner_webhook_subscription.rb +232 -0
  242. data/lib/wefunder_generated/models/partner_webhook_subscription_attributes.rb +243 -0
  243. data/lib/wefunder_generated/models/partner_webhook_subscription_create_input.rb +239 -0
  244. data/lib/wefunder_generated/models/partner_webhook_subscription_envelope.rb +214 -0
  245. data/lib/wefunder_generated/models/partner_webhook_subscription_list_envelope.rb +216 -0
  246. data/lib/wefunder_generated/models/partner_webhook_subscription_with_secret.rb +239 -0
  247. data/lib/wefunder_generated/models/partner_webhook_subscription_with_secret_all_of_attributes.rb +215 -0
  248. data/lib/wefunder_generated/models/partner_webhook_subscription_with_secret_envelope.rb +214 -0
  249. data/lib/wefunder_generated/models/past_round.rb +309 -0
  250. data/lib/wefunder_generated/models/perk_tier.rb +226 -0
  251. data/lib/wefunder_generated/models/pitch_block.rb +375 -0
  252. data/lib/wefunder_generated/models/pitch_block_links_inner.rb +226 -0
  253. data/lib/wefunder_generated/models/portfolio_company_ref.rb +235 -0
  254. data/lib/wefunder_generated/models/portfolio_holding.rb +258 -0
  255. data/lib/wefunder_generated/models/portfolio_position.rb +268 -0
  256. data/lib/wefunder_generated/models/portfolio_position_attributes.rb +456 -0
  257. data/lib/wefunder_generated/models/portfolio_position_list_envelope.rb +225 -0
  258. data/lib/wefunder_generated/models/portfolio_position_list_envelope_meta.rb +234 -0
  259. data/lib/wefunder_generated/models/portfolio_security.rb +323 -0
  260. data/lib/wefunder_generated/models/portfolio_security_owner.rb +258 -0
  261. data/lib/wefunder_generated/models/portfolio_security_terms.rb +257 -0
  262. data/lib/wefunder_generated/models/portfolio_summary_envelope.rb +214 -0
  263. data/lib/wefunder_generated/models/portfolio_summary_envelope_data.rb +223 -0
  264. data/lib/wefunder_generated/models/portfolio_summary_envelope_data_attributes.rb +292 -0
  265. data/lib/wefunder_generated/models/portfolio_summary_envelope_data_attributes_position_counts.rb +242 -0
  266. data/lib/wefunder_generated/models/preview_intent_request.rb +262 -0
  267. data/lib/wefunder_generated/models/register_as_partner_request.rb +232 -0
  268. data/lib/wefunder_generated/models/reorder_syndicate_members_request.rb +224 -0
  269. data/lib/wefunder_generated/models/revenue_share_security.rb +266 -0
  270. data/lib/wefunder_generated/models/revenue_share_security_terms.rb +300 -0
  271. data/lib/wefunder_generated/models/safe_security.rb +266 -0
  272. data/lib/wefunder_generated/models/safe_security_terms.rb +257 -0
  273. data/lib/wefunder_generated/models/security.rb +66 -0
  274. data/lib/wefunder_generated/models/security_summary.rb +272 -0
  275. data/lib/wefunder_generated/models/spv.rb +232 -0
  276. data/lib/wefunder_generated/models/spv_attributes.rb +353 -0
  277. data/lib/wefunder_generated/models/spv_attributes_target_company.rb +223 -0
  278. data/lib/wefunder_generated/models/spv_cancel_intent_envelope.rb +224 -0
  279. data/lib/wefunder_generated/models/spv_cancel_intent_envelope_meta.rb +214 -0
  280. data/lib/wefunder_generated/models/spv_close_intent_envelope.rb +224 -0
  281. data/lib/wefunder_generated/models/spv_close_intent_envelope_meta.rb +214 -0
  282. data/lib/wefunder_generated/models/spv_create_input.rb +274 -0
  283. data/lib/wefunder_generated/models/spv_envelope.rb +214 -0
  284. data/lib/wefunder_generated/models/spv_list_envelope.rb +225 -0
  285. data/lib/wefunder_generated/models/spv_metrics.rb +261 -0
  286. data/lib/wefunder_generated/models/spv_settings.rb +275 -0
  287. data/lib/wefunder_generated/models/spv_status.rb +232 -0
  288. data/lib/wefunder_generated/models/spv_status_attributes.rb +289 -0
  289. data/lib/wefunder_generated/models/spv_status_envelope.rb +223 -0
  290. data/lib/wefunder_generated/models/spv_terms.rb +348 -0
  291. data/lib/wefunder_generated/models/spv_with_meta_envelope.rb +223 -0
  292. data/lib/wefunder_generated/models/spv_with_meta_envelope_meta.rb +214 -0
  293. data/lib/wefunder_generated/models/syndicate.rb +234 -0
  294. data/lib/wefunder_generated/models/syndicate_attributes.rb +412 -0
  295. data/lib/wefunder_generated/models/syndicate_attributes_annual_subscription.rb +236 -0
  296. data/lib/wefunder_generated/models/syndicate_attributes_traditional_fund.rb +225 -0
  297. data/lib/wefunder_generated/models/syndicate_deal.rb +234 -0
  298. data/lib/wefunder_generated/models/syndicate_deal_attributes.rb +435 -0
  299. data/lib/wefunder_generated/models/syndicate_deal_attributes_exemption.rb +105 -0
  300. data/lib/wefunder_generated/models/syndicate_deal_attributes_security.rb +105 -0
  301. data/lib/wefunder_generated/models/syndicate_deal_close_intent_envelope.rb +224 -0
  302. data/lib/wefunder_generated/models/syndicate_deal_close_intent_envelope_meta.rb +214 -0
  303. data/lib/wefunder_generated/models/syndicate_deal_detail_envelope.rb +214 -0
  304. data/lib/wefunder_generated/models/syndicate_deal_envelope.rb +214 -0
  305. data/lib/wefunder_generated/models/syndicate_deal_finalize_intent_envelope.rb +224 -0
  306. data/lib/wefunder_generated/models/syndicate_deal_finalize_intent_envelope_meta.rb +214 -0
  307. data/lib/wefunder_generated/models/syndicate_deal_list_envelope.rb +225 -0
  308. data/lib/wefunder_generated/models/syndicate_detail_envelope.rb +214 -0
  309. data/lib/wefunder_generated/models/syndicate_list_envelope.rb +225 -0
  310. data/lib/wefunder_generated/models/syndicate_member.rb +234 -0
  311. data/lib/wefunder_generated/models/syndicate_member_attributes.rb +650 -0
  312. data/lib/wefunder_generated/models/syndicate_member_envelope.rb +214 -0
  313. data/lib/wefunder_generated/models/syndicate_member_list_envelope.rb +225 -0
  314. data/lib/wefunder_generated/models/syndicate_portfolio_summary_envelope.rb +214 -0
  315. data/lib/wefunder_generated/models/syndicate_portfolio_summary_envelope_data.rb +223 -0
  316. data/lib/wefunder_generated/models/syndicate_portfolio_summary_envelope_data_attributes.rb +302 -0
  317. data/lib/wefunder_generated/models/syndicate_portfolio_summary_envelope_data_attributes_deal_counts.rb +242 -0
  318. data/lib/wefunder_generated/models/syndicate_statistics.rb +224 -0
  319. data/lib/wefunder_generated/models/syndicate_statistics_attributes.rb +277 -0
  320. data/lib/wefunder_generated/models/syndicate_statistics_envelope.rb +214 -0
  321. data/lib/wefunder_generated/models/tag_ref.rb +238 -0
  322. data/lib/wefunder_generated/models/target_company_input.rb +258 -0
  323. data/lib/wefunder_generated/models/test_webhook_endpoint_request.rb +249 -0
  324. data/lib/wefunder_generated/models/update_syndicate_member_request.rb +221 -0
  325. data/lib/wefunder_generated/models/update_syndicate_member_request_member.rb +251 -0
  326. data/lib/wefunder_generated/models/update_syndicate_request.rb +221 -0
  327. data/lib/wefunder_generated/models/update_syndicate_request_syndicate.rb +232 -0
  328. data/lib/wefunder_generated/models/update_webhook_endpoint_request.rb +252 -0
  329. data/lib/wefunder_generated/models/user.rb +233 -0
  330. data/lib/wefunder_generated/models/user_attributes.rb +300 -0
  331. data/lib/wefunder_generated/models/user_envelope.rb +214 -0
  332. data/lib/wefunder_generated/models/validation_error.rb +215 -0
  333. data/lib/wefunder_generated/models/validation_error_error.rb +234 -0
  334. data/lib/wefunder_generated/models/validation_error_error_details_inner.rb +232 -0
  335. data/lib/wefunder_generated/models/webhook_delivery.rb +318 -0
  336. data/lib/wefunder_generated/models/webhook_endpoint.rb +232 -0
  337. data/lib/wefunder_generated/models/webhook_endpoint_attributes.rb +327 -0
  338. data/lib/wefunder_generated/models/webhook_endpoint_envelope.rb +223 -0
  339. data/lib/wefunder_generated/models/webhook_endpoint_envelope_meta.rb +214 -0
  340. data/lib/wefunder_generated/models/webhook_endpoint_list_envelope.rb +225 -0
  341. data/lib/wefunder_generated/models/webhook_endpoint_list_envelope_meta.rb +233 -0
  342. data/lib/wefunder_generated/models/webhook_endpoint_test_result_envelope.rb +223 -0
  343. data/lib/wefunder_generated/models/webhook_endpoint_test_result_envelope_data.rb +306 -0
  344. data/lib/wefunder_generated/models/webhook_subscription.rb +304 -0
  345. data/lib/wefunder_generated/models/webhook_subscription_envelope.rb +214 -0
  346. data/lib/wefunder_generated/models/webhook_subscription_list_envelope.rb +225 -0
  347. data/lib/wefunder_generated/models/webhook_subscription_list_envelope_meta.rb +225 -0
  348. data/lib/wefunder_generated/models/webhook_subscription_with_recent_deliveries_envelope.rb +214 -0
  349. data/lib/wefunder_generated/models/webhook_subscription_with_recent_deliveries_envelope_data.rb +322 -0
  350. data/lib/wefunder_generated/models/webhook_subscription_with_secret2_envelope.rb +214 -0
  351. data/lib/wefunder_generated/models/webhook_subscription_with_secret2_envelope_data.rb +320 -0
  352. data/lib/wefunder_generated/models/webhook_subscription_with_secret_envelope.rb +214 -0
  353. data/lib/wefunder_generated/models/webhook_subscription_with_secret_envelope_data.rb +320 -0
  354. data/lib/wefunder_generated/models/webhook_test_result.rb +233 -0
  355. data/lib/wefunder_generated/models/webhook_test_result_envelope.rb +214 -0
  356. data/lib/wefunder_generated/models/wefunder_round.rb +330 -0
  357. data/lib/wefunder_generated/models/wefunder_round_exemption.rb +104 -0
  358. data/lib/wefunder_generated/models/wefunder_round_security.rb +104 -0
  359. data/lib/wefunder_generated/version.rb +15 -0
  360. data/lib/wefunder_generated.rb +382 -0
  361. metadata +456 -0
@@ -0,0 +1,633 @@
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 ExploreApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get a company page
23
+ # The company page behind an offering, as structured data — the \"click a company\" step after `/explore`. Addressed by the `co_...` id every offering carries in `company.id`. Keeps apart the three raised numbers the page shows and readers conflate: `current_raise.amount_raised` (this campaign's live rounds combined, on Wefunder), `past_rounds[]` (prior rounds the page lists, each tagged `source: wefunder` for rounds observed here or `reported` for founder-disclosed off-platform rounds), and `totals.profile_total_raised` (the number on the page's ticker bar). Every figure comes from the same policy the page uses, so the API never disagrees with the site. **Who has a page.** Every company whose profile wefunder.com lists publicly — the same set the site's search bar returns (published, not invite-only, searchable or with a live Form C; accredited-only companies need an accredited viewer) — plus the `/explore` set. A funded company, or one the viewer may see no round of, renders with `raising: false` and `current_raise: null`; its history is in `wefunder_rounds`. **Logged-in view (`read:explore`)** additionally covers the vault / syndicate-led companies the site shows an accredited viewer, and the round described is the one the page would show that viewer. A valid id for a company outside the viewer's set is a `404`, never a partial payload.
24
+ # @param id [String] The company's id (`co_...`).
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [CompanyEnvelope]
27
+ def get_company(id, opts = {})
28
+ data, _status_code, _headers = get_company_with_http_info(id, opts)
29
+ data
30
+ end
31
+
32
+ # Get a company page
33
+ # The company page behind an offering, as structured data — the \"click a company\" step after `/explore`. Addressed by the `co_...` id every offering carries in `company.id`. Keeps apart the three raised numbers the page shows and readers conflate: `current_raise.amount_raised` (this campaign's live rounds combined, on Wefunder), `past_rounds[]` (prior rounds the page lists, each tagged `source: wefunder` for rounds observed here or `reported` for founder-disclosed off-platform rounds), and `totals.profile_total_raised` (the number on the page's ticker bar). Every figure comes from the same policy the page uses, so the API never disagrees with the site. **Who has a page.** Every company whose profile wefunder.com lists publicly — the same set the site's search bar returns (published, not invite-only, searchable or with a live Form C; accredited-only companies need an accredited viewer) — plus the `/explore` set. A funded company, or one the viewer may see no round of, renders with `raising: false` and `current_raise: null`; its history is in `wefunder_rounds`. **Logged-in view (`read:explore`)** additionally covers the vault / syndicate-led companies the site shows an accredited viewer, and the round described is the one the page would show that viewer. A valid id for a company outside the viewer's set is a `404`, never a partial payload.
34
+ # @param id [String] The company's id (`co_...`).
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(CompanyEnvelope, Integer, Hash)>] CompanyEnvelope data, response status code and response headers
37
+ def get_company_with_http_info(id, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: ExploreApi.get_company ...'
40
+ end
41
+ # verify the required parameter 'id' is set
42
+ if @api_client.config.client_side_validation && id.nil?
43
+ fail ArgumentError, "Missing the required parameter 'id' when calling ExploreApi.get_company"
44
+ end
45
+ # resource path
46
+ local_var_path = '/companies/{id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
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
+
56
+ # form parameters
57
+ form_params = opts[:form_params] || {}
58
+
59
+ # http body (model)
60
+ post_body = opts[:debug_body]
61
+
62
+ # return_type
63
+ return_type = opts[:debug_return_type] || 'CompanyEnvelope'
64
+
65
+ # auth_names
66
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
67
+
68
+ new_options = opts.merge(
69
+ :operation => :"ExploreApi.get_company",
70
+ :header_params => header_params,
71
+ :query_params => query_params,
72
+ :form_params => form_params,
73
+ :body => post_body,
74
+ :auth_names => auth_names,
75
+ :return_type => return_type
76
+ )
77
+
78
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
79
+ if @api_client.config.debugging
80
+ @api_client.config.logger.debug "API called: ExploreApi#get_company\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
81
+ end
82
+ return data, status_code, headers
83
+ end
84
+
85
+ # Get a company's public Form C disclosures
86
+ # The Details tab of the company's Wefunder page as structured data — the company's own Form C disclosures, section for section: financial statements for the fiscal years on file, the page's ratios, the founder's current-position disclosure (cash on hand, monthly revenue / costs / burn), the financial-condition narrative, document links, risks, use of funds, directors and officers, 20%+ holders, capital structure, prior offerings, outstanding notes and debts, and related-party transactions. Same \"who has a page\" rule as `GET /companies/{id}`. The round read is the page's own: the display round for the viewer, swapped for its concurrent Reg CF sibling on a Reg D round, and only when it is a Reg CF / ECSP round with a Form C. A company with no such round has no details tab on the site and answers `404` with `error.type: no_disclosures` — distinct from an unknown or hidden company. A section the company hides on the site is `null`. Money is decimal strings, never USD by assumption: the round's own figures (use of funds, prior offerings, notes, debts, related parties) are in `currency` — `EUR` for an ECSP round — while the Form C financial statements, the ratio derived from them, and the current-position figures (which repeat it as `current_position.currency`) are in `financials_currency`, the currency the issuer declared for its statements (it can differ from the round's: DKK, RON, GBP, or USD statements behind a EUR round). Ratios are percentages as decimal strings. Everything here is the issuer's own disclosure, served as filed, not a Wefunder assessment.
87
+ # @param id [String]
88
+ # @param [Hash] opts the optional parameters
89
+ # @option opts [Array<String>] :sections Only these sections (&#x60;offering_id&#x60;, &#x60;currency&#x60;, &#x60;financials_currency&#x60; and &#x60;filing&#x60; are always included). Omit for the whole tab; a disclosure-heavy company runs to ~100 KB. Unknown names are a 400 listing the vocabulary.
90
+ # @return [CompanyDisclosuresEnvelope]
91
+ def get_company_disclosures(id, opts = {})
92
+ data, _status_code, _headers = get_company_disclosures_with_http_info(id, opts)
93
+ data
94
+ end
95
+
96
+ # Get a company&#39;s public Form C disclosures
97
+ # The Details tab of the company&#39;s Wefunder page as structured data — the company&#39;s own Form C disclosures, section for section: financial statements for the fiscal years on file, the page&#39;s ratios, the founder&#39;s current-position disclosure (cash on hand, monthly revenue / costs / burn), the financial-condition narrative, document links, risks, use of funds, directors and officers, 20%+ holders, capital structure, prior offerings, outstanding notes and debts, and related-party transactions. Same \&quot;who has a page\&quot; rule as &#x60;GET /companies/{id}&#x60;. The round read is the page&#39;s own: the display round for the viewer, swapped for its concurrent Reg CF sibling on a Reg D round, and only when it is a Reg CF / ECSP round with a Form C. A company with no such round has no details tab on the site and answers &#x60;404&#x60; with &#x60;error.type: no_disclosures&#x60; — distinct from an unknown or hidden company. A section the company hides on the site is &#x60;null&#x60;. Money is decimal strings, never USD by assumption: the round&#39;s own figures (use of funds, prior offerings, notes, debts, related parties) are in &#x60;currency&#x60; — &#x60;EUR&#x60; for an ECSP round — while the Form C financial statements, the ratio derived from them, and the current-position figures (which repeat it as &#x60;current_position.currency&#x60;) are in &#x60;financials_currency&#x60;, the currency the issuer declared for its statements (it can differ from the round&#39;s: DKK, RON, GBP, or USD statements behind a EUR round). Ratios are percentages as decimal strings. Everything here is the issuer&#39;s own disclosure, served as filed, not a Wefunder assessment.
98
+ # @param id [String]
99
+ # @param [Hash] opts the optional parameters
100
+ # @option opts [Array<String>] :sections Only these sections (&#x60;offering_id&#x60;, &#x60;currency&#x60;, &#x60;financials_currency&#x60; and &#x60;filing&#x60; are always included). Omit for the whole tab; a disclosure-heavy company runs to ~100 KB. Unknown names are a 400 listing the vocabulary.
101
+ # @return [Array<(CompanyDisclosuresEnvelope, Integer, Hash)>] CompanyDisclosuresEnvelope data, response status code and response headers
102
+ def get_company_disclosures_with_http_info(id, opts = {})
103
+ if @api_client.config.debugging
104
+ @api_client.config.logger.debug 'Calling API: ExploreApi.get_company_disclosures ...'
105
+ end
106
+ # verify the required parameter 'id' is set
107
+ if @api_client.config.client_side_validation && id.nil?
108
+ fail ArgumentError, "Missing the required parameter 'id' when calling ExploreApi.get_company_disclosures"
109
+ end
110
+ allowable_values = ["business", "financial_statements", "ratios", "current_position", "financial_condition", "financial_statement_documents", "investment_documents", "risks", "use_of_funds", "directors", "officers", "voting_power", "capital_structure", "prior_offerings", "outstanding_notes", "outstanding_debts", "related_parties"]
111
+ if @api_client.config.client_side_validation && opts[:'sections'] && !opts[:'sections'].all? { |item| allowable_values.include?(item) }
112
+ fail ArgumentError, "invalid value for \"sections\", must include one of #{allowable_values}"
113
+ end
114
+ # resource path
115
+ local_var_path = '/companies/{id}/disclosures'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
116
+
117
+ # query parameters
118
+ query_params = opts[:query_params] || {}
119
+ query_params[:'sections'] = @api_client.build_collection_param(opts[:'sections'], :csv) if !opts[:'sections'].nil?
120
+
121
+ # header parameters
122
+ header_params = opts[:header_params] || {}
123
+ # HTTP header 'Accept' (if needed)
124
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
125
+
126
+ # form parameters
127
+ form_params = opts[:form_params] || {}
128
+
129
+ # http body (model)
130
+ post_body = opts[:debug_body]
131
+
132
+ # return_type
133
+ return_type = opts[:debug_return_type] || 'CompanyDisclosuresEnvelope'
134
+
135
+ # auth_names
136
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
137
+
138
+ new_options = opts.merge(
139
+ :operation => :"ExploreApi.get_company_disclosures",
140
+ :header_params => header_params,
141
+ :query_params => query_params,
142
+ :form_params => form_params,
143
+ :body => post_body,
144
+ :auth_names => auth_names,
145
+ :return_type => return_type
146
+ )
147
+
148
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
149
+ if @api_client.config.debugging
150
+ @api_client.config.logger.debug "API called: ExploreApi#get_company_disclosures\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
151
+ end
152
+ return data, status_code, headers
153
+ end
154
+
155
+ # Get a company's pitch
156
+ # The Overview tab's pitch as structured data: the story as ordered blocks (`heading`, `paragraph`, `list`, `image`, `video`, `footnote`), plus the perk tiers of the round the page shows the viewer. Images and embedded videos keep their place in the document with an absolute URL, because founders publish perk tiers, stretch goals, timelines, and charts as pictures (typically with no alt text) and a plain-text rendering would drop them. What is parsed is what the page renders: the story passes through the site's own sanitizer first, so an embed the page refuses (a host off its allowlist, a `javascript:` URL) is never served here either. Same \"who has a page\" rule and round chooser as `GET /companies/{id}`. A site-public company with no round the viewer may see still has a pitch (`perks: null`). `perks.described_in_pitch` is a heuristic: true when the structured perk list is a placeholder (\"See investor overview page\", or one identical sentence on every tier) and the real tiers are in the story's images. `authored_by` says who wrote the story: `company` (the issuer's own words and imagery, not a Wefunder assessment) or `wefunder` (a Wefunder-prepared deal memo the company did not participate in; `disclaimer` carries the page's notice). A pitch can run to ~70 KB; use `sections` to ask for less.
157
+ # @param id [String]
158
+ # @param [Hash] opts the optional parameters
159
+ # @option opts [Array<String>] :sections Only these sections (&#x60;offering_id&#x60;, &#x60;title&#x60;, &#x60;url&#x60;, &#x60;authored_by&#x60;, and &#x60;disclaimer&#x60; are always included). Omit for the whole pitch. Unknown names are a 400 listing the vocabulary.
160
+ # @return [CompanyPitchEnvelope]
161
+ def get_company_pitch(id, opts = {})
162
+ data, _status_code, _headers = get_company_pitch_with_http_info(id, opts)
163
+ data
164
+ end
165
+
166
+ # Get a company&#39;s pitch
167
+ # The Overview tab&#39;s pitch as structured data: the story as ordered blocks (&#x60;heading&#x60;, &#x60;paragraph&#x60;, &#x60;list&#x60;, &#x60;image&#x60;, &#x60;video&#x60;, &#x60;footnote&#x60;), plus the perk tiers of the round the page shows the viewer. Images and embedded videos keep their place in the document with an absolute URL, because founders publish perk tiers, stretch goals, timelines, and charts as pictures (typically with no alt text) and a plain-text rendering would drop them. What is parsed is what the page renders: the story passes through the site&#39;s own sanitizer first, so an embed the page refuses (a host off its allowlist, a &#x60;javascript:&#x60; URL) is never served here either. Same \&quot;who has a page\&quot; rule and round chooser as &#x60;GET /companies/{id}&#x60;. A site-public company with no round the viewer may see still has a pitch (&#x60;perks: null&#x60;). &#x60;perks.described_in_pitch&#x60; is a heuristic: true when the structured perk list is a placeholder (\&quot;See investor overview page\&quot;, or one identical sentence on every tier) and the real tiers are in the story&#39;s images. &#x60;authored_by&#x60; says who wrote the story: &#x60;company&#x60; (the issuer&#39;s own words and imagery, not a Wefunder assessment) or &#x60;wefunder&#x60; (a Wefunder-prepared deal memo the company did not participate in; &#x60;disclaimer&#x60; carries the page&#39;s notice). A pitch can run to ~70 KB; use &#x60;sections&#x60; to ask for less.
168
+ # @param id [String]
169
+ # @param [Hash] opts the optional parameters
170
+ # @option opts [Array<String>] :sections Only these sections (&#x60;offering_id&#x60;, &#x60;title&#x60;, &#x60;url&#x60;, &#x60;authored_by&#x60;, and &#x60;disclaimer&#x60; are always included). Omit for the whole pitch. Unknown names are a 400 listing the vocabulary.
171
+ # @return [Array<(CompanyPitchEnvelope, Integer, Hash)>] CompanyPitchEnvelope data, response status code and response headers
172
+ def get_company_pitch_with_http_info(id, opts = {})
173
+ if @api_client.config.debugging
174
+ @api_client.config.logger.debug 'Calling API: ExploreApi.get_company_pitch ...'
175
+ end
176
+ # verify the required parameter 'id' is set
177
+ if @api_client.config.client_side_validation && id.nil?
178
+ fail ArgumentError, "Missing the required parameter 'id' when calling ExploreApi.get_company_pitch"
179
+ end
180
+ allowable_values = ["story", "perks"]
181
+ if @api_client.config.client_side_validation && opts[:'sections'] && !opts[:'sections'].all? { |item| allowable_values.include?(item) }
182
+ fail ArgumentError, "invalid value for \"sections\", must include one of #{allowable_values}"
183
+ end
184
+ # resource path
185
+ local_var_path = '/companies/{id}/pitch'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
186
+
187
+ # query parameters
188
+ query_params = opts[:query_params] || {}
189
+ query_params[:'sections'] = @api_client.build_collection_param(opts[:'sections'], :csv) if !opts[:'sections'].nil?
190
+
191
+ # header parameters
192
+ header_params = opts[:header_params] || {}
193
+ # HTTP header 'Accept' (if needed)
194
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
195
+
196
+ # form parameters
197
+ form_params = opts[:form_params] || {}
198
+
199
+ # http body (model)
200
+ post_body = opts[:debug_body]
201
+
202
+ # return_type
203
+ return_type = opts[:debug_return_type] || 'CompanyPitchEnvelope'
204
+
205
+ # auth_names
206
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
207
+
208
+ new_options = opts.merge(
209
+ :operation => :"ExploreApi.get_company_pitch",
210
+ :header_params => header_params,
211
+ :query_params => query_params,
212
+ :form_params => form_params,
213
+ :body => post_body,
214
+ :auth_names => auth_names,
215
+ :return_type => return_type
216
+ )
217
+
218
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
219
+ if @api_client.config.debugging
220
+ @api_client.config.logger.debug "API called: ExploreApi#get_company_pitch\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
221
+ end
222
+ return data, status_code, headers
223
+ end
224
+
225
+ # Get one company post in full
226
+ # One post with its full plain-text content, by the id the list returned. Same visibility as the list; a post the tab would not show this viewer is a 404.
227
+ # @param id [String]
228
+ # @param update_id [String]
229
+ # @param [Hash] opts the optional parameters
230
+ # @return [CompanyUpdateEnvelope]
231
+ def get_company_update(id, update_id, opts = {})
232
+ data, _status_code, _headers = get_company_update_with_http_info(id, update_id, opts)
233
+ data
234
+ end
235
+
236
+ # Get one company post in full
237
+ # One post with its full plain-text content, by the id the list returned. Same visibility as the list; a post the tab would not show this viewer is a 404.
238
+ # @param id [String]
239
+ # @param update_id [String]
240
+ # @param [Hash] opts the optional parameters
241
+ # @return [Array<(CompanyUpdateEnvelope, Integer, Hash)>] CompanyUpdateEnvelope data, response status code and response headers
242
+ def get_company_update_with_http_info(id, update_id, opts = {})
243
+ if @api_client.config.debugging
244
+ @api_client.config.logger.debug 'Calling API: ExploreApi.get_company_update ...'
245
+ end
246
+ # verify the required parameter 'id' is set
247
+ if @api_client.config.client_side_validation && id.nil?
248
+ fail ArgumentError, "Missing the required parameter 'id' when calling ExploreApi.get_company_update"
249
+ end
250
+ # verify the required parameter 'update_id' is set
251
+ if @api_client.config.client_side_validation && update_id.nil?
252
+ fail ArgumentError, "Missing the required parameter 'update_id' when calling ExploreApi.get_company_update"
253
+ end
254
+ # resource path
255
+ local_var_path = '/companies/{id}/updates/{update_id}'.sub('{' + 'id' + '}', CGI.escape(id.to_s)).sub('{' + 'update_id' + '}', CGI.escape(update_id.to_s))
256
+
257
+ # query parameters
258
+ query_params = opts[:query_params] || {}
259
+
260
+ # header parameters
261
+ header_params = opts[:header_params] || {}
262
+ # HTTP header 'Accept' (if needed)
263
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
264
+
265
+ # form parameters
266
+ form_params = opts[:form_params] || {}
267
+
268
+ # http body (model)
269
+ post_body = opts[:debug_body]
270
+
271
+ # return_type
272
+ return_type = opts[:debug_return_type] || 'CompanyUpdateEnvelope'
273
+
274
+ # auth_names
275
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
276
+
277
+ new_options = opts.merge(
278
+ :operation => :"ExploreApi.get_company_update",
279
+ :header_params => header_params,
280
+ :query_params => query_params,
281
+ :form_params => form_params,
282
+ :body => post_body,
283
+ :auth_names => auth_names,
284
+ :return_type => return_type
285
+ )
286
+
287
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
288
+ if @api_client.config.debugging
289
+ @api_client.config.logger.debug "API called: ExploreApi#get_company_update\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
290
+ end
291
+ return data, status_code, headers
292
+ end
293
+
294
+ # Get a public offering
295
+ # Retrieves a single offering by its id (`ofr_...`). With `read:public`, a valid id for a non-public offering (e.g. a private Reg D 506(b) round) returns `404` — having an id does not make an offering publicly resolvable. With `read:explore` on a user access token, the offering resolves if *that user* may see it on wefunder.com (e.g. an accredited-only or invited round), and the response gains `publicly_visible` and `invested`.
296
+ # @param external_id [String] The offering&#39;s id (&#x60;ofr_...&#x60;).
297
+ # @param [Hash] opts the optional parameters
298
+ # @return [OfferingEnvelope]
299
+ def get_offering(external_id, opts = {})
300
+ data, _status_code, _headers = get_offering_with_http_info(external_id, opts)
301
+ data
302
+ end
303
+
304
+ # Get a public offering
305
+ # Retrieves a single offering by its id (&#x60;ofr_...&#x60;). With &#x60;read:public&#x60;, a valid id for a non-public offering (e.g. a private Reg D 506(b) round) returns &#x60;404&#x60; — having an id does not make an offering publicly resolvable. With &#x60;read:explore&#x60; on a user access token, the offering resolves if *that user* may see it on wefunder.com (e.g. an accredited-only or invited round), and the response gains &#x60;publicly_visible&#x60; and &#x60;invested&#x60;.
306
+ # @param external_id [String] The offering&#39;s id (&#x60;ofr_...&#x60;).
307
+ # @param [Hash] opts the optional parameters
308
+ # @return [Array<(OfferingEnvelope, Integer, Hash)>] OfferingEnvelope data, response status code and response headers
309
+ def get_offering_with_http_info(external_id, opts = {})
310
+ if @api_client.config.debugging
311
+ @api_client.config.logger.debug 'Calling API: ExploreApi.get_offering ...'
312
+ end
313
+ # verify the required parameter 'external_id' is set
314
+ if @api_client.config.client_side_validation && external_id.nil?
315
+ fail ArgumentError, "Missing the required parameter 'external_id' when calling ExploreApi.get_offering"
316
+ end
317
+ # resource path
318
+ local_var_path = '/offerings/{external_id}'.sub('{' + 'external_id' + '}', CGI.escape(external_id.to_s))
319
+
320
+ # query parameters
321
+ query_params = opts[:query_params] || {}
322
+
323
+ # header parameters
324
+ header_params = opts[:header_params] || {}
325
+ # HTTP header 'Accept' (if needed)
326
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
327
+
328
+ # form parameters
329
+ form_params = opts[:form_params] || {}
330
+
331
+ # http body (model)
332
+ post_body = opts[:debug_body]
333
+
334
+ # return_type
335
+ return_type = opts[:debug_return_type] || 'OfferingEnvelope'
336
+
337
+ # auth_names
338
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
339
+
340
+ new_options = opts.merge(
341
+ :operation => :"ExploreApi.get_offering",
342
+ :header_params => header_params,
343
+ :query_params => query_params,
344
+ :form_params => form_params,
345
+ :body => post_body,
346
+ :auth_names => auth_names,
347
+ :return_type => return_type
348
+ )
349
+
350
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
351
+ if @api_client.config.debugging
352
+ @api_client.config.logger.debug "API called: ExploreApi#get_offering\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
353
+ end
354
+ return data, status_code, headers
355
+ end
356
+
357
+ # List a company's investor questions and answers
358
+ # The company page's Ask tab as data: the questions investors asked and the answers, as the tab lists them for this viewer (the same repository and visibility as the site). Like the tab, questions default to the current raise — those asked since it opened (`meta.questions_since`); `past_raises=true` includes every raise, which the site offers to any visitor because past-raise questions are public. `sort` is the tab's dropdown: `relevance` (default: highlighted, then answered, then most liked), `recent`, `upvoted`, `unanswered`. Text is plain. Questions and answers carry their id (`cmt_...`); the integer key never leaves the API. Answers are the founders' own words. `q` searches question and answer text (Postgres full text: quoted phrases and `-word` work; one- or two-word queries also prefix-match) and replaces the sort with match rank — `meta.sort` is then `search` and each result's `match` says whether its question or an answer matched. `unanswered_by_team=true` keeps only questions with no live answer from the company's team (the founder's queue; the `unanswered` sort merely orders by whether anyone replied).
359
+ # @param id [String]
360
+ # @param [Hash] opts the optional parameters
361
+ # @option opts [String] :sort (default to 'relevance')
362
+ # @option opts [Boolean] :past_raises (default to false)
363
+ # @option opts [String] :q Full-text search over questions and answers. At most 200 bytes.
364
+ # @option opts [Boolean] :unanswered_by_team (default to false)
365
+ # @option opts [String] :cursor
366
+ # @option opts [Integer] :per_page (default to 20)
367
+ # @return [CompanyQuestionListEnvelope]
368
+ def list_company_questions(id, opts = {})
369
+ data, _status_code, _headers = list_company_questions_with_http_info(id, opts)
370
+ data
371
+ end
372
+
373
+ # List a company&#39;s investor questions and answers
374
+ # The company page&#39;s Ask tab as data: the questions investors asked and the answers, as the tab lists them for this viewer (the same repository and visibility as the site). Like the tab, questions default to the current raise — those asked since it opened (&#x60;meta.questions_since&#x60;); &#x60;past_raises&#x3D;true&#x60; includes every raise, which the site offers to any visitor because past-raise questions are public. &#x60;sort&#x60; is the tab&#39;s dropdown: &#x60;relevance&#x60; (default: highlighted, then answered, then most liked), &#x60;recent&#x60;, &#x60;upvoted&#x60;, &#x60;unanswered&#x60;. Text is plain. Questions and answers carry their id (&#x60;cmt_...&#x60;); the integer key never leaves the API. Answers are the founders&#39; own words. &#x60;q&#x60; searches question and answer text (Postgres full text: quoted phrases and &#x60;-word&#x60; work; one- or two-word queries also prefix-match) and replaces the sort with match rank — &#x60;meta.sort&#x60; is then &#x60;search&#x60; and each result&#39;s &#x60;match&#x60; says whether its question or an answer matched. &#x60;unanswered_by_team&#x3D;true&#x60; keeps only questions with no live answer from the company&#39;s team (the founder&#39;s queue; the &#x60;unanswered&#x60; sort merely orders by whether anyone replied).
375
+ # @param id [String]
376
+ # @param [Hash] opts the optional parameters
377
+ # @option opts [String] :sort (default to 'relevance')
378
+ # @option opts [Boolean] :past_raises (default to false)
379
+ # @option opts [String] :q Full-text search over questions and answers. At most 200 bytes.
380
+ # @option opts [Boolean] :unanswered_by_team (default to false)
381
+ # @option opts [String] :cursor
382
+ # @option opts [Integer] :per_page (default to 20)
383
+ # @return [Array<(CompanyQuestionListEnvelope, Integer, Hash)>] CompanyQuestionListEnvelope data, response status code and response headers
384
+ def list_company_questions_with_http_info(id, opts = {})
385
+ if @api_client.config.debugging
386
+ @api_client.config.logger.debug 'Calling API: ExploreApi.list_company_questions ...'
387
+ end
388
+ # verify the required parameter 'id' is set
389
+ if @api_client.config.client_side_validation && id.nil?
390
+ fail ArgumentError, "Missing the required parameter 'id' when calling ExploreApi.list_company_questions"
391
+ end
392
+ allowable_values = ["relevance", "recent", "upvoted", "unanswered"]
393
+ if @api_client.config.client_side_validation && opts[:'sort'] && !allowable_values.include?(opts[:'sort'])
394
+ fail ArgumentError, "invalid value for \"sort\", must be one of #{allowable_values}"
395
+ end
396
+ if @api_client.config.client_side_validation && !opts[:'q'].nil? && opts[:'q'].to_s.length > 200
397
+ fail ArgumentError, 'invalid value for "opts[:"q"]" when calling ExploreApi.list_company_questions, the character length must be smaller than or equal to 200.'
398
+ end
399
+
400
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 50
401
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling ExploreApi.list_company_questions, must be smaller than or equal to 50.'
402
+ end
403
+
404
+ # resource path
405
+ local_var_path = '/companies/{id}/questions'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
406
+
407
+ # query parameters
408
+ query_params = opts[:query_params] || {}
409
+ query_params[:'sort'] = opts[:'sort'] if !opts[:'sort'].nil?
410
+ query_params[:'past_raises'] = opts[:'past_raises'] if !opts[:'past_raises'].nil?
411
+ query_params[:'q'] = opts[:'q'] if !opts[:'q'].nil?
412
+ query_params[:'unanswered_by_team'] = opts[:'unanswered_by_team'] if !opts[:'unanswered_by_team'].nil?
413
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
414
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
415
+
416
+ # header parameters
417
+ header_params = opts[:header_params] || {}
418
+ # HTTP header 'Accept' (if needed)
419
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
420
+
421
+ # form parameters
422
+ form_params = opts[:form_params] || {}
423
+
424
+ # http body (model)
425
+ post_body = opts[:debug_body]
426
+
427
+ # return_type
428
+ return_type = opts[:debug_return_type] || 'CompanyQuestionListEnvelope'
429
+
430
+ # auth_names
431
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
432
+
433
+ new_options = opts.merge(
434
+ :operation => :"ExploreApi.list_company_questions",
435
+ :header_params => header_params,
436
+ :query_params => query_params,
437
+ :form_params => form_params,
438
+ :body => post_body,
439
+ :auth_names => auth_names,
440
+ :return_type => return_type
441
+ )
442
+
443
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
444
+ if @api_client.config.debugging
445
+ @api_client.config.logger.debug "API called: ExploreApi#list_company_questions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
446
+ end
447
+ return data, status_code, headers
448
+ end
449
+
450
+ # List a company's posts
451
+ # The company page's Posts tab as data: the published updates, notes, and spotlights the viewer may see, pinned first then newest, with a plain-text excerpt each. With `read:explore` the viewer is the authorizing user, so a follower or investor sees the community- and investors-only posts the site shows them; with `read:public` it is the anonymous view. Same query as the tab (`FeedItem.viewable_by`); investments, Q&A threads, and investor quotes belong to other tabs and are not here. Fetch one post in full with `GET /companies/{id}/updates/{update_id}`. Posts are the issuer's own words.
452
+ # @param id [String]
453
+ # @param [Hash] opts the optional parameters
454
+ # @option opts [String] :cursor
455
+ # @option opts [Integer] :per_page (default to 20)
456
+ # @return [CompanyUpdateListEnvelope]
457
+ def list_company_updates(id, opts = {})
458
+ data, _status_code, _headers = list_company_updates_with_http_info(id, opts)
459
+ data
460
+ end
461
+
462
+ # List a company&#39;s posts
463
+ # The company page&#39;s Posts tab as data: the published updates, notes, and spotlights the viewer may see, pinned first then newest, with a plain-text excerpt each. With &#x60;read:explore&#x60; the viewer is the authorizing user, so a follower or investor sees the community- and investors-only posts the site shows them; with &#x60;read:public&#x60; it is the anonymous view. Same query as the tab (&#x60;FeedItem.viewable_by&#x60;); investments, Q&amp;A threads, and investor quotes belong to other tabs and are not here. Fetch one post in full with &#x60;GET /companies/{id}/updates/{update_id}&#x60;. Posts are the issuer&#39;s own words.
464
+ # @param id [String]
465
+ # @param [Hash] opts the optional parameters
466
+ # @option opts [String] :cursor
467
+ # @option opts [Integer] :per_page (default to 20)
468
+ # @return [Array<(CompanyUpdateListEnvelope, Integer, Hash)>] CompanyUpdateListEnvelope data, response status code and response headers
469
+ def list_company_updates_with_http_info(id, opts = {})
470
+ if @api_client.config.debugging
471
+ @api_client.config.logger.debug 'Calling API: ExploreApi.list_company_updates ...'
472
+ end
473
+ # verify the required parameter 'id' is set
474
+ if @api_client.config.client_side_validation && id.nil?
475
+ fail ArgumentError, "Missing the required parameter 'id' when calling ExploreApi.list_company_updates"
476
+ end
477
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 50
478
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling ExploreApi.list_company_updates, must be smaller than or equal to 50.'
479
+ end
480
+
481
+ # resource path
482
+ local_var_path = '/companies/{id}/updates'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
483
+
484
+ # query parameters
485
+ query_params = opts[:query_params] || {}
486
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
487
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
488
+
489
+ # header parameters
490
+ header_params = opts[:header_params] || {}
491
+ # HTTP header 'Accept' (if needed)
492
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
493
+
494
+ # form parameters
495
+ form_params = opts[:form_params] || {}
496
+
497
+ # http body (model)
498
+ post_body = opts[:debug_body]
499
+
500
+ # return_type
501
+ return_type = opts[:debug_return_type] || 'CompanyUpdateListEnvelope'
502
+
503
+ # auth_names
504
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
505
+
506
+ new_options = opts.merge(
507
+ :operation => :"ExploreApi.list_company_updates",
508
+ :header_params => header_params,
509
+ :query_params => query_params,
510
+ :form_params => form_params,
511
+ :body => post_body,
512
+ :auth_names => auth_names,
513
+ :return_type => return_type
514
+ )
515
+
516
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
517
+ if @api_client.config.debugging
518
+ @api_client.config.logger.debug "API called: ExploreApi#list_company_updates\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
519
+ end
520
+ return data, status_code, headers
521
+ end
522
+
523
+ # List public offerings
524
+ # Returns the offerings shown on wefunder.com/explore — the curated set of companies that meet Wefunder's discoverability bar (a soft-confirmed traction threshold plus approval), **one offering per company**. An \"offering\" is a fundraise, addressed by its id (`ofr_...`). **Public view (`read:public`).** Reachable with either a server-side (client_credentials) token or a user access token. Private rounds (e.g. Reg D 506(b)) are never listed, and low-traction or unapproved companies are excluded — exactly as they are on the website for a logged-out visitor. **Logged-in view (`read:explore`).** A user access token carrying `read:explore` gets what *that user* sees on wefunder.com/explore: the public offerings plus any the user qualifies for (accredited-only / Vault deals, invited private rounds), each checked against the same visibility policy the website applies. The response is a strict superset of the public one — same fields and ids — with two extra attributes, `publicly_visible` and `invested`, and `meta.personalized: true`. A server-side key can never hold `read:explore`; a token with `read:explore` but no resolvable user gets the public view. Order with `sort` (default: most raised); paginate with `cursor`. `meta.total_count` is the number of offerings across all pages, after filters. **Filters** are objective, per-offering terms — exemption family, security type, TTW vs. live, minimum investment ceiling, close date, amount raised floor. The response echoes the applied set in `meta.filters`. An out-of-vocabulary value is a `400` naming the accepted values. There are deliberately no relevance, quality, or ranking criteria. Use this endpoint to: - Discover and monitor active deals - Build deal aggregators and public listings
525
+ # @param [Hash] opts the optional parameters
526
+ # @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.
527
+ # @option opts [String] :sort Result ordering: - &#x60;most_raised&#x60; (default) — highest amount raised first - &#x60;closing_soon&#x60; — soonest funding close first - &#x60;newest&#x60; — most recently launched first - &#x60;most_investors&#x60; — highest investor count first (default to 'most_raised')
528
+ # @option opts [String] :exemption Only offerings under this SEC exemption family. Reg CF and Reg D are the supported public filters.
529
+ # @option opts [String] :security Only offerings issuing this kind of security — the &#x60;security.type&#x60; value on results.
530
+ # @option opts [Boolean] :testing_the_waters &#x60;false&#x60; — only live rounds accepting investments; &#x60;true&#x60; — only Testing-the-Waters rounds collecting non-binding reservations.
531
+ # @option opts [Float] :max_min_investment Only offerings whose minimum investment is at most this amount (USD).
532
+ # @option opts [Date] :closing_before Only offerings whose funding close date is on or before this date (ISO 8601). Offerings with no close date are excluded.
533
+ # @option opts [Float] :min_amount_raised Only offerings that have raised at least this amount so far (USD).
534
+ # @option opts [Array<String>] :industry Only companies tagged with any of these industries — the curated tags the wefunder.com explore page filters by (see each offering&#39;s &#x60;industries&#x60;). One value or a comma-separated list; unknown values are a 400 listing the vocabulary. Objective facets, not a ranking.
535
+ # @option opts [Array<String>] :business_model Only companies with any of these business models (see each offering&#39;s &#x60;business_models&#x60;). One value or a comma-separated list.
536
+ # @option opts [Boolean] :followed **Logged-in view only** (&#x60;read:explore&#x60; with a user). &#x60;true&#x60; — only companies the authorizing user follows on wefunder.com (their watchlist); &#x60;false&#x60; — only companies they do not follow. A 400 on the public view, which has no user to filter by.
537
+ # @return [OfferingListEnvelope]
538
+ def list_offerings(opts = {})
539
+ data, _status_code, _headers = list_offerings_with_http_info(opts)
540
+ data
541
+ end
542
+
543
+ # List public offerings
544
+ # Returns the offerings shown on wefunder.com/explore — the curated set of companies that meet Wefunder&#39;s discoverability bar (a soft-confirmed traction threshold plus approval), **one offering per company**. An \&quot;offering\&quot; is a fundraise, addressed by its id (&#x60;ofr_...&#x60;). **Public view (&#x60;read:public&#x60;).** Reachable with either a server-side (client_credentials) token or a user access token. Private rounds (e.g. Reg D 506(b)) are never listed, and low-traction or unapproved companies are excluded — exactly as they are on the website for a logged-out visitor. **Logged-in view (&#x60;read:explore&#x60;).** A user access token carrying &#x60;read:explore&#x60; gets what *that user* sees on wefunder.com/explore: the public offerings plus any the user qualifies for (accredited-only / Vault deals, invited private rounds), each checked against the same visibility policy the website applies. The response is a strict superset of the public one — same fields and ids — with two extra attributes, &#x60;publicly_visible&#x60; and &#x60;invested&#x60;, and &#x60;meta.personalized: true&#x60;. A server-side key can never hold &#x60;read:explore&#x60;; a token with &#x60;read:explore&#x60; but no resolvable user gets the public view. Order with &#x60;sort&#x60; (default: most raised); paginate with &#x60;cursor&#x60;. &#x60;meta.total_count&#x60; is the number of offerings across all pages, after filters. **Filters** are objective, per-offering terms — exemption family, security type, TTW vs. live, minimum investment ceiling, close date, amount raised floor. The response echoes the applied set in &#x60;meta.filters&#x60;. An out-of-vocabulary value is a &#x60;400&#x60; naming the accepted values. There are deliberately no relevance, quality, or ranking criteria. Use this endpoint to: - Discover and monitor active deals - Build deal aggregators and public listings
545
+ # @param [Hash] opts the optional parameters
546
+ # @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.
547
+ # @option opts [String] :sort Result ordering: - &#x60;most_raised&#x60; (default) — highest amount raised first - &#x60;closing_soon&#x60; — soonest funding close first - &#x60;newest&#x60; — most recently launched first - &#x60;most_investors&#x60; — highest investor count first (default to 'most_raised')
548
+ # @option opts [String] :exemption Only offerings under this SEC exemption family. Reg CF and Reg D are the supported public filters.
549
+ # @option opts [String] :security Only offerings issuing this kind of security — the &#x60;security.type&#x60; value on results.
550
+ # @option opts [Boolean] :testing_the_waters &#x60;false&#x60; — only live rounds accepting investments; &#x60;true&#x60; — only Testing-the-Waters rounds collecting non-binding reservations.
551
+ # @option opts [Float] :max_min_investment Only offerings whose minimum investment is at most this amount (USD).
552
+ # @option opts [Date] :closing_before Only offerings whose funding close date is on or before this date (ISO 8601). Offerings with no close date are excluded.
553
+ # @option opts [Float] :min_amount_raised Only offerings that have raised at least this amount so far (USD).
554
+ # @option opts [Array<String>] :industry Only companies tagged with any of these industries — the curated tags the wefunder.com explore page filters by (see each offering&#39;s &#x60;industries&#x60;). One value or a comma-separated list; unknown values are a 400 listing the vocabulary. Objective facets, not a ranking.
555
+ # @option opts [Array<String>] :business_model Only companies with any of these business models (see each offering&#39;s &#x60;business_models&#x60;). One value or a comma-separated list.
556
+ # @option opts [Boolean] :followed **Logged-in view only** (&#x60;read:explore&#x60; with a user). &#x60;true&#x60; — only companies the authorizing user follows on wefunder.com (their watchlist); &#x60;false&#x60; — only companies they do not follow. A 400 on the public view, which has no user to filter by.
557
+ # @return [Array<(OfferingListEnvelope, Integer, Hash)>] OfferingListEnvelope data, response status code and response headers
558
+ def list_offerings_with_http_info(opts = {})
559
+ if @api_client.config.debugging
560
+ @api_client.config.logger.debug 'Calling API: ExploreApi.list_offerings ...'
561
+ end
562
+ allowable_values = ["most_raised", "closing_soon", "newest", "most_investors"]
563
+ if @api_client.config.client_side_validation && opts[:'sort'] && !allowable_values.include?(opts[:'sort'])
564
+ fail ArgumentError, "invalid value for \"sort\", must be one of #{allowable_values}"
565
+ end
566
+ allowable_values = ["reg_cf", "reg_d"]
567
+ if @api_client.config.client_side_validation && opts[:'exemption'] && !allowable_values.include?(opts[:'exemption'])
568
+ fail ArgumentError, "invalid value for \"exemption\", must be one of #{allowable_values}"
569
+ end
570
+ allowable_values = ["safe", "equity", "convertible_note", "revenue_share", "debt", "fund", "other"]
571
+ if @api_client.config.client_side_validation && opts[:'security'] && !allowable_values.include?(opts[:'security'])
572
+ fail ArgumentError, "invalid value for \"security\", must be one of #{allowable_values}"
573
+ end
574
+ allowable_values = ["ar_and_vr", "agriculture_and_agtech", "artificial_intelligence", "biotech", "blockchain_and_web3", "edtech", "energy", "fintech_and_finance", "food_tech", "games", "health_and_fitness", "healthcare", "manufacturing", "mobile_apps", "robotics", "science_and_r_and_d", "transportation", "travel_and_tourism", "bars_and_clubs", "brewery", "cafe_and_food_truck", "events_and_festivals", "education", "distillery_and_vineyards", "fashion", "film", "media", "music", "restaurant", "sports", "real_estate", "pets", "recreation", "infrastructure_and_construction", "childcare", "sustainability", "sports_tech", "home_tech", "devtools", "clean_tech", "beauty", "entertainment", "technology", "brick_and_mortar", "food_and_beverage", "climate_change", "alcohol_and_vice", "consumer_goods", "hardware", "moonshots"]
575
+ if @api_client.config.client_side_validation && opts[:'industry'] && !opts[:'industry'].all? { |item| allowable_values.include?(item) }
576
+ fail ArgumentError, "invalid value for \"industry\", must include one of #{allowable_values}"
577
+ end
578
+ allowable_values = ["b2b", "b2c", "subscription", "saas", "service", "marketplace", "ecommerce", "retail"]
579
+ if @api_client.config.client_side_validation && opts[:'business_model'] && !opts[:'business_model'].all? { |item| allowable_values.include?(item) }
580
+ fail ArgumentError, "invalid value for \"business_model\", must include one of #{allowable_values}"
581
+ end
582
+ # resource path
583
+ local_var_path = '/explore'
584
+
585
+ # query parameters
586
+ query_params = opts[:query_params] || {}
587
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
588
+ query_params[:'sort'] = opts[:'sort'] if !opts[:'sort'].nil?
589
+ query_params[:'exemption'] = opts[:'exemption'] if !opts[:'exemption'].nil?
590
+ query_params[:'security'] = opts[:'security'] if !opts[:'security'].nil?
591
+ query_params[:'testing_the_waters'] = opts[:'testing_the_waters'] if !opts[:'testing_the_waters'].nil?
592
+ query_params[:'max_min_investment'] = opts[:'max_min_investment'] if !opts[:'max_min_investment'].nil?
593
+ query_params[:'closing_before'] = opts[:'closing_before'] if !opts[:'closing_before'].nil?
594
+ query_params[:'min_amount_raised'] = opts[:'min_amount_raised'] if !opts[:'min_amount_raised'].nil?
595
+ query_params[:'industry'] = @api_client.build_collection_param(opts[:'industry'], :csv) if !opts[:'industry'].nil?
596
+ query_params[:'business_model'] = @api_client.build_collection_param(opts[:'business_model'], :csv) if !opts[:'business_model'].nil?
597
+ query_params[:'followed'] = opts[:'followed'] if !opts[:'followed'].nil?
598
+
599
+ # header parameters
600
+ header_params = opts[:header_params] || {}
601
+ # HTTP header 'Accept' (if needed)
602
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
603
+
604
+ # form parameters
605
+ form_params = opts[:form_params] || {}
606
+
607
+ # http body (model)
608
+ post_body = opts[:debug_body]
609
+
610
+ # return_type
611
+ return_type = opts[:debug_return_type] || 'OfferingListEnvelope'
612
+
613
+ # auth_names
614
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
615
+
616
+ new_options = opts.merge(
617
+ :operation => :"ExploreApi.list_offerings",
618
+ :header_params => header_params,
619
+ :query_params => query_params,
620
+ :form_params => form_params,
621
+ :body => post_body,
622
+ :auth_names => auth_names,
623
+ :return_type => return_type
624
+ )
625
+
626
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
627
+ if @api_client.config.debugging
628
+ @api_client.config.logger.debug "API called: ExploreApi#list_offerings\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
629
+ end
630
+ return data, status_code, headers
631
+ end
632
+ end
633
+ end