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,166 @@
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 PortfolioApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
21
+ end
22
+ # Get portfolio summary
23
+ # Returns totals across the authenticated investor's portfolio: cost basis, current value, realized and unrealized gains, and per-status position counts. Accepts the same `status` and `company` filters as `GET /portfolio/positions` to total a slice of the portfolio, such as only exited positions. Requires a user-authorized token. App-only (client credentials) tokens receive 403. Portfolio values are recalculated periodically rather than on each request, so recent investments and valuation changes can take a few minutes to appear. `as_of` is the timestamp of the oldest calculation included in the response. Monetary values are **integer cents**; per-share prices and return multiples are **decimal strings**.
24
+ # @param [Hash] opts the optional parameters
25
+ # @option opts [String] :status Total only positions with this status.
26
+ # @option opts [String] :company Total only positions in this company, by its id (`co_...`). Unknown ids return 404.
27
+ # @return [PortfolioSummaryEnvelope]
28
+ def get_portfolio(opts = {})
29
+ data, _status_code, _headers = get_portfolio_with_http_info(opts)
30
+ data
31
+ end
32
+
33
+ # Get portfolio summary
34
+ # Returns totals across the authenticated investor's portfolio: cost basis, current value, realized and unrealized gains, and per-status position counts. Accepts the same `status` and `company` filters as `GET /portfolio/positions` to total a slice of the portfolio, such as only exited positions. Requires a user-authorized token. App-only (client credentials) tokens receive 403. Portfolio values are recalculated periodically rather than on each request, so recent investments and valuation changes can take a few minutes to appear. `as_of` is the timestamp of the oldest calculation included in the response. Monetary values are **integer cents**; per-share prices and return multiples are **decimal strings**.
35
+ # @param [Hash] opts the optional parameters
36
+ # @option opts [String] :status Total only positions with this status.
37
+ # @option opts [String] :company Total only positions in this company, by its id (`co_...`). Unknown ids return 404.
38
+ # @return [Array<(PortfolioSummaryEnvelope, Integer, Hash)>] PortfolioSummaryEnvelope data, response status code and response headers
39
+ def get_portfolio_with_http_info(opts = {})
40
+ if @api_client.config.debugging
41
+ @api_client.config.logger.debug 'Calling API: PortfolioApi.get_portfolio ...'
42
+ end
43
+ allowable_values = ["active", "exited", "sold", "failed"]
44
+ if @api_client.config.client_side_validation && opts[:'status'] && !allowable_values.include?(opts[:'status'])
45
+ fail ArgumentError, "invalid value for \"status\", must be one of #{allowable_values}"
46
+ end
47
+ # resource path
48
+ local_var_path = '/portfolio'
49
+
50
+ # query parameters
51
+ query_params = opts[:query_params] || {}
52
+ query_params[:'status'] = opts[:'status'] if !opts[:'status'].nil?
53
+ query_params[:'company'] = opts[:'company'] if !opts[:'company'].nil?
54
+
55
+ # header parameters
56
+ header_params = opts[:header_params] || {}
57
+ # HTTP header 'Accept' (if needed)
58
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
59
+
60
+ # form parameters
61
+ form_params = opts[:form_params] || {}
62
+
63
+ # http body (model)
64
+ post_body = opts[:debug_body]
65
+
66
+ # return_type
67
+ return_type = opts[:debug_return_type] || 'PortfolioSummaryEnvelope'
68
+
69
+ # auth_names
70
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
71
+
72
+ new_options = opts.merge(
73
+ :operation => :"PortfolioApi.get_portfolio",
74
+ :header_params => header_params,
75
+ :query_params => query_params,
76
+ :form_params => form_params,
77
+ :body => post_body,
78
+ :auth_names => auth_names,
79
+ :return_type => return_type
80
+ )
81
+
82
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
83
+ if @api_client.config.debugging
84
+ @api_client.config.logger.debug "API called: PortfolioApi#get_portfolio\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
85
+ end
86
+ return data, status_code, headers
87
+ end
88
+
89
+ # List portfolio positions
90
+ # Returns the authenticated investor's positions, one per offering (fundraise), newest first. Position totals cover everything the investor holds in that offering; `securities` breaks the total down by security offering and legal owner, so early bird tiers and personally-held vs entity-held stakes each appear separately. Fund and SPV positions identify the companies the vehicle invested in under `holdings`. To compute an average cost per share, divide `cost_basis_cents` by `shares_held`. Requires a user-authorized token, like `GET /portfolio`.
91
+ # @param [Hash] opts the optional parameters
92
+ # @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.
93
+ # @option opts [Integer] :per_page Page size, 1-100. Defaults to 25. (default to 25)
94
+ # @option opts [String] :status Filter positions by status.
95
+ # @option opts [String] :company Filter to a single company by its id (&#x60;co_...&#x60;). Unknown ids return 404.
96
+ # @return [PortfolioPositionListEnvelope]
97
+ def list_portfolio_positions(opts = {})
98
+ data, _status_code, _headers = list_portfolio_positions_with_http_info(opts)
99
+ data
100
+ end
101
+
102
+ # List portfolio positions
103
+ # Returns the authenticated investor&#39;s positions, one per offering (fundraise), newest first. Position totals cover everything the investor holds in that offering; &#x60;securities&#x60; breaks the total down by security offering and legal owner, so early bird tiers and personally-held vs entity-held stakes each appear separately. Fund and SPV positions identify the companies the vehicle invested in under &#x60;holdings&#x60;. To compute an average cost per share, divide &#x60;cost_basis_cents&#x60; by &#x60;shares_held&#x60;. Requires a user-authorized token, like &#x60;GET /portfolio&#x60;.
104
+ # @param [Hash] opts the optional parameters
105
+ # @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.
106
+ # @option opts [Integer] :per_page Page size, 1-100. Defaults to 25. (default to 25)
107
+ # @option opts [String] :status Filter positions by status.
108
+ # @option opts [String] :company Filter to a single company by its id (&#x60;co_...&#x60;). Unknown ids return 404.
109
+ # @return [Array<(PortfolioPositionListEnvelope, Integer, Hash)>] PortfolioPositionListEnvelope data, response status code and response headers
110
+ def list_portfolio_positions_with_http_info(opts = {})
111
+ if @api_client.config.debugging
112
+ @api_client.config.logger.debug 'Calling API: PortfolioApi.list_portfolio_positions ...'
113
+ end
114
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 100
115
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling PortfolioApi.list_portfolio_positions, must be smaller than or equal to 100.'
116
+ end
117
+
118
+ allowable_values = ["active", "exited", "sold", "failed"]
119
+ if @api_client.config.client_side_validation && opts[:'status'] && !allowable_values.include?(opts[:'status'])
120
+ fail ArgumentError, "invalid value for \"status\", must be one of #{allowable_values}"
121
+ end
122
+ # resource path
123
+ local_var_path = '/portfolio/positions'
124
+
125
+ # query parameters
126
+ query_params = opts[:query_params] || {}
127
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
128
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
129
+ query_params[:'status'] = opts[:'status'] if !opts[:'status'].nil?
130
+ query_params[:'company'] = opts[:'company'] if !opts[:'company'].nil?
131
+
132
+ # header parameters
133
+ header_params = opts[:header_params] || {}
134
+ # HTTP header 'Accept' (if needed)
135
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
136
+
137
+ # form parameters
138
+ form_params = opts[:form_params] || {}
139
+
140
+ # http body (model)
141
+ post_body = opts[:debug_body]
142
+
143
+ # return_type
144
+ return_type = opts[:debug_return_type] || 'PortfolioPositionListEnvelope'
145
+
146
+ # auth_names
147
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
148
+
149
+ new_options = opts.merge(
150
+ :operation => :"PortfolioApi.list_portfolio_positions",
151
+ :header_params => header_params,
152
+ :query_params => query_params,
153
+ :form_params => form_params,
154
+ :body => post_body,
155
+ :auth_names => auth_names,
156
+ :return_type => return_type
157
+ )
158
+
159
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
160
+ if @api_client.config.debugging
161
+ @api_client.config.logger.debug "API called: PortfolioApi#list_portfolio_positions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
162
+ end
163
+ return data, status_code, headers
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,381 @@
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 SyndicateDealsApi
17
+ attr_accessor :api_client
18
+
19
+ def initialize(api_client = ApiClient.default)
20
+ @api_client = api_client
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
+ # Get deal details
161
+ # Returns full details for a specific deal including investor breakdown.
162
+ # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
163
+ # @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.
164
+ # @param [Hash] opts the optional parameters
165
+ # @return [SyndicateDealDetailEnvelope]
166
+ def get_syndicate_deal(syndicate_id, fundraise_id, opts = {})
167
+ data, _status_code, _headers = get_syndicate_deal_with_http_info(syndicate_id, fundraise_id, opts)
168
+ data
169
+ end
170
+
171
+ # Get deal details
172
+ # Returns full details for a specific deal including investor breakdown.
173
+ # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
174
+ # @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.
175
+ # @param [Hash] opts the optional parameters
176
+ # @return [Array<(SyndicateDealDetailEnvelope, Integer, Hash)>] SyndicateDealDetailEnvelope data, response status code and response headers
177
+ def get_syndicate_deal_with_http_info(syndicate_id, fundraise_id, opts = {})
178
+ if @api_client.config.debugging
179
+ @api_client.config.logger.debug 'Calling API: SyndicateDealsApi.get_syndicate_deal ...'
180
+ end
181
+ # verify the required parameter 'syndicate_id' is set
182
+ if @api_client.config.client_side_validation && syndicate_id.nil?
183
+ fail ArgumentError, "Missing the required parameter 'syndicate_id' when calling SyndicateDealsApi.get_syndicate_deal"
184
+ end
185
+ # verify the required parameter 'fundraise_id' is set
186
+ if @api_client.config.client_side_validation && fundraise_id.nil?
187
+ fail ArgumentError, "Missing the required parameter 'fundraise_id' when calling SyndicateDealsApi.get_syndicate_deal"
188
+ end
189
+ # resource path
190
+ local_var_path = '/syndicates/{syndicate_id}/deals/{fundraise_id}'.sub('{' + 'syndicate_id' + '}', CGI.escape(syndicate_id.to_s)).sub('{' + 'fundraise_id' + '}', CGI.escape(fundraise_id.to_s))
191
+
192
+ # query parameters
193
+ query_params = opts[:query_params] || {}
194
+
195
+ # header parameters
196
+ header_params = opts[:header_params] || {}
197
+ # HTTP header 'Accept' (if needed)
198
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
199
+
200
+ # form parameters
201
+ form_params = opts[:form_params] || {}
202
+
203
+ # http body (model)
204
+ post_body = opts[:debug_body]
205
+
206
+ # return_type
207
+ return_type = opts[:debug_return_type] || 'SyndicateDealDetailEnvelope'
208
+
209
+ # auth_names
210
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
211
+
212
+ new_options = opts.merge(
213
+ :operation => :"SyndicateDealsApi.get_syndicate_deal",
214
+ :header_params => header_params,
215
+ :query_params => query_params,
216
+ :form_params => form_params,
217
+ :body => post_body,
218
+ :auth_names => auth_names,
219
+ :return_type => return_type
220
+ )
221
+
222
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
223
+ if @api_client.config.debugging
224
+ @api_client.config.logger.debug "API called: SyndicateDealsApi#get_syndicate_deal\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
225
+ end
226
+ return data, status_code, headers
227
+ end
228
+
229
+ # List deal investors
230
+ # Returns syndicate members who invested in this deal. Results are scoped to syndicate member user IDs only and sorted by amount descending. **Manager/operator only.** Who invested how much is moderator data, as on the web deal pipeline page: an ordinary member, backer, or follower of the syndicate gets `403`, even with `read:syndicates`. Callers who pass that gate see `user_email`. `amount` is whole dollars as a string (e.g. `\"5000\"` is $5,000). Offset-paginated: pass `offset` and `per_page`; `meta` carries `total_count`, `offset`, `per_page`, and `has_more`. Without `per_page` the full list is returned.
231
+ # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
232
+ # @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.
233
+ # @param [Hash] opts the optional parameters
234
+ # @option opts [Integer] :offset Number of investors to skip. (default to 0)
235
+ # @option opts [Integer] :per_page Results per page, 1-200. Omit to return every investor.
236
+ # @return [DealInvestorListEnvelope]
237
+ def list_syndicate_deal_investors(syndicate_id, fundraise_id, opts = {})
238
+ data, _status_code, _headers = list_syndicate_deal_investors_with_http_info(syndicate_id, fundraise_id, opts)
239
+ data
240
+ end
241
+
242
+ # List deal investors
243
+ # Returns syndicate members who invested in this deal. Results are scoped to syndicate member user IDs only and sorted by amount descending. **Manager/operator only.** Who invested how much is moderator data, as on the web deal pipeline page: an ordinary member, backer, or follower of the syndicate gets &#x60;403&#x60;, even with &#x60;read:syndicates&#x60;. Callers who pass that gate see &#x60;user_email&#x60;. &#x60;amount&#x60; is whole dollars as a string (e.g. &#x60;\&quot;5000\&quot;&#x60; is $5,000). Offset-paginated: pass &#x60;offset&#x60; and &#x60;per_page&#x60;; &#x60;meta&#x60; carries &#x60;total_count&#x60;, &#x60;offset&#x60;, &#x60;per_page&#x60;, and &#x60;has_more&#x60;. Without &#x60;per_page&#x60; the full list is returned.
244
+ # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
245
+ # @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.
246
+ # @param [Hash] opts the optional parameters
247
+ # @option opts [Integer] :offset Number of investors to skip. (default to 0)
248
+ # @option opts [Integer] :per_page Results per page, 1-200. Omit to return every investor.
249
+ # @return [Array<(DealInvestorListEnvelope, Integer, Hash)>] DealInvestorListEnvelope data, response status code and response headers
250
+ def list_syndicate_deal_investors_with_http_info(syndicate_id, fundraise_id, opts = {})
251
+ if @api_client.config.debugging
252
+ @api_client.config.logger.debug 'Calling API: SyndicateDealsApi.list_syndicate_deal_investors ...'
253
+ end
254
+ # verify the required parameter 'syndicate_id' is set
255
+ if @api_client.config.client_side_validation && syndicate_id.nil?
256
+ fail ArgumentError, "Missing the required parameter 'syndicate_id' when calling SyndicateDealsApi.list_syndicate_deal_investors"
257
+ end
258
+ # verify the required parameter 'fundraise_id' is set
259
+ if @api_client.config.client_side_validation && fundraise_id.nil?
260
+ fail ArgumentError, "Missing the required parameter 'fundraise_id' when calling SyndicateDealsApi.list_syndicate_deal_investors"
261
+ end
262
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 200
263
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling SyndicateDealsApi.list_syndicate_deal_investors, must be smaller than or equal to 200.'
264
+ end
265
+
266
+ # resource path
267
+ local_var_path = '/syndicates/{syndicate_id}/deals/{fundraise_id}/investors'.sub('{' + 'syndicate_id' + '}', CGI.escape(syndicate_id.to_s)).sub('{' + 'fundraise_id' + '}', CGI.escape(fundraise_id.to_s))
268
+
269
+ # query parameters
270
+ query_params = opts[:query_params] || {}
271
+ query_params[:'offset'] = opts[:'offset'] if !opts[:'offset'].nil?
272
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
273
+
274
+ # header parameters
275
+ header_params = opts[:header_params] || {}
276
+ # HTTP header 'Accept' (if needed)
277
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
278
+
279
+ # form parameters
280
+ form_params = opts[:form_params] || {}
281
+
282
+ # http body (model)
283
+ post_body = opts[:debug_body]
284
+
285
+ # return_type
286
+ return_type = opts[:debug_return_type] || 'DealInvestorListEnvelope'
287
+
288
+ # auth_names
289
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
290
+
291
+ new_options = opts.merge(
292
+ :operation => :"SyndicateDealsApi.list_syndicate_deal_investors",
293
+ :header_params => header_params,
294
+ :query_params => query_params,
295
+ :form_params => form_params,
296
+ :body => post_body,
297
+ :auth_names => auth_names,
298
+ :return_type => return_type
299
+ )
300
+
301
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
302
+ if @api_client.config.debugging
303
+ @api_client.config.logger.debug "API called: SyndicateDealsApi#list_syndicate_deal_investors\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
304
+ end
305
+ return data, status_code, headers
306
+ end
307
+
308
+ # 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.
310
+ # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
311
+ # @param [Hash] opts the optional parameters
312
+ # @option opts [String] :cursor Opaque cursor from the previous response&#39;s &#x60;meta.next_cursor&#x60;.
313
+ # @option opts [Integer] :per_page Results per page, 1-100. Defaults to 25. (default to 25)
314
+ # @return [SyndicateDealListEnvelope]
315
+ def list_syndicate_deals(syndicate_id, opts = {})
316
+ data, _status_code, _headers = list_syndicate_deals_with_http_info(syndicate_id, opts)
317
+ data
318
+ end
319
+
320
+ # 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.
322
+ # @param syndicate_id [String] The syndicate&#39;s id (&#x60;syn_...&#x60;).
323
+ # @param [Hash] opts the optional parameters
324
+ # @option opts [String] :cursor Opaque cursor from the previous response&#39;s &#x60;meta.next_cursor&#x60;.
325
+ # @option opts [Integer] :per_page Results per page, 1-100. Defaults to 25. (default to 25)
326
+ # @return [Array<(SyndicateDealListEnvelope, Integer, Hash)>] SyndicateDealListEnvelope data, response status code and response headers
327
+ def list_syndicate_deals_with_http_info(syndicate_id, opts = {})
328
+ if @api_client.config.debugging
329
+ @api_client.config.logger.debug 'Calling API: SyndicateDealsApi.list_syndicate_deals ...'
330
+ end
331
+ # verify the required parameter 'syndicate_id' is set
332
+ if @api_client.config.client_side_validation && syndicate_id.nil?
333
+ fail ArgumentError, "Missing the required parameter 'syndicate_id' when calling SyndicateDealsApi.list_syndicate_deals"
334
+ end
335
+ if @api_client.config.client_side_validation && !opts[:'per_page'].nil? && opts[:'per_page'] > 100
336
+ fail ArgumentError, 'invalid value for "opts[:"per_page"]" when calling SyndicateDealsApi.list_syndicate_deals, must be smaller than or equal to 100.'
337
+ end
338
+
339
+ # resource path
340
+ local_var_path = '/syndicates/{syndicate_id}/deals'.sub('{' + 'syndicate_id' + '}', CGI.escape(syndicate_id.to_s))
341
+
342
+ # query parameters
343
+ query_params = opts[:query_params] || {}
344
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
345
+ query_params[:'per_page'] = opts[:'per_page'] if !opts[:'per_page'].nil?
346
+
347
+ # header parameters
348
+ header_params = opts[:header_params] || {}
349
+ # HTTP header 'Accept' (if needed)
350
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
351
+
352
+ # form parameters
353
+ form_params = opts[:form_params] || {}
354
+
355
+ # http body (model)
356
+ post_body = opts[:debug_body]
357
+
358
+ # return_type
359
+ return_type = opts[:debug_return_type] || 'SyndicateDealListEnvelope'
360
+
361
+ # auth_names
362
+ auth_names = opts[:debug_auth_names] || ['bearerAuth', 'bearerAuth']
363
+
364
+ new_options = opts.merge(
365
+ :operation => :"SyndicateDealsApi.list_syndicate_deals",
366
+ :header_params => header_params,
367
+ :query_params => query_params,
368
+ :form_params => form_params,
369
+ :body => post_body,
370
+ :auth_names => auth_names,
371
+ :return_type => return_type
372
+ )
373
+
374
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
375
+ if @api_client.config.debugging
376
+ @api_client.config.logger.debug "API called: SyndicateDealsApi#list_syndicate_deals\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
377
+ end
378
+ return data, status_code, headers
379
+ end
380
+ end
381
+ end