sentdm 0.28.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/README.md +27 -1
  4. data/lib/sentdm/internal/type/base_model.rb +5 -5
  5. data/lib/sentdm/models/api_meta.rb +34 -0
  6. data/lib/sentdm/models/api_response_of_contact.rb +46 -0
  7. data/lib/sentdm/models/api_response_of_contact_message_summary.rb +43 -0
  8. data/lib/sentdm/models/api_response_of_conversation_messages_list.rb +43 -0
  9. data/lib/sentdm/models/api_response_of_profile_detail.rb +43 -0
  10. data/lib/sentdm/models/api_response_of_user.rb +43 -0
  11. data/lib/sentdm/models/api_response_template.rb +43 -0
  12. data/lib/sentdm/models/api_response_webhook.rb +43 -0
  13. data/lib/sentdm/models/billing_contact_info.rb +47 -0
  14. data/lib/sentdm/models/brand_business_info.rb +114 -0
  15. data/lib/sentdm/models/brand_compliance_info.rb +59 -0
  16. data/lib/sentdm/models/brand_contact_info.rb +58 -0
  17. data/lib/sentdm/models/brands_brand_data.rb +34 -0
  18. data/lib/sentdm/models/contact_delete_params.rb +2 -16
  19. data/lib/sentdm/models/contact_list_response.rb +12 -295
  20. data/lib/sentdm/models/contact_message_summary.rb +76 -0
  21. data/lib/sentdm/models/contact_response.rb +139 -0
  22. data/lib/sentdm/models/conversation_messages_list.rb +245 -0
  23. data/lib/sentdm/models/error_detail.rb +42 -0
  24. data/lib/sentdm/models/inbound_message_event_payload.rb +17 -17
  25. data/lib/sentdm/models/me_retrieve_response.rb +43 -243
  26. data/lib/sentdm/models/message_event_payload.rb +11 -11
  27. data/lib/sentdm/models/message_retrieve_activities_response.rb +9 -159
  28. data/lib/sentdm/models/message_retrieve_status_response.rb +6 -74
  29. data/lib/sentdm/models/message_send_response.rb +6 -74
  30. data/lib/sentdm/models/mutation_request.rb +20 -0
  31. data/lib/sentdm/models/number_lookup_response.rb +6 -74
  32. data/lib/sentdm/models/pagination_meta.rb +84 -0
  33. data/lib/sentdm/models/payment_details.rb +40 -0
  34. data/lib/sentdm/models/profile_complete_response.rb +6 -74
  35. data/lib/sentdm/models/profile_create_params.rb +9 -345
  36. data/lib/sentdm/models/profile_delete_params.rb +2 -16
  37. data/lib/sentdm/models/profile_detail.rb +650 -0
  38. data/lib/sentdm/models/profile_list_response.rb +12 -815
  39. data/lib/sentdm/models/profile_settings.rb +85 -0
  40. data/lib/sentdm/models/profile_update_params.rb +9 -345
  41. data/lib/sentdm/models/profiles/api_response_of_brand_campaign.rb +45 -0
  42. data/lib/sentdm/models/profiles/api_response_of_list_of_brand_campaign.rb +45 -0
  43. data/lib/sentdm/models/profiles/brand_campaign.rb +247 -0
  44. data/lib/sentdm/models/profiles/campaign_create_params.rb +3 -156
  45. data/lib/sentdm/models/profiles/campaign_data.rb +136 -0
  46. data/lib/sentdm/models/profiles/campaign_delete_params.rb +2 -17
  47. data/lib/sentdm/models/profiles/campaign_update_params.rb +3 -156
  48. data/lib/sentdm/models/profiles/campaign_use_case.rb +71 -0
  49. data/lib/sentdm/models/profiles/campaign_use_case_data.rb +29 -0
  50. data/lib/sentdm/models/template.rb +102 -0
  51. data/lib/sentdm/models/template_event_payload.rb +18 -18
  52. data/lib/sentdm/models/template_list_response.rb +12 -258
  53. data/lib/sentdm/models/user_list_response.rb +12 -249
  54. data/lib/sentdm/models/user_remove_params.rb +2 -16
  55. data/lib/sentdm/models/user_response.rb +94 -0
  56. data/lib/sentdm/models/webhook_event_type.rb +45 -0
  57. data/lib/sentdm/models/webhook_list_event_types_response.rb +12 -203
  58. data/lib/sentdm/models/webhook_list_events_response.rb +9 -157
  59. data/lib/sentdm/models/webhook_list_response.rb +12 -276
  60. data/lib/sentdm/models/webhook_response.rb +120 -0
  61. data/lib/sentdm/models/webhook_rotate_secret_params.rb +2 -17
  62. data/lib/sentdm/models/webhook_rotate_secret_response.rb +6 -74
  63. data/lib/sentdm/models/webhook_test_response.rb +6 -74
  64. data/lib/sentdm/models.rb +52 -0
  65. data/lib/sentdm/resources/contacts.rb +8 -8
  66. data/lib/sentdm/resources/conversations.rb +4 -4
  67. data/lib/sentdm/resources/me.rb +11 -0
  68. data/lib/sentdm/resources/profiles/campaigns.rb +8 -8
  69. data/lib/sentdm/resources/profiles.rb +12 -12
  70. data/lib/sentdm/resources/templates.rb +6 -6
  71. data/lib/sentdm/resources/users.rb +6 -6
  72. data/lib/sentdm/resources/webhooks.rb +8 -8
  73. data/lib/sentdm/version.rb +1 -1
  74. data/lib/sentdm.rb +32 -22
  75. data/rbi/sentdm/models/api_meta.rbi +55 -0
  76. data/rbi/sentdm/models/api_response_of_contact.rbi +74 -0
  77. data/rbi/sentdm/models/api_response_of_contact_message_summary.rbi +79 -0
  78. data/rbi/sentdm/models/api_response_of_conversation_messages_list.rbi +79 -0
  79. data/rbi/sentdm/models/api_response_of_profile_detail.rbi +74 -0
  80. data/rbi/sentdm/models/api_response_of_user.rbi +74 -0
  81. data/rbi/sentdm/models/api_response_template.rbi +74 -0
  82. data/rbi/sentdm/models/api_response_webhook.rbi +74 -0
  83. data/rbi/sentdm/models/billing_contact_info.rbi +65 -0
  84. data/rbi/sentdm/models/brand_business_info.rbi +162 -0
  85. data/rbi/sentdm/models/brand_compliance_info.rbi +76 -0
  86. data/rbi/sentdm/models/brand_contact_info.rbi +78 -0
  87. data/rbi/sentdm/models/brands_brand_data.rbi +65 -0
  88. data/rbi/sentdm/models/contact_delete_params.rbi +2 -19
  89. data/rbi/sentdm/models/contact_list_response.rbi +16 -522
  90. data/rbi/sentdm/models/contact_message_summary.rbi +144 -0
  91. data/rbi/sentdm/models/contact_response.rbi +200 -0
  92. data/rbi/sentdm/models/conversation_messages_list.rbi +419 -0
  93. data/rbi/sentdm/models/error_detail.rbi +66 -0
  94. data/rbi/sentdm/models/inbound_message_event_payload.rbi +16 -22
  95. data/rbi/sentdm/models/me_retrieve_response.rbi +60 -367
  96. data/rbi/sentdm/models/message_event_payload.rbi +12 -15
  97. data/rbi/sentdm/models/message_retrieve_activities_response.rbi +12 -325
  98. data/rbi/sentdm/models/message_retrieve_status_response.rbi +8 -148
  99. data/rbi/sentdm/models/message_send_response.rbi +8 -135
  100. data/rbi/sentdm/models/mutation_request.rbi +32 -0
  101. data/rbi/sentdm/models/number_lookup_response.rbi +8 -135
  102. data/rbi/sentdm/models/pagination_meta.rbi +135 -0
  103. data/rbi/sentdm/models/payment_details.rbi +56 -0
  104. data/rbi/sentdm/models/profile_complete_response.rbi +8 -137
  105. data/rbi/sentdm/models/profile_create_params.rbi +12 -546
  106. data/rbi/sentdm/models/profile_delete_params.rbi +2 -19
  107. data/rbi/sentdm/models/profile_detail.rbi +918 -0
  108. data/rbi/sentdm/models/profile_list_response.rbi +16 -1347
  109. data/rbi/sentdm/models/profile_settings.rbi +102 -0
  110. data/rbi/sentdm/models/profile_update_params.rbi +12 -546
  111. data/rbi/sentdm/models/profiles/api_response_of_brand_campaign.rbi +81 -0
  112. data/rbi/sentdm/models/profiles/api_response_of_list_of_brand_campaign.rbi +76 -0
  113. data/rbi/sentdm/models/profiles/brand_campaign.rbi +299 -0
  114. data/rbi/sentdm/models/profiles/campaign_create_params.rbi +4 -218
  115. data/rbi/sentdm/models/profiles/campaign_data.rbi +158 -0
  116. data/rbi/sentdm/models/profiles/campaign_delete_params.rbi +1 -14
  117. data/rbi/sentdm/models/profiles/campaign_update_params.rbi +4 -218
  118. data/rbi/sentdm/models/profiles/campaign_use_case.rbi +110 -0
  119. data/rbi/sentdm/models/profiles/campaign_use_case_data.rbi +51 -0
  120. data/rbi/sentdm/models/template.rbi +139 -0
  121. data/rbi/sentdm/models/template_event_payload.rbi +21 -27
  122. data/rbi/sentdm/models/template_list_response.rbi +16 -464
  123. data/rbi/sentdm/models/user_list_response.rbi +16 -444
  124. data/rbi/sentdm/models/user_remove_params.rbi +2 -19
  125. data/rbi/sentdm/models/user_response.rbi +131 -0
  126. data/rbi/sentdm/models/webhook_event_type.rbi +74 -0
  127. data/rbi/sentdm/models/webhook_list_event_types_response.rbi +16 -414
  128. data/rbi/sentdm/models/webhook_list_events_response.rbi +12 -314
  129. data/rbi/sentdm/models/webhook_list_response.rbi +16 -475
  130. data/rbi/sentdm/models/webhook_response.rbi +153 -0
  131. data/rbi/sentdm/models/webhook_rotate_secret_params.rbi +1 -14
  132. data/rbi/sentdm/models/webhook_rotate_secret_response.rbi +8 -148
  133. data/rbi/sentdm/models/webhook_test_response.rbi +8 -135
  134. data/rbi/sentdm/models.rbi +54 -0
  135. data/rbi/sentdm/resources/contacts.rbi +4 -4
  136. data/rbi/sentdm/resources/conversations.rbi +2 -2
  137. data/rbi/sentdm/resources/me.rbi +11 -0
  138. data/rbi/sentdm/resources/profiles/campaigns.rbi +5 -5
  139. data/rbi/sentdm/resources/profiles.rbi +9 -13
  140. data/rbi/sentdm/resources/templates.rbi +3 -3
  141. data/rbi/sentdm/resources/users.rbi +3 -3
  142. data/rbi/sentdm/resources/webhooks.rbi +4 -4
  143. data/sig/sentdm/models/api_meta.rbs +27 -0
  144. data/sig/sentdm/models/api_response_of_contact.rbs +39 -0
  145. data/sig/sentdm/models/api_response_of_contact_message_summary.rbs +39 -0
  146. data/sig/sentdm/models/api_response_of_conversation_messages_list.rbs +39 -0
  147. data/sig/sentdm/models/api_response_of_profile_detail.rbs +39 -0
  148. data/sig/sentdm/models/api_response_of_user.rbs +39 -0
  149. data/sig/sentdm/models/api_response_template.rbs +39 -0
  150. data/sig/sentdm/models/api_response_webhook.rbs +39 -0
  151. data/sig/sentdm/models/billing_contact_info.rbs +30 -0
  152. data/sig/sentdm/models/brand_business_info.rbs +89 -0
  153. data/sig/sentdm/models/brand_compliance_info.rbs +45 -0
  154. data/sig/sentdm/models/brand_contact_info.rbs +45 -0
  155. data/sig/sentdm/models/brands_brand_data.rbs +30 -0
  156. data/sig/sentdm/models/contact_delete_params.rbs +6 -10
  157. data/sig/sentdm/models/contact_list_response.rbs +20 -263
  158. data/sig/sentdm/models/contact_message_summary.rbs +84 -0
  159. data/sig/sentdm/models/contact_response.rbs +118 -0
  160. data/sig/sentdm/models/conversation_messages_list.rbs +240 -0
  161. data/sig/sentdm/models/error_detail.rbs +39 -0
  162. data/sig/sentdm/models/inbound_message_event_payload.rbs +10 -14
  163. data/sig/sentdm/models/me_retrieve_response.rbs +28 -176
  164. data/sig/sentdm/models/message_event_payload.rbs +5 -7
  165. data/sig/sentdm/models/message_retrieve_activities_response.rbs +14 -142
  166. data/sig/sentdm/models/message_retrieve_status_response.rbs +9 -71
  167. data/sig/sentdm/models/message_send_response.rbs +9 -71
  168. data/sig/sentdm/models/mutation_request.rbs +15 -0
  169. data/sig/sentdm/models/number_lookup_response.rbs +9 -71
  170. data/sig/sentdm/models/pagination_meta.rbs +67 -0
  171. data/sig/sentdm/models/payment_details.rbs +30 -0
  172. data/sig/sentdm/models/profile_complete_response.rbs +9 -71
  173. data/sig/sentdm/models/profile_create_params.rbs +12 -263
  174. data/sig/sentdm/models/profile_delete_params.rbs +6 -10
  175. data/sig/sentdm/models/profile_detail.rbs +461 -0
  176. data/sig/sentdm/models/profile_list_response.rbs +20 -606
  177. data/sig/sentdm/models/profile_settings.rbs +50 -0
  178. data/sig/sentdm/models/profile_update_params.rbs +12 -263
  179. data/sig/sentdm/models/profiles/api_response_of_brand_campaign.rbs +41 -0
  180. data/sig/sentdm/models/profiles/api_response_of_list_of_brand_campaign.rbs +41 -0
  181. data/sig/sentdm/models/profiles/brand_campaign.rbs +194 -0
  182. data/sig/sentdm/models/profiles/campaign_create_params.rbs +4 -108
  183. data/sig/sentdm/models/profiles/campaign_data.rbs +87 -0
  184. data/sig/sentdm/models/profiles/campaign_delete_params.rbs +8 -15
  185. data/sig/sentdm/models/profiles/campaign_update_params.rbs +4 -108
  186. data/sig/sentdm/models/profiles/campaign_use_case.rbs +66 -0
  187. data/sig/sentdm/models/profiles/campaign_use_case_data.rbs +27 -0
  188. data/sig/sentdm/models/template.rbs +84 -0
  189. data/sig/sentdm/models/template_event_payload.rbs +13 -17
  190. data/sig/sentdm/models/template_list_response.rbs +19 -230
  191. data/sig/sentdm/models/user_list_response.rbs +20 -224
  192. data/sig/sentdm/models/user_remove_params.rbs +6 -10
  193. data/sig/sentdm/models/user_response.rbs +79 -0
  194. data/sig/sentdm/models/webhook_event_type.rbs +51 -0
  195. data/sig/sentdm/models/webhook_list_event_types_response.rbs +20 -196
  196. data/sig/sentdm/models/webhook_list_events_response.rbs +14 -142
  197. data/sig/sentdm/models/webhook_list_response.rbs +20 -255
  198. data/sig/sentdm/models/webhook_response.rbs +110 -0
  199. data/sig/sentdm/models/webhook_rotate_secret_params.rbs +8 -17
  200. data/sig/sentdm/models/webhook_rotate_secret_response.rbs +9 -71
  201. data/sig/sentdm/models/webhook_test_response.rbs +9 -71
  202. data/sig/sentdm/models.rbs +52 -0
  203. data/sig/sentdm/resources/contacts.rbs +4 -4
  204. data/sig/sentdm/resources/conversations.rbs +2 -2
  205. data/sig/sentdm/resources/profiles/campaigns.rbs +5 -5
  206. data/sig/sentdm/resources/profiles.rbs +9 -9
  207. data/sig/sentdm/resources/templates.rbs +3 -3
  208. data/sig/sentdm/resources/users.rbs +3 -3
  209. data/sig/sentdm/resources/webhooks.rbs +4 -4
  210. metadata +98 -68
  211. data/lib/sentdm/models/contact_create_response.rb +0 -249
  212. data/lib/sentdm/models/contact_retrieve_message_summary_response.rb +0 -186
  213. data/lib/sentdm/models/contact_retrieve_response.rb +0 -249
  214. data/lib/sentdm/models/contact_update_response.rb +0 -249
  215. data/lib/sentdm/models/conversation_list_messages_response.rb +0 -436
  216. data/lib/sentdm/models/conversation_list_response.rb +0 -433
  217. data/lib/sentdm/models/profile_create_response.rb +0 -760
  218. data/lib/sentdm/models/profile_retrieve_response.rb +0 -762
  219. data/lib/sentdm/models/profile_update_response.rb +0 -760
  220. data/lib/sentdm/models/profiles/campaign_create_response.rb +0 -420
  221. data/lib/sentdm/models/profiles/campaign_list_response.rb +0 -421
  222. data/lib/sentdm/models/profiles/campaign_update_response.rb +0 -420
  223. data/lib/sentdm/models/template_create_response.rb +0 -209
  224. data/lib/sentdm/models/template_retrieve_response.rb +0 -209
  225. data/lib/sentdm/models/template_update_response.rb +0 -209
  226. data/lib/sentdm/models/user_invite_response.rb +0 -201
  227. data/lib/sentdm/models/user_retrieve_response.rb +0 -201
  228. data/lib/sentdm/models/user_update_role_response.rb +0 -201
  229. data/lib/sentdm/models/webhook_create_response.rb +0 -229
  230. data/lib/sentdm/models/webhook_retrieve_response.rb +0 -229
  231. data/lib/sentdm/models/webhook_toggle_status_response.rb +0 -229
  232. data/lib/sentdm/models/webhook_update_response.rb +0 -229
  233. data/rbi/sentdm/models/contact_create_response.rbi +0 -407
  234. data/rbi/sentdm/models/contact_retrieve_message_summary_response.rbi +0 -397
  235. data/rbi/sentdm/models/contact_retrieve_response.rbi +0 -409
  236. data/rbi/sentdm/models/contact_update_response.rbi +0 -407
  237. data/rbi/sentdm/models/conversation_list_messages_response.rbi +0 -843
  238. data/rbi/sentdm/models/conversation_list_response.rbi +0 -819
  239. data/rbi/sentdm/models/profile_create_response.rbi +0 -1226
  240. data/rbi/sentdm/models/profile_retrieve_response.rbi +0 -1230
  241. data/rbi/sentdm/models/profile_update_response.rbi +0 -1226
  242. data/rbi/sentdm/models/profiles/campaign_create_response.rbi +0 -674
  243. data/rbi/sentdm/models/profiles/campaign_list_response.rbi +0 -667
  244. data/rbi/sentdm/models/profiles/campaign_update_response.rbi +0 -674
  245. data/rbi/sentdm/models/template_create_response.rbi +0 -349
  246. data/rbi/sentdm/models/template_retrieve_response.rbi +0 -355
  247. data/rbi/sentdm/models/template_update_response.rbi +0 -349
  248. data/rbi/sentdm/models/user_invite_response.rbi +0 -336
  249. data/rbi/sentdm/models/user_retrieve_response.rbi +0 -336
  250. data/rbi/sentdm/models/user_update_role_response.rbi +0 -341
  251. data/rbi/sentdm/models/webhook_create_response.rbi +0 -361
  252. data/rbi/sentdm/models/webhook_retrieve_response.rbi +0 -363
  253. data/rbi/sentdm/models/webhook_toggle_status_response.rbi +0 -379
  254. data/rbi/sentdm/models/webhook_update_response.rbi +0 -361
  255. data/sig/sentdm/models/contact_create_response.rbs +0 -216
  256. data/sig/sentdm/models/contact_retrieve_message_summary_response.rbs +0 -182
  257. data/sig/sentdm/models/contact_retrieve_response.rbs +0 -216
  258. data/sig/sentdm/models/contact_update_response.rbs +0 -216
  259. data/sig/sentdm/models/conversation_list_messages_response.rbs +0 -404
  260. data/sig/sentdm/models/conversation_list_response.rbs +0 -404
  261. data/sig/sentdm/models/profile_create_response.rbs +0 -559
  262. data/sig/sentdm/models/profile_retrieve_response.rbs +0 -559
  263. data/sig/sentdm/models/profile_update_response.rbs +0 -559
  264. data/sig/sentdm/models/profiles/campaign_create_response.rbs +0 -357
  265. data/sig/sentdm/models/profiles/campaign_list_response.rbs +0 -357
  266. data/sig/sentdm/models/profiles/campaign_update_response.rbs +0 -357
  267. data/sig/sentdm/models/template_create_response.rbs +0 -182
  268. data/sig/sentdm/models/template_retrieve_response.rbs +0 -182
  269. data/sig/sentdm/models/template_update_response.rbs +0 -182
  270. data/sig/sentdm/models/user_invite_response.rbs +0 -177
  271. data/sig/sentdm/models/user_retrieve_response.rbs +0 -177
  272. data/sig/sentdm/models/user_update_role_response.rbs +0 -177
  273. data/sig/sentdm/models/webhook_create_response.rbs +0 -208
  274. data/sig/sentdm/models/webhook_retrieve_response.rbs +0 -208
  275. data/sig/sentdm/models/webhook_toggle_status_response.rbs +0 -208
  276. data/sig/sentdm/models/webhook_update_response.rbs +0 -208
@@ -0,0 +1,918 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Models
5
+ class ProfileDetail < Sentdm::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias { T.any(Sentdm::ProfileDetail, Sentdm::Internal::AnyHash) }
8
+
9
+ # Profile unique identifier
10
+ sig { returns(T.nilable(String)) }
11
+ attr_reader :id
12
+
13
+ sig { params(id: String).void }
14
+ attr_writer :id
15
+
16
+ # Always false. A profile no longer shares contacts with sibling profiles — it
17
+ # sees only what it owns. Retained so existing v3 clients reading
18
+ # allow_contact_sharing keep deserializing; it carries no information.
19
+ sig { returns(T.nilable(T::Boolean)) }
20
+ attr_accessor :allow_contact_sharing
21
+
22
+ # Whether number changes are allowed during onboarding
23
+ sig { returns(T.nilable(T::Boolean)) }
24
+ attr_accessor :allow_number_change_during_onboarding
25
+
26
+ # Always false. A profile no longer shares templates with sibling profiles.
27
+ # Retained so existing v3 clients reading allow_template_sharing keep
28
+ # deserializing; it carries no information.
29
+ sig { returns(T.nilable(T::Boolean)) }
30
+ attr_accessor :allow_template_sharing
31
+
32
+ # Billing contact info returned in profile responses
33
+ sig { returns(T.nilable(Sentdm::ProfileDetail::BillingContact)) }
34
+ attr_reader :billing_contact
35
+
36
+ sig do
37
+ params(
38
+ billing_contact:
39
+ T.nilable(Sentdm::ProfileDetail::BillingContact::OrHash)
40
+ ).void
41
+ end
42
+ attr_writer :billing_contact
43
+
44
+ # Billing model: profile, organization, or profile_and_organization
45
+ sig { returns(T.nilable(String)) }
46
+ attr_reader :billing_model
47
+
48
+ sig { params(billing_model: String).void }
49
+ attr_writer :billing_model
50
+
51
+ # Brand response with nested contact, business, and compliance sections — mirrors
52
+ # the request structure.
53
+ sig { returns(T.nilable(Sentdm::ProfileDetail::Brand)) }
54
+ attr_reader :brand
55
+
56
+ sig do
57
+ params(brand: T.nilable(Sentdm::ProfileDetail::Brand::OrHash)).void
58
+ end
59
+ attr_writer :brand
60
+
61
+ # When the profile was created
62
+ sig { returns(T.nilable(Time)) }
63
+ attr_reader :created_at
64
+
65
+ sig { params(created_at: Time).void }
66
+ attr_writer :created_at
67
+
68
+ # Profile description
69
+ sig { returns(T.nilable(String)) }
70
+ attr_accessor :description
71
+
72
+ # Profile email (inherited from organization)
73
+ sig { returns(T.nilable(String)) }
74
+ attr_accessor :email
75
+
76
+ # Profile icon URL
77
+ sig { returns(T.nilable(String)) }
78
+ attr_accessor :icon
79
+
80
+ # Always false. A profile no longer inherits its organization's contacts. Retained
81
+ # so existing v3 clients reading inherit_contacts keep deserializing; it carries
82
+ # no information.
83
+ sig { returns(T.nilable(T::Boolean)) }
84
+ attr_accessor :inherit_contacts
85
+
86
+ # Whether this profile inherits TCR brand from the organization
87
+ sig { returns(T.nilable(T::Boolean)) }
88
+ attr_reader :inherit_tcr_brand
89
+
90
+ sig { params(inherit_tcr_brand: T::Boolean).void }
91
+ attr_writer :inherit_tcr_brand
92
+
93
+ # Whether this profile inherits TCR campaign from the organization
94
+ sig { returns(T.nilable(T::Boolean)) }
95
+ attr_reader :inherit_tcr_campaign
96
+
97
+ sig { params(inherit_tcr_campaign: T::Boolean).void }
98
+ attr_writer :inherit_tcr_campaign
99
+
100
+ # Always false. A profile no longer inherits its organization's templates.
101
+ # Retained so existing v3 clients reading inherit_templates keep deserializing; it
102
+ # carries no information.
103
+ sig { returns(T.nilable(T::Boolean)) }
104
+ attr_accessor :inherit_templates
105
+
106
+ # Profile name
107
+ sig { returns(T.nilable(String)) }
108
+ attr_reader :name
109
+
110
+ sig { params(name: String).void }
111
+ attr_writer :name
112
+
113
+ # Parent organization ID
114
+ sig { returns(T.nilable(String)) }
115
+ attr_accessor :organization_id
116
+
117
+ # Direct SMS phone number
118
+ sig { returns(T.nilable(String)) }
119
+ attr_accessor :sending_phone_number
120
+
121
+ # Deprecated. Always null. Sender borrowing is gone: a profile no longer points at
122
+ # another profile for its SMS sender, and every profile owns the sender it sends
123
+ # from.
124
+ #
125
+ # Kept on the wire, and never populated, because those are two different promises.
126
+ # Removing the key changes the response's shape — a generated client loses the
127
+ # property and stops compiling on the next regenerate, for a value that is now
128
+ # null for every profile in existence. Keeping it null costs a key and breaks
129
+ # nobody, and null is the honest answer rather than a placeholder: there is no
130
+ # borrowing left to report.
131
+ #
132
+ # Nothing could populate it. Migration 260813161500 dropped the column and copied
133
+ # each borrower its own channel-provider row; its Down() says outright that the
134
+ # borrower-to-lender pairing is not recoverable. The only surviving trace is a
135
+ # notes string on the copied row.
136
+ sig { returns(T.nilable(String)) }
137
+ attr_accessor :sending_phone_number_profile_id
138
+
139
+ sig { returns(T.nilable(String)) }
140
+ attr_accessor :sending_whatsapp_number_profile_id
141
+
142
+ # Profile short name/abbreviation. 3–11 characters: letters, numbers, and spaces
143
+ # only, with at least one letter.
144
+ sig { returns(T.nilable(String)) }
145
+ attr_accessor :short_name
146
+
147
+ # Profile setup status: incomplete, pending_review, approved, rejected
148
+ sig { returns(T.nilable(String)) }
149
+ attr_reader :status
150
+
151
+ sig { params(status: String).void }
152
+ attr_writer :status
153
+
154
+ # When the profile was last updated
155
+ sig { returns(T.nilable(Time)) }
156
+ attr_accessor :updated_at
157
+
158
+ # WhatsApp Business Account ID associated with this profile. Present whether the
159
+ # WABA is inherited from the organization or configured directly.
160
+ sig { returns(T.nilable(String)) }
161
+ attr_accessor :waba_id
162
+
163
+ # Direct WhatsApp phone number
164
+ sig { returns(T.nilable(String)) }
165
+ attr_accessor :whatsapp_phone_number
166
+
167
+ # Detailed profile response for v3 API
168
+ sig do
169
+ params(
170
+ id: String,
171
+ allow_contact_sharing: T.nilable(T::Boolean),
172
+ allow_number_change_during_onboarding: T.nilable(T::Boolean),
173
+ allow_template_sharing: T.nilable(T::Boolean),
174
+ billing_contact:
175
+ T.nilable(Sentdm::ProfileDetail::BillingContact::OrHash),
176
+ billing_model: String,
177
+ brand: T.nilable(Sentdm::ProfileDetail::Brand::OrHash),
178
+ created_at: Time,
179
+ description: T.nilable(String),
180
+ email: T.nilable(String),
181
+ icon: T.nilable(String),
182
+ inherit_contacts: T.nilable(T::Boolean),
183
+ inherit_tcr_brand: T::Boolean,
184
+ inherit_tcr_campaign: T::Boolean,
185
+ inherit_templates: T.nilable(T::Boolean),
186
+ name: String,
187
+ organization_id: T.nilable(String),
188
+ sending_phone_number: T.nilable(String),
189
+ sending_phone_number_profile_id: T.nilable(String),
190
+ sending_whatsapp_number_profile_id: T.nilable(String),
191
+ short_name: T.nilable(String),
192
+ status: String,
193
+ updated_at: T.nilable(Time),
194
+ waba_id: T.nilable(String),
195
+ whatsapp_phone_number: T.nilable(String)
196
+ ).returns(T.attached_class)
197
+ end
198
+ def self.new(
199
+ # Profile unique identifier
200
+ id: nil,
201
+ # Always false. A profile no longer shares contacts with sibling profiles — it
202
+ # sees only what it owns. Retained so existing v3 clients reading
203
+ # allow_contact_sharing keep deserializing; it carries no information.
204
+ allow_contact_sharing: nil,
205
+ # Whether number changes are allowed during onboarding
206
+ allow_number_change_during_onboarding: nil,
207
+ # Always false. A profile no longer shares templates with sibling profiles.
208
+ # Retained so existing v3 clients reading allow_template_sharing keep
209
+ # deserializing; it carries no information.
210
+ allow_template_sharing: nil,
211
+ # Billing contact info returned in profile responses
212
+ billing_contact: nil,
213
+ # Billing model: profile, organization, or profile_and_organization
214
+ billing_model: nil,
215
+ # Brand response with nested contact, business, and compliance sections — mirrors
216
+ # the request structure.
217
+ brand: nil,
218
+ # When the profile was created
219
+ created_at: nil,
220
+ # Profile description
221
+ description: nil,
222
+ # Profile email (inherited from organization)
223
+ email: nil,
224
+ # Profile icon URL
225
+ icon: nil,
226
+ # Always false. A profile no longer inherits its organization's contacts. Retained
227
+ # so existing v3 clients reading inherit_contacts keep deserializing; it carries
228
+ # no information.
229
+ inherit_contacts: nil,
230
+ # Whether this profile inherits TCR brand from the organization
231
+ inherit_tcr_brand: nil,
232
+ # Whether this profile inherits TCR campaign from the organization
233
+ inherit_tcr_campaign: nil,
234
+ # Always false. A profile no longer inherits its organization's templates.
235
+ # Retained so existing v3 clients reading inherit_templates keep deserializing; it
236
+ # carries no information.
237
+ inherit_templates: nil,
238
+ # Profile name
239
+ name: nil,
240
+ # Parent organization ID
241
+ organization_id: nil,
242
+ # Direct SMS phone number
243
+ sending_phone_number: nil,
244
+ # Deprecated. Always null. Sender borrowing is gone: a profile no longer points at
245
+ # another profile for its SMS sender, and every profile owns the sender it sends
246
+ # from.
247
+ #
248
+ # Kept on the wire, and never populated, because those are two different promises.
249
+ # Removing the key changes the response's shape — a generated client loses the
250
+ # property and stops compiling on the next regenerate, for a value that is now
251
+ # null for every profile in existence. Keeping it null costs a key and breaks
252
+ # nobody, and null is the honest answer rather than a placeholder: there is no
253
+ # borrowing left to report.
254
+ #
255
+ # Nothing could populate it. Migration 260813161500 dropped the column and copied
256
+ # each borrower its own channel-provider row; its Down() says outright that the
257
+ # borrower-to-lender pairing is not recoverable. The only surviving trace is a
258
+ # notes string on the copied row.
259
+ sending_phone_number_profile_id: nil,
260
+ sending_whatsapp_number_profile_id: nil,
261
+ # Profile short name/abbreviation. 3–11 characters: letters, numbers, and spaces
262
+ # only, with at least one letter.
263
+ short_name: nil,
264
+ # Profile setup status: incomplete, pending_review, approved, rejected
265
+ status: nil,
266
+ # When the profile was last updated
267
+ updated_at: nil,
268
+ # WhatsApp Business Account ID associated with this profile. Present whether the
269
+ # WABA is inherited from the organization or configured directly.
270
+ waba_id: nil,
271
+ # Direct WhatsApp phone number
272
+ whatsapp_phone_number: nil
273
+ )
274
+ end
275
+
276
+ sig do
277
+ override.returns(
278
+ {
279
+ id: String,
280
+ allow_contact_sharing: T.nilable(T::Boolean),
281
+ allow_number_change_during_onboarding: T.nilable(T::Boolean),
282
+ allow_template_sharing: T.nilable(T::Boolean),
283
+ billing_contact: T.nilable(Sentdm::ProfileDetail::BillingContact),
284
+ billing_model: String,
285
+ brand: T.nilable(Sentdm::ProfileDetail::Brand),
286
+ created_at: Time,
287
+ description: T.nilable(String),
288
+ email: T.nilable(String),
289
+ icon: T.nilable(String),
290
+ inherit_contacts: T.nilable(T::Boolean),
291
+ inherit_tcr_brand: T::Boolean,
292
+ inherit_tcr_campaign: T::Boolean,
293
+ inherit_templates: T.nilable(T::Boolean),
294
+ name: String,
295
+ organization_id: T.nilable(String),
296
+ sending_phone_number: T.nilable(String),
297
+ sending_phone_number_profile_id: T.nilable(String),
298
+ sending_whatsapp_number_profile_id: T.nilable(String),
299
+ short_name: T.nilable(String),
300
+ status: String,
301
+ updated_at: T.nilable(Time),
302
+ waba_id: T.nilable(String),
303
+ whatsapp_phone_number: T.nilable(String)
304
+ }
305
+ )
306
+ end
307
+ def to_hash
308
+ end
309
+
310
+ class BillingContact < Sentdm::Internal::Type::BaseModel
311
+ OrHash =
312
+ T.type_alias do
313
+ T.any(
314
+ Sentdm::ProfileDetail::BillingContact,
315
+ Sentdm::Internal::AnyHash
316
+ )
317
+ end
318
+
319
+ sig { returns(T.nilable(String)) }
320
+ attr_accessor :address
321
+
322
+ sig { returns(T.nilable(String)) }
323
+ attr_accessor :email
324
+
325
+ sig { returns(T.nilable(String)) }
326
+ attr_accessor :name
327
+
328
+ sig { returns(T.nilable(String)) }
329
+ attr_accessor :phone
330
+
331
+ # Billing contact info returned in profile responses
332
+ sig do
333
+ params(
334
+ address: T.nilable(String),
335
+ email: T.nilable(String),
336
+ name: T.nilable(String),
337
+ phone: T.nilable(String)
338
+ ).returns(T.attached_class)
339
+ end
340
+ def self.new(address: nil, email: nil, name: nil, phone: nil)
341
+ end
342
+
343
+ sig do
344
+ override.returns(
345
+ {
346
+ address: T.nilable(String),
347
+ email: T.nilable(String),
348
+ name: T.nilable(String),
349
+ phone: T.nilable(String)
350
+ }
351
+ )
352
+ end
353
+ def to_hash
354
+ end
355
+ end
356
+
357
+ class Brand < Sentdm::Internal::Type::BaseModel
358
+ OrHash =
359
+ T.type_alias do
360
+ T.any(Sentdm::ProfileDetail::Brand, Sentdm::Internal::AnyHash)
361
+ end
362
+
363
+ # Unique identifier for the brand
364
+ sig { returns(T.nilable(String)) }
365
+ attr_reader :id
366
+
367
+ sig { params(id: String).void }
368
+ attr_writer :id
369
+
370
+ # Business details and address information
371
+ sig { returns(T.nilable(Sentdm::ProfileDetail::Brand::Business)) }
372
+ attr_reader :business
373
+
374
+ sig do
375
+ params(
376
+ business: T.nilable(Sentdm::ProfileDetail::Brand::Business::OrHash)
377
+ ).void
378
+ end
379
+ attr_writer :business
380
+
381
+ # Compliance and TCR-related information
382
+ sig { returns(T.nilable(Sentdm::ProfileDetail::Brand::Compliance)) }
383
+ attr_reader :compliance
384
+
385
+ sig do
386
+ params(
387
+ compliance:
388
+ T.nilable(Sentdm::ProfileDetail::Brand::Compliance::OrHash)
389
+ ).void
390
+ end
391
+ attr_writer :compliance
392
+
393
+ # Contact information for the brand
394
+ sig { returns(T.nilable(Sentdm::ProfileDetail::Brand::Contact)) }
395
+ attr_reader :contact
396
+
397
+ sig do
398
+ params(
399
+ contact: T.nilable(Sentdm::ProfileDetail::Brand::Contact::OrHash)
400
+ ).void
401
+ end
402
+ attr_writer :contact
403
+
404
+ # When the brand was created
405
+ sig { returns(T.nilable(Time)) }
406
+ attr_reader :created_at
407
+
408
+ sig { params(created_at: Time).void }
409
+ attr_writer :created_at
410
+
411
+ # Deprecated and scheduled for removal. Identifies the Campaign Service Provider
412
+ # that registered the brand, which is Sent, so the value is the same for every
413
+ # brand and every account. Nothing on your side can act on it and there is no
414
+ # replacement. Stop reading it.
415
+ sig { returns(T.nilable(String)) }
416
+ attr_accessor :csp_id
417
+
418
+ sig do
419
+ returns(
420
+ T.nilable(
421
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
422
+ )
423
+ )
424
+ end
425
+ attr_accessor :identity_status
426
+
427
+ # Whether this brand is inherited from the parent organization
428
+ sig { returns(T.nilable(T::Boolean)) }
429
+ attr_reader :is_inherited
430
+
431
+ sig { params(is_inherited: T::Boolean).void }
432
+ attr_writer :is_inherited
433
+
434
+ sig do
435
+ returns(T.nilable(Sentdm::ProfileDetail::Brand::Status::TaggedSymbol))
436
+ end
437
+ attr_accessor :status
438
+
439
+ # When the brand was submitted to TCR
440
+ sig { returns(T.nilable(Time)) }
441
+ attr_accessor :submitted_at
442
+
443
+ # Whether this brand has been submitted to TCR
444
+ sig { returns(T.nilable(T::Boolean)) }
445
+ attr_reader :submitted_to_tcr
446
+
447
+ sig { params(submitted_to_tcr: T::Boolean).void }
448
+ attr_writer :submitted_to_tcr
449
+
450
+ # TCR brand ID (populated after TCR submission)
451
+ sig { returns(T.nilable(String)) }
452
+ attr_accessor :tcr_brand_id
453
+
454
+ # Universal EIN from TCR
455
+ sig { returns(T.nilable(String)) }
456
+ attr_accessor :universal_ein
457
+
458
+ # When the brand was last updated
459
+ sig { returns(T.nilable(Time)) }
460
+ attr_accessor :updated_at
461
+
462
+ # Brand response with nested contact, business, and compliance sections — mirrors
463
+ # the request structure.
464
+ sig do
465
+ params(
466
+ id: String,
467
+ business: T.nilable(Sentdm::ProfileDetail::Brand::Business::OrHash),
468
+ compliance:
469
+ T.nilable(Sentdm::ProfileDetail::Brand::Compliance::OrHash),
470
+ contact: T.nilable(Sentdm::ProfileDetail::Brand::Contact::OrHash),
471
+ created_at: Time,
472
+ csp_id: T.nilable(String),
473
+ identity_status:
474
+ T.nilable(Sentdm::ProfileDetail::Brand::IdentityStatus::OrSymbol),
475
+ is_inherited: T::Boolean,
476
+ status: T.nilable(Sentdm::ProfileDetail::Brand::Status::OrSymbol),
477
+ submitted_at: T.nilable(Time),
478
+ submitted_to_tcr: T::Boolean,
479
+ tcr_brand_id: T.nilable(String),
480
+ universal_ein: T.nilable(String),
481
+ updated_at: T.nilable(Time)
482
+ ).returns(T.attached_class)
483
+ end
484
+ def self.new(
485
+ # Unique identifier for the brand
486
+ id: nil,
487
+ # Business details and address information
488
+ business: nil,
489
+ # Compliance and TCR-related information
490
+ compliance: nil,
491
+ # Contact information for the brand
492
+ contact: nil,
493
+ # When the brand was created
494
+ created_at: nil,
495
+ # Deprecated and scheduled for removal. Identifies the Campaign Service Provider
496
+ # that registered the brand, which is Sent, so the value is the same for every
497
+ # brand and every account. Nothing on your side can act on it and there is no
498
+ # replacement. Stop reading it.
499
+ csp_id: nil,
500
+ identity_status: nil,
501
+ # Whether this brand is inherited from the parent organization
502
+ is_inherited: nil,
503
+ status: nil,
504
+ # When the brand was submitted to TCR
505
+ submitted_at: nil,
506
+ # Whether this brand has been submitted to TCR
507
+ submitted_to_tcr: nil,
508
+ # TCR brand ID (populated after TCR submission)
509
+ tcr_brand_id: nil,
510
+ # Universal EIN from TCR
511
+ universal_ein: nil,
512
+ # When the brand was last updated
513
+ updated_at: nil
514
+ )
515
+ end
516
+
517
+ sig do
518
+ override.returns(
519
+ {
520
+ id: String,
521
+ business: T.nilable(Sentdm::ProfileDetail::Brand::Business),
522
+ compliance: T.nilable(Sentdm::ProfileDetail::Brand::Compliance),
523
+ contact: T.nilable(Sentdm::ProfileDetail::Brand::Contact),
524
+ created_at: Time,
525
+ csp_id: T.nilable(String),
526
+ identity_status:
527
+ T.nilable(
528
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
529
+ ),
530
+ is_inherited: T::Boolean,
531
+ status:
532
+ T.nilable(Sentdm::ProfileDetail::Brand::Status::TaggedSymbol),
533
+ submitted_at: T.nilable(Time),
534
+ submitted_to_tcr: T::Boolean,
535
+ tcr_brand_id: T.nilable(String),
536
+ universal_ein: T.nilable(String),
537
+ updated_at: T.nilable(Time)
538
+ }
539
+ )
540
+ end
541
+ def to_hash
542
+ end
543
+
544
+ class Business < Sentdm::Internal::Type::BaseModel
545
+ OrHash =
546
+ T.type_alias do
547
+ T.any(
548
+ Sentdm::ProfileDetail::Brand::Business,
549
+ Sentdm::Internal::AnyHash
550
+ )
551
+ end
552
+
553
+ # City
554
+ sig { returns(T.nilable(String)) }
555
+ attr_accessor :city
556
+
557
+ # Country code (e.g., US, CA)
558
+ sig { returns(T.nilable(String)) }
559
+ attr_accessor :country
560
+
561
+ # Country where the business is registered
562
+ sig { returns(T.nilable(String)) }
563
+ attr_accessor :country_of_registration
564
+
565
+ # Business entity type
566
+ sig { returns(T.nilable(String)) }
567
+ attr_accessor :entity_type
568
+
569
+ # Legal business name
570
+ sig { returns(T.nilable(String)) }
571
+ attr_accessor :legal_name
572
+
573
+ # Postal/ZIP code
574
+ sig { returns(T.nilable(String)) }
575
+ attr_accessor :postal_code
576
+
577
+ # State/province code
578
+ sig { returns(T.nilable(String)) }
579
+ attr_accessor :state
580
+
581
+ # Street address
582
+ sig { returns(T.nilable(String)) }
583
+ attr_accessor :street
584
+
585
+ # Tax ID/EIN number
586
+ sig { returns(T.nilable(String)) }
587
+ attr_accessor :tax_id
588
+
589
+ # Type of tax ID (e.g., us_ein, ca_bn)
590
+ sig { returns(T.nilable(String)) }
591
+ attr_accessor :tax_id_type
592
+
593
+ # Business website URL
594
+ sig { returns(T.nilable(String)) }
595
+ attr_accessor :url
596
+
597
+ # Business details and address information
598
+ sig do
599
+ params(
600
+ city: T.nilable(String),
601
+ country: T.nilable(String),
602
+ country_of_registration: T.nilable(String),
603
+ entity_type: T.nilable(String),
604
+ legal_name: T.nilable(String),
605
+ postal_code: T.nilable(String),
606
+ state: T.nilable(String),
607
+ street: T.nilable(String),
608
+ tax_id: T.nilable(String),
609
+ tax_id_type: T.nilable(String),
610
+ url: T.nilable(String)
611
+ ).returns(T.attached_class)
612
+ end
613
+ def self.new(
614
+ # City
615
+ city: nil,
616
+ # Country code (e.g., US, CA)
617
+ country: nil,
618
+ # Country where the business is registered
619
+ country_of_registration: nil,
620
+ # Business entity type
621
+ entity_type: nil,
622
+ # Legal business name
623
+ legal_name: nil,
624
+ # Postal/ZIP code
625
+ postal_code: nil,
626
+ # State/province code
627
+ state: nil,
628
+ # Street address
629
+ street: nil,
630
+ # Tax ID/EIN number
631
+ tax_id: nil,
632
+ # Type of tax ID (e.g., us_ein, ca_bn)
633
+ tax_id_type: nil,
634
+ # Business website URL
635
+ url: nil
636
+ )
637
+ end
638
+
639
+ sig do
640
+ override.returns(
641
+ {
642
+ city: T.nilable(String),
643
+ country: T.nilable(String),
644
+ country_of_registration: T.nilable(String),
645
+ entity_type: T.nilable(String),
646
+ legal_name: T.nilable(String),
647
+ postal_code: T.nilable(String),
648
+ state: T.nilable(String),
649
+ street: T.nilable(String),
650
+ tax_id: T.nilable(String),
651
+ tax_id_type: T.nilable(String),
652
+ url: T.nilable(String)
653
+ }
654
+ )
655
+ end
656
+ def to_hash
657
+ end
658
+ end
659
+
660
+ class Compliance < Sentdm::Internal::Type::BaseModel
661
+ OrHash =
662
+ T.type_alias do
663
+ T.any(
664
+ Sentdm::ProfileDetail::Brand::Compliance,
665
+ Sentdm::Internal::AnyHash
666
+ )
667
+ end
668
+
669
+ sig { returns(T.nilable(Sentdm::TcrBrandRelationship::TaggedSymbol)) }
670
+ attr_accessor :brand_relationship
671
+
672
+ # List of destination countries for messaging
673
+ sig { returns(T.nilable(T::Array[Sentdm::DestinationCountry])) }
674
+ attr_reader :destination_countries
675
+
676
+ sig do
677
+ params(
678
+ destination_countries:
679
+ T::Array[Sentdm::DestinationCountry::OrHash]
680
+ ).void
681
+ end
682
+ attr_writer :destination_countries
683
+
684
+ # Whether this is a TCR (Campaign Registry) application
685
+ sig { returns(T.nilable(T::Boolean)) }
686
+ attr_reader :is_tcr_application
687
+
688
+ sig { params(is_tcr_application: T::Boolean).void }
689
+ attr_writer :is_tcr_application
690
+
691
+ # Additional notes about the business or use case
692
+ sig { returns(T.nilable(String)) }
693
+ attr_accessor :notes
694
+
695
+ # Phone number prefix for messaging (e.g., "+1")
696
+ sig { returns(T.nilable(String)) }
697
+ attr_accessor :phone_number_prefix
698
+
699
+ # Always null. The brand's free-text primary use case is no longer stored: it
700
+ # reached neither TCR nor any decision, and its column is dropped with no
701
+ # backfill, because the values were prose and the typed equivalent is the
702
+ # campaign's MessagingUseCaseUS.
703
+ #
704
+ # Retained so existing v3 clients reading primary_use_case keep deserializing.
705
+ # Unlike the profile sharing flags, which can answer false truthfully, there is no
706
+ # value to report here — the field is present and empty rather than present and
707
+ # wrong.
708
+ sig { returns(T.nilable(String)) }
709
+ attr_accessor :primary_use_case
710
+
711
+ sig { returns(T.nilable(Sentdm::TcrVertical::TaggedSymbol)) }
712
+ attr_accessor :vertical
713
+
714
+ # Compliance and TCR-related information
715
+ sig do
716
+ params(
717
+ brand_relationship:
718
+ T.nilable(Sentdm::TcrBrandRelationship::OrSymbol),
719
+ destination_countries:
720
+ T::Array[Sentdm::DestinationCountry::OrHash],
721
+ is_tcr_application: T::Boolean,
722
+ notes: T.nilable(String),
723
+ phone_number_prefix: T.nilable(String),
724
+ primary_use_case: T.nilable(String),
725
+ vertical: T.nilable(Sentdm::TcrVertical::OrSymbol)
726
+ ).returns(T.attached_class)
727
+ end
728
+ def self.new(
729
+ brand_relationship: nil,
730
+ # List of destination countries for messaging
731
+ destination_countries: nil,
732
+ # Whether this is a TCR (Campaign Registry) application
733
+ is_tcr_application: nil,
734
+ # Additional notes about the business or use case
735
+ notes: nil,
736
+ # Phone number prefix for messaging (e.g., "+1")
737
+ phone_number_prefix: nil,
738
+ # Always null. The brand's free-text primary use case is no longer stored: it
739
+ # reached neither TCR nor any decision, and its column is dropped with no
740
+ # backfill, because the values were prose and the typed equivalent is the
741
+ # campaign's MessagingUseCaseUS.
742
+ #
743
+ # Retained so existing v3 clients reading primary_use_case keep deserializing.
744
+ # Unlike the profile sharing flags, which can answer false truthfully, there is no
745
+ # value to report here — the field is present and empty rather than present and
746
+ # wrong.
747
+ primary_use_case: nil,
748
+ vertical: nil
749
+ )
750
+ end
751
+
752
+ sig do
753
+ override.returns(
754
+ {
755
+ brand_relationship:
756
+ T.nilable(Sentdm::TcrBrandRelationship::TaggedSymbol),
757
+ destination_countries: T::Array[Sentdm::DestinationCountry],
758
+ is_tcr_application: T::Boolean,
759
+ notes: T.nilable(String),
760
+ phone_number_prefix: T.nilable(String),
761
+ primary_use_case: T.nilable(String),
762
+ vertical: T.nilable(Sentdm::TcrVertical::TaggedSymbol)
763
+ }
764
+ )
765
+ end
766
+ def to_hash
767
+ end
768
+ end
769
+
770
+ class Contact < Sentdm::Internal::Type::BaseModel
771
+ OrHash =
772
+ T.type_alias do
773
+ T.any(
774
+ Sentdm::ProfileDetail::Brand::Contact,
775
+ Sentdm::Internal::AnyHash
776
+ )
777
+ end
778
+
779
+ # Business/brand name
780
+ sig { returns(T.nilable(String)) }
781
+ attr_accessor :business_name
782
+
783
+ # Contact email address
784
+ sig { returns(T.nilable(String)) }
785
+ attr_accessor :email
786
+
787
+ # Primary contact name
788
+ sig { returns(T.nilable(String)) }
789
+ attr_reader :name
790
+
791
+ sig { params(name: String).void }
792
+ attr_writer :name
793
+
794
+ # Contact phone number in E.164 format
795
+ sig { returns(T.nilable(String)) }
796
+ attr_accessor :phone
797
+
798
+ # Contact phone country code (e.g., "1" for US)
799
+ sig { returns(T.nilable(String)) }
800
+ attr_accessor :phone_country_code
801
+
802
+ # Contact's role in the business
803
+ sig { returns(T.nilable(String)) }
804
+ attr_accessor :role
805
+
806
+ # Contact information for the brand
807
+ sig do
808
+ params(
809
+ business_name: T.nilable(String),
810
+ email: T.nilable(String),
811
+ name: String,
812
+ phone: T.nilable(String),
813
+ phone_country_code: T.nilable(String),
814
+ role: T.nilable(String)
815
+ ).returns(T.attached_class)
816
+ end
817
+ def self.new(
818
+ # Business/brand name
819
+ business_name: nil,
820
+ # Contact email address
821
+ email: nil,
822
+ # Primary contact name
823
+ name: nil,
824
+ # Contact phone number in E.164 format
825
+ phone: nil,
826
+ # Contact phone country code (e.g., "1" for US)
827
+ phone_country_code: nil,
828
+ # Contact's role in the business
829
+ role: nil
830
+ )
831
+ end
832
+
833
+ sig do
834
+ override.returns(
835
+ {
836
+ business_name: T.nilable(String),
837
+ email: T.nilable(String),
838
+ name: String,
839
+ phone: T.nilable(String),
840
+ phone_country_code: T.nilable(String),
841
+ role: T.nilable(String)
842
+ }
843
+ )
844
+ end
845
+ def to_hash
846
+ end
847
+ end
848
+
849
+ module IdentityStatus
850
+ extend Sentdm::Internal::Type::Enum
851
+
852
+ TaggedSymbol =
853
+ T.type_alias do
854
+ T.all(Symbol, Sentdm::ProfileDetail::Brand::IdentityStatus)
855
+ end
856
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
857
+
858
+ SELF_DECLARED =
859
+ T.let(
860
+ :SELF_DECLARED,
861
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
862
+ )
863
+ UNVERIFIED =
864
+ T.let(
865
+ :UNVERIFIED,
866
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
867
+ )
868
+ VERIFIED =
869
+ T.let(
870
+ :VERIFIED,
871
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
872
+ )
873
+ VETTED_VERIFIED =
874
+ T.let(
875
+ :VETTED_VERIFIED,
876
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
877
+ )
878
+
879
+ sig do
880
+ override.returns(
881
+ T::Array[
882
+ Sentdm::ProfileDetail::Brand::IdentityStatus::TaggedSymbol
883
+ ]
884
+ )
885
+ end
886
+ def self.values
887
+ end
888
+ end
889
+
890
+ module Status
891
+ extend Sentdm::Internal::Type::Enum
892
+
893
+ TaggedSymbol =
894
+ T.type_alias { T.all(Symbol, Sentdm::ProfileDetail::Brand::Status) }
895
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
896
+
897
+ ACTIVE =
898
+ T.let(:ACTIVE, Sentdm::ProfileDetail::Brand::Status::TaggedSymbol)
899
+ INACTIVE =
900
+ T.let(:INACTIVE, Sentdm::ProfileDetail::Brand::Status::TaggedSymbol)
901
+ SUSPENDED =
902
+ T.let(
903
+ :SUSPENDED,
904
+ Sentdm::ProfileDetail::Brand::Status::TaggedSymbol
905
+ )
906
+
907
+ sig do
908
+ override.returns(
909
+ T::Array[Sentdm::ProfileDetail::Brand::Status::TaggedSymbol]
910
+ )
911
+ end
912
+ def self.values
913
+ end
914
+ end
915
+ end
916
+ end
917
+ end
918
+ end