growsurf-python 1.1.2__tar.gz → 1.2.0__tar.gz

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 (175) hide show
  1. growsurf_python-1.2.0/.release-please-manifest.json +3 -0
  2. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/CHANGELOG.md +7 -0
  3. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/PKG-INFO +1 -1
  4. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/api.md +25 -8
  5. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/pyproject.toml +1 -1
  6. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_client.py +45 -8
  7. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_version.py +1 -1
  8. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/__init__.py +14 -0
  9. growsurf_python-1.2.0/src/growsurf/resources/account.py +185 -0
  10. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/campaign.py +2 -2
  11. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/participant.py +4 -4
  12. growsurf_python-1.2.0/src/growsurf/resources/team.py +323 -0
  13. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/__init__.py +2 -2
  14. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/create_account_response.py +8 -6
  15. growsurf_python-1.1.2/src/growsurf/types/account.py → growsurf_python-1.2.0/src/growsurf/types/team.py +6 -17
  16. growsurf_python-1.2.0/src/growsurf/types/team_update_params.py +10 -0
  17. growsurf_python-1.2.0/tests/api_resources/test_account.py +153 -0
  18. growsurf_python-1.2.0/tests/api_resources/test_team_contract.py +60 -0
  19. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_client.py +17 -13
  20. growsurf_python-1.1.2/.release-please-manifest.json +0 -3
  21. growsurf_python-1.1.2/src/growsurf/resources/account.py +0 -572
  22. growsurf_python-1.1.2/src/growsurf/types/account_update_params.py +0 -17
  23. growsurf_python-1.1.2/tests/api_resources/test_account.py +0 -419
  24. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/.gitignore +0 -0
  25. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/CONTRIBUTING.md +0 -0
  26. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/LICENSE +0 -0
  27. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/README.md +0 -0
  28. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/SECURITY.md +0 -0
  29. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/bin/check-release-environment +0 -0
  30. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/bin/publish-pypi +0 -0
  31. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/examples/.keep +0 -0
  32. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/release-please-config.json +0 -0
  33. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/requirements-dev.lock +0 -0
  34. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/__init__.py +0 -0
  35. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_base_client.py +0 -0
  36. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_compat.py +0 -0
  37. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_constants.py +0 -0
  38. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_exceptions.py +0 -0
  39. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_files.py +0 -0
  40. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_models.py +0 -0
  41. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_qs.py +0 -0
  42. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_resource.py +0 -0
  43. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_response.py +0 -0
  44. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_streaming.py +0 -0
  45. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_types.py +0 -0
  46. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/__init__.py +0 -0
  47. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_compat.py +0 -0
  48. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
  49. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_json.py +0 -0
  50. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_logs.py +0 -0
  51. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_path.py +0 -0
  52. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_proxy.py +0 -0
  53. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_reflection.py +0 -0
  54. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
  55. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_streams.py +0 -0
  56. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_sync.py +0 -0
  57. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_transform.py +0 -0
  58. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_typing.py +0 -0
  59. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/_utils/_utils.py +0 -0
  60. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/lib/.keep +0 -0
  61. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/py.typed +0 -0
  62. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/__init__.py +0 -0
  63. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/commission.py +0 -0
  64. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/design.py +0 -0
  65. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/emails.py +0 -0
  66. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/installation.py +0 -0
  67. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/options.py +0 -0
  68. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/reward.py +0 -0
  69. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/rewards.py +0 -0
  70. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/resources/campaign/webhooks.py +0 -0
  71. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/account_create_params.py +0 -0
  72. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/__init__.py +0 -0
  73. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/campaign.py +0 -0
  74. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/campaign_design.py +0 -0
  75. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/campaign_emails.py +0 -0
  76. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
  77. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/campaign_options.py +0 -0
  78. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
  79. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
  80. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
  81. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
  82. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
  83. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
  84. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
  85. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant.py +0 -0
  86. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
  87. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_add_params.py +0 -0
  88. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
  89. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
  90. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
  91. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
  92. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
  93. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_email_params.py +0 -0
  94. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
  95. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
  96. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
  97. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
  98. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
  99. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
  100. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
  101. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
  102. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
  103. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
  104. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_reward.py +0 -0
  105. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
  106. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
  107. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
  108. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
  109. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/participant_update_params.py +0 -0
  110. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/referral_source.py +0 -0
  111. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/referral_status.py +0 -0
  112. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward.py +0 -0
  113. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
  114. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
  115. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_create_params.py +0 -0
  116. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
  117. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
  118. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
  119. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/reward_update_params.py +0 -0
  120. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook.py +0 -0
  121. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
  122. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
  123. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
  124. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
  125. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
  126. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
  127. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +0 -0
  128. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
  129. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_create_params.py +0 -0
  130. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
  131. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
  132. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
  133. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
  134. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
  135. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_list_response.py +0 -0
  136. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
  137. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
  138. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/campaign_update_params.py +0 -0
  139. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/commission_structure.py +0 -0
  140. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/participant_commission_list.py +0 -0
  141. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/participant_list.py +0 -0
  142. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/participant_payout_list.py +0 -0
  143. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/referral_list.py +0 -0
  144. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
  145. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/src/growsurf/types/verification_email_response.py +0 -0
  146. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/__init__.py +0 -0
  147. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/__init__.py +0 -0
  148. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/__init__.py +0 -0
  149. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_commission.py +0 -0
  150. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_design.py +0 -0
  151. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_emails.py +0 -0
  152. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_installation.py +0 -0
  153. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_options.py +0 -0
  154. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_participant.py +0 -0
  155. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_reward.py +0 -0
  156. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_rewards.py +0 -0
  157. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
  158. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/api_resources/test_campaign.py +0 -0
  159. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/conftest.py +0 -0
  160. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/sample_file.txt +0 -0
  161. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_extract_files.py +0 -0
  162. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_files.py +0 -0
  163. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_models.py +0 -0
  164. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_qs.py +0 -0
  165. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_required_args.py +0 -0
  166. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_response.py +0 -0
  167. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_streaming.py +0 -0
  168. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_transform.py +0 -0
  169. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_utils/test_datetime_parse.py +0 -0
  170. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_utils/test_json.py +0 -0
  171. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_utils/test_path.py +0 -0
  172. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_utils/test_proxy.py +0 -0
  173. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/test_utils/test_typing.py +0 -0
  174. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/tests/utils.py +0 -0
  175. {growsurf_python-1.1.2 → growsurf_python-1.2.0}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.2.0"
3
+ }
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.2.0](https://github.com/growsurf/growsurf-python/compare/v1.1.2...v1.2.0) (2026-07-13)
4
+
5
+
6
+ ### Features
7
+
8
+ * **api:** add Team resource ([9efbfbd](https://github.com/growsurf/growsurf-python/commit/9efbfbdfec10336d473f9266a033d93c3e98bb9e))
9
+
3
10
  ## [1.1.2](https://github.com/growsurf/growsurf-python/compare/v1.1.1...v1.1.2) (2026-07-11)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: growsurf-python
3
- Version: 1.1.2
3
+ Version: 1.2.0
4
4
  Summary: The official Python library for the growsurf API
5
5
  Project-URL: Homepage, https://github.com/growsurf/growsurf-python
6
6
  Project-URL: Repository, https://github.com/growsurf/growsurf-python
@@ -4,8 +4,21 @@ Types:
4
4
 
5
5
  ```python
6
6
  from growsurf.types import (
7
- Account,
8
7
  CreateAccountResponse,
8
+ )
9
+ ```
10
+
11
+ Methods:
12
+
13
+ - <code title="post /accounts">client.account.<a href="./src/growsurf/resources/account.py">create</a>(\*\*<a href="src/growsurf/types/account_create_params.py">params</a>) -> <a href="./src/growsurf/types/create_account_response.py">CreateAccountResponse</a></code>
14
+
15
+ # Team
16
+
17
+ Types:
18
+
19
+ ```python
20
+ from growsurf.types import (
21
+ Team,
9
22
  RotateApiKeyResponse,
10
23
  VerificationEmailResponse,
11
24
  )
@@ -13,12 +26,11 @@ from growsurf.types import (
13
26
 
14
27
  Methods:
15
28
 
16
- - <code title="post /accounts">client.account.<a href="./src/growsurf/resources/account.py">create</a>(\*\*<a href="src/growsurf/types/account_create_params.py">params</a>) -> <a href="./src/growsurf/types/create_account_response.py">CreateAccountResponse</a></code>
17
- - <code title="get /account">client.account.<a href="./src/growsurf/resources/account.py">retrieve</a>() -> <a href="./src/growsurf/types/account.py">Account</a></code>
18
- - <code title="patch /account">client.account.<a href="./src/growsurf/resources/account.py">update</a>(\*\*<a href="src/growsurf/types/account_update_params.py">params</a>) -> <a href="./src/growsurf/types/account.py">Account</a></code>
19
- - <code title="post /account/api-key">client.account.<a href="./src/growsurf/resources/account.py">rotate_api_key</a>() -> <a href="./src/growsurf/types/rotate_api_key_response.py">RotateApiKeyResponse</a></code>
20
- - <code title="post /account/verification-request">client.account.<a href="./src/growsurf/resources/account.py">request_verification</a>() -> <a href="./src/growsurf/types/account.py">Account</a></code>
21
- - <code title="post /account/verification-email">client.account.<a href="./src/growsurf/resources/account.py">resend_verification_email</a>() -> <a href="./src/growsurf/types/verification_email_response.py">VerificationEmailResponse</a></code>
29
+ - <code title="get /team">client.team.<a href="./src/growsurf/resources/team.py">retrieve</a>() -> <a href="./src/growsurf/types/team.py">Team</a></code>
30
+ - <code title="patch /team">client.team.<a href="./src/growsurf/resources/team.py">update</a>(\*\*<a href="src/growsurf/types/team_update_params.py">params</a>) -> <a href="./src/growsurf/types/team.py">Team</a></code>
31
+ - <code title="post /api-key/rotate">client.team.<a href="./src/growsurf/resources/team.py">rotate_api_key</a>() -> <a href="./src/growsurf/types/rotate_api_key_response.py">RotateApiKeyResponse</a></code>
32
+ - <code title="post /team/verification-request">client.team.<a href="./src/growsurf/resources/team.py">request_verification</a>() -> <a href="./src/growsurf/types/team.py">Team</a></code>
33
+ - <code title="post /team/owner/verification-email">client.team.<a href="./src/growsurf/resources/team.py">resend_owner_verification_email</a>() -> <a href="./src/growsurf/types/verification_email_response.py">VerificationEmailResponse</a></code>
22
34
 
23
35
  # Campaign
24
36
 
@@ -134,7 +146,12 @@ Methods:
134
146
  Types:
135
147
 
136
148
  ```python
137
- from growsurf.types.campaign import Reward, RewardTaxValuation, CampaignRewardListResponse, DeleteRewardResponse
149
+ from growsurf.types.campaign import (
150
+ Reward,
151
+ RewardTaxValuation,
152
+ CampaignRewardListResponse,
153
+ DeleteRewardResponse,
154
+ )
138
155
  ```
139
156
 
140
157
  Methods:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "growsurf-python"
3
- version = "1.1.2"
3
+ version = "1.2.0"
4
4
  description = "The official Python library for the growsurf API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -28,7 +28,7 @@ from ._compat import cached_property
28
28
  from ._models import SecurityOptions
29
29
  from ._version import __version__
30
30
  from ._streaming import Stream as Stream, AsyncStream as AsyncStream
31
- from ._exceptions import GrowsurfError, APIStatusError
31
+ from ._exceptions import APIStatusError
32
32
  from ._base_client import (
33
33
  DEFAULT_MAX_RETRIES,
34
34
  SyncAPIClient,
@@ -36,7 +36,8 @@ from ._base_client import (
36
36
  )
37
37
 
38
38
  if TYPE_CHECKING:
39
- from .resources import account, campaign
39
+ from .resources import team, account, campaign
40
+ from .resources.team import TeamResource, AsyncTeamResource
40
41
  from .resources.account import AccountResource, AsyncAccountResource
41
42
  from .resources.campaign.campaign import CampaignResource, AsyncCampaignResource
42
43
 
@@ -86,9 +87,7 @@ class Growsurf(SyncAPIClient):
86
87
  if api_key is None:
87
88
  api_key = os.environ.get("GROWSURF_API_KEY")
88
89
  if api_key is None:
89
- raise GrowsurfError(
90
- "The api_key client option must be set either by passing api_key to the client or by setting the GROWSURF_API_KEY environment variable"
91
- )
90
+ api_key = ""
92
91
  self.api_key = api_key
93
92
 
94
93
  if base_url is None:
@@ -123,6 +122,12 @@ class Growsurf(SyncAPIClient):
123
122
 
124
123
  return AccountResource(self)
125
124
 
125
+ @cached_property
126
+ def team(self) -> TeamResource:
127
+ from .resources.team import TeamResource
128
+
129
+ return TeamResource(self)
130
+
126
131
  @cached_property
127
132
  def campaign(self) -> CampaignResource:
128
133
  from .resources.campaign import CampaignResource
@@ -153,6 +158,8 @@ class Growsurf(SyncAPIClient):
153
158
  @property
154
159
  def _api_key_auth(self) -> dict[str, str]:
155
160
  api_key = self.api_key
161
+ if not api_key:
162
+ return {}
156
163
  return {"Authorization": f"Bearer {api_key}"}
157
164
 
158
165
  @property
@@ -283,9 +290,7 @@ class AsyncGrowsurf(AsyncAPIClient):
283
290
  if api_key is None:
284
291
  api_key = os.environ.get("GROWSURF_API_KEY")
285
292
  if api_key is None:
286
- raise GrowsurfError(
287
- "The api_key client option must be set either by passing api_key to the client or by setting the GROWSURF_API_KEY environment variable"
288
- )
293
+ api_key = ""
289
294
  self.api_key = api_key
290
295
 
291
296
  if base_url is None:
@@ -320,6 +325,12 @@ class AsyncGrowsurf(AsyncAPIClient):
320
325
 
321
326
  return AsyncAccountResource(self)
322
327
 
328
+ @cached_property
329
+ def team(self) -> AsyncTeamResource:
330
+ from .resources.team import AsyncTeamResource
331
+
332
+ return AsyncTeamResource(self)
333
+
323
334
  @cached_property
324
335
  def campaign(self) -> AsyncCampaignResource:
325
336
  from .resources.campaign import AsyncCampaignResource
@@ -350,6 +361,8 @@ class AsyncGrowsurf(AsyncAPIClient):
350
361
  @property
351
362
  def _api_key_auth(self) -> dict[str, str]:
352
363
  api_key = self.api_key
364
+ if not api_key:
365
+ return {}
353
366
  return {"Authorization": f"Bearer {api_key}"}
354
367
 
355
368
  @property
@@ -458,6 +471,12 @@ class GrowsurfWithRawResponse:
458
471
 
459
472
  return AccountResourceWithRawResponse(self._client.account)
460
473
 
474
+ @cached_property
475
+ def team(self) -> team.TeamResourceWithRawResponse:
476
+ from .resources.team import TeamResourceWithRawResponse
477
+
478
+ return TeamResourceWithRawResponse(self._client.team)
479
+
461
480
  @cached_property
462
481
  def campaign(self) -> campaign.CampaignResourceWithRawResponse:
463
482
  from .resources.campaign import CampaignResourceWithRawResponse
@@ -477,6 +496,12 @@ class AsyncGrowsurfWithRawResponse:
477
496
 
478
497
  return AsyncAccountResourceWithRawResponse(self._client.account)
479
498
 
499
+ @cached_property
500
+ def team(self) -> team.AsyncTeamResourceWithRawResponse:
501
+ from .resources.team import AsyncTeamResourceWithRawResponse
502
+
503
+ return AsyncTeamResourceWithRawResponse(self._client.team)
504
+
480
505
  @cached_property
481
506
  def campaign(self) -> campaign.AsyncCampaignResourceWithRawResponse:
482
507
  from .resources.campaign import AsyncCampaignResourceWithRawResponse
@@ -496,6 +521,12 @@ class GrowsurfWithStreamedResponse:
496
521
 
497
522
  return AccountResourceWithStreamingResponse(self._client.account)
498
523
 
524
+ @cached_property
525
+ def team(self) -> team.TeamResourceWithStreamingResponse:
526
+ from .resources.team import TeamResourceWithStreamingResponse
527
+
528
+ return TeamResourceWithStreamingResponse(self._client.team)
529
+
499
530
  @cached_property
500
531
  def campaign(self) -> campaign.CampaignResourceWithStreamingResponse:
501
532
  from .resources.campaign import CampaignResourceWithStreamingResponse
@@ -515,6 +546,12 @@ class AsyncGrowsurfWithStreamedResponse:
515
546
 
516
547
  return AsyncAccountResourceWithStreamingResponse(self._client.account)
517
548
 
549
+ @cached_property
550
+ def team(self) -> team.AsyncTeamResourceWithStreamingResponse:
551
+ from .resources.team import AsyncTeamResourceWithStreamingResponse
552
+
553
+ return AsyncTeamResourceWithStreamingResponse(self._client.team)
554
+
518
555
  @cached_property
519
556
  def campaign(self) -> campaign.AsyncCampaignResourceWithStreamingResponse:
520
557
  from .resources.campaign import AsyncCampaignResourceWithStreamingResponse
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "growsurf"
4
- __version__ = "1.1.2" # x-release-please-version
4
+ __version__ = "1.2.0" # x-release-please-version
@@ -1,5 +1,13 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
+ from .team import (
4
+ TeamResource,
5
+ AsyncTeamResource,
6
+ TeamResourceWithRawResponse,
7
+ AsyncTeamResourceWithRawResponse,
8
+ TeamResourceWithStreamingResponse,
9
+ AsyncTeamResourceWithStreamingResponse,
10
+ )
3
11
  from .account import (
4
12
  AccountResource,
5
13
  AsyncAccountResource,
@@ -24,6 +32,12 @@ __all__ = [
24
32
  "AsyncAccountResourceWithRawResponse",
25
33
  "AccountResourceWithStreamingResponse",
26
34
  "AsyncAccountResourceWithStreamingResponse",
35
+ "TeamResource",
36
+ "AsyncTeamResource",
37
+ "TeamResourceWithRawResponse",
38
+ "AsyncTeamResourceWithRawResponse",
39
+ "TeamResourceWithStreamingResponse",
40
+ "AsyncTeamResourceWithStreamingResponse",
27
41
  "CampaignResource",
28
42
  "AsyncCampaignResource",
29
43
  "CampaignResourceWithRawResponse",
@@ -0,0 +1,185 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ import httpx
6
+
7
+ from ..types import account_create_params
8
+ from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
9
+ from .._utils import maybe_transform, async_maybe_transform
10
+ from .._compat import cached_property
11
+ from .._resource import SyncAPIResource, AsyncAPIResource
12
+ from .._response import (
13
+ to_raw_response_wrapper,
14
+ to_streamed_response_wrapper,
15
+ async_to_raw_response_wrapper,
16
+ async_to_streamed_response_wrapper,
17
+ )
18
+ from .._base_client import make_request_options
19
+ from ..types.create_account_response import CreateAccountResponse
20
+
21
+ __all__ = ["AccountResource", "AsyncAccountResource"]
22
+
23
+
24
+ class AccountResource(SyncAPIResource):
25
+ """Create a GrowSurf account and its initial API key."""
26
+
27
+ @cached_property
28
+ def with_raw_response(self) -> AccountResourceWithRawResponse:
29
+ """Return the raw response object instead of parsed content."""
30
+ return AccountResourceWithRawResponse(self)
31
+
32
+ @cached_property
33
+ def with_streaming_response(self) -> AccountResourceWithStreamingResponse:
34
+ """Stream the response instead of reading it eagerly."""
35
+ return AccountResourceWithStreamingResponse(self)
36
+
37
+ def create(
38
+ self,
39
+ *,
40
+ email: str,
41
+ company: str | Omit = omit,
42
+ first_name: str | Omit = omit,
43
+ last_name: str | Omit = omit,
44
+ extra_headers: Headers | None = None,
45
+ extra_query: Query | None = None,
46
+ extra_body: Body | None = None,
47
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
48
+ ) -> CreateAccountResponse:
49
+ """Create a GrowSurf account and return its one-time API key.
50
+
51
+ The key is locked until the team owner's email address is verified and rotates the
52
+ first time the account owner signs in to the GrowSurf dashboard. Accounts whose
53
+ email is never verified are deleted automatically after 7 days.
54
+
55
+ Args:
56
+ email: The email address for the new GrowSurf account. Personal emails and disposable email addresses are not accepted.
57
+
58
+ company: Company name for the new account.
59
+
60
+ first_name: First name for the new account owner.
61
+
62
+ last_name: Last name for the new account owner.
63
+
64
+ extra_headers: Send extra headers
65
+
66
+ extra_query: Add additional query parameters to the request
67
+
68
+ extra_body: Add additional JSON properties to the request
69
+
70
+ timeout: Override the client-level default timeout for this request, in seconds
71
+ """
72
+ return self._post(
73
+ "/accounts",
74
+ body=maybe_transform(
75
+ {
76
+ "email": email,
77
+ "company": company,
78
+ "first_name": first_name,
79
+ "last_name": last_name,
80
+ },
81
+ account_create_params.AccountCreateParams,
82
+ ),
83
+ options=make_request_options(
84
+ extra_headers=extra_headers,
85
+ extra_query=extra_query,
86
+ extra_body=extra_body,
87
+ timeout=timeout,
88
+ security={"api_key_auth": False},
89
+ ),
90
+ cast_to=CreateAccountResponse,
91
+ )
92
+
93
+
94
+ class AsyncAccountResource(AsyncAPIResource):
95
+ """Create a GrowSurf account and its initial API key."""
96
+
97
+ @cached_property
98
+ def with_raw_response(self) -> AsyncAccountResourceWithRawResponse:
99
+ """Return the raw response object instead of parsed content."""
100
+ return AsyncAccountResourceWithRawResponse(self)
101
+
102
+ @cached_property
103
+ def with_streaming_response(self) -> AsyncAccountResourceWithStreamingResponse:
104
+ """Stream the response instead of reading it eagerly."""
105
+ return AsyncAccountResourceWithStreamingResponse(self)
106
+
107
+ async def create(
108
+ self,
109
+ *,
110
+ email: str,
111
+ company: str | Omit = omit,
112
+ first_name: str | Omit = omit,
113
+ last_name: str | Omit = omit,
114
+ extra_headers: Headers | None = None,
115
+ extra_query: Query | None = None,
116
+ extra_body: Body | None = None,
117
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
118
+ ) -> CreateAccountResponse:
119
+ """Create a GrowSurf account and return its one-time API key.
120
+
121
+ The key is locked until the team owner's email address is verified and rotates the
122
+ first time the account owner signs in to the GrowSurf dashboard. Accounts whose
123
+ email is never verified are deleted automatically after 7 days.
124
+
125
+ Args:
126
+ email: The email address for the new GrowSurf account. Personal emails and disposable email addresses are not accepted.
127
+
128
+ company: Company name for the new account.
129
+
130
+ first_name: First name for the new account owner.
131
+
132
+ last_name: Last name for the new account owner.
133
+
134
+ extra_headers: Send extra headers
135
+
136
+ extra_query: Add additional query parameters to the request
137
+
138
+ extra_body: Add additional JSON properties to the request
139
+
140
+ timeout: Override the client-level default timeout for this request, in seconds
141
+ """
142
+ return await self._post(
143
+ "/accounts",
144
+ body=await async_maybe_transform(
145
+ {
146
+ "email": email,
147
+ "company": company,
148
+ "first_name": first_name,
149
+ "last_name": last_name,
150
+ },
151
+ account_create_params.AccountCreateParams,
152
+ ),
153
+ options=make_request_options(
154
+ extra_headers=extra_headers,
155
+ extra_query=extra_query,
156
+ extra_body=extra_body,
157
+ timeout=timeout,
158
+ security={"api_key_auth": False},
159
+ ),
160
+ cast_to=CreateAccountResponse,
161
+ )
162
+
163
+
164
+ class AccountResourceWithRawResponse:
165
+ def __init__(self, account: AccountResource) -> None:
166
+ self._account = account
167
+ self.create = to_raw_response_wrapper(account.create)
168
+
169
+
170
+ class AsyncAccountResourceWithRawResponse:
171
+ def __init__(self, account: AsyncAccountResource) -> None:
172
+ self._account = account
173
+ self.create = async_to_raw_response_wrapper(account.create)
174
+
175
+
176
+ class AccountResourceWithStreamingResponse:
177
+ def __init__(self, account: AccountResource) -> None:
178
+ self._account = account
179
+ self.create = to_streamed_response_wrapper(account.create)
180
+
181
+
182
+ class AsyncAccountResourceWithStreamingResponse:
183
+ def __init__(self, account: AsyncAccountResource) -> None:
184
+ self._account = account
185
+ self.create = async_to_streamed_response_wrapper(account.create)
@@ -198,7 +198,7 @@ class CampaignResource(SyncAPIResource):
198
198
  """
199
199
  Creates a new program pre-populated with type-appropriate defaults, plus any
200
200
  optional inline rewards. The new program is created in `DRAFT` status and owned
201
- by the API key's account. Requires a verified account email.
201
+ by the API key's bound team. Requires the team owner's verified email.
202
202
 
203
203
  Args:
204
204
  type: The program type. Immutable after creation.
@@ -900,7 +900,7 @@ class AsyncCampaignResource(AsyncAPIResource):
900
900
  """
901
901
  Creates a new program pre-populated with type-appropriate defaults, plus any
902
902
  optional inline rewards. The new program is created in `DRAFT` status and owned
903
- by the API key's account. Requires a verified account email.
903
+ by the API key's bound team. Requires the team owner's verified email.
904
904
 
905
905
  Args:
906
906
  type: The program type. Immutable after creation.
@@ -980,8 +980,8 @@ class ParticipantResource(SyncAPIResource):
980
980
  the program's configured email templates, OR ``subject`` + ``body`` for a
981
981
  free-form email. Free-form emails are sent with the same compliance handling
982
982
  (company name, postal address, and an unsubscribe link are added automatically,
983
- and unsubscribed participants are suppressed). Sending requires the account to be
984
- verified by the GrowSurf team. Requires a verified custom email domain on the
983
+ and unsubscribed participants are suppressed). Sending requires the team to be
984
+ verified by GrowSurf. Requires a verified custom email domain on the
985
985
  program (set up in Campaign Editor > 3. Emails > Email Settings). Returns `400`
986
986
  until one is verified. The email is accepted for delivery.
987
987
 
@@ -2099,8 +2099,8 @@ class AsyncParticipantResource(AsyncAPIResource):
2099
2099
  the program's configured email templates, OR ``subject`` + ``body`` for a
2100
2100
  free-form email. Free-form emails are sent with the same compliance handling
2101
2101
  (company name, postal address, and an unsubscribe link are added automatically,
2102
- and unsubscribed participants are suppressed). Sending requires the account to be
2103
- verified by the GrowSurf team. Requires a verified custom email domain on the
2102
+ and unsubscribed participants are suppressed). Sending requires the team to be
2103
+ verified by GrowSurf. Requires a verified custom email domain on the
2104
2104
  program (set up in Campaign Editor > 3. Emails > Email Settings). Returns `400`
2105
2105
  until one is verified. The email is accepted for delivery.
2106
2106