growsurf-python 1.11.0__tar.gz → 1.13.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.
- growsurf_python-1.13.0/.release-please-manifest.json +3 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/CHANGELOG.md +23 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/PKG-INFO +1 -1
- growsurf_python-1.13.0/SECURITY.md +13 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/api.md +19 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/pyproject.toml +1 -1
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_version.py +1 -1
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/campaign.py +11 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/emails.py +8 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/participant.py +30 -3
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/reward.py +6 -6
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/__init__.py +1 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_emails.py +8 -2
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_options.py +3 -2
- growsurf_python-1.13.0/src/growsurf/types/campaign/language.py +9 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant.py +8 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_add_params.py +8 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_email_params.py +2 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_update_params.py +9 -1
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +8 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_participant.py +4 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/test_campaign.py +2 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/uv.lock +173 -130
- growsurf_python-1.11.0/.release-please-manifest.json +0 -3
- growsurf_python-1.11.0/SECURITY.md +0 -23
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/.gitignore +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/CONTRIBUTING.md +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/LICENSE +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/README.md +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/bin/check-release-environment +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/bin/publish-pypi +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/examples/.keep +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/release-please-config.json +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/requirements-dev.lock +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_base_client.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_client.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_compat.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_constants.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_exceptions.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_files.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_models.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_qs.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_resource.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_streaming.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_types.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_compat.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_json.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_logs.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_path.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_proxy.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_reflection.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_streams.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_sync.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_transform.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_typing.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/_utils/_utils.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/lib/.keep +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/py.typed +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/account.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/commission.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/design.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/installation.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/integrations.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/options.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/program_resources.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/rewards.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/webhooks.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/team.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/account_create_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/affiliate_application.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/affiliate_application_answer.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/affiliate_application_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/affiliate_invite.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/analytics_availability.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/analytics_unavailable_reason.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_design.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/delete_program_resource_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/integration.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/integration_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_activation_analytics.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_reward.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/pending_analytics_erasure.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/program_resource.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/program_resource_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/program_resource_upload_result.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/program_resource_upload_ticket.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/referral_source.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/referral_status.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_create_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/reward_update_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_activation_analytics_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_create_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_engagement_analytics.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_list_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_retrieve_activation_analytics_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign_update_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/commission_structure.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/create_account_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/email_analytics.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/participant_commission_list.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/participant_list.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/participant_payout_list.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/referral_flow_screenshot.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/referral_flow_screenshots_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/referral_list.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/team.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/team_update_params.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/verification_email_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/__init__.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_commission.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_design.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_emails.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_installation.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_integrations.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_options.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_program_resources.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_reward.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_rewards.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/test_account.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/test_team_contract.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/conftest.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/sample_file.txt +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_client.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_extract_files.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_files.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_models.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_qs.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_required_args.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_response.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_streaming.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_transform.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_utils/test_datetime_parse.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_utils/test_json.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_utils/test_path.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_utils/test_proxy.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/test_utils/test_typing.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_affiliate_application.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_analytics_reward_status.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_email_analytics.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_lead_reward_events.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_participant_activation_engagement_analytics.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_participant_contract.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_payout_provider_forward_compat.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/types/test_referral_source.py +0 -0
- {growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/utils.py +0 -0
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.13.0](https://github.com/growsurf/growsurf-python/compare/v1.12.0...v1.13.0) (2026-10-09)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add program and participant language support ([57890e4](https://github.com/growsurf/growsurf-python/commit/57890e4ddfd3b2af6ac43d8caafdcf8ab013f3a6))
|
|
9
|
+
* add program languages and update SDK guidance ([1925adb](https://github.com/growsurf/growsurf-python/commit/1925adb305c1ba3743dcbac397c06dfcb2444743))
|
|
10
|
+
|
|
11
|
+
## [1.12.0](https://github.com/growsurf/growsurf-python/compare/v1.11.0...v1.12.0) (2026-10-07)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Chores
|
|
15
|
+
|
|
16
|
+
* prepare SDK 1.12.0 ([4d51fd4](https://github.com/growsurf/growsurf-python/commit/4d51fd4048c70ea3a4ac68151f0c6ec455c5a5c8))
|
|
17
|
+
* release 1.12.0 ([2a44995](https://github.com/growsurf/growsurf-python/commit/2a44995b52c7f6bdd360cc400a1b3aa64c0af7a8))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Documentation
|
|
21
|
+
|
|
22
|
+
* clarify welcome email recipient eligibility ([3050cc3](https://github.com/growsurf/growsurf-python/commit/3050cc38e2f57cbe25d36352f1ddc124f333c4bf))
|
|
23
|
+
* describe follow-up reminder eligibility and delay ([818359b](https://github.com/growsurf/growsurf-python/commit/818359b7806b6029ba06bf788471e17c00ae1363))
|
|
24
|
+
* describe inline email layout and required footer token ([b13749a](https://github.com/growsurf/growsurf-python/commit/b13749a5abd8a8c12e85305ba54ead72055404ff))
|
|
25
|
+
|
|
3
26
|
## [1.11.0](https://github.com/growsurf/growsurf-python/compare/v1.10.0...v1.11.0) (2026-09-29)
|
|
4
27
|
|
|
5
28
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting Security Issues
|
|
4
|
+
|
|
5
|
+
GrowSurf maintains this SDK. If you believe you have found a security vulnerability in it, please report it to support@growsurf.com rather than opening a public issue.
|
|
6
|
+
|
|
7
|
+
## Responsible Disclosure
|
|
8
|
+
|
|
9
|
+
Please give us a reasonable amount of time to investigate and address the issue before making any information public. We appreciate the efforts of security researchers who help keep this SDK and the systems it talks to secure.
|
|
10
|
+
|
|
11
|
+
## Other GrowSurf Security Issues
|
|
12
|
+
|
|
13
|
+
For security issues in GrowSurf products or services that are not related to this SDK, contact support@growsurf.com as well.
|
|
@@ -52,11 +52,23 @@ from growsurf.types import (
|
|
|
52
52
|
CampaignListResponse,
|
|
53
53
|
CampaignCreateMobileParticipantTokenResponse,
|
|
54
54
|
CampaignRetrieveAnalyticsResponse,
|
|
55
|
+
CampaignActivationAnalyticsResponse,
|
|
55
56
|
ReferralFlowScreenshot,
|
|
56
57
|
ReferralFlowScreenshotsResponse,
|
|
57
58
|
)
|
|
58
59
|
```
|
|
59
60
|
|
|
61
|
+
```python
|
|
62
|
+
from growsurf.types.campaign import (
|
|
63
|
+
ProgramResource,
|
|
64
|
+
ProgramResourceFile,
|
|
65
|
+
ProgramResourceListResponse,
|
|
66
|
+
ProgramResourceUploadResult,
|
|
67
|
+
ProgramResourceUploadTicket,
|
|
68
|
+
DeleteProgramResourceResponse,
|
|
69
|
+
)
|
|
70
|
+
```
|
|
71
|
+
|
|
60
72
|
Methods:
|
|
61
73
|
|
|
62
74
|
- <code title="post /campaigns">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">create</a>(\*\*<a href="src/growsurf/types/campaign_create_params.py">params</a>) -> <a href="./src/growsurf/types/campaign/campaign.py">Campaign</a></code>
|
|
@@ -72,6 +84,7 @@ Methods:
|
|
|
72
84
|
- <code title="get /campaign/{id}/payouts">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list_payouts</a>(id, \*\*<a href="src/growsurf/types/campaign_list_payouts_params.py">params</a>) -> <a href="./src/growsurf/types/participant_payout_list.py">ParticipantPayoutList</a></code>
|
|
73
85
|
- <code title="get /campaign/{id}/referrals">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list_referrals</a>(id, \*\*<a href="src/growsurf/types/campaign_list_referrals_params.py">params</a>) -> <a href="./src/growsurf/types/referral_list.py">ReferralList</a></code>
|
|
74
86
|
- <code title="get /campaign/{id}/analytics">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">retrieve_analytics</a>(id, \*\*<a href="src/growsurf/types/campaign_retrieve_analytics_params.py">params</a>) -> <a href="./src/growsurf/types/campaign_retrieve_analytics_response.py">CampaignRetrieveAnalyticsResponse</a></code>
|
|
87
|
+
- <code title="get /campaign/{id}/analytics/activation">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">retrieve_activation_analytics</a>(id, \*\*<a href="src/growsurf/types/campaign_retrieve_activation_analytics_params.py">params</a>) -> <a href="./src/growsurf/types/campaign_activation_analytics_response.py">CampaignActivationAnalyticsResponse</a></code>
|
|
75
88
|
- <code title="get /campaign/{id}/affiliate-applications">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">list_affiliate_applications</a>(id, \*\*<a href="src/growsurf/types/campaign_list_affiliate_applications_params.py">params</a>) -> <a href="./src/growsurf/types/affiliate_application_list_response.py">AffiliateApplicationListResponse</a></code>
|
|
76
89
|
- <code title="get /campaign/{id}/affiliate-applications/{applicationId}">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">retrieve_affiliate_application</a>(application_id, \*, id) -> <a href="./src/growsurf/types/affiliate_application.py">AffiliateApplication</a></code>
|
|
77
90
|
- <code title="patch /campaign/{id}/affiliate-applications/{applicationId}">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">review_affiliate_application</a>(application_id, \*, id, \*\*<a href="src/growsurf/types/campaign_review_affiliate_application_params.py">params</a>) -> <a href="./src/growsurf/types/affiliate_application.py">AffiliateApplication</a></code>
|
|
@@ -79,6 +92,11 @@ Methods:
|
|
|
79
92
|
- <code title="post /campaign/{id}/affiliate-invites">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">create_affiliate_invite</a>(id, \*\*<a href="src/growsurf/types/campaign_create_affiliate_invite_params.py">params</a>) -> <a href="./src/growsurf/types/affiliate_invite.py">AffiliateInvite</a></code>
|
|
80
93
|
- <code title="delete /campaign/{id}/affiliate-invites/{inviteId}">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">revoke_affiliate_invite</a>(invite_id, \*, id) -> <a href="./src/growsurf/types/affiliate_invite.py">AffiliateInvite</a></code>
|
|
81
94
|
- <code title="post /campaign/{id}/affiliate-invites/{inviteId}/resend">client.campaign.<a href="./src/growsurf/resources/campaign/campaign.py">resend_affiliate_invite</a>(invite_id, \*, id) -> <a href="./src/growsurf/types/affiliate_invite.py">AffiliateInvite</a></code>
|
|
95
|
+
- <code title="get /campaign/{id}/resources">client.campaign.resources.<a href="./src/growsurf/resources/campaign/program_resources.py">list</a>(id) -> <a href="./src/growsurf/types/campaign/program_resource_list_response.py">ProgramResourceListResponse</a></code>
|
|
96
|
+
- <code title="post /campaign/{id}/resources">client.campaign.resources.<a href="./src/growsurf/resources/campaign/program_resources.py">create</a>(id, \*, type, title, description, category, is_published, url, text, upload_ticket, upload_result) -> <a href="./src/growsurf/types/campaign/program_resource.py">ProgramResource</a></code>
|
|
97
|
+
- <code title="patch /campaign/{id}/resources/{resourceId}">client.campaign.resources.<a href="./src/growsurf/resources/campaign/program_resources.py">update</a>(resource_id, \*, id, type, title, description, category, is_published, position, url, text, upload_ticket, upload_result) -> <a href="./src/growsurf/types/campaign/program_resource.py">ProgramResource</a></code>
|
|
98
|
+
- <code title="delete /campaign/{id}/resources/{resourceId}">client.campaign.resources.<a href="./src/growsurf/resources/campaign/program_resources.py">delete</a>(resource_id, \*, id) -> <a href="./src/growsurf/types/campaign/delete_program_resource_response.py">DeleteProgramResourceResponse</a></code>
|
|
99
|
+
- <code title="post /campaign/{id}/resource-upload-tickets">client.campaign.resources.<a href="./src/growsurf/resources/campaign/program_resources.py">create_upload_ticket</a>(id, \*, file_name, mime_type, bytes) -> <a href="./src/growsurf/types/campaign/program_resource_upload_ticket.py">ProgramResourceUploadTicket</a></code>
|
|
82
100
|
|
|
83
101
|
## Participant
|
|
84
102
|
|
|
@@ -87,6 +105,7 @@ Types:
|
|
|
87
105
|
```python
|
|
88
106
|
from growsurf.types.campaign import (
|
|
89
107
|
FraudRiskLevel,
|
|
108
|
+
Language,
|
|
90
109
|
Participant,
|
|
91
110
|
ParticipantReward,
|
|
92
111
|
ReferralSource,
|
{growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/campaign.py
RENAMED
|
@@ -127,6 +127,7 @@ from ...types.referral_list import ReferralList
|
|
|
127
127
|
from ...types.affiliate_invite import AffiliateInvite
|
|
128
128
|
from ...types.participant_list import ParticipantList
|
|
129
129
|
from ...types.campaign.campaign import Campaign
|
|
130
|
+
from ...types.campaign.language import Language
|
|
130
131
|
from ...types.affiliate_application import AffiliateApplication
|
|
131
132
|
from ...types.campaign_list_response import CampaignListResponse
|
|
132
133
|
from ...types.participant_payout_list import ParticipantPayoutList
|
|
@@ -439,6 +440,7 @@ class CampaignResource(SyncAPIResource):
|
|
|
439
440
|
first_name: str | Omit = omit,
|
|
440
441
|
ip_address: str | Omit = omit,
|
|
441
442
|
is_affiliate: bool | Omit = omit,
|
|
443
|
+
language: Language | Omit = omit,
|
|
442
444
|
last_name: str | Omit = omit,
|
|
443
445
|
metadata: Dict[str, object] | Omit = omit,
|
|
444
446
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -466,6 +468,9 @@ class CampaignResource(SyncAPIResource):
|
|
|
466
468
|
|
|
467
469
|
is_affiliate: Affiliate programs only. Controls affiliate enrollment for a new participant.
|
|
468
470
|
|
|
471
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
472
|
+
program's languages. Applied only when this request creates the participant.
|
|
473
|
+
|
|
469
474
|
referred_by: Referrer participant ID or email address.
|
|
470
475
|
|
|
471
476
|
extra_headers: Send extra headers
|
|
@@ -487,6 +492,7 @@ class CampaignResource(SyncAPIResource):
|
|
|
487
492
|
"first_name": first_name,
|
|
488
493
|
"ip_address": ip_address,
|
|
489
494
|
"is_affiliate": is_affiliate,
|
|
495
|
+
"language": language,
|
|
490
496
|
"last_name": last_name,
|
|
491
497
|
"metadata": metadata,
|
|
492
498
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -1665,6 +1671,7 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1665
1671
|
first_name: str | Omit = omit,
|
|
1666
1672
|
ip_address: str | Omit = omit,
|
|
1667
1673
|
is_affiliate: bool | Omit = omit,
|
|
1674
|
+
language: Language | Omit = omit,
|
|
1668
1675
|
last_name: str | Omit = omit,
|
|
1669
1676
|
metadata: Dict[str, object] | Omit = omit,
|
|
1670
1677
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -1692,6 +1699,9 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1692
1699
|
|
|
1693
1700
|
is_affiliate: Affiliate programs only. Controls affiliate enrollment for a new participant.
|
|
1694
1701
|
|
|
1702
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
1703
|
+
program's languages. Applied only when this request creates the participant.
|
|
1704
|
+
|
|
1695
1705
|
referred_by: Referrer participant ID or email address.
|
|
1696
1706
|
|
|
1697
1707
|
extra_headers: Send extra headers
|
|
@@ -1713,6 +1723,7 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1713
1723
|
"first_name": first_name,
|
|
1714
1724
|
"ip_address": ip_address,
|
|
1715
1725
|
"is_affiliate": is_affiliate,
|
|
1726
|
+
"language": language,
|
|
1716
1727
|
"last_name": last_name,
|
|
1717
1728
|
"metadata": metadata,
|
|
1718
1729
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -61,6 +61,10 @@ class EmailsResource(SyncAPIResource):
|
|
|
61
61
|
(`subject`, `preheader`, `body`, `isEnabled`) plus the `settings` block (sender,
|
|
62
62
|
contact, and design). The set of email templates returned depends on the program
|
|
63
63
|
type (referral vs affiliate).
|
|
64
|
+
`followUpReminder` is disabled by default. It reminds the referrer about new
|
|
65
|
+
invitations sent while enabled when the contacts have not signed up.
|
|
66
|
+
`delayDays` accepts integers from 2 to 30 (default 3); changing it leaves
|
|
67
|
+
existing reminder dates unchanged.
|
|
64
68
|
|
|
65
69
|
Args:
|
|
66
70
|
extra_headers: Send extra headers
|
|
@@ -163,6 +167,10 @@ class AsyncEmailsResource(AsyncAPIResource):
|
|
|
163
167
|
(`subject`, `preheader`, `body`, `isEnabled`) plus the `settings` block (sender,
|
|
164
168
|
contact, and design). The set of email templates returned depends on the program
|
|
165
169
|
type (referral vs affiliate).
|
|
170
|
+
`followUpReminder` is disabled by default. It reminds the referrer about new
|
|
171
|
+
invitations sent while enabled when the contacts have not signed up.
|
|
172
|
+
`delayDays` accepts integers from 2 to 30 (default 3); changing it leaves
|
|
173
|
+
existing reminder dates unchanged.
|
|
166
174
|
|
|
167
175
|
Args:
|
|
168
176
|
extra_headers: Send extra headers
|
{growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/resources/campaign/participant.py
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Any, Dict, Iterable, cast
|
|
5
|
+
from typing import Any, Dict, Iterable, Optional, cast
|
|
6
6
|
from typing_extensions import Literal
|
|
7
7
|
|
|
8
8
|
import httpx
|
|
@@ -37,6 +37,7 @@ from ...types.campaign import (
|
|
|
37
37
|
participant_request_payout_destination_confirmation_params,
|
|
38
38
|
)
|
|
39
39
|
from ...types.referral_list import ReferralList
|
|
40
|
+
from ...types.campaign.language import Language
|
|
40
41
|
from ...types.campaign.participant import Participant
|
|
41
42
|
from ...types.participant_payout_list import ParticipantPayoutList
|
|
42
43
|
from ...types.campaign.referral_status import ReferralStatus
|
|
@@ -129,6 +130,7 @@ class ParticipantResource(SyncAPIResource):
|
|
|
129
130
|
affiliate_status: Literal["APPROVED", "SUSPENDED", "BANNED"] | Omit = omit,
|
|
130
131
|
email: str | Omit = omit,
|
|
131
132
|
first_name: str | Omit = omit,
|
|
133
|
+
language: Optional[Language] | Omit = omit,
|
|
132
134
|
last_name: str | Omit = omit,
|
|
133
135
|
metadata: Dict[str, object] | Omit = omit,
|
|
134
136
|
notes: str | Omit = omit,
|
|
@@ -155,6 +157,10 @@ class ParticipantResource(SyncAPIResource):
|
|
|
155
157
|
participant who is not yet an affiliate. `SUSPENDED` and `BANNED` are rejected for
|
|
156
158
|
non-affiliates.
|
|
157
159
|
|
|
160
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
161
|
+
program's languages (see `languages` in the program options). Send the base
|
|
162
|
+
language or `null` to use the program's base language.
|
|
163
|
+
|
|
158
164
|
metadata: Shallow custom metadata object.
|
|
159
165
|
|
|
160
166
|
notes: Freeform internal notes about the participant (internal only, never exposed to
|
|
@@ -185,6 +191,7 @@ class ParticipantResource(SyncAPIResource):
|
|
|
185
191
|
"affiliate_status": affiliate_status,
|
|
186
192
|
"email": email,
|
|
187
193
|
"first_name": first_name,
|
|
194
|
+
"language": language,
|
|
188
195
|
"last_name": last_name,
|
|
189
196
|
"metadata": metadata,
|
|
190
197
|
"notes": notes,
|
|
@@ -298,6 +305,7 @@ class ParticipantResource(SyncAPIResource):
|
|
|
298
305
|
first_name: str | Omit = omit,
|
|
299
306
|
ip_address: str | Omit = omit,
|
|
300
307
|
is_affiliate: bool | Omit = omit,
|
|
308
|
+
language: Language | Omit = omit,
|
|
301
309
|
last_name: str | Omit = omit,
|
|
302
310
|
metadata: Dict[str, object] | Omit = omit,
|
|
303
311
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -326,6 +334,9 @@ class ParticipantResource(SyncAPIResource):
|
|
|
326
334
|
non-affiliate without `affiliateStatus`. Existing participants are returned
|
|
327
335
|
unchanged.
|
|
328
336
|
|
|
337
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
338
|
+
program's languages. Applied only when this request creates the participant.
|
|
339
|
+
|
|
329
340
|
metadata: Shallow custom metadata object.
|
|
330
341
|
|
|
331
342
|
mobile_instance_id: Optional app-install scoped identifier for native mobile anti-fraud. Recommended
|
|
@@ -358,6 +369,7 @@ class ParticipantResource(SyncAPIResource):
|
|
|
358
369
|
"first_name": first_name,
|
|
359
370
|
"ip_address": ip_address,
|
|
360
371
|
"is_affiliate": is_affiliate,
|
|
372
|
+
"language": language,
|
|
361
373
|
"last_name": last_name,
|
|
362
374
|
"metadata": metadata,
|
|
363
375
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -1019,7 +1031,7 @@ class ParticipantResource(SyncAPIResource):
|
|
|
1019
1031
|
name, postal address, and an unsubscribe link are added automatically, and
|
|
1020
1032
|
unsubscribed participants are suppressed). Sending requires the team to be
|
|
1021
1033
|
verified by GrowSurf. Requires a **verified custom email domain** on the program
|
|
1022
|
-
(which can be completed in *
|
|
1034
|
+
(which can be completed in *Program Editor > 3. Emails > Email Settings*).
|
|
1023
1035
|
Returns `400` until one is verified. The email is accepted for delivery.
|
|
1024
1036
|
|
|
1025
1037
|
Args:
|
|
@@ -1032,6 +1044,8 @@ class ParticipantResource(SyncAPIResource):
|
|
|
1032
1044
|
`commissionGenerated`, `commissionAdjusted`, `payoutPending`, `payoutSentSuccess`,
|
|
1033
1045
|
`progressUpdateMonthly`. System/transactional types (login link, PayPal confirmation,
|
|
1034
1046
|
tax) and the invite email cannot be sent.
|
|
1047
|
+
`welcomeNonReferred` can only be sent to advocates or approved, enrolled affiliates in
|
|
1048
|
+
a program that has not ended.
|
|
1035
1049
|
|
|
1036
1050
|
body: HTML body for a free-form email. You can personalize it with dynamic text, inserting `{{...}}` tokens like `{{firstName}}` or `{{shareUrl}}`. See [Guide to using dynamic text in GrowSurf emails](https://support.growsurf.com/article/213-guide-to-using-dynamic-text-in-growsurf-emails).
|
|
1037
1051
|
|
|
@@ -1395,6 +1409,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1395
1409
|
affiliate_status: Literal["APPROVED", "SUSPENDED", "BANNED"] | Omit = omit,
|
|
1396
1410
|
email: str | Omit = omit,
|
|
1397
1411
|
first_name: str | Omit = omit,
|
|
1412
|
+
language: Optional[Language] | Omit = omit,
|
|
1398
1413
|
last_name: str | Omit = omit,
|
|
1399
1414
|
metadata: Dict[str, object] | Omit = omit,
|
|
1400
1415
|
notes: str | Omit = omit,
|
|
@@ -1421,6 +1436,10 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1421
1436
|
participant who is not yet an affiliate. `SUSPENDED` and `BANNED` are rejected for
|
|
1422
1437
|
non-affiliates.
|
|
1423
1438
|
|
|
1439
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
1440
|
+
program's languages (see `languages` in the program options). Send the base
|
|
1441
|
+
language or `null` to use the program's base language.
|
|
1442
|
+
|
|
1424
1443
|
metadata: Shallow custom metadata object.
|
|
1425
1444
|
|
|
1426
1445
|
notes: Freeform internal notes about the participant (internal only, never exposed to
|
|
@@ -1451,6 +1470,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1451
1470
|
"affiliate_status": affiliate_status,
|
|
1452
1471
|
"email": email,
|
|
1453
1472
|
"first_name": first_name,
|
|
1473
|
+
"language": language,
|
|
1454
1474
|
"last_name": last_name,
|
|
1455
1475
|
"metadata": metadata,
|
|
1456
1476
|
"notes": notes,
|
|
@@ -1564,6 +1584,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1564
1584
|
first_name: str | Omit = omit,
|
|
1565
1585
|
ip_address: str | Omit = omit,
|
|
1566
1586
|
is_affiliate: bool | Omit = omit,
|
|
1587
|
+
language: Language | Omit = omit,
|
|
1567
1588
|
last_name: str | Omit = omit,
|
|
1568
1589
|
metadata: Dict[str, object] | Omit = omit,
|
|
1569
1590
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -1592,6 +1613,9 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1592
1613
|
non-affiliate without `affiliateStatus`. Existing participants are returned
|
|
1593
1614
|
unchanged.
|
|
1594
1615
|
|
|
1616
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
1617
|
+
program's languages. Applied only when this request creates the participant.
|
|
1618
|
+
|
|
1595
1619
|
metadata: Shallow custom metadata object.
|
|
1596
1620
|
|
|
1597
1621
|
mobile_instance_id: Optional app-install scoped identifier for native mobile anti-fraud. Recommended
|
|
@@ -1624,6 +1648,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1624
1648
|
"first_name": first_name,
|
|
1625
1649
|
"ip_address": ip_address,
|
|
1626
1650
|
"is_affiliate": is_affiliate,
|
|
1651
|
+
"language": language,
|
|
1627
1652
|
"last_name": last_name,
|
|
1628
1653
|
"metadata": metadata,
|
|
1629
1654
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -2285,7 +2310,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
2285
2310
|
name, postal address, and an unsubscribe link are added automatically, and
|
|
2286
2311
|
unsubscribed participants are suppressed). Sending requires the team to be
|
|
2287
2312
|
verified by GrowSurf. Requires a **verified custom email domain** on the program
|
|
2288
|
-
(which can be completed in *
|
|
2313
|
+
(which can be completed in *Program Editor > 3. Emails > Email Settings*).
|
|
2289
2314
|
Returns `400` until one is verified. The email is accepted for delivery.
|
|
2290
2315
|
|
|
2291
2316
|
Args:
|
|
@@ -2298,6 +2323,8 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
2298
2323
|
`commissionGenerated`, `commissionAdjusted`, `payoutPending`, `payoutSentSuccess`,
|
|
2299
2324
|
`progressUpdateMonthly`. System/transactional types (login link, PayPal confirmation,
|
|
2300
2325
|
tax) and the invite email cannot be sent.
|
|
2326
|
+
`welcomeNonReferred` can only be sent to advocates or approved, enrolled affiliates in
|
|
2327
|
+
a program that has not ended.
|
|
2301
2328
|
|
|
2302
2329
|
body: HTML body for a free-form email. You can personalize it with dynamic text, inserting `{{...}}` tokens like `{{firstName}}` or `{{shareUrl}}`. See [Guide to using dynamic text in GrowSurf emails](https://support.growsurf.com/article/213-guide-to-using-dynamic-text-in-growsurf-emails).
|
|
2303
2330
|
|
|
@@ -58,8 +58,8 @@ class RewardResource(SyncAPIResource):
|
|
|
58
58
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
59
59
|
) -> RewardDeleteResponse:
|
|
60
60
|
"""
|
|
61
|
-
Removes a
|
|
62
|
-
approved.
|
|
61
|
+
Removes a participant reward that requires manual approval and has not yet
|
|
62
|
+
been approved.
|
|
63
63
|
|
|
64
64
|
Args:
|
|
65
65
|
extra_headers: Send extra headers
|
|
@@ -96,7 +96,7 @@ class RewardResource(SyncAPIResource):
|
|
|
96
96
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
97
97
|
) -> RewardApproveResponse:
|
|
98
98
|
"""
|
|
99
|
-
Approves a
|
|
99
|
+
Approves a participant reward that requires manual approval. This requires
|
|
100
100
|
`reward:write`. When the request also sets `fulfill` to `true`, it additionally
|
|
101
101
|
requires `reward:fulfill`.
|
|
102
102
|
|
|
@@ -196,8 +196,8 @@ class AsyncRewardResource(AsyncAPIResource):
|
|
|
196
196
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
197
197
|
) -> RewardDeleteResponse:
|
|
198
198
|
"""
|
|
199
|
-
Removes a
|
|
200
|
-
approved.
|
|
199
|
+
Removes a participant reward that requires manual approval and has not yet
|
|
200
|
+
been approved.
|
|
201
201
|
|
|
202
202
|
Args:
|
|
203
203
|
extra_headers: Send extra headers
|
|
@@ -234,7 +234,7 @@ class AsyncRewardResource(AsyncAPIResource):
|
|
|
234
234
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
235
235
|
) -> RewardApproveResponse:
|
|
236
236
|
"""
|
|
237
|
-
Approves a
|
|
237
|
+
Approves a participant reward that requires manual approval. This requires
|
|
238
238
|
`reward:write`. When the request also sets `fulfill` to `true`, it additionally
|
|
239
239
|
requires `reward:fulfill`.
|
|
240
240
|
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from .reward import Reward as Reward
|
|
6
6
|
from .webhook import Webhook as Webhook
|
|
7
7
|
from .campaign import Campaign as Campaign
|
|
8
|
+
from .language import Language as Language
|
|
8
9
|
from .integration import Integration as Integration
|
|
9
10
|
from .participant import Participant as Participant
|
|
10
11
|
from .webhook_event import WebhookEvent as WebhookEvent
|
{growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_emails.py
RENAMED
|
@@ -9,7 +9,13 @@ __all__ = ["CampaignEmails"]
|
|
|
9
9
|
# each editable email template plus the shared `settings` block. The set of
|
|
10
10
|
# templates depends on the program type; it is intentionally modeled as a loose
|
|
11
11
|
# object. `offerClaimed` is available to both program types and sends while the
|
|
12
|
-
# Claim Offer Popup is enabled.
|
|
12
|
+
# Claim Offer Popup is enabled. `followUpReminder` is disabled by default and
|
|
13
|
+
# reminds the referrer about new invitations sent while it is enabled when the
|
|
14
|
+
# contacts have not signed up. Its `delayDays` is an integer from 2 to 30 (default
|
|
15
|
+
# 3); changing it leaves existing reminder dates unchanged.
|
|
16
|
+
# To see the full object with every field and its
|
|
13
17
|
# current value, `GET` the resource, then `PATCH` back only the fields you want to
|
|
14
|
-
# change.
|
|
18
|
+
# change. New programs return settings.design.layoutMode="INLINE" (read-only).
|
|
19
|
+
# Their bodies require {{emailFooter}}; {{emailHeader}} is optional. Older programs
|
|
20
|
+
# omit layoutMode and keep their existing layout.
|
|
15
21
|
CampaignEmails: TypeAlias = Dict[str, object]
|
{growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/campaign_options.py
RENAMED
|
@@ -8,8 +8,9 @@ __all__ = ["CampaignOptions"]
|
|
|
8
8
|
# A program's options (the dashboard Program Editor's Options tab): reward/fraud
|
|
9
9
|
# approval, anti-fraud lists + toggles, the `LAST_CLICK` or `FIRST_CLICK`
|
|
10
10
|
# attribution model, referral windows, reCAPTCHA, affiliate enrollment +
|
|
11
|
-
# application review, payout + tax settings (affiliate only),
|
|
12
|
-
#
|
|
11
|
+
# application review, payout + tax settings (affiliate only), notification-email
|
|
12
|
+
# settings, and the program's `languages` (`baseLanguage` and
|
|
13
|
+
# `additionalLanguages`). It is intentionally modeled as a loose object. To see the full
|
|
13
14
|
# object with every field and its current value, `GET` the resource, then `PATCH`
|
|
14
15
|
# back only the fields you want to change.
|
|
15
16
|
CampaignOptions: TypeAlias = Dict[str, object]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from typing_extensions import Literal, TypeAlias
|
|
4
|
+
|
|
5
|
+
__all__ = ["Language"]
|
|
6
|
+
|
|
7
|
+
# A language a program can run in. Participants see the portal and receive program
|
|
8
|
+
# emails in their language.
|
|
9
|
+
Language: TypeAlias = Literal["en", "es", "fr", "de", "it", "pt-BR", "nl", "pl", "sv", "tr", "ja", "ko", "zh-CN", "id"]
|
{growsurf_python-1.11.0 → growsurf_python-1.13.0}/src/growsurf/types/campaign/participant.py
RENAMED
|
@@ -5,6 +5,7 @@ from typing_extensions import Literal
|
|
|
5
5
|
|
|
6
6
|
from pydantic import Field as FieldInfo
|
|
7
7
|
|
|
8
|
+
from .language import Language
|
|
8
9
|
from ..._models import BaseModel
|
|
9
10
|
from .referral_source import ReferralSource
|
|
10
11
|
from .referral_status import ReferralStatus
|
|
@@ -149,6 +150,13 @@ class Participant(BaseModel):
|
|
|
149
150
|
|
|
150
151
|
is_winner: Optional[bool] = FieldInfo(alias="isWinner", default=None)
|
|
151
152
|
|
|
153
|
+
language: Optional[Language] = None
|
|
154
|
+
"""The language of the participant's portal and program emails.
|
|
155
|
+
|
|
156
|
+
The program's base language unless the participant (or you) picked another of the
|
|
157
|
+
program's languages.
|
|
158
|
+
"""
|
|
159
|
+
|
|
152
160
|
last_name: Optional[str] = FieldInfo(alias="lastName", default=None)
|
|
153
161
|
|
|
154
162
|
lead_count: Optional[int] = FieldInfo(alias="leadCount", default=None)
|
|
@@ -6,6 +6,7 @@ from typing import Dict
|
|
|
6
6
|
from typing_extensions import Literal, Required, Annotated, TypedDict
|
|
7
7
|
|
|
8
8
|
from ..._utils import PropertyInfo
|
|
9
|
+
from .language import Language
|
|
9
10
|
|
|
10
11
|
__all__ = ["ParticipantAddParams"]
|
|
11
12
|
|
|
@@ -27,6 +28,13 @@ class ParticipantAddParams(TypedDict, total=False):
|
|
|
27
28
|
unchanged.
|
|
28
29
|
"""
|
|
29
30
|
|
|
31
|
+
language: Language
|
|
32
|
+
"""The language of the participant's portal and program emails.
|
|
33
|
+
|
|
34
|
+
Must be one of the program's languages. Applied only when this request creates
|
|
35
|
+
the participant.
|
|
36
|
+
"""
|
|
37
|
+
|
|
30
38
|
last_name: Annotated[str, PropertyInfo(alias="lastName")]
|
|
31
39
|
|
|
32
40
|
metadata: Dict[str, object]
|
|
@@ -23,6 +23,8 @@ class ParticipantEmailParams(TypedDict, total=False):
|
|
|
23
23
|
`commissionGenerated`, `commissionAdjusted`, `payoutPending`, `payoutSentSuccess`,
|
|
24
24
|
`progressUpdateMonthly`. System/transactional types (login link, PayPal confirmation,
|
|
25
25
|
tax) and the invite email cannot be sent.
|
|
26
|
+
`welcomeNonReferred` can only be sent to advocates or approved, enrolled affiliates in a program
|
|
27
|
+
that has not ended.
|
|
26
28
|
"""
|
|
27
29
|
|
|
28
30
|
body: str
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Dict
|
|
5
|
+
from typing import Dict, Optional
|
|
6
6
|
from typing_extensions import Literal, Required, Annotated, TypedDict
|
|
7
7
|
|
|
8
8
|
from ..._types import SequenceNotStr
|
|
9
9
|
from ..._utils import PropertyInfo
|
|
10
|
+
from .language import Language
|
|
10
11
|
|
|
11
12
|
__all__ = ["ParticipantUpdateParams"]
|
|
12
13
|
|
|
@@ -25,6 +26,13 @@ class ParticipantUpdateParams(TypedDict, total=False):
|
|
|
25
26
|
|
|
26
27
|
first_name: Annotated[str, PropertyInfo(alias="firstName")]
|
|
27
28
|
|
|
29
|
+
language: Optional[Language]
|
|
30
|
+
"""The language of the participant's portal and program emails.
|
|
31
|
+
|
|
32
|
+
Must be one of the program's languages (see `languages` in the program options).
|
|
33
|
+
Send the base language or `null` to use the program's base language.
|
|
34
|
+
"""
|
|
35
|
+
|
|
28
36
|
last_name: Annotated[str, PropertyInfo(alias="lastName")]
|
|
29
37
|
|
|
30
38
|
metadata: Dict[str, object]
|
|
@@ -6,6 +6,7 @@ from typing import Dict
|
|
|
6
6
|
from typing_extensions import Literal, Required, Annotated, TypedDict
|
|
7
7
|
|
|
8
8
|
from .._utils import PropertyInfo
|
|
9
|
+
from .campaign.language import Language
|
|
9
10
|
|
|
10
11
|
__all__ = ["CampaignCreateMobileParticipantTokenParams"]
|
|
11
12
|
|
|
@@ -27,6 +28,13 @@ class CampaignCreateMobileParticipantTokenParams(TypedDict, total=False):
|
|
|
27
28
|
unchanged.
|
|
28
29
|
"""
|
|
29
30
|
|
|
31
|
+
language: Language
|
|
32
|
+
"""The language of the participant's portal and program emails.
|
|
33
|
+
|
|
34
|
+
Must be one of the program's languages. Applied only when this request creates
|
|
35
|
+
the participant.
|
|
36
|
+
"""
|
|
37
|
+
|
|
30
38
|
last_name: Annotated[str, PropertyInfo(alias="lastName")]
|
|
31
39
|
|
|
32
40
|
metadata: Dict[str, object]
|
{growsurf_python-1.11.0 → growsurf_python-1.13.0}/tests/api_resources/campaign/test_participant.py
RENAMED
|
@@ -104,6 +104,7 @@ class TestParticipant:
|
|
|
104
104
|
id="id",
|
|
105
105
|
email="dev@stainless.com",
|
|
106
106
|
first_name="Gavin",
|
|
107
|
+
language="es",
|
|
107
108
|
last_name="Belson",
|
|
108
109
|
metadata={"company": "bar"},
|
|
109
110
|
notes="notes",
|
|
@@ -278,6 +279,7 @@ class TestParticipant:
|
|
|
278
279
|
first_name="firstName",
|
|
279
280
|
ip_address="ipAddress",
|
|
280
281
|
is_affiliate=True,
|
|
282
|
+
language="es",
|
|
281
283
|
last_name="lastName",
|
|
282
284
|
metadata={"foo": "bar"},
|
|
283
285
|
mobile_instance_id="mobileInstanceId",
|
|
@@ -1344,6 +1346,7 @@ class TestAsyncParticipant:
|
|
|
1344
1346
|
id="id",
|
|
1345
1347
|
email="dev@stainless.com",
|
|
1346
1348
|
first_name="Gavin",
|
|
1349
|
+
language="es",
|
|
1347
1350
|
last_name="Belson",
|
|
1348
1351
|
metadata={"company": "bar"},
|
|
1349
1352
|
notes="notes",
|
|
@@ -1518,6 +1521,7 @@ class TestAsyncParticipant:
|
|
|
1518
1521
|
first_name="firstName",
|
|
1519
1522
|
ip_address="ipAddress",
|
|
1520
1523
|
is_affiliate=True,
|
|
1524
|
+
language="es",
|
|
1521
1525
|
last_name="lastName",
|
|
1522
1526
|
metadata={"foo": "bar"},
|
|
1523
1527
|
mobile_instance_id="mobileInstanceId",
|
|
@@ -318,6 +318,7 @@ class TestCampaign:
|
|
|
318
318
|
fingerprint="fingerprint",
|
|
319
319
|
first_name="firstName",
|
|
320
320
|
ip_address="ipAddress",
|
|
321
|
+
language="es",
|
|
321
322
|
last_name="lastName",
|
|
322
323
|
metadata={"foo": "bar"},
|
|
323
324
|
mobile_instance_id="mobileInstanceId",
|
|
@@ -1382,6 +1383,7 @@ class TestAsyncCampaign:
|
|
|
1382
1383
|
fingerprint="fingerprint",
|
|
1383
1384
|
first_name="firstName",
|
|
1384
1385
|
ip_address="ipAddress",
|
|
1386
|
+
language="es",
|
|
1385
1387
|
last_name="lastName",
|
|
1386
1388
|
metadata={"foo": "bar"},
|
|
1387
1389
|
mobile_instance_id="mobileInstanceId",
|