growsurf-python 1.12.0__tar.gz → 1.13.1__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.1/.release-please-manifest.json +3 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/CHANGELOG.md +17 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/PKG-INFO +1 -1
- growsurf_python-1.13.1/SECURITY.md +13 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/api.md +1 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/pyproject.toml +1 -1
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_version.py +1 -1
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/campaign.py +19 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/design.py +6 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/emails.py +6 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/installation.py +6 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/options.py +22 -12
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/participant.py +26 -3
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/reward.py +6 -6
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/rewards.py +8 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/__init__.py +1 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/campaign_options.py +3 -2
- growsurf_python-1.13.1/src/growsurf/types/campaign/language.py +9 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant.py +8 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_add_params.py +8 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_update_params.py +9 -1
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +8 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_participant.py +4 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/test_campaign.py +2 -0
- growsurf_python-1.12.0/.release-please-manifest.json +0 -3
- growsurf_python-1.12.0/SECURITY.md +0 -23
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/.gitignore +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/CONTRIBUTING.md +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/LICENSE +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/README.md +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/bin/check-release-environment +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/bin/publish-pypi +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/examples/.keep +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/release-please-config.json +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/requirements-dev.lock +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_base_client.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_client.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_compat.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_constants.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_exceptions.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_files.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_models.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_qs.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_resource.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_streaming.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_types.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_compat.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_datetime_parse.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_json.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_logs.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_path.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_proxy.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_reflection.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_resources_proxy.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_streams.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_sync.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_transform.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_typing.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/_utils/_utils.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/lib/.keep +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/py.typed +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/account.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/commission.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/integrations.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/program_resources.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/webhooks.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/team.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/account_create_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/affiliate_application.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/affiliate_application_answer.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/affiliate_application_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/affiliate_invite.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/analytics_availability.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/analytics_unavailable_reason.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/campaign.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/campaign_design.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/campaign_emails.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/campaign_installation.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/delete_program_resource_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/email_participant_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/integration.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/integration_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_activation_analytics.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_analytics_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_email_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_reward.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/pending_analytics_erasure.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/program_resource.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/program_resource_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/program_resource_upload_result.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/program_resource_upload_ticket.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/referral_source.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/referral_status.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_create_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/reward_update_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook_event.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_activation_analytics_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_create_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_engagement_analytics.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_participants_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_list_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_retrieve_activation_analytics_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/campaign_update_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/commission_structure.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/create_account_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/email_analytics.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/participant_commission_list.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/participant_list.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/participant_payout_list.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/referral_flow_screenshot.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/referral_flow_screenshots_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/referral_list.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/rotate_api_key_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/team.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/team_update_params.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/types/verification_email_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/__init__.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_commission.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_design.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_emails.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_installation.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_integrations.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_options.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_program_resources.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_reward.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_rewards.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/campaign/test_webhooks.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/test_account.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/api_resources/test_team_contract.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/conftest.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/sample_file.txt +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_client.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_extract_files.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_files.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_models.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_qs.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_required_args.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_response.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_streaming.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_transform.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_utils/test_datetime_parse.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_utils/test_json.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_utils/test_path.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_utils/test_proxy.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/test_utils/test_typing.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_affiliate_application.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_analytics_reward_status.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_email_analytics.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_lead_reward_events.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_participant_activation_engagement_analytics.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_participant_contract.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_payout_provider_forward_compat.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/types/test_referral_source.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/tests/utils.py +0 -0
- {growsurf_python-1.12.0 → growsurf_python-1.13.1}/uv.lock +0 -0
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.13.1](https://github.com/growsurf/growsurf-python/compare/v1.13.0...v1.13.1) (2026-10-14)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Documentation
|
|
7
|
+
|
|
8
|
+
* align SDK option guidance with the REST API ([f93027e](https://github.com/growsurf/growsurf-python/commit/f93027e3580e7412a7991c817912c19901d32721))
|
|
9
|
+
* document language picker flag option ([304a4b4](https://github.com/growsurf/growsurf-python/commit/304a4b4dc9b452c07c04b694b6374df7e535d0e4))
|
|
10
|
+
* sync SDK comments with the REST API contract ([bf3e679](https://github.com/growsurf/growsurf-python/commit/bf3e679d1dcb9db0380babec0f8030a8c0156454))
|
|
11
|
+
|
|
12
|
+
## [1.13.0](https://github.com/growsurf/growsurf-python/compare/v1.12.0...v1.13.0) (2026-10-09)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* add program and participant language support ([57890e4](https://github.com/growsurf/growsurf-python/commit/57890e4ddfd3b2af6ac43d8caafdcf8ab013f3a6))
|
|
18
|
+
* add program languages and update SDK guidance ([1925adb](https://github.com/growsurf/growsurf-python/commit/1925adb305c1ba3743dcbac397c06dfcb2444743))
|
|
19
|
+
|
|
3
20
|
## [1.12.0](https://github.com/growsurf/growsurf-python/compare/v1.11.0...v1.12.0) (2026-10-07)
|
|
4
21
|
|
|
5
22
|
|
|
@@ -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.
|
{growsurf_python-1.12.0 → growsurf_python-1.13.1}/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
|
|
@@ -345,6 +346,9 @@ class CampaignResource(SyncAPIResource):
|
|
|
345
346
|
configuration (design, emails, options, installation) is edited via the
|
|
346
347
|
dedicated config sub-resources, not here. The program cannot be deleted via this
|
|
347
348
|
endpoint.
|
|
349
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
350
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
351
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
348
352
|
|
|
349
353
|
Args:
|
|
350
354
|
status: The requested program status. `IN_PROGRESS` publishes or resumes the program;
|
|
@@ -410,6 +414,7 @@ class CampaignResource(SyncAPIResource):
|
|
|
410
414
|
"""
|
|
411
415
|
Clones an existing program into a new `DRAFT` program. Integrations and
|
|
412
416
|
credentials are not copied; active rewards are cloned.
|
|
417
|
+
A concurrent edit to the program can return `409`; retry the clone.
|
|
413
418
|
|
|
414
419
|
Args:
|
|
415
420
|
extra_headers: Send extra headers
|
|
@@ -439,6 +444,7 @@ class CampaignResource(SyncAPIResource):
|
|
|
439
444
|
first_name: str | Omit = omit,
|
|
440
445
|
ip_address: str | Omit = omit,
|
|
441
446
|
is_affiliate: bool | Omit = omit,
|
|
447
|
+
language: Language | Omit = omit,
|
|
442
448
|
last_name: str | Omit = omit,
|
|
443
449
|
metadata: Dict[str, object] | Omit = omit,
|
|
444
450
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -466,6 +472,9 @@ class CampaignResource(SyncAPIResource):
|
|
|
466
472
|
|
|
467
473
|
is_affiliate: Affiliate programs only. Controls affiliate enrollment for a new participant.
|
|
468
474
|
|
|
475
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
476
|
+
program's languages. Applied only when this request creates the participant.
|
|
477
|
+
|
|
469
478
|
referred_by: Referrer participant ID or email address.
|
|
470
479
|
|
|
471
480
|
extra_headers: Send extra headers
|
|
@@ -487,6 +496,7 @@ class CampaignResource(SyncAPIResource):
|
|
|
487
496
|
"first_name": first_name,
|
|
488
497
|
"ip_address": ip_address,
|
|
489
498
|
"is_affiliate": is_affiliate,
|
|
499
|
+
"language": language,
|
|
490
500
|
"last_name": last_name,
|
|
491
501
|
"metadata": metadata,
|
|
492
502
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -1571,6 +1581,9 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1571
1581
|
configuration (design, emails, options, installation) is edited via the
|
|
1572
1582
|
dedicated config sub-resources, not here. The program cannot be deleted via this
|
|
1573
1583
|
endpoint.
|
|
1584
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
1585
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
1586
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
1574
1587
|
|
|
1575
1588
|
Args:
|
|
1576
1589
|
status: The requested program status. `IN_PROGRESS` publishes or resumes the program;
|
|
@@ -1636,6 +1649,7 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1636
1649
|
"""
|
|
1637
1650
|
Clones an existing program into a new `DRAFT` program. Integrations and
|
|
1638
1651
|
credentials are not copied; active rewards are cloned.
|
|
1652
|
+
A concurrent edit to the program can return `409`; retry the clone.
|
|
1639
1653
|
|
|
1640
1654
|
Args:
|
|
1641
1655
|
extra_headers: Send extra headers
|
|
@@ -1665,6 +1679,7 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1665
1679
|
first_name: str | Omit = omit,
|
|
1666
1680
|
ip_address: str | Omit = omit,
|
|
1667
1681
|
is_affiliate: bool | Omit = omit,
|
|
1682
|
+
language: Language | Omit = omit,
|
|
1668
1683
|
last_name: str | Omit = omit,
|
|
1669
1684
|
metadata: Dict[str, object] | Omit = omit,
|
|
1670
1685
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -1692,6 +1707,9 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1692
1707
|
|
|
1693
1708
|
is_affiliate: Affiliate programs only. Controls affiliate enrollment for a new participant.
|
|
1694
1709
|
|
|
1710
|
+
language: The language of the participant's portal and program emails. Must be one of the
|
|
1711
|
+
program's languages. Applied only when this request creates the participant.
|
|
1712
|
+
|
|
1695
1713
|
referred_by: Referrer participant ID or email address.
|
|
1696
1714
|
|
|
1697
1715
|
extra_headers: Send extra headers
|
|
@@ -1713,6 +1731,7 @@ class AsyncCampaignResource(AsyncAPIResource):
|
|
|
1713
1731
|
"first_name": first_name,
|
|
1714
1732
|
"ip_address": ip_address,
|
|
1715
1733
|
"is_affiliate": is_affiliate,
|
|
1734
|
+
"language": language,
|
|
1716
1735
|
"last_name": last_name,
|
|
1717
1736
|
"metadata": metadata,
|
|
1718
1737
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -101,6 +101,9 @@ class DesignResource(SyncAPIResource):
|
|
|
101
101
|
anything you leave out is untouched (arrays such as `signup.fields` replace wholesale).
|
|
102
102
|
Unknown fields, fields not available for the program type, and invalid values return a
|
|
103
103
|
`400`. Landing-page custom code and JavaScript are not editable via the API.
|
|
104
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
105
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
106
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
104
107
|
|
|
105
108
|
Args:
|
|
106
109
|
body: A partial `CampaignDesign` object — only the fields you send are changed.
|
|
@@ -206,6 +209,9 @@ class AsyncDesignResource(AsyncAPIResource):
|
|
|
206
209
|
anything you leave out is untouched (arrays such as `signup.fields` replace wholesale).
|
|
207
210
|
Unknown fields, fields not available for the program type, and invalid values return a
|
|
208
211
|
`400`. Landing-page custom code and JavaScript are not editable via the API.
|
|
212
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
213
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
214
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
209
215
|
|
|
210
216
|
Args:
|
|
211
217
|
body: A partial `CampaignDesign` object — only the fields you send are changed.
|
|
@@ -104,6 +104,9 @@ class EmailsResource(SyncAPIResource):
|
|
|
104
104
|
available for the program type returns a `400`. Some fields are read-only
|
|
105
105
|
(`settings.sender.fromEmail`, whose custom value requires dashboard domain
|
|
106
106
|
verification).
|
|
107
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
108
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
109
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
107
110
|
|
|
108
111
|
Args:
|
|
109
112
|
body: A partial `CampaignEmails` object — only the fields you send are changed.
|
|
@@ -210,6 +213,9 @@ class AsyncEmailsResource(AsyncAPIResource):
|
|
|
210
213
|
available for the program type returns a `400`. Some fields are read-only
|
|
211
214
|
(`settings.sender.fromEmail`, whose custom value requires dashboard domain
|
|
212
215
|
verification).
|
|
216
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
217
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
218
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
213
219
|
|
|
214
220
|
Args:
|
|
215
221
|
body: A partial `CampaignEmails` object — only the fields you send are changed.
|
{growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/installation.py
RENAMED
|
@@ -99,6 +99,9 @@ class InstallationResource(SyncAPIResource):
|
|
|
99
99
|
enabling `mobile.isEnabled` creates one. Changing `shareUrl` re-resolves its
|
|
100
100
|
redirect destinations, which may take a moment to complete. URLs must include an
|
|
101
101
|
explicit `http://` or `https://` scheme.
|
|
102
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
103
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
104
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
102
105
|
|
|
103
106
|
Args:
|
|
104
107
|
body: A partial `CampaignInstallation` object — only the fields you send are changed.
|
|
@@ -200,6 +203,9 @@ class AsyncInstallationResource(AsyncAPIResource):
|
|
|
200
203
|
enabling `mobile.isEnabled` creates one. Changing `shareUrl` re-resolves its
|
|
201
204
|
redirect destinations, which may take a moment to complete. URLs must include an
|
|
202
205
|
explicit `http://` or `https://` scheme.
|
|
206
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
207
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
208
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
203
209
|
|
|
204
210
|
Args:
|
|
205
211
|
body: A partial `CampaignInstallation` object — only the fields you send are changed.
|
{growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/options.py
RENAMED
|
@@ -56,12 +56,11 @@ class OptionsResource(SyncAPIResource):
|
|
|
56
56
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
57
57
|
) -> CampaignOptions:
|
|
58
58
|
"""
|
|
59
|
-
Retrieves a program's options — the same surface as the dashboard Program
|
|
60
|
-
|
|
61
|
-
toggles, referral cookie/credit windows, reCAPTCHA, affiliate enrollment +
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
`FIRST_CLICK`). `fraud.recaptcha.secretKey` is never returned.
|
|
59
|
+
Retrieves a program's options — the same surface as the dashboard Program Editor's
|
|
60
|
+
**Options** tab. Includes the attribution model, reward/fraud approval, anti-fraud lists
|
|
61
|
+
+ toggles, referral cookie/credit windows, reCAPTCHA, affiliate enrollment + application
|
|
62
|
+
review, payout threshold + tax settings (affiliate only), notification-email settings,
|
|
63
|
+
and the program's languages. `fraud.recaptcha.secretKey` is never returned.
|
|
65
64
|
|
|
66
65
|
Args:
|
|
67
66
|
extra_headers: Send extra headers
|
|
@@ -101,6 +100,12 @@ class OptionsResource(SyncAPIResource):
|
|
|
101
100
|
and `payoutThreshold`/`taxDocumentation` are affiliate-only, and affiliate
|
|
102
101
|
programs require `requireParticipantAuth: true`). `fraud.recaptcha.secretKey`
|
|
103
102
|
is write-only. `referralCreditWindowDays: null` means "never expires".
|
|
103
|
+
Turning on `languages.additionalLanguages` requires the Business plan or higher. While
|
|
104
|
+
any are on, every `languages` change, including turning them off, requires it too (`403`
|
|
105
|
+
otherwise).
|
|
106
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
107
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
108
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
104
109
|
|
|
105
110
|
Args:
|
|
106
111
|
body: A partial `CampaignOptions` object — only the fields you send are changed.
|
|
@@ -159,12 +164,11 @@ class AsyncOptionsResource(AsyncAPIResource):
|
|
|
159
164
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
160
165
|
) -> CampaignOptions:
|
|
161
166
|
"""
|
|
162
|
-
Retrieves a program's options — the same surface as the dashboard Program
|
|
163
|
-
|
|
164
|
-
toggles, referral cookie/credit windows, reCAPTCHA, affiliate enrollment +
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
`FIRST_CLICK`). `fraud.recaptcha.secretKey` is never returned.
|
|
167
|
+
Retrieves a program's options — the same surface as the dashboard Program Editor's
|
|
168
|
+
**Options** tab. Includes the attribution model, reward/fraud approval, anti-fraud lists
|
|
169
|
+
+ toggles, referral cookie/credit windows, reCAPTCHA, affiliate enrollment + application
|
|
170
|
+
review, payout threshold + tax settings (affiliate only), notification-email settings,
|
|
171
|
+
and the program's languages. `fraud.recaptcha.secretKey` is never returned.
|
|
168
172
|
|
|
169
173
|
Args:
|
|
170
174
|
extra_headers: Send extra headers
|
|
@@ -204,6 +208,12 @@ class AsyncOptionsResource(AsyncAPIResource):
|
|
|
204
208
|
and `payoutThreshold`/`taxDocumentation` are affiliate-only, and affiliate
|
|
205
209
|
programs require `requireParticipantAuth: true`). `fraud.recaptcha.secretKey`
|
|
206
210
|
is write-only. `referralCreditWindowDays: null` means "never expires".
|
|
211
|
+
Turning on `languages.additionalLanguages` requires the Business plan or higher. While
|
|
212
|
+
any are on, every `languages` change, including turning them off, requires it too (`403`
|
|
213
|
+
otherwise).
|
|
214
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
215
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
216
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
207
217
|
|
|
208
218
|
Args:
|
|
209
219
|
body: A partial `CampaignOptions` object — only the fields you send are changed.
|
{growsurf_python-1.12.0 → growsurf_python-1.13.1}/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:
|
|
@@ -1397,6 +1409,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1397
1409
|
affiliate_status: Literal["APPROVED", "SUSPENDED", "BANNED"] | Omit = omit,
|
|
1398
1410
|
email: str | Omit = omit,
|
|
1399
1411
|
first_name: str | Omit = omit,
|
|
1412
|
+
language: Optional[Language] | Omit = omit,
|
|
1400
1413
|
last_name: str | Omit = omit,
|
|
1401
1414
|
metadata: Dict[str, object] | Omit = omit,
|
|
1402
1415
|
notes: str | Omit = omit,
|
|
@@ -1423,6 +1436,10 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1423
1436
|
participant who is not yet an affiliate. `SUSPENDED` and `BANNED` are rejected for
|
|
1424
1437
|
non-affiliates.
|
|
1425
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
|
+
|
|
1426
1443
|
metadata: Shallow custom metadata object.
|
|
1427
1444
|
|
|
1428
1445
|
notes: Freeform internal notes about the participant (internal only, never exposed to
|
|
@@ -1453,6 +1470,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1453
1470
|
"affiliate_status": affiliate_status,
|
|
1454
1471
|
"email": email,
|
|
1455
1472
|
"first_name": first_name,
|
|
1473
|
+
"language": language,
|
|
1456
1474
|
"last_name": last_name,
|
|
1457
1475
|
"metadata": metadata,
|
|
1458
1476
|
"notes": notes,
|
|
@@ -1566,6 +1584,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1566
1584
|
first_name: str | Omit = omit,
|
|
1567
1585
|
ip_address: str | Omit = omit,
|
|
1568
1586
|
is_affiliate: bool | Omit = omit,
|
|
1587
|
+
language: Language | Omit = omit,
|
|
1569
1588
|
last_name: str | Omit = omit,
|
|
1570
1589
|
metadata: Dict[str, object] | Omit = omit,
|
|
1571
1590
|
mobile_instance_id: str | Omit = omit,
|
|
@@ -1594,6 +1613,9 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1594
1613
|
non-affiliate without `affiliateStatus`. Existing participants are returned
|
|
1595
1614
|
unchanged.
|
|
1596
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
|
+
|
|
1597
1619
|
metadata: Shallow custom metadata object.
|
|
1598
1620
|
|
|
1599
1621
|
mobile_instance_id: Optional app-install scoped identifier for native mobile anti-fraud. Recommended
|
|
@@ -1626,6 +1648,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
1626
1648
|
"first_name": first_name,
|
|
1627
1649
|
"ip_address": ip_address,
|
|
1628
1650
|
"is_affiliate": is_affiliate,
|
|
1651
|
+
"language": language,
|
|
1629
1652
|
"last_name": last_name,
|
|
1630
1653
|
"metadata": metadata,
|
|
1631
1654
|
"mobile_instance_id": mobile_instance_id,
|
|
@@ -2287,7 +2310,7 @@ class AsyncParticipantResource(AsyncAPIResource):
|
|
|
2287
2310
|
name, postal address, and an unsubscribe link are added automatically, and
|
|
2288
2311
|
unsubscribed participants are suppressed). Sending requires the team to be
|
|
2289
2312
|
verified by GrowSurf. Requires a **verified custom email domain** on the program
|
|
2290
|
-
(which can be completed in *
|
|
2313
|
+
(which can be completed in *Program Editor > 3. Emails > Email Settings*).
|
|
2291
2314
|
Returns `400` until one is verified. The email is accepted for delivery.
|
|
2292
2315
|
|
|
2293
2316
|
Args:
|
|
@@ -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
|
|
{growsurf_python-1.12.0 → growsurf_python-1.13.1}/src/growsurf/resources/campaign/rewards.py
RENAMED
|
@@ -89,6 +89,7 @@ class RewardsResource(SyncAPIResource):
|
|
|
89
89
|
support only `AFFILIATE` rewards; referral programs support all other types).
|
|
90
90
|
Enabling an active reward of a type automatically enables that reward type on
|
|
91
91
|
the program.
|
|
92
|
+
A concurrent edit can return `409`; reload the program before retrying.
|
|
92
93
|
|
|
93
94
|
Args:
|
|
94
95
|
type: The reward type. Immutable after creation.
|
|
@@ -221,6 +222,9 @@ class RewardsResource(SyncAPIResource):
|
|
|
221
222
|
keys automatically rewrite any `{{campaignReward[…]}}` references in campaign
|
|
222
223
|
copy; removing a key that campaign copy still references returns a `409` listing
|
|
223
224
|
the referencing fields.
|
|
225
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
226
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
227
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
224
228
|
|
|
225
229
|
Args:
|
|
226
230
|
commission_structure: The affiliate commission structure (AFFILIATE rewards only).
|
|
@@ -455,6 +459,7 @@ class AsyncRewardsResource(AsyncAPIResource):
|
|
|
455
459
|
support only `AFFILIATE` rewards; referral programs support all other types).
|
|
456
460
|
Enabling an active reward of a type automatically enables that reward type on
|
|
457
461
|
the program.
|
|
462
|
+
A concurrent edit can return `409`; reload the program before retrying.
|
|
458
463
|
|
|
459
464
|
Args:
|
|
460
465
|
type: The reward type. Immutable after creation.
|
|
@@ -587,6 +592,9 @@ class AsyncRewardsResource(AsyncAPIResource):
|
|
|
587
592
|
keys automatically rewrite any `{{campaignReward[…]}}` references in campaign
|
|
588
593
|
copy; removing a key that campaign copy still references returns a `409` listing
|
|
589
594
|
the referencing fields.
|
|
595
|
+
Changes to participant email content are checked before saving. Rejected content returns
|
|
596
|
+
`400`; if the check is unavailable, `503` asks you to retry. Neither response saves the
|
|
597
|
+
change. A concurrent edit can return `409`; reload the program before retrying.
|
|
590
598
|
|
|
591
599
|
Args:
|
|
592
600
|
commission_structure: The affiliate commission structure (AFFILIATE rewards only).
|
|
@@ -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.12.0 → growsurf_python-1.13.1}/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`, `additionalLanguages`,
|
|
13
|
+
# and `showFlags`). 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.12.0 → growsurf_python-1.13.1}/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]
|
|
@@ -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]
|