From 316dc946032fb0ceb64ae03a9ca03b00b687a92f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 23:32:22 +0000 Subject: [PATCH 01/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index e284c0a..d06e1ef 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml -openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-7d07f940431b5639f643a4f1b35fddb31c382750eee128f26d3117a7b2715be3.yml +openapi_spec_hash: e16dd2048bf6170fab4a79fa447fafe1 config_hash: ad652575976c2c8db09e4575778f0e77 From ecd1295489e7c0a437906671fad77570caa3a352 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 00:32:25 +0000 Subject: [PATCH 02/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index d06e1ef..310eea2 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-7d07f940431b5639f643a4f1b35fddb31c382750eee128f26d3117a7b2715be3.yml -openapi_spec_hash: e16dd2048bf6170fab4a79fa447fafe1 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-1e9847292c05c78c15f923c8dda758bcb758c8c52d89dd26802b9e49da3c1320.yml +openapi_spec_hash: 26169c0fff4b02a0199d1976bac7180d config_hash: ad652575976c2c8db09e4575778f0e77 From d07b1bde47ec3f4e8ddb5ec2f170875d0180efba Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 01:32:18 +0000 Subject: [PATCH 03/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 310eea2..e284c0a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-1e9847292c05c78c15f923c8dda758bcb758c8c52d89dd26802b9e49da3c1320.yml -openapi_spec_hash: 26169c0fff4b02a0199d1976bac7180d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml +openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 config_hash: ad652575976c2c8db09e4575778f0e77 From dd437220cec290cd480449d572b59d81b8ce4557 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 02:32:26 +0000 Subject: [PATCH 04/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index e284c0a..a66dcfe 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml -openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-aa677fafd7dd18075e76b651884d5bf42b5516b575972e2543ccc5b5e8131789.yml +openapi_spec_hash: 6d463c2c204428a1b150e7973368038c config_hash: ad652575976c2c8db09e4575778f0e77 From 7bf80c981b9bce95af0cb0a1eecf2bbda6b9c849 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 03:32:16 +0000 Subject: [PATCH 05/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index a66dcfe..e284c0a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-aa677fafd7dd18075e76b651884d5bf42b5516b575972e2543ccc5b5e8131789.yml -openapi_spec_hash: 6d463c2c204428a1b150e7973368038c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml +openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 config_hash: ad652575976c2c8db09e4575778f0e77 From cc843dc308cd8b846a759de9c8b670272f9c71e5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 04:32:34 +0000 Subject: [PATCH 06/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index e284c0a..4bff6d2 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml -openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-be6397edd08ccd034fe9a58e7beab8c4177fa9f33d59e0441892539e85b4318f.yml +openapi_spec_hash: be62625a49fd6644372264a951b6954a config_hash: ad652575976c2c8db09e4575778f0e77 From 0cc65746adddf593bf88f17396c1ab127860af0d Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 05:32:22 +0000 Subject: [PATCH 07/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4bff6d2..80c05c7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-be6397edd08ccd034fe9a58e7beab8c4177fa9f33d59e0441892539e85b4318f.yml -openapi_spec_hash: be62625a49fd6644372264a951b6954a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-ca19b29d7fe8f8d2eb16138094e66d7a5e785f5b485e0b418ec2a4f5af41fc93.yml +openapi_spec_hash: 54f92a7d6d717823182c068078cb19ed config_hash: ad652575976c2c8db09e4575778f0e77 From efeab482b92fc38dc923b14b40c85df3452beb21 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 06:32:17 +0000 Subject: [PATCH 08/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 80c05c7..310eea2 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-ca19b29d7fe8f8d2eb16138094e66d7a5e785f5b485e0b418ec2a4f5af41fc93.yml -openapi_spec_hash: 54f92a7d6d717823182c068078cb19ed +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-1e9847292c05c78c15f923c8dda758bcb758c8c52d89dd26802b9e49da3c1320.yml +openapi_spec_hash: 26169c0fff4b02a0199d1976bac7180d config_hash: ad652575976c2c8db09e4575778f0e77 From f6ff0f27f492851d9faed4f2d894939ea0cb3277 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 07:32:17 +0000 Subject: [PATCH 09/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 310eea2..e284c0a 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-1e9847292c05c78c15f923c8dda758bcb758c8c52d89dd26802b9e49da3c1320.yml -openapi_spec_hash: 26169c0fff4b02a0199d1976bac7180d +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml +openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 config_hash: ad652575976c2c8db09e4575778f0e77 From 42a3b0ed01ad9db6bf7d0a899d71831fbfbcd861 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:48:31 +0000 Subject: [PATCH 10/15] feat(api): api update --- .stats.yml | 4 +- src/sent_dm/resources/messages.py | 6 +- src/sent_dm/resources/profiles/campaigns.py | 8 +- src/sent_dm/resources/profiles/profiles.py | 82 ++++++++----------- src/sent_dm/resources/templates.py | 12 ++- src/sent_dm/types/api_response_of_contact.py | 6 +- .../types/api_response_of_profile_detail.py | 6 +- src/sent_dm/types/api_response_of_user.py | 6 +- src/sent_dm/types/api_response_template.py | 6 +- src/sent_dm/types/api_response_webhook.py | 4 +- src/sent_dm/types/brands_brand_data_param.py | 6 +- src/sent_dm/types/contact_list_response.py | 10 +-- src/sent_dm/types/me_retrieve_response.py | 49 ++++++++--- .../message_retrieve_activities_response.py | 8 +- .../types/message_retrieve_status_response.py | 8 +- src/sent_dm/types/message_send_params.py | 9 +- src/sent_dm/types/message_send_response.py | 8 +- src/sent_dm/types/number_lookup_response.py | 4 +- src/sent_dm/types/pagination_meta.py | 4 +- src/sent_dm/types/profile_create_params.py | 37 ++++----- src/sent_dm/types/profile_detail.py | 27 ++---- src/sent_dm/types/profile_list_response.py | 8 +- src/sent_dm/types/profile_update_params.py | 21 ++--- ...response_of_tcr_campaign_with_use_cases.py | 4 +- .../types/profiles/campaign_create_params.py | 2 +- .../types/profiles/campaign_list_response.py | 4 +- .../types/profiles/campaign_update_params.py | 2 +- ..._campaigns_campaign_use_case_data_param.py | 1 - ...quests_brands_brand_business_info_param.py | 1 - ...ests_brands_brand_compliance_info_param.py | 2 - src/sent_dm/types/template_create_params.py | 5 +- .../types/template_definition_param.py | 11 +-- src/sent_dm/types/template_list_response.py | 10 +-- src/sent_dm/types/template_update_params.py | 5 +- src/sent_dm/types/user_list_response.py | 8 +- .../webhook_list_event_types_response.py | 4 +- .../types/webhook_list_events_response.py | 4 +- src/sent_dm/types/webhook_list_response.py | 4 +- .../types/webhook_rotate_secret_response.py | 4 +- src/sent_dm/types/webhook_test_response.py | 4 +- 40 files changed, 204 insertions(+), 210 deletions(-) diff --git a/.stats.yml b/.stats.yml index e284c0a..3aec758 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-38aaadafbb2bf0c5d5bb9330a0a5e7a89052fe3e791569c8a12051e040193edf.yml -openapi_spec_hash: 2d35c1223beebaf2c1b8d8a474cbf7c2 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2566cdc5d8e0bffe2a8c442692b0fc1b35d3bfe7e9bf578331fc19d402361c1f.yml +openapi_spec_hash: 85e1feeb9bbc8d59bb34d6cdd679575a config_hash: ad652575976c2c8db09e4575778f0e77 diff --git a/src/sent_dm/resources/messages.py b/src/sent_dm/resources/messages.py index d1395fa..530970a 100644 --- a/src/sent_dm/resources/messages.py +++ b/src/sent_dm/resources/messages.py @@ -153,7 +153,8 @@ def send( sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution - template: Template reference (by id or name, with optional parameters) + template: SDK-style template reference: resolve by ID or by name, with optional + parameters. to: List of recipient phone numbers in E.164 format (multi-recipient fan-out) @@ -320,7 +321,8 @@ async def send( sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution - template: Template reference (by id or name, with optional parameters) + template: SDK-style template reference: resolve by ID or by name, with optional + parameters. to: List of recipient phone numbers in E.164 format (multi-recipient fan-out) diff --git a/src/sent_dm/resources/profiles/campaigns.py b/src/sent_dm/resources/profiles/campaigns.py index 941865e..84eb013 100644 --- a/src/sent_dm/resources/profiles/campaigns.py +++ b/src/sent_dm/resources/profiles/campaigns.py @@ -66,7 +66,7 @@ def create( campaign must include at least one use case with sample messages. Args: - campaign: Campaign data + campaign: Campaign data for create or update operation sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution @@ -127,7 +127,7 @@ def update( update campaigns that have already been submitted to TCR. Args: - campaign: Campaign data + campaign: Campaign data for create or update operation sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution @@ -293,7 +293,7 @@ async def create( campaign must include at least one use case with sample messages. Args: - campaign: Campaign data + campaign: Campaign data for create or update operation sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution @@ -354,7 +354,7 @@ async def update( update campaigns that have already been submitted to TCR. Args: - campaign: Campaign data + campaign: Campaign data for create or update operation sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution diff --git a/src/sent_dm/resources/profiles/profiles.py b/src/sent_dm/resources/profiles/profiles.py index ee8a4b7..503c219 100644 --- a/src/sent_dm/resources/profiles/profiles.py +++ b/src/sent_dm/resources/profiles/profiles.py @@ -139,9 +139,8 @@ def create( allow_template_sharing: Whether templates are shared across profiles (default: false) - billing_contact: Billing contact for this profile. Required when billing_model is "profile" or - "profile_and_organization". Identifies who receives invoices and who is - responsible for payment. + billing_contact: Billing contact information for a profile. Required when billing_model is + "profile" or "profile_and_organization". billing_model: Billing model: profile, organization, or profile_and_organization (default: @@ -153,9 +152,7 @@ def create( - "profile_and_organization": the profile is billed first with the organization as fallback; billing_contact is required. - brand: Brand and KYC information for this profile (optional). When provided, creates - the brand associated with this profile. Cannot be set when inherit_tcr_brand is - true. + brand: Brand and KYC data grouped into contact, business, and compliance sections description: Profile description (optional) @@ -171,9 +168,9 @@ def create( name: Profile name (required) - payment_details: Payment card details for this profile (optional). Accepted when billing_model is - "profile" or "profile_and_organization". Not persisted on our servers — - forwarded to the payment processor. + payment_details: Payment card details for a profile. Accepted when billing_model is "profile" or + "profile_and_organization". These details are not stored on our servers and will + be forwarded to the payment processor. sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution @@ -182,11 +179,11 @@ def create( only letters, numbers, and spaces, and include at least one letter. Example: "SALES", "Mkt 2", "Support1". - whatsapp_business_account: Direct WhatsApp Business Account credentials for this profile. When provided, - the profile uses its own WhatsApp Business Account instead of inheriting from - the organization. When omitted, the profile inherits the organization's WhatsApp - Business Account (requires the organization to have completed WhatsApp Embedded - Signup). + whatsapp_business_account: Direct WhatsApp Business Account credentials for a profile. Use this when the + profile should have its own WhatsApp Business Account instead of inheriting from + the organization. Credentials must be obtained from Meta Business Manager by + creating a System User with whatsapp_business_messaging and + whatsapp_business_management scopes. extra_headers: Send extra headers @@ -332,9 +329,8 @@ def update( allow_template_sharing: Whether templates are shared across profiles (optional) - billing_contact: Billing contact for this profile. Required when billing_model is "profile" or - "profile_and_organization" and no billing contact has been configured yet. - Identifies who receives invoices and who is responsible for payment. + billing_contact: Billing contact information for a profile. Required when billing_model is + "profile" or "profile_and_organization". billing_model: Billing model: profile, organization, or profile_and_organization (optional). @@ -344,10 +340,7 @@ def update( - "profile_and_organization": the profile is billed first with the organization as fallback; billing_contact is required. - brand: Brand and KYC information for this profile (optional). When provided, creates or - updates the brand associated with this profile. Cannot be set when - inherit_tcr_brand is true. Once a brand has been submitted to TCR it cannot be - modified. + brand: Brand and KYC data grouped into contact, business, and compliance sections description: Profile description (optional) @@ -363,9 +356,9 @@ def update( name: Profile name (optional) - payment_details: Payment card details for this profile (optional). Accepted when billing_model is - "profile" or "profile_and_organization". Not persisted on our servers — - forwarded to the payment processor. + payment_details: Payment card details for a profile. Accepted when billing_model is "profile" or + "profile_and_organization". These details are not stored on our servers and will + be forwarded to the payment processor. sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution @@ -687,9 +680,8 @@ async def create( allow_template_sharing: Whether templates are shared across profiles (default: false) - billing_contact: Billing contact for this profile. Required when billing_model is "profile" or - "profile_and_organization". Identifies who receives invoices and who is - responsible for payment. + billing_contact: Billing contact information for a profile. Required when billing_model is + "profile" or "profile_and_organization". billing_model: Billing model: profile, organization, or profile_and_organization (default: @@ -701,9 +693,7 @@ async def create( - "profile_and_organization": the profile is billed first with the organization as fallback; billing_contact is required. - brand: Brand and KYC information for this profile (optional). When provided, creates - the brand associated with this profile. Cannot be set when inherit_tcr_brand is - true. + brand: Brand and KYC data grouped into contact, business, and compliance sections description: Profile description (optional) @@ -719,9 +709,9 @@ async def create( name: Profile name (required) - payment_details: Payment card details for this profile (optional). Accepted when billing_model is - "profile" or "profile_and_organization". Not persisted on our servers — - forwarded to the payment processor. + payment_details: Payment card details for a profile. Accepted when billing_model is "profile" or + "profile_and_organization". These details are not stored on our servers and will + be forwarded to the payment processor. sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution @@ -730,11 +720,11 @@ async def create( only letters, numbers, and spaces, and include at least one letter. Example: "SALES", "Mkt 2", "Support1". - whatsapp_business_account: Direct WhatsApp Business Account credentials for this profile. When provided, - the profile uses its own WhatsApp Business Account instead of inheriting from - the organization. When omitted, the profile inherits the organization's WhatsApp - Business Account (requires the organization to have completed WhatsApp Embedded - Signup). + whatsapp_business_account: Direct WhatsApp Business Account credentials for a profile. Use this when the + profile should have its own WhatsApp Business Account instead of inheriting from + the organization. Credentials must be obtained from Meta Business Manager by + creating a System User with whatsapp_business_messaging and + whatsapp_business_management scopes. extra_headers: Send extra headers @@ -880,9 +870,8 @@ async def update( allow_template_sharing: Whether templates are shared across profiles (optional) - billing_contact: Billing contact for this profile. Required when billing_model is "profile" or - "profile_and_organization" and no billing contact has been configured yet. - Identifies who receives invoices and who is responsible for payment. + billing_contact: Billing contact information for a profile. Required when billing_model is + "profile" or "profile_and_organization". billing_model: Billing model: profile, organization, or profile_and_organization (optional). @@ -892,10 +881,7 @@ async def update( - "profile_and_organization": the profile is billed first with the organization as fallback; billing_contact is required. - brand: Brand and KYC information for this profile (optional). When provided, creates or - updates the brand associated with this profile. Cannot be set when - inherit_tcr_brand is true. Once a brand has been submitted to TCR it cannot be - modified. + brand: Brand and KYC data grouped into contact, business, and compliance sections description: Profile description (optional) @@ -911,9 +897,9 @@ async def update( name: Profile name (optional) - payment_details: Payment card details for this profile (optional). Accepted when billing_model is - "profile" or "profile_and_organization". Not persisted on our servers — - forwarded to the payment processor. + payment_details: Payment card details for a profile. Accepted when billing_model is "profile" or + "profile_and_organization". These details are not stored on our servers and will + be forwarded to the payment processor. sandbox: Sandbox flag - when true, the operation is simulated without side effects Useful for testing integrations without actual execution diff --git a/src/sent_dm/resources/templates.py b/src/sent_dm/resources/templates.py index 6a1c138..174f768 100644 --- a/src/sent_dm/resources/templates.py +++ b/src/sent_dm/resources/templates.py @@ -82,7 +82,8 @@ def create( creation_source: Source of template creation (default: from-api) - definition: Template definition including header, body, footer, and buttons + definition: Complete definition of a message template including header, body, footer, and + buttons language: Template language code (e.g., en_US) (optional, auto-detected if not provided) @@ -190,7 +191,8 @@ def update( Args: category: Template category: MARKETING, UTILITY, AUTHENTICATION - definition: Template definition including header, body, footer, and buttons + definition: Complete definition of a message template including header, body, footer, and + buttons language: Template language code (e.g., en_US) @@ -410,7 +412,8 @@ async def create( creation_source: Source of template creation (default: from-api) - definition: Template definition including header, body, footer, and buttons + definition: Complete definition of a message template including header, body, footer, and + buttons language: Template language code (e.g., en_US) (optional, auto-detected if not provided) @@ -518,7 +521,8 @@ async def update( Args: category: Template category: MARKETING, UTILITY, AUTHENTICATION - definition: Template definition including header, body, footer, and buttons + definition: Complete definition of a message template including header, body, footer, and + buttons language: Template language code (e.g., en_US) diff --git a/src/sent_dm/types/api_response_of_contact.py b/src/sent_dm/types/api_response_of_contact.py index 18ddd9d..bdcbe65 100644 --- a/src/sent_dm/types/api_response_of_contact.py +++ b/src/sent_dm/types/api_response_of_contact.py @@ -14,13 +14,13 @@ class APIResponseOfContact(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[ContactResponse] = None - """The response data (null if error)""" + """Contact response for v3 API Uses snake_case for JSON property names""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/api_response_of_profile_detail.py b/src/sent_dm/types/api_response_of_profile_detail.py index df75d04..64335f5 100644 --- a/src/sent_dm/types/api_response_of_profile_detail.py +++ b/src/sent_dm/types/api_response_of_profile_detail.py @@ -14,13 +14,13 @@ class APIResponseOfProfileDetail(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[ProfileDetail] = None - """The response data (null if error)""" + """Detailed profile response for v3 API""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/api_response_of_user.py b/src/sent_dm/types/api_response_of_user.py index 62b90fc..7a21d69 100644 --- a/src/sent_dm/types/api_response_of_user.py +++ b/src/sent_dm/types/api_response_of_user.py @@ -14,13 +14,13 @@ class APIResponseOfUser(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[UserResponse] = None - """The response data (null if error)""" + """User response for v3 API""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/api_response_template.py b/src/sent_dm/types/api_response_template.py index 283b52e..25045be 100644 --- a/src/sent_dm/types/api_response_template.py +++ b/src/sent_dm/types/api_response_template.py @@ -14,13 +14,13 @@ class APIResponseTemplate(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Template] = None - """The response data (null if error)""" + """Template response for v3 API""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/api_response_webhook.py b/src/sent_dm/types/api_response_webhook.py index 6ec56e6..9f8f594 100644 --- a/src/sent_dm/types/api_response_webhook.py +++ b/src/sent_dm/types/api_response_webhook.py @@ -17,10 +17,10 @@ class APIResponseWebhook(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/brands_brand_data_param.py b/src/sent_dm/types/brands_brand_data_param.py index c0e5db7..02ea9ed 100644 --- a/src/sent_dm/types/brands_brand_data_param.py +++ b/src/sent_dm/types/brands_brand_data_param.py @@ -22,10 +22,10 @@ class BrandsBrandDataParam(TypedDict, total=False): """Brand and KYC data grouped into contact, business, and compliance sections""" compliance: Required[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam] - """Compliance and TCR-related information""" + """Compliance and TCR information for brand registration""" contact: Required[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam] - """Contact information for the brand""" + """Contact information for brand KYC""" business: Optional[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam] - """Business details and address information""" + """Business details and address for brand KYC""" diff --git a/src/sent_dm/types/contact_list_response.py b/src/sent_dm/types/contact_list_response.py index b10fd39..9727745 100644 --- a/src/sent_dm/types/contact_list_response.py +++ b/src/sent_dm/types/contact_list_response.py @@ -12,26 +12,26 @@ class Data(BaseModel): - """The response data (null if error)""" + """Paginated list of contacts response""" contacts: Optional[List[ContactResponse]] = None """List of contacts""" pagination: Optional[PaginationMeta] = None - """Pagination metadata""" + """Pagination metadata for list responses""" class ContactListResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """Paginated list of contacts response""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/me_retrieve_response.py b/src/sent_dm/types/me_retrieve_response.py index 151f9f3..dd86ed0 100644 --- a/src/sent_dm/types/me_retrieve_response.py +++ b/src/sent_dm/types/me_retrieve_response.py @@ -20,7 +20,7 @@ class DataChannelsRcs(BaseModel): - """RCS channel (provider: vibes)""" + """RCS channel configuration. When configured, includes the RCS phone number.""" configured: Optional[bool] = None """Whether RCS is configured for this account""" @@ -30,7 +30,7 @@ class DataChannelsRcs(BaseModel): class DataChannelsSMS(BaseModel): - """SMS channel (providers: telnyx, sinch)""" + """SMS channel configuration. When configured, includes the sending phone number.""" configured: Optional[bool] = None """Whether SMS is configured for this account""" @@ -40,7 +40,11 @@ class DataChannelsSMS(BaseModel): class DataChannelsWhatsapp(BaseModel): - """WhatsApp Business channel (provider: meta)""" + """WhatsApp Business channel configuration. + + When configured, includes the WhatsApp phone number + and business name. + """ business_name: Optional[str] = None """WhatsApp Business display name""" @@ -53,16 +57,23 @@ class DataChannelsWhatsapp(BaseModel): class DataChannels(BaseModel): - """Messaging channel configuration""" + """Messaging channel configuration. + + All three channels are always present. + Each channel has a "configured" flag; configured channels expose additional details. + """ rcs: Optional[DataChannelsRcs] = None - """RCS channel (provider: vibes)""" + """RCS channel configuration. When configured, includes the RCS phone number.""" sms: Optional[DataChannelsSMS] = None - """SMS channel (providers: telnyx, sinch)""" + """SMS channel configuration. When configured, includes the sending phone number.""" whatsapp: Optional[DataChannelsWhatsapp] = None - """WhatsApp Business channel (provider: meta)""" + """WhatsApp Business channel configuration. + + When configured, includes the WhatsApp phone number and business name. + """ class DataProfile(BaseModel): @@ -100,13 +111,21 @@ class DataProfile(BaseModel): class Data(BaseModel): - """The response data (null if error)""" + """ + Account response for GET /v3/me endpoint. + Returns organization (with profiles), user (standalone), or profile (child of an organization) + data depending on the API key type. Always includes messaging channel configuration. + """ id: Optional[str] = None """Customer ID (organization, account, or profile)""" channels: Optional[DataChannels] = None - """Messaging channel configuration""" + """Messaging channel configuration. + + All three channels are always present. Each channel has a "configured" flag; + configured channels expose additional details. + """ created_at: Optional[datetime] = None """When the account was created""" @@ -133,7 +152,7 @@ class Data(BaseModel): """ settings: Optional[ProfileSettings] = None - """Profile settings (only for profile type)""" + """Profile configuration settings""" short_name: Optional[str] = None """Short name / abbreviation (only for profile type)""" @@ -155,13 +174,17 @@ class MeRetrieveResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """ + Account response for GET /v3/me endpoint. Returns organization (with profiles), + user (standalone), or profile (child of an organization) data depending on the + API key type. Always includes messaging channel configuration. + """ error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/message_retrieve_activities_response.py b/src/sent_dm/types/message_retrieve_activities_response.py index 1dcf737..986492b 100644 --- a/src/sent_dm/types/message_retrieve_activities_response.py +++ b/src/sent_dm/types/message_retrieve_activities_response.py @@ -36,7 +36,7 @@ class DataActivity(BaseModel): class Data(BaseModel): - """The response data (null if error)""" + """Response for GET /messages/{id}/activities""" activities: Optional[List[DataActivity]] = None """List of activity events ordered by most recent first""" @@ -49,13 +49,13 @@ class MessageRetrieveActivitiesResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """Response for GET /messages/{id}/activities""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/message_retrieve_status_response.py b/src/sent_dm/types/message_retrieve_status_response.py index 4e0c015..20f7bc9 100644 --- a/src/sent_dm/types/message_retrieve_status_response.py +++ b/src/sent_dm/types/message_retrieve_status_response.py @@ -42,7 +42,7 @@ class DataMessageBody(BaseModel): class Data(BaseModel): - """The response data (null if error)""" + """Message response for v3 API — same shape as v2 with snake_case JSON conventions""" id: Optional[str] = None @@ -85,13 +85,13 @@ class MessageRetrieveStatusResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """Message response for v3 API — same shape as v2 with snake_case JSON conventions""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/message_send_params.py b/src/sent_dm/types/message_send_params.py index 701be84..5645c2f 100644 --- a/src/sent_dm/types/message_send_params.py +++ b/src/sent_dm/types/message_send_params.py @@ -27,7 +27,10 @@ class MessageSendParams(TypedDict, total=False): """ template: Template - """Template reference (by id or name, with optional parameters)""" + """ + SDK-style template reference: resolve by ID or by name, with optional + parameters. + """ to: SequenceNotStr[str] """List of recipient phone numbers in E.164 format (multi-recipient fan-out)""" @@ -38,7 +41,9 @@ class MessageSendParams(TypedDict, total=False): class Template(TypedDict, total=False): - """Template reference (by id or name, with optional parameters)""" + """ + SDK-style template reference: resolve by ID or by name, with optional parameters. + """ id: Optional[str] """Template ID (mutually exclusive with name)""" diff --git a/src/sent_dm/types/message_send_response.py b/src/sent_dm/types/message_send_response.py index fade660..44541da 100644 --- a/src/sent_dm/types/message_send_response.py +++ b/src/sent_dm/types/message_send_response.py @@ -26,7 +26,7 @@ class DataRecipient(BaseModel): class Data(BaseModel): - """The response data (null if error)""" + """Response for the multi-recipient send message endpoint""" body: Optional[str] = None """Resolved template body text""" @@ -48,13 +48,13 @@ class MessageSendResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """Response for the multi-recipient send message endpoint""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/number_lookup_response.py b/src/sent_dm/types/number_lookup_response.py index dd07228..ece5b95 100644 --- a/src/sent_dm/types/number_lookup_response.py +++ b/src/sent_dm/types/number_lookup_response.py @@ -38,10 +38,10 @@ class NumberLookupResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/pagination_meta.py b/src/sent_dm/types/pagination_meta.py index e18950d..cbd38f5 100644 --- a/src/sent_dm/types/pagination_meta.py +++ b/src/sent_dm/types/pagination_meta.py @@ -8,7 +8,7 @@ class Cursors(BaseModel): - """Cursor-based pagination (optional)""" + """Cursor-based pagination pointers""" after: Optional[str] = None """Cursor to fetch the next page""" @@ -21,7 +21,7 @@ class PaginationMeta(BaseModel): """Pagination metadata for list responses""" cursors: Optional[Cursors] = None - """Cursor-based pagination (optional)""" + """Cursor-based pagination pointers""" has_more: Optional[bool] = None """Whether there are more pages after this one""" diff --git a/src/sent_dm/types/profile_create_params.py b/src/sent_dm/types/profile_create_params.py index 9f8d194..0579b77 100644 --- a/src/sent_dm/types/profile_create_params.py +++ b/src/sent_dm/types/profile_create_params.py @@ -21,10 +21,9 @@ class ProfileCreateParams(TypedDict, total=False): """Whether templates are shared across profiles (default: false)""" billing_contact: Optional[BillingContactInfoParam] - """Billing contact for this profile. - - Required when billing_model is "profile" or "profile_and_organization". - Identifies who receives invoices and who is responsible for payment. + """ + Billing contact information for a profile. Required when billing_model is + "profile" or "profile_and_organization". """ billing_model: Optional[str] @@ -40,11 +39,7 @@ class ProfileCreateParams(TypedDict, total=False): """ brand: Optional[BrandsBrandDataParam] - """ - Brand and KYC information for this profile (optional). When provided, creates - the brand associated with this profile. Cannot be set when inherit_tcr_brand is - true. - """ + """Brand and KYC data grouped into contact, business, and compliance sections""" description: Optional[str] """Profile description (optional)""" @@ -69,9 +64,9 @@ class ProfileCreateParams(TypedDict, total=False): payment_details: Optional[PaymentDetailsParam] """ - Payment card details for this profile (optional). Accepted when billing_model is - "profile" or "profile_and_organization". Not persisted on our servers — - forwarded to the payment processor. + Payment card details for a profile. Accepted when billing_model is "profile" or + "profile_and_organization". These details are not stored on our servers and will + be forwarded to the payment processor. """ sandbox: bool @@ -89,11 +84,11 @@ class ProfileCreateParams(TypedDict, total=False): whatsapp_business_account: Optional[WhatsappBusinessAccount] """ - Direct WhatsApp Business Account credentials for this profile. When provided, - the profile uses its own WhatsApp Business Account instead of inheriting from - the organization. When omitted, the profile inherits the organization's WhatsApp - Business Account (requires the organization to have completed WhatsApp Embedded - Signup). + Direct WhatsApp Business Account credentials for a profile. Use this when the + profile should have its own WhatsApp Business Account instead of inheriting from + the organization. Credentials must be obtained from Meta Business Manager by + creating a System User with whatsapp_business_messaging and + whatsapp_business_management scopes. """ idempotency_key: Annotated[str, PropertyInfo(alias="Idempotency-Key")] @@ -103,10 +98,10 @@ class ProfileCreateParams(TypedDict, total=False): class WhatsappBusinessAccount(TypedDict, total=False): """ - Direct WhatsApp Business Account credentials for this profile. - When provided, the profile uses its own WhatsApp Business Account instead of inheriting from the organization. - When omitted, the profile inherits the organization's WhatsApp Business Account (requires the organization - to have completed WhatsApp Embedded Signup). + Direct WhatsApp Business Account credentials for a profile. + Use this when the profile should have its own WhatsApp Business Account instead of inheriting from the organization. + Credentials must be obtained from Meta Business Manager by creating a System User with + whatsapp_business_messaging and whatsapp_business_management scopes. """ access_token: Required[str] diff --git a/src/sent_dm/types/profile_detail.py b/src/sent_dm/types/profile_detail.py index 1bc7437..ef3f734 100644 --- a/src/sent_dm/types/profile_detail.py +++ b/src/sent_dm/types/profile_detail.py @@ -13,10 +13,7 @@ class BillingContact(BaseModel): - """Billing contact for this profile. - - Present when billing_model is "profile" or "profile_and_organization". - """ + """Billing contact info returned in profile responses""" address: Optional[str] = None @@ -68,7 +65,6 @@ class BrandCompliance(BaseModel): """Compliance and TCR-related information""" brand_relationship: Optional[TcrBrandRelationship] = None - """Brand relationship level with TCR""" destination_countries: Optional[List[DestinationCountry]] = None """List of destination countries for messaging""" @@ -89,7 +85,6 @@ class BrandCompliance(BaseModel): """Primary messaging use case description""" vertical: Optional[TcrVertical] = None - """Business vertical/industry category""" class BrandContact(BaseModel): @@ -115,10 +110,8 @@ class BrandContact(BaseModel): class Brand(BaseModel): - """Brand associated with this profile. - - Null if no brand has been configured yet. - Includes KYC information and TCR registration status. + """ + Brand response with nested contact, business, and compliance sections — mirrors the request structure. """ id: Optional[str] = None @@ -140,13 +133,11 @@ class Brand(BaseModel): """CSP (Campaign Service Provider) ID""" identity_status: Optional[Literal["SELF_DECLARED", "UNVERIFIED", "VERIFIED", "VETTED_VERIFIED"]] = None - """TCR brand identity verification status""" is_inherited: Optional[bool] = None """Whether this brand is inherited from the parent organization""" status: Optional[Literal["ACTIVE", "INACTIVE", "SUSPENDED"]] = None - """TCR brand status""" submitted_at: Optional[datetime] = None """When the brand was submitted to TCR""" @@ -180,19 +171,15 @@ class ProfileDetail(BaseModel): """Whether templates are shared across profiles in the organization""" billing_contact: Optional[BillingContact] = None - """Billing contact for this profile. - - Present when billing_model is "profile" or "profile_and_organization". - """ + """Billing contact info returned in profile responses""" billing_model: Optional[str] = None """Billing model: profile, organization, or profile_and_organization""" brand: Optional[Brand] = None - """Brand associated with this profile. - - Null if no brand has been configured yet. Includes KYC information and TCR - registration status. + """ + Brand response with nested contact, business, and compliance sections — mirrors + the request structure. """ created_at: Optional[datetime] = None diff --git a/src/sent_dm/types/profile_list_response.py b/src/sent_dm/types/profile_list_response.py index 01d729f..f54be3d 100644 --- a/src/sent_dm/types/profile_list_response.py +++ b/src/sent_dm/types/profile_list_response.py @@ -11,7 +11,7 @@ class Data(BaseModel): - """The response data (null if error)""" + """List of profiles response""" profiles: Optional[List[ProfileDetail]] = None """List of profiles in the organization""" @@ -21,13 +21,13 @@ class ProfileListResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """List of profiles response""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/profile_update_params.py b/src/sent_dm/types/profile_update_params.py index 696f519..da08aac 100644 --- a/src/sent_dm/types/profile_update_params.py +++ b/src/sent_dm/types/profile_update_params.py @@ -24,11 +24,9 @@ class ProfileUpdateParams(TypedDict, total=False): """Whether templates are shared across profiles (optional)""" billing_contact: Optional[BillingContactInfoParam] - """Billing contact for this profile. - - Required when billing_model is "profile" or "profile_and_organization" and no - billing contact has been configured yet. Identifies who receives invoices and - who is responsible for payment. + """ + Billing contact information for a profile. Required when billing_model is + "profile" or "profile_and_organization". """ billing_model: Optional[str] @@ -42,12 +40,7 @@ class ProfileUpdateParams(TypedDict, total=False): """ brand: Optional[BrandsBrandDataParam] - """ - Brand and KYC information for this profile (optional). When provided, creates or - updates the brand associated with this profile. Cannot be set when - inherit_tcr_brand is true. Once a brand has been submitted to TCR it cannot be - modified. - """ + """Brand and KYC data grouped into contact, business, and compliance sections""" description: Optional[str] """Profile description (optional)""" @@ -72,9 +65,9 @@ class ProfileUpdateParams(TypedDict, total=False): payment_details: Optional[PaymentDetailsParam] """ - Payment card details for this profile (optional). Accepted when billing_model is - "profile" or "profile_and_organization". Not persisted on our servers — - forwarded to the payment processor. + Payment card details for a profile. Accepted when billing_model is "profile" or + "profile_and_organization". These details are not stored on our servers and will + be forwarded to the payment processor. """ sandbox: bool diff --git a/src/sent_dm/types/profiles/api_response_of_tcr_campaign_with_use_cases.py b/src/sent_dm/types/profiles/api_response_of_tcr_campaign_with_use_cases.py index 55ede5f..04c6a0b 100644 --- a/src/sent_dm/types/profiles/api_response_of_tcr_campaign_with_use_cases.py +++ b/src/sent_dm/types/profiles/api_response_of_tcr_campaign_with_use_cases.py @@ -17,10 +17,10 @@ class APIResponseOfTcrCampaignWithUseCases(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/profiles/campaign_create_params.py b/src/sent_dm/types/profiles/campaign_create_params.py index 7f497dd..823e3f4 100644 --- a/src/sent_dm/types/profiles/campaign_create_params.py +++ b/src/sent_dm/types/profiles/campaign_create_params.py @@ -12,7 +12,7 @@ class CampaignCreateParams(TypedDict, total=False): campaign: Required[CampaignDataParam] - """Campaign data""" + """Campaign data for create or update operation""" sandbox: bool """ diff --git a/src/sent_dm/types/profiles/campaign_list_response.py b/src/sent_dm/types/profiles/campaign_list_response.py index 0a389fa..059ec96 100644 --- a/src/sent_dm/types/profiles/campaign_list_response.py +++ b/src/sent_dm/types/profiles/campaign_list_response.py @@ -17,10 +17,10 @@ class CampaignListResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/profiles/campaign_update_params.py b/src/sent_dm/types/profiles/campaign_update_params.py index a27401b..4a6c968 100644 --- a/src/sent_dm/types/profiles/campaign_update_params.py +++ b/src/sent_dm/types/profiles/campaign_update_params.py @@ -14,7 +14,7 @@ class CampaignUpdateParams(TypedDict, total=False): profile_id: Required[Annotated[str, PropertyInfo(alias="profileId")]] campaign: Required[CampaignDataParam] - """Campaign data""" + """Campaign data for create or update operation""" sandbox: bool """ diff --git a/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py b/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py index 9915f23..0527f60 100644 --- a/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py +++ b/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py @@ -15,7 +15,6 @@ class SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseC """Campaign use case with sample messages""" messaging_use_case_us: Required[Annotated[MessagingUseCaseUs, PropertyInfo(alias="messagingUseCaseUs")]] - """US messaging use case category""" sample_messages: Required[Annotated[SequenceNotStr[str], PropertyInfo(alias="sampleMessages")]] """Sample messages for this use case (1-5 messages, max 1024 characters each)""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py index dad5090..dfb0149 100644 --- a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py +++ b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py @@ -26,7 +26,6 @@ class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessIn Optional[Literal["PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "SOLE_PROPRIETOR", "GOVERNMENT"]], PropertyInfo(alias="entityType"), ] - """Business entity type""" legal_name: Annotated[Optional[str], PropertyInfo(alias="legalName")] """Legal business name""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py index 5b787cd..2030a52 100644 --- a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py +++ b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py @@ -17,10 +17,8 @@ class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandCompliance """Compliance and TCR information for brand registration""" brand_relationship: Required[Annotated[TcrBrandRelationship, PropertyInfo(alias="brandRelationship")]] - """Brand relationship level with TCR (required for TCR)""" vertical: Required[TcrVertical] - """Business vertical/industry category (required for TCR)""" destination_countries: Annotated[ Optional[Iterable[DestinationCountryParam]], PropertyInfo(alias="destinationCountries") diff --git a/src/sent_dm/types/template_create_params.py b/src/sent_dm/types/template_create_params.py index dce9066..a740609 100644 --- a/src/sent_dm/types/template_create_params.py +++ b/src/sent_dm/types/template_create_params.py @@ -22,7 +22,10 @@ class TemplateCreateParams(TypedDict, total=False): """Source of template creation (default: from-api)""" definition: TemplateDefinitionParam - """Template definition including header, body, footer, and buttons""" + """ + Complete definition of a message template including header, body, footer, and + buttons + """ language: Optional[str] """Template language code (e.g., en_US) (optional, auto-detected if not provided)""" diff --git a/src/sent_dm/types/template_definition_param.py b/src/sent_dm/types/template_definition_param.py index e3fa488..055f801 100644 --- a/src/sent_dm/types/template_definition_param.py +++ b/src/sent_dm/types/template_definition_param.py @@ -31,16 +31,13 @@ class TemplateDefinitionParam(TypedDict, total=False): """ body: Required[SentDmServicesCommonContractsPocOsTemplateBodyParam] - """ - Required template body with content for different channels (multi-channel, - SMS-specific, or WhatsApp-specific) - """ + """Body section of a message template with channel-specific content""" authentication_config: Annotated[ Optional[SentDmServicesCommonContractsPocOsAuthenticationConfigParam], PropertyInfo(alias="authenticationConfig"), ] - """Configuration specific to AUTHENTICATION category templates (optional)""" + """Configuration for AUTHENTICATION category templates""" buttons: Optional[Iterable[SentDmServicesCommonContractsPocOsTemplateButtonParam]] """Optional list of interactive buttons (e.g., quick replies, URLs, phone numbers)""" @@ -49,7 +46,7 @@ class TemplateDefinitionParam(TypedDict, total=False): """The version of the template definition format""" footer: Optional[SentDmServicesCommonContractsPocOsTemplateFooterParam] - """Optional template footer with optional variables""" + """Footer section of a message template""" header: Optional[SentDmServicesCommonContractsPocOsTemplateHeaderParam] - """Optional template header with optional variables""" + """Header section of a message template""" diff --git a/src/sent_dm/types/template_list_response.py b/src/sent_dm/types/template_list_response.py index b41e9f8..657027e 100644 --- a/src/sent_dm/types/template_list_response.py +++ b/src/sent_dm/types/template_list_response.py @@ -12,10 +12,10 @@ class Data(BaseModel): - """The response data (null if error)""" + """Paginated list of templates""" pagination: Optional[PaginationMeta] = None - """Pagination metadata""" + """Pagination metadata for list responses""" templates: Optional[List[Template]] = None """List of templates""" @@ -25,13 +25,13 @@ class TemplateListResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """Paginated list of templates""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/template_update_params.py b/src/sent_dm/types/template_update_params.py index 54bbd9f..7c6b98d 100644 --- a/src/sent_dm/types/template_update_params.py +++ b/src/sent_dm/types/template_update_params.py @@ -16,7 +16,10 @@ class TemplateUpdateParams(TypedDict, total=False): """Template category: MARKETING, UTILITY, AUTHENTICATION""" definition: Optional[TemplateDefinitionParam] - """Template definition including header, body, footer, and buttons""" + """ + Complete definition of a message template including header, body, footer, and + buttons + """ language: Optional[str] """Template language code (e.g., en_US)""" diff --git a/src/sent_dm/types/user_list_response.py b/src/sent_dm/types/user_list_response.py index add6fb1..8878e4d 100644 --- a/src/sent_dm/types/user_list_response.py +++ b/src/sent_dm/types/user_list_response.py @@ -11,7 +11,7 @@ class Data(BaseModel): - """The response data (null if error)""" + """List of users response""" users: Optional[List[UserResponse]] = None """List of users in the organization""" @@ -21,13 +21,13 @@ class UserListResponse(BaseModel): """Standard API response envelope for all v3 endpoints""" data: Optional[Data] = None - """The response data (null if error)""" + """List of users response""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/webhook_list_event_types_response.py b/src/sent_dm/types/webhook_list_event_types_response.py index fdf011f..3cbcd53 100644 --- a/src/sent_dm/types/webhook_list_event_types_response.py +++ b/src/sent_dm/types/webhook_list_event_types_response.py @@ -32,10 +32,10 @@ class WebhookListEventTypesResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/webhook_list_events_response.py b/src/sent_dm/types/webhook_list_events_response.py index cc89b1c..d1fa58e 100644 --- a/src/sent_dm/types/webhook_list_events_response.py +++ b/src/sent_dm/types/webhook_list_events_response.py @@ -51,10 +51,10 @@ class WebhookListEventsResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/webhook_list_response.py b/src/sent_dm/types/webhook_list_response.py index 5192d5f..61c24aa 100644 --- a/src/sent_dm/types/webhook_list_response.py +++ b/src/sent_dm/types/webhook_list_response.py @@ -27,10 +27,10 @@ class WebhookListResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/webhook_rotate_secret_response.py b/src/sent_dm/types/webhook_rotate_secret_response.py index e7ee6e2..4304204 100644 --- a/src/sent_dm/types/webhook_rotate_secret_response.py +++ b/src/sent_dm/types/webhook_rotate_secret_response.py @@ -22,10 +22,10 @@ class WebhookRotateSecretResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" diff --git a/src/sent_dm/types/webhook_test_response.py b/src/sent_dm/types/webhook_test_response.py index 08af11c..9de2e6b 100644 --- a/src/sent_dm/types/webhook_test_response.py +++ b/src/sent_dm/types/webhook_test_response.py @@ -24,10 +24,10 @@ class WebhookTestResponse(BaseModel): """The response data (null if error)""" error: Optional[APIError] = None - """Error details (null if successful)""" + """Error information""" meta: Optional[APIMeta] = None - """Metadata about the request and response""" + """Request and response metadata""" success: Optional[bool] = None """Indicates whether the request was successful""" From 7c9c66ac0bc7944a91e658a311dfd38f70e9adf8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:53:32 +0000 Subject: [PATCH 11/15] feat(api): manual updates --- .stats.yml | 2 +- api.md | 21 +-- src/sent_dm/resources/profiles/profiles.py | 26 ++-- src/sent_dm/types/__init__.py | 32 +--- src/sent_dm/types/brands_brand_data_param.py | 114 ++++++++++++-- src/sent_dm/types/contact_delete_params.py | 4 +- ...ase_param.py => mutation_request_param.py} | 4 +- ...p_params.py => profile_complete_params.py} | 4 +- src/sent_dm/types/profile_delete_params.py | 4 +- src/sent_dm/types/profiles/__init__.py | 4 +- .../types/{shared => profiles}/base_dto.py | 0 .../types/profiles/campaign_data_param.py | 23 +-- .../types/profiles/campaign_delete_params.py | 4 +- ..._campaigns_campaign_use_case_data_param.py | 20 --- .../profiles/tcr_campaign_with_use_cases.py | 2 +- ...acts_poc_os_authentication_config_param.py | 26 ---- ...on_contracts_poc_os_template_body_param.py | 30 ---- ..._contracts_poc_os_template_button_param.py | 26 ---- ...acts_poc_os_template_button_props_param.py | 36 ----- ..._contracts_poc_os_template_footer_param.py | 23 --- ..._contracts_poc_os_template_header_param.py | 26 ---- ...quests_brands_brand_business_info_param.py | 49 ------ ...ests_brands_brand_compliance_info_param.py | 41 ----- ...equests_brands_brand_contact_info_param.py | 32 ---- src/sent_dm/types/shared/__init__.py | 3 - .../types/template_definition_param.py | 141 ++++++++++++++---- src/sent_dm/types/user_remove_params.py | 4 +- .../types/webhook_rotate_secret_params.py | 4 +- tests/api_resources/test_profiles.py | 40 ++--- 29 files changed, 283 insertions(+), 462 deletions(-) rename src/sent_dm/types/{mutation_request_base_param.py => mutation_request_param.py} (78%) rename src/sent_dm/types/{profile_complete_setup_params.py => profile_complete_params.py} (87%) rename src/sent_dm/types/{shared => profiles}/base_dto.py (100%) delete mode 100644 src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py delete mode 100644 src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py delete mode 100644 src/sent_dm/types/shared/__init__.py diff --git a/.stats.yml b/.stats.yml index 3aec758..4792a46 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2566cdc5d8e0bffe2a8c442692b0fc1b35d3bfe7e9bf578331fc19d402361c1f.yml openapi_spec_hash: 85e1feeb9bbc8d59bb34d6cdd679575a -config_hash: ad652575976c2c8db09e4575778f0e77 +config_hash: 676ee4f74f5b328b155283c879154b66 diff --git a/api.md b/api.md index 42fc91e..3f3b667 100644 --- a/api.md +++ b/api.md @@ -1,9 +1,3 @@ -# Shared Types - -```python -from sent_dm.types import BaseDto -``` - # Webhooks Types: @@ -13,7 +7,7 @@ from sent_dm.types import ( APIError, APIMeta, APIResponseWebhook, - MutationRequestBase, + MutationRequest, PaginationMeta, WebhookResponse, WebhookListResponse, @@ -60,12 +54,6 @@ Types: ```python from sent_dm.types import ( APIResponseTemplate, - SentDmServicesCommonContractsPocOsAuthenticationConfig, - SentDmServicesCommonContractsPocOsTemplateBody, - SentDmServicesCommonContractsPocOsTemplateButton, - SentDmServicesCommonContractsPocOsTemplateButtonProps, - SentDmServicesCommonContractsPocOsTemplateFooter, - SentDmServicesCommonContractsPocOsTemplateHeader, Template, TemplateBodyContent, TemplateDefinition, @@ -94,9 +82,6 @@ from sent_dm.types import ( DestinationCountry, PaymentDetails, ProfileDetail, - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfo, - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfo, - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfo, TcrBrandRelationship, TcrVertical, ProfileListResponse, @@ -110,7 +95,7 @@ Methods: - client.profiles.update(profile_id, \*\*params) -> APIResponseOfProfileDetail - client.profiles.list() -> ProfileListResponse - client.profiles.delete(profile_id, \*\*params) -> None -- client.profiles.complete_setup(profile_id, \*\*params) -> object +- client.profiles.complete(profile_id, \*\*params) -> object ## Campaigns @@ -119,9 +104,9 @@ Types: ```python from sent_dm.types.profiles import ( APIResponseOfTcrCampaignWithUseCases, + BaseDto, CampaignData, MessagingUseCaseUs, - SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseData, TcrCampaignWithUseCases, CampaignListResponse, ) diff --git a/src/sent_dm/resources/profiles/profiles.py b/src/sent_dm/resources/profiles/profiles.py index 503c219..bbfcd9e 100644 --- a/src/sent_dm/resources/profiles/profiles.py +++ b/src/sent_dm/resources/profiles/profiles.py @@ -10,7 +10,7 @@ profile_create_params, profile_delete_params, profile_update_params, - profile_complete_setup_params, + profile_complete_params, ) from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given from ..._utils import maybe_transform, strip_not_given, async_maybe_transform @@ -504,7 +504,7 @@ def delete( cast_to=NoneType, ) - def complete_setup( + def complete( self, profile_id: str, *, @@ -572,7 +572,7 @@ def complete_setup( "web_hook_url": web_hook_url, "sandbox": sandbox, }, - profile_complete_setup_params.ProfileCompleteSetupParams, + profile_complete_params.ProfileCompleteParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout @@ -1045,7 +1045,7 @@ async def delete( cast_to=NoneType, ) - async def complete_setup( + async def complete( self, profile_id: str, *, @@ -1113,7 +1113,7 @@ async def complete_setup( "web_hook_url": web_hook_url, "sandbox": sandbox, }, - profile_complete_setup_params.ProfileCompleteSetupParams, + profile_complete_params.ProfileCompleteParams, ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout @@ -1141,8 +1141,8 @@ def __init__(self, profiles: ProfilesResource) -> None: self.delete = to_raw_response_wrapper( profiles.delete, ) - self.complete_setup = to_raw_response_wrapper( - profiles.complete_setup, + self.complete = to_raw_response_wrapper( + profiles.complete, ) @cached_property @@ -1170,8 +1170,8 @@ def __init__(self, profiles: AsyncProfilesResource) -> None: self.delete = async_to_raw_response_wrapper( profiles.delete, ) - self.complete_setup = async_to_raw_response_wrapper( - profiles.complete_setup, + self.complete = async_to_raw_response_wrapper( + profiles.complete, ) @cached_property @@ -1199,8 +1199,8 @@ def __init__(self, profiles: ProfilesResource) -> None: self.delete = to_streamed_response_wrapper( profiles.delete, ) - self.complete_setup = to_streamed_response_wrapper( - profiles.complete_setup, + self.complete = to_streamed_response_wrapper( + profiles.complete, ) @cached_property @@ -1228,8 +1228,8 @@ def __init__(self, profiles: AsyncProfilesResource) -> None: self.delete = async_to_streamed_response_wrapper( profiles.delete, ) - self.complete_setup = async_to_streamed_response_wrapper( - profiles.complete_setup, + self.complete = async_to_streamed_response_wrapper( + profiles.complete, ) @cached_property diff --git a/src/sent_dm/types/__init__.py b/src/sent_dm/types/__init__.py index 3be54f9..9adbf8a 100644 --- a/src/sent_dm/types/__init__.py +++ b/src/sent_dm/types/__init__.py @@ -2,7 +2,6 @@ from __future__ import annotations -from .shared import BaseDto as BaseDto from .api_meta import APIMeta as APIMeta from .template import Template as Template from .api_error import APIError as APIError @@ -40,6 +39,7 @@ from .webhook_list_response import WebhookListResponse as WebhookListResponse from .webhook_test_response import WebhookTestResponse as WebhookTestResponse from .webhook_update_params import WebhookUpdateParams as WebhookUpdateParams +from .mutation_request_param import MutationRequestParam as MutationRequestParam from .number_lookup_response import NumberLookupResponse as NumberLookupResponse from .tcr_brand_relationship import TcrBrandRelationship as TcrBrandRelationship from .template_create_params import TemplateCreateParams as TemplateCreateParams @@ -48,47 +48,19 @@ from .template_update_params import TemplateUpdateParams as TemplateUpdateParams from .api_response_of_contact import APIResponseOfContact as APIResponseOfContact from .brands_brand_data_param import BrandsBrandDataParam as BrandsBrandDataParam +from .profile_complete_params import ProfileCompleteParams as ProfileCompleteParams from .template_variable_param import TemplateVariableParam as TemplateVariableParam from .user_update_role_params import UserUpdateRoleParams as UserUpdateRoleParams from .destination_country_param import DestinationCountryParam as DestinationCountryParam from .template_definition_param import TemplateDefinitionParam as TemplateDefinitionParam from .billing_contact_info_param import BillingContactInfoParam as BillingContactInfoParam from .webhook_list_events_params import WebhookListEventsParams as WebhookListEventsParams -from .mutation_request_base_param import MutationRequestBaseParam as MutationRequestBaseParam from .template_body_content_param import TemplateBodyContentParam as TemplateBodyContentParam from .webhook_list_events_response import WebhookListEventsResponse as WebhookListEventsResponse from .webhook_rotate_secret_params import WebhookRotateSecretParams as WebhookRotateSecretParams from .webhook_toggle_status_params import WebhookToggleStatusParams as WebhookToggleStatusParams -from .profile_complete_setup_params import ProfileCompleteSetupParams as ProfileCompleteSetupParams from .api_response_of_profile_detail import APIResponseOfProfileDetail as APIResponseOfProfileDetail from .webhook_rotate_secret_response import WebhookRotateSecretResponse as WebhookRotateSecretResponse from .message_retrieve_status_response import MessageRetrieveStatusResponse as MessageRetrieveStatusResponse from .webhook_list_event_types_response import WebhookListEventTypesResponse as WebhookListEventTypesResponse from .message_retrieve_activities_response import MessageRetrieveActivitiesResponse as MessageRetrieveActivitiesResponse -from .sent_dm_services_common_contracts_poc_os_template_body_param import ( - SentDmServicesCommonContractsPocOsTemplateBodyParam as SentDmServicesCommonContractsPocOsTemplateBodyParam, -) -from .sent_dm_services_common_contracts_poc_os_template_button_param import ( - SentDmServicesCommonContractsPocOsTemplateButtonParam as SentDmServicesCommonContractsPocOsTemplateButtonParam, -) -from .sent_dm_services_common_contracts_poc_os_template_footer_param import ( - SentDmServicesCommonContractsPocOsTemplateFooterParam as SentDmServicesCommonContractsPocOsTemplateFooterParam, -) -from .sent_dm_services_common_contracts_poc_os_template_header_param import ( - SentDmServicesCommonContractsPocOsTemplateHeaderParam as SentDmServicesCommonContractsPocOsTemplateHeaderParam, -) -from .sent_dm_services_common_contracts_poc_os_authentication_config_param import ( - SentDmServicesCommonContractsPocOsAuthenticationConfigParam as SentDmServicesCommonContractsPocOsAuthenticationConfigParam, -) -from .sent_dm_services_common_contracts_poc_os_template_button_props_param import ( - SentDmServicesCommonContractsPocOsTemplateButtonPropsParam as SentDmServicesCommonContractsPocOsTemplateButtonPropsParam, -) -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam, -) -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam, -) -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam, -) diff --git a/src/sent_dm/types/brands_brand_data_param.py b/src/sent_dm/types/brands_brand_data_param.py index 02ea9ed..26a616e 100644 --- a/src/sent_dm/types/brands_brand_data_param.py +++ b/src/sent_dm/types/brands_brand_data_param.py @@ -2,30 +2,114 @@ from __future__ import annotations -from typing import Optional -from typing_extensions import Required, TypedDict +from typing import Iterable, Optional +from typing_extensions import Literal, Required, Annotated, TypedDict -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam, -) -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam, -) -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam, -) +from .._utils import PropertyInfo +from .tcr_vertical import TcrVertical +from .tcr_brand_relationship import TcrBrandRelationship +from .destination_country_param import DestinationCountryParam -__all__ = ["BrandsBrandDataParam"] +__all__ = ["BrandsBrandDataParam", "Compliance", "Contact", "Business"] + + +class Compliance(TypedDict, total=False): + """Compliance and TCR information for brand registration""" + + brand_relationship: Required[Annotated[TcrBrandRelationship, PropertyInfo(alias="brandRelationship")]] + + vertical: Required[TcrVertical] + + destination_countries: Annotated[ + Optional[Iterable[DestinationCountryParam]], PropertyInfo(alias="destinationCountries") + ] + """List of destination countries for messaging""" + + expected_messaging_volume: Annotated[Optional[str], PropertyInfo(alias="expectedMessagingVolume")] + """Expected daily messaging volume""" + + is_tcr_application: Annotated[Optional[bool], PropertyInfo(alias="isTcrApplication")] + """Whether this is a TCR (Campaign Registry) application""" + + notes: Optional[str] + """Additional notes about the business or use case""" + + phone_number_prefix: Annotated[Optional[str], PropertyInfo(alias="phoneNumberPrefix")] + """Phone number prefix for messaging (e.g., "+1")""" + + primary_use_case: Annotated[Optional[str], PropertyInfo(alias="primaryUseCase")] + """Primary messaging use case description""" + + +class Contact(TypedDict, total=False): + """Contact information for brand KYC""" + + name: Required[str] + """Primary contact name (required)""" + + business_name: Annotated[Optional[str], PropertyInfo(alias="businessName")] + """Business/brand name""" + + email: Optional[str] + """Contact email address""" + + phone: Optional[str] + """Contact phone number in E.164 format""" + + phone_country_code: Annotated[Optional[str], PropertyInfo(alias="phoneCountryCode")] + """Contact phone country code (e.g., "1" for US)""" + + role: Optional[str] + """Contact's role in the business""" + + +class Business(TypedDict, total=False): + """Business details and address for brand KYC""" + + city: Optional[str] + """City""" + + country: Optional[str] + """Country code (e.g., US, CA)""" + + country_of_registration: Annotated[Optional[str], PropertyInfo(alias="countryOfRegistration")] + """Country where the business is registered""" + + entity_type: Annotated[ + Optional[Literal["PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "SOLE_PROPRIETOR", "GOVERNMENT"]], + PropertyInfo(alias="entityType"), + ] + + legal_name: Annotated[Optional[str], PropertyInfo(alias="legalName")] + """Legal business name""" + + postal_code: Annotated[Optional[str], PropertyInfo(alias="postalCode")] + """Postal/ZIP code""" + + state: Optional[str] + """State/province code""" + + street: Optional[str] + """Street address""" + + tax_id: Annotated[Optional[str], PropertyInfo(alias="taxId")] + """Tax ID/EIN number""" + + tax_id_type: Annotated[Optional[str], PropertyInfo(alias="taxIdType")] + """Type of tax ID (e.g., us_ein, ca_bn)""" + + url: Optional[str] + """Business website URL""" class BrandsBrandDataParam(TypedDict, total=False): """Brand and KYC data grouped into contact, business, and compliance sections""" - compliance: Required[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam] + compliance: Required[Compliance] """Compliance and TCR information for brand registration""" - contact: Required[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam] + contact: Required[Contact] """Contact information for brand KYC""" - business: Optional[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam] + business: Optional[Business] """Business details and address for brand KYC""" diff --git a/src/sent_dm/types/contact_delete_params.py b/src/sent_dm/types/contact_delete_params.py index 1306cfd..9991aeb 100644 --- a/src/sent_dm/types/contact_delete_params.py +++ b/src/sent_dm/types/contact_delete_params.py @@ -5,7 +5,7 @@ from typing_extensions import Required, Annotated, TypedDict from .._utils import PropertyInfo -from .mutation_request_base_param import MutationRequestBaseParam +from .mutation_request_param import MutationRequestParam __all__ = ["ContactDeleteParams", "Body"] @@ -17,7 +17,7 @@ class ContactDeleteParams(TypedDict, total=False): x_profile_id: Annotated[str, PropertyInfo(alias="x-profile-id")] -class Body(MutationRequestBaseParam, total=False): +class Body(MutationRequestParam, total=False): """Request to delete/dissociate a contact""" pass diff --git a/src/sent_dm/types/mutation_request_base_param.py b/src/sent_dm/types/mutation_request_param.py similarity index 78% rename from src/sent_dm/types/mutation_request_base_param.py rename to src/sent_dm/types/mutation_request_param.py index bf4abc5..2487ca2 100644 --- a/src/sent_dm/types/mutation_request_base_param.py +++ b/src/sent_dm/types/mutation_request_param.py @@ -4,10 +4,10 @@ from typing_extensions import TypedDict -__all__ = ["MutationRequestBaseParam"] +__all__ = ["MutationRequestParam"] -class MutationRequestBaseParam(TypedDict, total=False): +class MutationRequestParam(TypedDict, total=False): sandbox: bool """ Sandbox flag - when true, the operation is simulated without side effects Useful diff --git a/src/sent_dm/types/profile_complete_setup_params.py b/src/sent_dm/types/profile_complete_params.py similarity index 87% rename from src/sent_dm/types/profile_complete_setup_params.py rename to src/sent_dm/types/profile_complete_params.py index c788b63..a444957 100644 --- a/src/sent_dm/types/profile_complete_setup_params.py +++ b/src/sent_dm/types/profile_complete_params.py @@ -6,10 +6,10 @@ from .._utils import PropertyInfo -__all__ = ["ProfileCompleteSetupParams"] +__all__ = ["ProfileCompleteParams"] -class ProfileCompleteSetupParams(TypedDict, total=False): +class ProfileCompleteParams(TypedDict, total=False): web_hook_url: Required[Annotated[str, PropertyInfo(alias="webHookUrl")]] """Webhook URL to call when profile completion finishes (success or failure)""" diff --git a/src/sent_dm/types/profile_delete_params.py b/src/sent_dm/types/profile_delete_params.py index 2b329f3..6b358e5 100644 --- a/src/sent_dm/types/profile_delete_params.py +++ b/src/sent_dm/types/profile_delete_params.py @@ -5,7 +5,7 @@ from typing_extensions import Required, Annotated, TypedDict from .._utils import PropertyInfo -from .mutation_request_base_param import MutationRequestBaseParam +from .mutation_request_param import MutationRequestParam __all__ = ["ProfileDeleteParams", "Body"] @@ -17,7 +17,7 @@ class ProfileDeleteParams(TypedDict, total=False): x_profile_id: Annotated[str, PropertyInfo(alias="x-profile-id")] -class Body(MutationRequestBaseParam, total=False): +class Body(MutationRequestParam, total=False): """Request to delete a profile""" pass diff --git a/src/sent_dm/types/profiles/__init__.py b/src/sent_dm/types/profiles/__init__.py index 55f1405..e5bc778 100644 --- a/src/sent_dm/types/profiles/__init__.py +++ b/src/sent_dm/types/profiles/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations +from .base_dto import BaseDto as BaseDto from .campaign_data_param import CampaignDataParam as CampaignDataParam from .messaging_use_case_us import MessagingUseCaseUs as MessagingUseCaseUs from .campaign_create_params import CampaignCreateParams as CampaignCreateParams @@ -12,6 +13,3 @@ from .api_response_of_tcr_campaign_with_use_cases import ( APIResponseOfTcrCampaignWithUseCases as APIResponseOfTcrCampaignWithUseCases, ) -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam, -) diff --git a/src/sent_dm/types/shared/base_dto.py b/src/sent_dm/types/profiles/base_dto.py similarity index 100% rename from src/sent_dm/types/shared/base_dto.py rename to src/sent_dm/types/profiles/base_dto.py diff --git a/src/sent_dm/types/profiles/campaign_data_param.py b/src/sent_dm/types/profiles/campaign_data_param.py index 422f312..0ad81c6 100644 --- a/src/sent_dm/types/profiles/campaign_data_param.py +++ b/src/sent_dm/types/profiles/campaign_data_param.py @@ -5,12 +5,20 @@ from typing import Iterable, Optional from typing_extensions import Required, Annotated, TypedDict +from ..._types import SequenceNotStr from ..._utils import PropertyInfo -from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param import ( - SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam, -) +from .messaging_use_case_us import MessagingUseCaseUs -__all__ = ["CampaignDataParam"] +__all__ = ["CampaignDataParam", "UseCase"] + + +class UseCase(TypedDict, total=False): + """Campaign use case with sample messages""" + + messaging_use_case_us: Required[Annotated[MessagingUseCaseUs, PropertyInfo(alias="messagingUseCaseUs")]] + + sample_messages: Required[Annotated[SequenceNotStr[str], PropertyInfo(alias="sampleMessages")]] + """Sample messages for this use case (1-5 messages, max 1024 characters each)""" class CampaignDataParam(TypedDict, total=False): @@ -25,12 +33,7 @@ class CampaignDataParam(TypedDict, total=False): type: Required[str] """Campaign type (e.g., "KYC", "App")""" - use_cases: Required[ - Annotated[ - Iterable[SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam], - PropertyInfo(alias="useCases"), - ] - ] + use_cases: Required[Annotated[Iterable[UseCase], PropertyInfo(alias="useCases")]] """List of use cases with sample messages""" help_keywords: Annotated[Optional[str], PropertyInfo(alias="helpKeywords")] diff --git a/src/sent_dm/types/profiles/campaign_delete_params.py b/src/sent_dm/types/profiles/campaign_delete_params.py index f01f605..fda8341 100644 --- a/src/sent_dm/types/profiles/campaign_delete_params.py +++ b/src/sent_dm/types/profiles/campaign_delete_params.py @@ -5,7 +5,7 @@ from typing_extensions import Required, Annotated, TypedDict from ..._utils import PropertyInfo -from ..mutation_request_base_param import MutationRequestBaseParam +from ..mutation_request_param import MutationRequestParam __all__ = ["CampaignDeleteParams", "Body"] @@ -19,7 +19,7 @@ class CampaignDeleteParams(TypedDict, total=False): x_profile_id: Annotated[str, PropertyInfo(alias="x-profile-id")] -class Body(MutationRequestBaseParam, total=False): +class Body(MutationRequestParam, total=False): """Request to delete a campaign from a brand""" pass diff --git a/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py b/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py deleted file mode 100644 index 0527f60..0000000 --- a/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py +++ /dev/null @@ -1,20 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import Required, Annotated, TypedDict - -from ..._types import SequenceNotStr -from ..._utils import PropertyInfo -from .messaging_use_case_us import MessagingUseCaseUs - -__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam"] - - -class SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam(TypedDict, total=False): - """Campaign use case with sample messages""" - - messaging_use_case_us: Required[Annotated[MessagingUseCaseUs, PropertyInfo(alias="messagingUseCaseUs")]] - - sample_messages: Required[Annotated[SequenceNotStr[str], PropertyInfo(alias="sampleMessages")]] - """Sample messages for this use case (1-5 messages, max 1024 characters each)""" diff --git a/src/sent_dm/types/profiles/tcr_campaign_with_use_cases.py b/src/sent_dm/types/profiles/tcr_campaign_with_use_cases.py index d3577d3..99bbd10 100644 --- a/src/sent_dm/types/profiles/tcr_campaign_with_use_cases.py +++ b/src/sent_dm/types/profiles/tcr_campaign_with_use_cases.py @@ -6,7 +6,7 @@ from pydantic import Field as FieldInfo -from ..shared.base_dto import BaseDto +from .base_dto import BaseDto from .messaging_use_case_us import MessagingUseCaseUs __all__ = ["TcrCampaignWithUseCases", "TcrCampaignWithUseCasesUseCase"] diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py deleted file mode 100644 index 70a0a31..0000000 --- a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py +++ /dev/null @@ -1,26 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Annotated, TypedDict - -from .._utils import PropertyInfo - -__all__ = ["SentDmServicesCommonContractsPocOsAuthenticationConfigParam"] - - -class SentDmServicesCommonContractsPocOsAuthenticationConfigParam(TypedDict, total=False): - """Configuration for AUTHENTICATION category templates""" - - add_security_recommendation: Annotated[bool, PropertyInfo(alias="addSecurityRecommendation")] - """ - Whether to add the security recommendation text: "For your security, do not - share this code." - """ - - code_expiration_minutes: Annotated[Optional[int], PropertyInfo(alias="codeExpirationMinutes")] - """Code expiration time in minutes (1-90). - - If set, adds footer: "This code expires in X minutes." - """ diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py deleted file mode 100644 index 92437e1..0000000 --- a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py +++ /dev/null @@ -1,30 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Annotated, TypedDict - -from .._utils import PropertyInfo -from .template_body_content_param import TemplateBodyContentParam - -__all__ = ["SentDmServicesCommonContractsPocOsTemplateBodyParam"] - - -class SentDmServicesCommonContractsPocOsTemplateBodyParam(TypedDict, total=False): - """Body section of a message template with channel-specific content""" - - multi_channel: Annotated[Optional[TemplateBodyContentParam], PropertyInfo(alias="multiChannel")] - """ - Content that will be used for all channels (SMS and WhatsApp) unless - channel-specific content is provided - """ - - sms: Optional[TemplateBodyContentParam] - """SMS-specific content that overrides multi-channel content for SMS messages""" - - whatsapp: Optional[TemplateBodyContentParam] - """ - WhatsApp-specific content that overrides multi-channel content for WhatsApp - messages - """ diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py deleted file mode 100644 index 2770c6e..0000000 --- a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py +++ /dev/null @@ -1,26 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing_extensions import TypedDict - -from .sent_dm_services_common_contracts_poc_os_template_button_props_param import ( - SentDmServicesCommonContractsPocOsTemplateButtonPropsParam, -) - -__all__ = ["SentDmServicesCommonContractsPocOsTemplateButtonParam"] - - -class SentDmServicesCommonContractsPocOsTemplateButtonParam(TypedDict, total=False): - """Interactive button in a message template""" - - id: int - """The unique identifier of the button (1-based index)""" - - props: SentDmServicesCommonContractsPocOsTemplateButtonPropsParam - """Properties specific to the button type""" - - type: str - """ - The type of button (e.g., QUICK_REPLY, URL, PHONE_NUMBER, VOICE_CALL, COPY_CODE) - """ diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py deleted file mode 100644 index aa508bc..0000000 --- a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py +++ /dev/null @@ -1,36 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Annotated, TypedDict - -from .._utils import PropertyInfo - -__all__ = ["SentDmServicesCommonContractsPocOsTemplateButtonPropsParam"] - - -class SentDmServicesCommonContractsPocOsTemplateButtonPropsParam(TypedDict, total=False): - active_for: Annotated[Optional[int], PropertyInfo(alias="activeFor")] - - autofill_text: Annotated[Optional[str], PropertyInfo(alias="autofillText")] - - country_code: Annotated[Optional[str], PropertyInfo(alias="countryCode")] - - offer_code: Annotated[Optional[str], PropertyInfo(alias="offerCode")] - - otp_type: Annotated[Optional[str], PropertyInfo(alias="otpType")] - - package_name: Annotated[Optional[str], PropertyInfo(alias="packageName")] - - phone_number: Annotated[Optional[str], PropertyInfo(alias="phoneNumber")] - - quick_reply_type: Annotated[Optional[str], PropertyInfo(alias="quickReplyType")] - - signature_hash: Annotated[Optional[str], PropertyInfo(alias="signatureHash")] - - text: Optional[str] - - url: Optional[str] - - url_type: Annotated[Optional[str], PropertyInfo(alias="urlType")] diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py deleted file mode 100644 index 1431cb1..0000000 --- a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py +++ /dev/null @@ -1,23 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import TypedDict - -from .template_variable_param import TemplateVariableParam - -__all__ = ["SentDmServicesCommonContractsPocOsTemplateFooterParam"] - - -class SentDmServicesCommonContractsPocOsTemplateFooterParam(TypedDict, total=False): - """Footer section of a message template""" - - template: str - """The footer template text with optional variable placeholders""" - - type: Optional[str] - """The type of footer (typically "text")""" - - variables: Optional[Iterable[TemplateVariableParam]] - """List of variables used in the footer template""" diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py deleted file mode 100644 index da6a254..0000000 --- a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py +++ /dev/null @@ -1,26 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import TypedDict - -from .template_variable_param import TemplateVariableParam - -__all__ = ["SentDmServicesCommonContractsPocOsTemplateHeaderParam"] - - -class SentDmServicesCommonContractsPocOsTemplateHeaderParam(TypedDict, total=False): - """Header section of a message template""" - - template: str - """ - The header template text with optional variable placeholders (e.g., "Welcome to - {{0:variable}}") - """ - - type: Optional[str] - """The type of header (e.g., "text", "image", "video", "document")""" - - variables: Optional[Iterable[TemplateVariableParam]] - """List of variables used in the header template""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py deleted file mode 100644 index dfb0149..0000000 --- a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py +++ /dev/null @@ -1,49 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Literal, Annotated, TypedDict - -from .._utils import PropertyInfo - -__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam"] - - -class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam(TypedDict, total=False): - """Business details and address for brand KYC""" - - city: Optional[str] - """City""" - - country: Optional[str] - """Country code (e.g., US, CA)""" - - country_of_registration: Annotated[Optional[str], PropertyInfo(alias="countryOfRegistration")] - """Country where the business is registered""" - - entity_type: Annotated[ - Optional[Literal["PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "SOLE_PROPRIETOR", "GOVERNMENT"]], - PropertyInfo(alias="entityType"), - ] - - legal_name: Annotated[Optional[str], PropertyInfo(alias="legalName")] - """Legal business name""" - - postal_code: Annotated[Optional[str], PropertyInfo(alias="postalCode")] - """Postal/ZIP code""" - - state: Optional[str] - """State/province code""" - - street: Optional[str] - """Street address""" - - tax_id: Annotated[Optional[str], PropertyInfo(alias="taxId")] - """Tax ID/EIN number""" - - tax_id_type: Annotated[Optional[str], PropertyInfo(alias="taxIdType")] - """Type of tax ID (e.g., us_ein, ca_bn)""" - - url: Optional[str] - """Business website URL""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py deleted file mode 100644 index 2030a52..0000000 --- a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py +++ /dev/null @@ -1,41 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Iterable, Optional -from typing_extensions import Required, Annotated, TypedDict - -from .._utils import PropertyInfo -from .tcr_vertical import TcrVertical -from .tcr_brand_relationship import TcrBrandRelationship -from .destination_country_param import DestinationCountryParam - -__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam"] - - -class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam(TypedDict, total=False): - """Compliance and TCR information for brand registration""" - - brand_relationship: Required[Annotated[TcrBrandRelationship, PropertyInfo(alias="brandRelationship")]] - - vertical: Required[TcrVertical] - - destination_countries: Annotated[ - Optional[Iterable[DestinationCountryParam]], PropertyInfo(alias="destinationCountries") - ] - """List of destination countries for messaging""" - - expected_messaging_volume: Annotated[Optional[str], PropertyInfo(alias="expectedMessagingVolume")] - """Expected daily messaging volume""" - - is_tcr_application: Annotated[Optional[bool], PropertyInfo(alias="isTcrApplication")] - """Whether this is a TCR (Campaign Registry) application""" - - notes: Optional[str] - """Additional notes about the business or use case""" - - phone_number_prefix: Annotated[Optional[str], PropertyInfo(alias="phoneNumberPrefix")] - """Phone number prefix for messaging (e.g., "+1")""" - - primary_use_case: Annotated[Optional[str], PropertyInfo(alias="primaryUseCase")] - """Primary messaging use case description""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py deleted file mode 100644 index e808c53..0000000 --- a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py +++ /dev/null @@ -1,32 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Optional -from typing_extensions import Required, Annotated, TypedDict - -from .._utils import PropertyInfo - -__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam"] - - -class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam(TypedDict, total=False): - """Contact information for brand KYC""" - - name: Required[str] - """Primary contact name (required)""" - - business_name: Annotated[Optional[str], PropertyInfo(alias="businessName")] - """Business/brand name""" - - email: Optional[str] - """Contact email address""" - - phone: Optional[str] - """Contact phone number in E.164 format""" - - phone_country_code: Annotated[Optional[str], PropertyInfo(alias="phoneCountryCode")] - """Contact phone country code (e.g., "1" for US)""" - - role: Optional[str] - """Contact's role in the business""" diff --git a/src/sent_dm/types/shared/__init__.py b/src/sent_dm/types/shared/__init__.py deleted file mode 100644 index 147f4b4..0000000 --- a/src/sent_dm/types/shared/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from .base_dto import BaseDto as BaseDto diff --git a/src/sent_dm/types/template_definition_param.py b/src/sent_dm/types/template_definition_param.py index 055f801..fa83bb3 100644 --- a/src/sent_dm/types/template_definition_param.py +++ b/src/sent_dm/types/template_definition_param.py @@ -6,23 +6,117 @@ from typing_extensions import Required, Annotated, TypedDict from .._utils import PropertyInfo -from .sent_dm_services_common_contracts_poc_os_template_body_param import ( - SentDmServicesCommonContractsPocOsTemplateBodyParam, -) -from .sent_dm_services_common_contracts_poc_os_template_button_param import ( - SentDmServicesCommonContractsPocOsTemplateButtonParam, -) -from .sent_dm_services_common_contracts_poc_os_template_footer_param import ( - SentDmServicesCommonContractsPocOsTemplateFooterParam, -) -from .sent_dm_services_common_contracts_poc_os_template_header_param import ( - SentDmServicesCommonContractsPocOsTemplateHeaderParam, -) -from .sent_dm_services_common_contracts_poc_os_authentication_config_param import ( - SentDmServicesCommonContractsPocOsAuthenticationConfigParam, -) - -__all__ = ["TemplateDefinitionParam"] +from .template_variable_param import TemplateVariableParam +from .template_body_content_param import TemplateBodyContentParam + +__all__ = ["TemplateDefinitionParam", "Body", "AuthenticationConfig", "Button", "ButtonProps", "Footer", "Header"] + + +class Body(TypedDict, total=False): + """Body section of a message template with channel-specific content""" + + multi_channel: Annotated[Optional[TemplateBodyContentParam], PropertyInfo(alias="multiChannel")] + """ + Content that will be used for all channels (SMS and WhatsApp) unless + channel-specific content is provided + """ + + sms: Optional[TemplateBodyContentParam] + """SMS-specific content that overrides multi-channel content for SMS messages""" + + whatsapp: Optional[TemplateBodyContentParam] + """ + WhatsApp-specific content that overrides multi-channel content for WhatsApp + messages + """ + + +class AuthenticationConfig(TypedDict, total=False): + """Configuration for AUTHENTICATION category templates""" + + add_security_recommendation: Annotated[bool, PropertyInfo(alias="addSecurityRecommendation")] + """ + Whether to add the security recommendation text: "For your security, do not + share this code." + """ + + code_expiration_minutes: Annotated[Optional[int], PropertyInfo(alias="codeExpirationMinutes")] + """Code expiration time in minutes (1-90). + + If set, adds footer: "This code expires in X minutes." + """ + + +class ButtonProps(TypedDict, total=False): + """Properties specific to the button type""" + + active_for: Annotated[Optional[int], PropertyInfo(alias="activeFor")] + + autofill_text: Annotated[Optional[str], PropertyInfo(alias="autofillText")] + + country_code: Annotated[Optional[str], PropertyInfo(alias="countryCode")] + + offer_code: Annotated[Optional[str], PropertyInfo(alias="offerCode")] + + otp_type: Annotated[Optional[str], PropertyInfo(alias="otpType")] + + package_name: Annotated[Optional[str], PropertyInfo(alias="packageName")] + + phone_number: Annotated[Optional[str], PropertyInfo(alias="phoneNumber")] + + quick_reply_type: Annotated[Optional[str], PropertyInfo(alias="quickReplyType")] + + signature_hash: Annotated[Optional[str], PropertyInfo(alias="signatureHash")] + + text: Optional[str] + + url: Optional[str] + + url_type: Annotated[Optional[str], PropertyInfo(alias="urlType")] + + +class Button(TypedDict, total=False): + """Interactive button in a message template""" + + id: int + """The unique identifier of the button (1-based index)""" + + props: ButtonProps + """Properties specific to the button type""" + + type: str + """ + The type of button (e.g., QUICK_REPLY, URL, PHONE_NUMBER, VOICE_CALL, COPY_CODE) + """ + + +class Footer(TypedDict, total=False): + """Footer section of a message template""" + + template: str + """The footer template text with optional variable placeholders""" + + type: Optional[str] + """The type of footer (typically "text")""" + + variables: Optional[Iterable[TemplateVariableParam]] + """List of variables used in the footer template""" + + +class Header(TypedDict, total=False): + """Header section of a message template""" + + template: str + """ + The header template text with optional variable placeholders (e.g., "Welcome to + {{0:variable}}") + """ + + type: Optional[str] + """The type of header (e.g., "text", "image", "video", "document")""" + + variables: Optional[Iterable[TemplateVariableParam]] + """List of variables used in the header template""" class TemplateDefinitionParam(TypedDict, total=False): @@ -30,23 +124,20 @@ class TemplateDefinitionParam(TypedDict, total=False): Complete definition of a message template including header, body, footer, and buttons """ - body: Required[SentDmServicesCommonContractsPocOsTemplateBodyParam] + body: Required[Body] """Body section of a message template with channel-specific content""" - authentication_config: Annotated[ - Optional[SentDmServicesCommonContractsPocOsAuthenticationConfigParam], - PropertyInfo(alias="authenticationConfig"), - ] + authentication_config: Annotated[Optional[AuthenticationConfig], PropertyInfo(alias="authenticationConfig")] """Configuration for AUTHENTICATION category templates""" - buttons: Optional[Iterable[SentDmServicesCommonContractsPocOsTemplateButtonParam]] + buttons: Optional[Iterable[Button]] """Optional list of interactive buttons (e.g., quick replies, URLs, phone numbers)""" definition_version: Annotated[Optional[str], PropertyInfo(alias="definitionVersion")] """The version of the template definition format""" - footer: Optional[SentDmServicesCommonContractsPocOsTemplateFooterParam] + footer: Optional[Footer] """Footer section of a message template""" - header: Optional[SentDmServicesCommonContractsPocOsTemplateHeaderParam] + header: Optional[Header] """Header section of a message template""" diff --git a/src/sent_dm/types/user_remove_params.py b/src/sent_dm/types/user_remove_params.py index 522f2d0..dd4ed75 100644 --- a/src/sent_dm/types/user_remove_params.py +++ b/src/sent_dm/types/user_remove_params.py @@ -5,7 +5,7 @@ from typing_extensions import Required, Annotated, TypedDict from .._utils import PropertyInfo -from .mutation_request_base_param import MutationRequestBaseParam +from .mutation_request_param import MutationRequestParam __all__ = ["UserRemoveParams", "Body"] @@ -17,7 +17,7 @@ class UserRemoveParams(TypedDict, total=False): x_profile_id: Annotated[str, PropertyInfo(alias="x-profile-id")] -class Body(MutationRequestBaseParam, total=False): +class Body(MutationRequestParam, total=False): """Request to remove a user from an organization""" pass diff --git a/src/sent_dm/types/webhook_rotate_secret_params.py b/src/sent_dm/types/webhook_rotate_secret_params.py index d217cb5..51a4de5 100644 --- a/src/sent_dm/types/webhook_rotate_secret_params.py +++ b/src/sent_dm/types/webhook_rotate_secret_params.py @@ -5,7 +5,7 @@ from typing_extensions import Required, Annotated, TypedDict from .._utils import PropertyInfo -from .mutation_request_base_param import MutationRequestBaseParam +from .mutation_request_param import MutationRequestParam __all__ = ["WebhookRotateSecretParams", "Body"] @@ -18,5 +18,5 @@ class WebhookRotateSecretParams(TypedDict, total=False): x_profile_id: Annotated[str, PropertyInfo(alias="x-profile-id")] -class Body(MutationRequestBaseParam, total=False): +class Body(MutationRequestParam, total=False): pass diff --git a/tests/api_resources/test_profiles.py b/tests/api_resources/test_profiles.py index be45cde..b6707f7 100644 --- a/tests/api_resources/test_profiles.py +++ b/tests/api_resources/test_profiles.py @@ -388,8 +388,8 @@ def test_path_params_delete(self, client: SentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_method_complete_setup(self, client: SentDm) -> None: - profile = client.profiles.complete_setup( + def test_method_complete(self, client: SentDm) -> None: + profile = client.profiles.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", ) @@ -397,8 +397,8 @@ def test_method_complete_setup(self, client: SentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_method_complete_setup_with_all_params(self, client: SentDm) -> None: - profile = client.profiles.complete_setup( + def test_method_complete_with_all_params(self, client: SentDm) -> None: + profile = client.profiles.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", sandbox=False, @@ -409,8 +409,8 @@ def test_method_complete_setup_with_all_params(self, client: SentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_raw_response_complete_setup(self, client: SentDm) -> None: - response = client.profiles.with_raw_response.complete_setup( + def test_raw_response_complete(self, client: SentDm) -> None: + response = client.profiles.with_raw_response.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", ) @@ -422,8 +422,8 @@ def test_raw_response_complete_setup(self, client: SentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_streaming_response_complete_setup(self, client: SentDm) -> None: - with client.profiles.with_streaming_response.complete_setup( + def test_streaming_response_complete(self, client: SentDm) -> None: + with client.profiles.with_streaming_response.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", ) as response: @@ -437,9 +437,9 @@ def test_streaming_response_complete_setup(self, client: SentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - def test_path_params_complete_setup(self, client: SentDm) -> None: + def test_path_params_complete(self, client: SentDm) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `profile_id` but received ''"): - client.profiles.with_raw_response.complete_setup( + client.profiles.with_raw_response.complete( profile_id="", web_hook_url="https://your-app.com/webhook/profile-complete", ) @@ -818,8 +818,8 @@ async def test_path_params_delete(self, async_client: AsyncSentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_complete_setup(self, async_client: AsyncSentDm) -> None: - profile = await async_client.profiles.complete_setup( + async def test_method_complete(self, async_client: AsyncSentDm) -> None: + profile = await async_client.profiles.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", ) @@ -827,8 +827,8 @@ async def test_method_complete_setup(self, async_client: AsyncSentDm) -> None: @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_method_complete_setup_with_all_params(self, async_client: AsyncSentDm) -> None: - profile = await async_client.profiles.complete_setup( + async def test_method_complete_with_all_params(self, async_client: AsyncSentDm) -> None: + profile = await async_client.profiles.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", sandbox=False, @@ -839,8 +839,8 @@ async def test_method_complete_setup_with_all_params(self, async_client: AsyncSe @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_raw_response_complete_setup(self, async_client: AsyncSentDm) -> None: - response = await async_client.profiles.with_raw_response.complete_setup( + async def test_raw_response_complete(self, async_client: AsyncSentDm) -> None: + response = await async_client.profiles.with_raw_response.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", ) @@ -852,8 +852,8 @@ async def test_raw_response_complete_setup(self, async_client: AsyncSentDm) -> N @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_streaming_response_complete_setup(self, async_client: AsyncSentDm) -> None: - async with async_client.profiles.with_streaming_response.complete_setup( + async def test_streaming_response_complete(self, async_client: AsyncSentDm) -> None: + async with async_client.profiles.with_streaming_response.complete( profile_id="660e8400-e29b-41d4-a716-446655440000", web_hook_url="https://your-app.com/webhook/profile-complete", ) as response: @@ -867,9 +867,9 @@ async def test_streaming_response_complete_setup(self, async_client: AsyncSentDm @pytest.mark.skip(reason="Mock server tests are disabled") @parametrize - async def test_path_params_complete_setup(self, async_client: AsyncSentDm) -> None: + async def test_path_params_complete(self, async_client: AsyncSentDm) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `profile_id` but received ''"): - await async_client.profiles.with_raw_response.complete_setup( + await async_client.profiles.with_raw_response.complete( profile_id="", web_hook_url="https://your-app.com/webhook/profile-complete", ) From e08ed33e783744f84c88826061b47ccd27fc4324 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:56:09 +0000 Subject: [PATCH 12/15] feat(api): manual updates --- .stats.yml | 2 +- api.md | 10 ++ src/sent_dm/types/__init__.py | 27 ++++ src/sent_dm/types/brands_brand_data_param.py | 114 ++------------ src/sent_dm/types/profiles/__init__.py | 3 + .../types/profiles/campaign_data_param.py | 23 ++- ..._campaigns_campaign_use_case_data_param.py | 20 +++ ...acts_poc_os_authentication_config_param.py | 26 ++++ ...on_contracts_poc_os_template_body_param.py | 30 ++++ ..._contracts_poc_os_template_button_param.py | 26 ++++ ...acts_poc_os_template_button_props_param.py | 36 +++++ ..._contracts_poc_os_template_footer_param.py | 23 +++ ..._contracts_poc_os_template_header_param.py | 26 ++++ ...quests_brands_brand_business_info_param.py | 49 ++++++ ...ests_brands_brand_compliance_info_param.py | 41 +++++ ...equests_brands_brand_contact_info_param.py | 32 ++++ .../types/template_definition_param.py | 141 ++++-------------- 17 files changed, 400 insertions(+), 229 deletions(-) create mode 100644 src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py create mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py create mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py create mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py create mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py create mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py create mode 100644 src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py create mode 100644 src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py create mode 100644 src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py create mode 100644 src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py diff --git a/.stats.yml b/.stats.yml index 4792a46..274df57 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2566cdc5d8e0bffe2a8c442692b0fc1b35d3bfe7e9bf578331fc19d402361c1f.yml openapi_spec_hash: 85e1feeb9bbc8d59bb34d6cdd679575a -config_hash: 676ee4f74f5b328b155283c879154b66 +config_hash: 497506d9e2e66cd0573bd9c1f1242462 diff --git a/api.md b/api.md index 3f3b667..5c71f65 100644 --- a/api.md +++ b/api.md @@ -54,6 +54,12 @@ Types: ```python from sent_dm.types import ( APIResponseTemplate, + SentDmServicesCommonContractsPocOsAuthenticationConfig, + SentDmServicesCommonContractsPocOsTemplateBody, + SentDmServicesCommonContractsPocOsTemplateButton, + SentDmServicesCommonContractsPocOsTemplateButtonProps, + SentDmServicesCommonContractsPocOsTemplateFooter, + SentDmServicesCommonContractsPocOsTemplateHeader, Template, TemplateBodyContent, TemplateDefinition, @@ -82,6 +88,9 @@ from sent_dm.types import ( DestinationCountry, PaymentDetails, ProfileDetail, + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfo, + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfo, + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfo, TcrBrandRelationship, TcrVertical, ProfileListResponse, @@ -107,6 +116,7 @@ from sent_dm.types.profiles import ( BaseDto, CampaignData, MessagingUseCaseUs, + SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseData, TcrCampaignWithUseCases, CampaignListResponse, ) diff --git a/src/sent_dm/types/__init__.py b/src/sent_dm/types/__init__.py index 9adbf8a..b8d439e 100644 --- a/src/sent_dm/types/__init__.py +++ b/src/sent_dm/types/__init__.py @@ -64,3 +64,30 @@ from .message_retrieve_status_response import MessageRetrieveStatusResponse as MessageRetrieveStatusResponse from .webhook_list_event_types_response import WebhookListEventTypesResponse as WebhookListEventTypesResponse from .message_retrieve_activities_response import MessageRetrieveActivitiesResponse as MessageRetrieveActivitiesResponse +from .sent_dm_services_common_contracts_poc_os_template_body_param import ( + SentDmServicesCommonContractsPocOsTemplateBodyParam as SentDmServicesCommonContractsPocOsTemplateBodyParam, +) +from .sent_dm_services_common_contracts_poc_os_template_button_param import ( + SentDmServicesCommonContractsPocOsTemplateButtonParam as SentDmServicesCommonContractsPocOsTemplateButtonParam, +) +from .sent_dm_services_common_contracts_poc_os_template_footer_param import ( + SentDmServicesCommonContractsPocOsTemplateFooterParam as SentDmServicesCommonContractsPocOsTemplateFooterParam, +) +from .sent_dm_services_common_contracts_poc_os_template_header_param import ( + SentDmServicesCommonContractsPocOsTemplateHeaderParam as SentDmServicesCommonContractsPocOsTemplateHeaderParam, +) +from .sent_dm_services_common_contracts_poc_os_authentication_config_param import ( + SentDmServicesCommonContractsPocOsAuthenticationConfigParam as SentDmServicesCommonContractsPocOsAuthenticationConfigParam, +) +from .sent_dm_services_common_contracts_poc_os_template_button_props_param import ( + SentDmServicesCommonContractsPocOsTemplateButtonPropsParam as SentDmServicesCommonContractsPocOsTemplateButtonPropsParam, +) +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam, +) +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam, +) +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam, +) diff --git a/src/sent_dm/types/brands_brand_data_param.py b/src/sent_dm/types/brands_brand_data_param.py index 26a616e..02ea9ed 100644 --- a/src/sent_dm/types/brands_brand_data_param.py +++ b/src/sent_dm/types/brands_brand_data_param.py @@ -2,114 +2,30 @@ from __future__ import annotations -from typing import Iterable, Optional -from typing_extensions import Literal, Required, Annotated, TypedDict +from typing import Optional +from typing_extensions import Required, TypedDict -from .._utils import PropertyInfo -from .tcr_vertical import TcrVertical -from .tcr_brand_relationship import TcrBrandRelationship -from .destination_country_param import DestinationCountryParam +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam, +) +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam, +) +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam, +) -__all__ = ["BrandsBrandDataParam", "Compliance", "Contact", "Business"] - - -class Compliance(TypedDict, total=False): - """Compliance and TCR information for brand registration""" - - brand_relationship: Required[Annotated[TcrBrandRelationship, PropertyInfo(alias="brandRelationship")]] - - vertical: Required[TcrVertical] - - destination_countries: Annotated[ - Optional[Iterable[DestinationCountryParam]], PropertyInfo(alias="destinationCountries") - ] - """List of destination countries for messaging""" - - expected_messaging_volume: Annotated[Optional[str], PropertyInfo(alias="expectedMessagingVolume")] - """Expected daily messaging volume""" - - is_tcr_application: Annotated[Optional[bool], PropertyInfo(alias="isTcrApplication")] - """Whether this is a TCR (Campaign Registry) application""" - - notes: Optional[str] - """Additional notes about the business or use case""" - - phone_number_prefix: Annotated[Optional[str], PropertyInfo(alias="phoneNumberPrefix")] - """Phone number prefix for messaging (e.g., "+1")""" - - primary_use_case: Annotated[Optional[str], PropertyInfo(alias="primaryUseCase")] - """Primary messaging use case description""" - - -class Contact(TypedDict, total=False): - """Contact information for brand KYC""" - - name: Required[str] - """Primary contact name (required)""" - - business_name: Annotated[Optional[str], PropertyInfo(alias="businessName")] - """Business/brand name""" - - email: Optional[str] - """Contact email address""" - - phone: Optional[str] - """Contact phone number in E.164 format""" - - phone_country_code: Annotated[Optional[str], PropertyInfo(alias="phoneCountryCode")] - """Contact phone country code (e.g., "1" for US)""" - - role: Optional[str] - """Contact's role in the business""" - - -class Business(TypedDict, total=False): - """Business details and address for brand KYC""" - - city: Optional[str] - """City""" - - country: Optional[str] - """Country code (e.g., US, CA)""" - - country_of_registration: Annotated[Optional[str], PropertyInfo(alias="countryOfRegistration")] - """Country where the business is registered""" - - entity_type: Annotated[ - Optional[Literal["PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "SOLE_PROPRIETOR", "GOVERNMENT"]], - PropertyInfo(alias="entityType"), - ] - - legal_name: Annotated[Optional[str], PropertyInfo(alias="legalName")] - """Legal business name""" - - postal_code: Annotated[Optional[str], PropertyInfo(alias="postalCode")] - """Postal/ZIP code""" - - state: Optional[str] - """State/province code""" - - street: Optional[str] - """Street address""" - - tax_id: Annotated[Optional[str], PropertyInfo(alias="taxId")] - """Tax ID/EIN number""" - - tax_id_type: Annotated[Optional[str], PropertyInfo(alias="taxIdType")] - """Type of tax ID (e.g., us_ein, ca_bn)""" - - url: Optional[str] - """Business website URL""" +__all__ = ["BrandsBrandDataParam"] class BrandsBrandDataParam(TypedDict, total=False): """Brand and KYC data grouped into contact, business, and compliance sections""" - compliance: Required[Compliance] + compliance: Required[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam] """Compliance and TCR information for brand registration""" - contact: Required[Contact] + contact: Required[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam] """Contact information for brand KYC""" - business: Optional[Business] + business: Optional[SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam] """Business details and address for brand KYC""" diff --git a/src/sent_dm/types/profiles/__init__.py b/src/sent_dm/types/profiles/__init__.py index e5bc778..4c8ff4e 100644 --- a/src/sent_dm/types/profiles/__init__.py +++ b/src/sent_dm/types/profiles/__init__.py @@ -13,3 +13,6 @@ from .api_response_of_tcr_campaign_with_use_cases import ( APIResponseOfTcrCampaignWithUseCases as APIResponseOfTcrCampaignWithUseCases, ) +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam as SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam, +) diff --git a/src/sent_dm/types/profiles/campaign_data_param.py b/src/sent_dm/types/profiles/campaign_data_param.py index 0ad81c6..422f312 100644 --- a/src/sent_dm/types/profiles/campaign_data_param.py +++ b/src/sent_dm/types/profiles/campaign_data_param.py @@ -5,20 +5,12 @@ from typing import Iterable, Optional from typing_extensions import Required, Annotated, TypedDict -from ..._types import SequenceNotStr from ..._utils import PropertyInfo -from .messaging_use_case_us import MessagingUseCaseUs +from .sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param import ( + SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam, +) -__all__ = ["CampaignDataParam", "UseCase"] - - -class UseCase(TypedDict, total=False): - """Campaign use case with sample messages""" - - messaging_use_case_us: Required[Annotated[MessagingUseCaseUs, PropertyInfo(alias="messagingUseCaseUs")]] - - sample_messages: Required[Annotated[SequenceNotStr[str], PropertyInfo(alias="sampleMessages")]] - """Sample messages for this use case (1-5 messages, max 1024 characters each)""" +__all__ = ["CampaignDataParam"] class CampaignDataParam(TypedDict, total=False): @@ -33,7 +25,12 @@ class CampaignDataParam(TypedDict, total=False): type: Required[str] """Campaign type (e.g., "KYC", "App")""" - use_cases: Required[Annotated[Iterable[UseCase], PropertyInfo(alias="useCases")]] + use_cases: Required[ + Annotated[ + Iterable[SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam], + PropertyInfo(alias="useCases"), + ] + ] """List of use cases with sample messages""" help_keywords: Annotated[Optional[str], PropertyInfo(alias="helpKeywords")] diff --git a/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py b/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py new file mode 100644 index 0000000..0527f60 --- /dev/null +++ b/src/sent_dm/types/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data_param.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Required, Annotated, TypedDict + +from ..._types import SequenceNotStr +from ..._utils import PropertyInfo +from .messaging_use_case_us import MessagingUseCaseUs + +__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam"] + + +class SentDmServicesEndpointsCustomerApIv3ContractsRequestsCampaignsCampaignUseCaseDataParam(TypedDict, total=False): + """Campaign use case with sample messages""" + + messaging_use_case_us: Required[Annotated[MessagingUseCaseUs, PropertyInfo(alias="messagingUseCaseUs")]] + + sample_messages: Required[Annotated[SequenceNotStr[str], PropertyInfo(alias="sampleMessages")]] + """Sample messages for this use case (1-5 messages, max 1024 characters each)""" diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py new file mode 100644 index 0000000..70a0a31 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_authentication_config_param.py @@ -0,0 +1,26 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Annotated, TypedDict + +from .._utils import PropertyInfo + +__all__ = ["SentDmServicesCommonContractsPocOsAuthenticationConfigParam"] + + +class SentDmServicesCommonContractsPocOsAuthenticationConfigParam(TypedDict, total=False): + """Configuration for AUTHENTICATION category templates""" + + add_security_recommendation: Annotated[bool, PropertyInfo(alias="addSecurityRecommendation")] + """ + Whether to add the security recommendation text: "For your security, do not + share this code." + """ + + code_expiration_minutes: Annotated[Optional[int], PropertyInfo(alias="codeExpirationMinutes")] + """Code expiration time in minutes (1-90). + + If set, adds footer: "This code expires in X minutes." + """ diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py new file mode 100644 index 0000000..92437e1 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_body_param.py @@ -0,0 +1,30 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Annotated, TypedDict + +from .._utils import PropertyInfo +from .template_body_content_param import TemplateBodyContentParam + +__all__ = ["SentDmServicesCommonContractsPocOsTemplateBodyParam"] + + +class SentDmServicesCommonContractsPocOsTemplateBodyParam(TypedDict, total=False): + """Body section of a message template with channel-specific content""" + + multi_channel: Annotated[Optional[TemplateBodyContentParam], PropertyInfo(alias="multiChannel")] + """ + Content that will be used for all channels (SMS and WhatsApp) unless + channel-specific content is provided + """ + + sms: Optional[TemplateBodyContentParam] + """SMS-specific content that overrides multi-channel content for SMS messages""" + + whatsapp: Optional[TemplateBodyContentParam] + """ + WhatsApp-specific content that overrides multi-channel content for WhatsApp + messages + """ diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py new file mode 100644 index 0000000..2770c6e --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_param.py @@ -0,0 +1,26 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +from .sent_dm_services_common_contracts_poc_os_template_button_props_param import ( + SentDmServicesCommonContractsPocOsTemplateButtonPropsParam, +) + +__all__ = ["SentDmServicesCommonContractsPocOsTemplateButtonParam"] + + +class SentDmServicesCommonContractsPocOsTemplateButtonParam(TypedDict, total=False): + """Interactive button in a message template""" + + id: int + """The unique identifier of the button (1-based index)""" + + props: SentDmServicesCommonContractsPocOsTemplateButtonPropsParam + """Properties specific to the button type""" + + type: str + """ + The type of button (e.g., QUICK_REPLY, URL, PHONE_NUMBER, VOICE_CALL, COPY_CODE) + """ diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py new file mode 100644 index 0000000..aa508bc --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_button_props_param.py @@ -0,0 +1,36 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Annotated, TypedDict + +from .._utils import PropertyInfo + +__all__ = ["SentDmServicesCommonContractsPocOsTemplateButtonPropsParam"] + + +class SentDmServicesCommonContractsPocOsTemplateButtonPropsParam(TypedDict, total=False): + active_for: Annotated[Optional[int], PropertyInfo(alias="activeFor")] + + autofill_text: Annotated[Optional[str], PropertyInfo(alias="autofillText")] + + country_code: Annotated[Optional[str], PropertyInfo(alias="countryCode")] + + offer_code: Annotated[Optional[str], PropertyInfo(alias="offerCode")] + + otp_type: Annotated[Optional[str], PropertyInfo(alias="otpType")] + + package_name: Annotated[Optional[str], PropertyInfo(alias="packageName")] + + phone_number: Annotated[Optional[str], PropertyInfo(alias="phoneNumber")] + + quick_reply_type: Annotated[Optional[str], PropertyInfo(alias="quickReplyType")] + + signature_hash: Annotated[Optional[str], PropertyInfo(alias="signatureHash")] + + text: Optional[str] + + url: Optional[str] + + url_type: Annotated[Optional[str], PropertyInfo(alias="urlType")] diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py new file mode 100644 index 0000000..1431cb1 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_footer_param.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +from .template_variable_param import TemplateVariableParam + +__all__ = ["SentDmServicesCommonContractsPocOsTemplateFooterParam"] + + +class SentDmServicesCommonContractsPocOsTemplateFooterParam(TypedDict, total=False): + """Footer section of a message template""" + + template: str + """The footer template text with optional variable placeholders""" + + type: Optional[str] + """The type of footer (typically "text")""" + + variables: Optional[Iterable[TemplateVariableParam]] + """List of variables used in the footer template""" diff --git a/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py new file mode 100644 index 0000000..da6a254 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_common_contracts_poc_os_template_header_param.py @@ -0,0 +1,26 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import TypedDict + +from .template_variable_param import TemplateVariableParam + +__all__ = ["SentDmServicesCommonContractsPocOsTemplateHeaderParam"] + + +class SentDmServicesCommonContractsPocOsTemplateHeaderParam(TypedDict, total=False): + """Header section of a message template""" + + template: str + """ + The header template text with optional variable placeholders (e.g., "Welcome to + {{0:variable}}") + """ + + type: Optional[str] + """The type of header (e.g., "text", "image", "video", "document")""" + + variables: Optional[Iterable[TemplateVariableParam]] + """List of variables used in the header template""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py new file mode 100644 index 0000000..dfb0149 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info_param.py @@ -0,0 +1,49 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Literal, Annotated, TypedDict + +from .._utils import PropertyInfo + +__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam"] + + +class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandBusinessInfoParam(TypedDict, total=False): + """Business details and address for brand KYC""" + + city: Optional[str] + """City""" + + country: Optional[str] + """Country code (e.g., US, CA)""" + + country_of_registration: Annotated[Optional[str], PropertyInfo(alias="countryOfRegistration")] + """Country where the business is registered""" + + entity_type: Annotated[ + Optional[Literal["PRIVATE_PROFIT", "PUBLIC_PROFIT", "NON_PROFIT", "SOLE_PROPRIETOR", "GOVERNMENT"]], + PropertyInfo(alias="entityType"), + ] + + legal_name: Annotated[Optional[str], PropertyInfo(alias="legalName")] + """Legal business name""" + + postal_code: Annotated[Optional[str], PropertyInfo(alias="postalCode")] + """Postal/ZIP code""" + + state: Optional[str] + """State/province code""" + + street: Optional[str] + """Street address""" + + tax_id: Annotated[Optional[str], PropertyInfo(alias="taxId")] + """Tax ID/EIN number""" + + tax_id_type: Annotated[Optional[str], PropertyInfo(alias="taxIdType")] + """Type of tax ID (e.g., us_ein, ca_bn)""" + + url: Optional[str] + """Business website URL""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py new file mode 100644 index 0000000..2030a52 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info_param.py @@ -0,0 +1,41 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Iterable, Optional +from typing_extensions import Required, Annotated, TypedDict + +from .._utils import PropertyInfo +from .tcr_vertical import TcrVertical +from .tcr_brand_relationship import TcrBrandRelationship +from .destination_country_param import DestinationCountryParam + +__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam"] + + +class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandComplianceInfoParam(TypedDict, total=False): + """Compliance and TCR information for brand registration""" + + brand_relationship: Required[Annotated[TcrBrandRelationship, PropertyInfo(alias="brandRelationship")]] + + vertical: Required[TcrVertical] + + destination_countries: Annotated[ + Optional[Iterable[DestinationCountryParam]], PropertyInfo(alias="destinationCountries") + ] + """List of destination countries for messaging""" + + expected_messaging_volume: Annotated[Optional[str], PropertyInfo(alias="expectedMessagingVolume")] + """Expected daily messaging volume""" + + is_tcr_application: Annotated[Optional[bool], PropertyInfo(alias="isTcrApplication")] + """Whether this is a TCR (Campaign Registry) application""" + + notes: Optional[str] + """Additional notes about the business or use case""" + + phone_number_prefix: Annotated[Optional[str], PropertyInfo(alias="phoneNumberPrefix")] + """Phone number prefix for messaging (e.g., "+1")""" + + primary_use_case: Annotated[Optional[str], PropertyInfo(alias="primaryUseCase")] + """Primary messaging use case description""" diff --git a/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py new file mode 100644 index 0000000..e808c53 --- /dev/null +++ b/src/sent_dm/types/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info_param.py @@ -0,0 +1,32 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Required, Annotated, TypedDict + +from .._utils import PropertyInfo + +__all__ = ["SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam"] + + +class SentDmServicesEndpointsCustomerApIv3ContractsRequestsBrandsBrandContactInfoParam(TypedDict, total=False): + """Contact information for brand KYC""" + + name: Required[str] + """Primary contact name (required)""" + + business_name: Annotated[Optional[str], PropertyInfo(alias="businessName")] + """Business/brand name""" + + email: Optional[str] + """Contact email address""" + + phone: Optional[str] + """Contact phone number in E.164 format""" + + phone_country_code: Annotated[Optional[str], PropertyInfo(alias="phoneCountryCode")] + """Contact phone country code (e.g., "1" for US)""" + + role: Optional[str] + """Contact's role in the business""" diff --git a/src/sent_dm/types/template_definition_param.py b/src/sent_dm/types/template_definition_param.py index fa83bb3..055f801 100644 --- a/src/sent_dm/types/template_definition_param.py +++ b/src/sent_dm/types/template_definition_param.py @@ -6,117 +6,23 @@ from typing_extensions import Required, Annotated, TypedDict from .._utils import PropertyInfo -from .template_variable_param import TemplateVariableParam -from .template_body_content_param import TemplateBodyContentParam - -__all__ = ["TemplateDefinitionParam", "Body", "AuthenticationConfig", "Button", "ButtonProps", "Footer", "Header"] - - -class Body(TypedDict, total=False): - """Body section of a message template with channel-specific content""" - - multi_channel: Annotated[Optional[TemplateBodyContentParam], PropertyInfo(alias="multiChannel")] - """ - Content that will be used for all channels (SMS and WhatsApp) unless - channel-specific content is provided - """ - - sms: Optional[TemplateBodyContentParam] - """SMS-specific content that overrides multi-channel content for SMS messages""" - - whatsapp: Optional[TemplateBodyContentParam] - """ - WhatsApp-specific content that overrides multi-channel content for WhatsApp - messages - """ - - -class AuthenticationConfig(TypedDict, total=False): - """Configuration for AUTHENTICATION category templates""" - - add_security_recommendation: Annotated[bool, PropertyInfo(alias="addSecurityRecommendation")] - """ - Whether to add the security recommendation text: "For your security, do not - share this code." - """ - - code_expiration_minutes: Annotated[Optional[int], PropertyInfo(alias="codeExpirationMinutes")] - """Code expiration time in minutes (1-90). - - If set, adds footer: "This code expires in X minutes." - """ - - -class ButtonProps(TypedDict, total=False): - """Properties specific to the button type""" - - active_for: Annotated[Optional[int], PropertyInfo(alias="activeFor")] - - autofill_text: Annotated[Optional[str], PropertyInfo(alias="autofillText")] - - country_code: Annotated[Optional[str], PropertyInfo(alias="countryCode")] - - offer_code: Annotated[Optional[str], PropertyInfo(alias="offerCode")] - - otp_type: Annotated[Optional[str], PropertyInfo(alias="otpType")] - - package_name: Annotated[Optional[str], PropertyInfo(alias="packageName")] - - phone_number: Annotated[Optional[str], PropertyInfo(alias="phoneNumber")] - - quick_reply_type: Annotated[Optional[str], PropertyInfo(alias="quickReplyType")] - - signature_hash: Annotated[Optional[str], PropertyInfo(alias="signatureHash")] - - text: Optional[str] - - url: Optional[str] - - url_type: Annotated[Optional[str], PropertyInfo(alias="urlType")] - - -class Button(TypedDict, total=False): - """Interactive button in a message template""" - - id: int - """The unique identifier of the button (1-based index)""" - - props: ButtonProps - """Properties specific to the button type""" - - type: str - """ - The type of button (e.g., QUICK_REPLY, URL, PHONE_NUMBER, VOICE_CALL, COPY_CODE) - """ - - -class Footer(TypedDict, total=False): - """Footer section of a message template""" - - template: str - """The footer template text with optional variable placeholders""" - - type: Optional[str] - """The type of footer (typically "text")""" - - variables: Optional[Iterable[TemplateVariableParam]] - """List of variables used in the footer template""" - - -class Header(TypedDict, total=False): - """Header section of a message template""" - - template: str - """ - The header template text with optional variable placeholders (e.g., "Welcome to - {{0:variable}}") - """ - - type: Optional[str] - """The type of header (e.g., "text", "image", "video", "document")""" - - variables: Optional[Iterable[TemplateVariableParam]] - """List of variables used in the header template""" +from .sent_dm_services_common_contracts_poc_os_template_body_param import ( + SentDmServicesCommonContractsPocOsTemplateBodyParam, +) +from .sent_dm_services_common_contracts_poc_os_template_button_param import ( + SentDmServicesCommonContractsPocOsTemplateButtonParam, +) +from .sent_dm_services_common_contracts_poc_os_template_footer_param import ( + SentDmServicesCommonContractsPocOsTemplateFooterParam, +) +from .sent_dm_services_common_contracts_poc_os_template_header_param import ( + SentDmServicesCommonContractsPocOsTemplateHeaderParam, +) +from .sent_dm_services_common_contracts_poc_os_authentication_config_param import ( + SentDmServicesCommonContractsPocOsAuthenticationConfigParam, +) + +__all__ = ["TemplateDefinitionParam"] class TemplateDefinitionParam(TypedDict, total=False): @@ -124,20 +30,23 @@ class TemplateDefinitionParam(TypedDict, total=False): Complete definition of a message template including header, body, footer, and buttons """ - body: Required[Body] + body: Required[SentDmServicesCommonContractsPocOsTemplateBodyParam] """Body section of a message template with channel-specific content""" - authentication_config: Annotated[Optional[AuthenticationConfig], PropertyInfo(alias="authenticationConfig")] + authentication_config: Annotated[ + Optional[SentDmServicesCommonContractsPocOsAuthenticationConfigParam], + PropertyInfo(alias="authenticationConfig"), + ] """Configuration for AUTHENTICATION category templates""" - buttons: Optional[Iterable[Button]] + buttons: Optional[Iterable[SentDmServicesCommonContractsPocOsTemplateButtonParam]] """Optional list of interactive buttons (e.g., quick replies, URLs, phone numbers)""" definition_version: Annotated[Optional[str], PropertyInfo(alias="definitionVersion")] """The version of the template definition format""" - footer: Optional[Footer] + footer: Optional[SentDmServicesCommonContractsPocOsTemplateFooterParam] """Footer section of a message template""" - header: Optional[Header] + header: Optional[SentDmServicesCommonContractsPocOsTemplateHeaderParam] """Header section of a message template""" From 61049aeee01c5cf13058c032e98ed5fb845f16ff Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 12:32:25 +0000 Subject: [PATCH 13/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 274df57..fc685b8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-2566cdc5d8e0bffe2a8c442692b0fc1b35d3bfe7e9bf578331fc19d402361c1f.yml -openapi_spec_hash: 85e1feeb9bbc8d59bb34d6cdd679575a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-9018dd2a21f9b82281aa5dc76bb26a35b9b03458b08b198ba366585122619e85.yml +openapi_spec_hash: 3fc863551dd722031eb83384f76ca399 config_hash: 497506d9e2e66cd0573bd9c1f1242462 From f690a63fdd8839041a0317e9c66e6154b23b9493 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:01:50 +0000 Subject: [PATCH 14/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index fc685b8..fe2e934 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 40 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-9018dd2a21f9b82281aa5dc76bb26a35b9b03458b08b198ba366585122619e85.yml -openapi_spec_hash: 3fc863551dd722031eb83384f76ca399 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/sent%2Fsent-dm-294831f61f7890b2cdb89d181f26297732387d5e1288f446c0138e46fb1a4608.yml +openapi_spec_hash: a7f20451621ee678fbe09ff7a297b3ea config_hash: 497506d9e2e66cd0573bd9c1f1242462 From e662c6317ebf0a3142ec58393e6e45cdd6f99ba4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:02:08 +0000 Subject: [PATCH 15/15] release: 0.12.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 10 ++++++++++ pyproject.toml | 2 +- src/sent_dm/_version.py | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index f7014c3..a713055 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.11.0" + ".": "0.12.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 71908b4..999f361 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 0.12.0 (2026-03-12) + +Full Changelog: [v0.11.0...v0.12.0](https://github.com/sentdm/sent-dm-python/compare/v0.11.0...v0.12.0) + +### Features + +* **api:** api update ([42a3b0e](https://github.com/sentdm/sent-dm-python/commit/42a3b0ed01ad9db6bf7d0a899d71831fbfbcd861)) +* **api:** manual updates ([e08ed33](https://github.com/sentdm/sent-dm-python/commit/e08ed33e783744f84c88826061b47ccd27fc4324)) +* **api:** manual updates ([7c9c66a](https://github.com/sentdm/sent-dm-python/commit/7c9c66ac0bc7944a91e658a311dfd38f70e9adf8)) + ## 0.11.0 (2026-03-11) Full Changelog: [v0.10.0...v0.11.0](https://github.com/sentdm/sent-dm-python/compare/v0.10.0...v0.11.0) diff --git a/pyproject.toml b/pyproject.toml index f51484c..d98f2ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "sentdm" -version = "0.11.0" +version = "0.12.0" description = "The official Python library for the sent-dm API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/sent_dm/_version.py b/src/sent_dm/_version.py index f4a29db..85a5a9f 100644 --- a/src/sent_dm/_version.py +++ b/src/sent_dm/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "sent_dm" -__version__ = "0.11.0" # x-release-please-version +__version__ = "0.12.0" # x-release-please-version