@sentdm/sentdm 0.34.0 → 0.36.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 (120) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/client.d.mts +53 -22
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +53 -22
  5. package/client.d.ts.map +1 -1
  6. package/client.js +39 -8
  7. package/client.js.map +1 -1
  8. package/client.mjs +39 -8
  9. package/client.mjs.map +1 -1
  10. package/package.json +1 -1
  11. package/resources/contacts.d.mts +606 -89
  12. package/resources/contacts.d.mts.map +1 -1
  13. package/resources/contacts.d.ts +606 -89
  14. package/resources/contacts.d.ts.map +1 -1
  15. package/resources/contacts.js +21 -15
  16. package/resources/contacts.js.map +1 -1
  17. package/resources/contacts.mjs +21 -15
  18. package/resources/contacts.mjs.map +1 -1
  19. package/resources/conversations.d.mts +335 -69
  20. package/resources/conversations.d.mts.map +1 -1
  21. package/resources/conversations.d.ts +335 -69
  22. package/resources/conversations.d.ts.map +1 -1
  23. package/resources/conversations.js +15 -10
  24. package/resources/conversations.js.map +1 -1
  25. package/resources/conversations.mjs +15 -10
  26. package/resources/conversations.mjs.map +1 -1
  27. package/resources/index.d.mts +7 -7
  28. package/resources/index.d.mts.map +1 -1
  29. package/resources/index.d.ts +7 -7
  30. package/resources/index.d.ts.map +1 -1
  31. package/resources/index.js.map +1 -1
  32. package/resources/index.mjs.map +1 -1
  33. package/resources/me.d.mts +165 -41
  34. package/resources/me.d.mts.map +1 -1
  35. package/resources/me.d.ts +165 -41
  36. package/resources/me.d.ts.map +1 -1
  37. package/resources/me.js +14 -1
  38. package/resources/me.js.map +1 -1
  39. package/resources/me.mjs +14 -1
  40. package/resources/me.mjs.map +1 -1
  41. package/resources/messages.d.mts +206 -27
  42. package/resources/messages.d.mts.map +1 -1
  43. package/resources/messages.d.ts +206 -27
  44. package/resources/messages.d.ts.map +1 -1
  45. package/resources/messages.js +5 -1
  46. package/resources/messages.js.map +1 -1
  47. package/resources/messages.mjs +5 -1
  48. package/resources/messages.mjs.map +1 -1
  49. package/resources/numbers.d.mts +45 -4
  50. package/resources/numbers.d.mts.map +1 -1
  51. package/resources/numbers.d.ts +45 -4
  52. package/resources/numbers.d.ts.map +1 -1
  53. package/resources/numbers.js +3 -1
  54. package/resources/numbers.js.map +1 -1
  55. package/resources/numbers.mjs +3 -1
  56. package/resources/numbers.mjs.map +1 -1
  57. package/resources/profiles/campaigns.d.mts +579 -209
  58. package/resources/profiles/campaigns.d.mts.map +1 -1
  59. package/resources/profiles/campaigns.d.ts +579 -209
  60. package/resources/profiles/campaigns.d.ts.map +1 -1
  61. package/resources/profiles/campaigns.js +33 -64
  62. package/resources/profiles/campaigns.js.map +1 -1
  63. package/resources/profiles/campaigns.mjs +33 -64
  64. package/resources/profiles/campaigns.mjs.map +1 -1
  65. package/resources/profiles/index.d.mts +2 -2
  66. package/resources/profiles/index.d.mts.map +1 -1
  67. package/resources/profiles/index.d.ts +2 -2
  68. package/resources/profiles/index.d.ts.map +1 -1
  69. package/resources/profiles/index.js.map +1 -1
  70. package/resources/profiles/index.mjs.map +1 -1
  71. package/resources/profiles/profiles.d.mts +2006 -508
  72. package/resources/profiles/profiles.d.mts.map +1 -1
  73. package/resources/profiles/profiles.d.ts +2006 -508
  74. package/resources/profiles/profiles.d.ts.map +1 -1
  75. package/resources/profiles/profiles.js +98 -75
  76. package/resources/profiles/profiles.js.map +1 -1
  77. package/resources/profiles/profiles.mjs +98 -75
  78. package/resources/profiles/profiles.mjs.map +1 -1
  79. package/resources/templates.d.mts +497 -84
  80. package/resources/templates.d.mts.map +1 -1
  81. package/resources/templates.d.ts +497 -84
  82. package/resources/templates.d.ts.map +1 -1
  83. package/resources/templates.js +6 -4
  84. package/resources/templates.js.map +1 -1
  85. package/resources/templates.mjs +6 -4
  86. package/resources/templates.mjs.map +1 -1
  87. package/resources/users.d.mts +444 -43
  88. package/resources/users.d.mts.map +1 -1
  89. package/resources/users.d.ts +444 -43
  90. package/resources/users.d.ts.map +1 -1
  91. package/resources/users.js +6 -4
  92. package/resources/users.js.map +1 -1
  93. package/resources/users.mjs +6 -4
  94. package/resources/users.mjs.map +1 -1
  95. package/resources/webhooks.d.mts +791 -190
  96. package/resources/webhooks.d.mts.map +1 -1
  97. package/resources/webhooks.d.ts +791 -190
  98. package/resources/webhooks.d.ts.map +1 -1
  99. package/resources/webhooks.js +11 -8
  100. package/resources/webhooks.js.map +1 -1
  101. package/resources/webhooks.mjs +11 -8
  102. package/resources/webhooks.mjs.map +1 -1
  103. package/src/client.ts +78 -60
  104. package/src/resources/contacts.ts +696 -92
  105. package/src/resources/conversations.ts +400 -77
  106. package/src/resources/index.ts +20 -26
  107. package/src/resources/me.ts +186 -52
  108. package/src/resources/messages.ts +230 -27
  109. package/src/resources/numbers.ts +50 -4
  110. package/src/resources/profiles/campaigns.ts +706 -232
  111. package/src/resources/profiles/index.ts +6 -14
  112. package/src/resources/profiles/profiles.ts +2421 -646
  113. package/src/resources/templates.ts +583 -99
  114. package/src/resources/users.ts +514 -44
  115. package/src/resources/webhooks.ts +964 -241
  116. package/src/version.ts +1 -1
  117. package/version.d.mts +1 -1
  118. package/version.d.ts +1 -1
  119. package/version.js +1 -1
  120. package/version.mjs +1 -1
@@ -1,297 +1,503 @@
1
1
  import { APIResource } from "../../core/resource.mjs";
2
- import * as WebhooksAPI from "../webhooks.mjs";
2
+ import * as CampaignsAPI from "./campaigns.mjs";
3
3
  import { APIPromise } from "../../core/api-promise.mjs";
4
4
  import { RequestOptions } from "../../internal/request-options.mjs";
5
5
  /**
6
- * Manage organization profiles
6
+ * **Deprecated — use Sender Profiles.**
7
+ *
8
+ * The original profile resource, kept because it has live callers. It still works, and its replacement is `/v3/sender-profiles`, which takes the identity and the campaign in one call instead of across three.
9
+ *
10
+ * New integrations should not start here.
7
11
  */
8
12
  export declare class Campaigns extends APIResource {
9
13
  /**
14
+ * **Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be
15
+ * removed in a future release. It still behaves exactly as before, so nothing
16
+ * needs to change today — but new integrations should use `/v3/sender-profiles`,
17
+ * which models a profile's markets, compliance, brand, campaigns and billing
18
+ * explicitly.
19
+ *
10
20
  * Creates a new campaign scoped under the brand of the specified profile. Each
11
21
  * campaign must include at least one use case with sample messages.
12
22
  *
13
- * @example
14
- * ```ts
15
- * const apiResponseOfBrandCampaign =
16
- * await client.profiles.campaigns.create(
17
- * '770e8400-e29b-41d4-a716-446655440002',
18
- * {
19
- * campaign: {
20
- * description:
21
- * 'Appointment reminders and account notifications',
22
- * name: 'Customer Notifications',
23
- * type: 'App',
24
- * useCases: [
25
- * {
26
- * messagingUseCaseUs: 'ACCOUNT_NOTIFICATION',
27
- * sampleMessages: [
28
- * 'Hi {name}, your appointment is confirmed for {date} at {time}.',
29
- * 'Your order #{order_id} has been shipped. Track at {url}',
30
- * ],
31
- * },
32
- * ],
33
- * },
34
- * },
35
- * );
36
- * ```
37
- */
38
- create(profileID: string, params: CampaignCreateParams, options?: RequestOptions): APIPromise<APIResponseOfBrandCampaign>;
23
+ * @deprecated
24
+ */
25
+ create(profileID: string, params: CampaignCreateParams, options?: RequestOptions): APIPromise<CampaignCreateResponse>;
39
26
  /**
27
+ * **Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be
28
+ * removed in a future release. It still behaves exactly as before, so nothing
29
+ * needs to change today — but new integrations should use `/v3/sender-profiles`,
30
+ * which models a profile's markets, compliance, brand, campaigns and billing
31
+ * explicitly.
32
+ *
40
33
  * Updates an existing campaign under the brand of the specified profile. Cannot
41
34
  * update campaigns that have already been submitted to TCR.
42
35
  *
43
- * @example
44
- * ```ts
45
- * const apiResponseOfBrandCampaign =
46
- * await client.profiles.campaigns.update(
47
- * 'b2c3d4e5-f6a7-8901-bcde-f12345678901',
48
- * {
49
- * profileId: '770e8400-e29b-41d4-a716-446655440002',
50
- * campaign: {
51
- * description:
52
- * 'Updated appointment reminders and account notifications',
53
- * name: 'Customer Notifications Updated',
54
- * type: 'App',
55
- * useCases: [
56
- * {
57
- * messagingUseCaseUs: 'ACCOUNT_NOTIFICATION',
58
- * sampleMessages: [
59
- * 'Hi {name}, your appointment is confirmed for {date} at {time}.',
60
- * 'Your order #{order_id} has been shipped. Track at {url}',
61
- * ],
62
- * },
63
- * ],
64
- * },
65
- * },
66
- * );
67
- * ```
68
- */
69
- update(campaignID: string, params: CampaignUpdateParams, options?: RequestOptions): APIPromise<APIResponseOfBrandCampaign>;
36
+ * @deprecated
37
+ */
38
+ update(campaignID: string, params: CampaignUpdateParams, options?: RequestOptions): APIPromise<CampaignUpdateResponse>;
70
39
  /**
40
+ * **Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be
41
+ * removed in a future release. It still behaves exactly as before, so nothing
42
+ * needs to change today — but new integrations should use `/v3/sender-profiles`,
43
+ * which models a profile's markets, compliance, brand, campaigns and billing
44
+ * explicitly.
45
+ *
71
46
  * Retrieves all campaigns linked to the profile's brand, including use cases and
72
47
  * sample messages. Returns inherited campaigns if inherit_tcr_campaign=true.
73
48
  *
74
- * @example
75
- * ```ts
76
- * const apiResponseOfListOfBrandCampaign =
77
- * await client.profiles.campaigns.list(
78
- * '770e8400-e29b-41d4-a716-446655440002',
79
- * );
80
- * ```
49
+ * @deprecated
81
50
  */
82
- list(profileID: string, params?: CampaignListParams | null | undefined, options?: RequestOptions): APIPromise<APIResponseOfListOfBrandCampaign>;
51
+ list(profileID: string, params?: CampaignListParams | null | undefined, options?: RequestOptions): APIPromise<CampaignListResponse>;
83
52
  /**
53
+ * **Deprecated.** This endpoint is replaced by `/v3/sender-profiles` and will be
54
+ * removed in a future release. It still behaves exactly as before, so nothing
55
+ * needs to change today — but new integrations should use `/v3/sender-profiles`,
56
+ * which models a profile's markets, compliance, brand, campaigns and billing
57
+ * explicitly.
58
+ *
84
59
  * Deletes a campaign by ID from the brand of the specified profile. The profile
85
60
  * must belong to the authenticated organization.
86
61
  *
87
- * @example
88
- * ```ts
89
- * await client.profiles.campaigns.delete(
90
- * 'b2c3d4e5-f6a7-8901-bcde-f12345678901',
91
- * { profileId: '770e8400-e29b-41d4-a716-446655440002' },
92
- * );
93
- * ```
62
+ * @deprecated
94
63
  */
95
64
  delete(campaignID: string, params: CampaignDeleteParams, options?: RequestOptions): APIPromise<void>;
96
65
  }
66
+ export type MessagingUseCaseUs = 'MARKETING' | 'ACCOUNT_NOTIFICATION' | 'CUSTOMER_CARE' | 'FRAUD_ALERT' | 'TWO_FA' | 'DELIVERY_NOTIFICATION' | 'SECURITY_ALERT' | 'M2M' | 'MIXED' | 'HIGHER_EDUCATION' | 'POLLING_VOTING' | 'PUBLIC_SERVICE_ANNOUNCEMENT' | 'LOW_VOLUME';
97
67
  /**
98
68
  * Standard API response envelope for all v3 endpoints
99
69
  */
100
- export interface APIResponseOfBrandCampaign {
70
+ export interface CampaignCreateResponse {
101
71
  /**
102
72
  * A 10DLC campaign registered for a brand.
103
73
  */
104
- data?: BrandCampaign | null;
74
+ data?: CampaignCreateResponse.Data | null;
105
75
  /**
106
76
  * Error information
107
77
  */
108
- error?: WebhooksAPI.ErrorDetail | null;
78
+ error?: CampaignCreateResponse.Error | null;
109
79
  /**
110
80
  * Request and response metadata
111
81
  */
112
- meta?: WebhooksAPI.APIMeta;
82
+ meta?: CampaignCreateResponse.Meta;
113
83
  /**
114
84
  * Indicates whether the request was successful
115
85
  */
116
86
  success?: boolean;
117
87
  }
118
- /**
119
- * Standard API response envelope for all v3 endpoints
120
- */
121
- export interface APIResponseOfListOfBrandCampaign {
88
+ export declare namespace CampaignCreateResponse {
122
89
  /**
123
- * The response data (null if error)
90
+ * A 10DLC campaign registered for a brand.
124
91
  */
125
- data?: Array<BrandCampaign> | null;
92
+ interface Data {
93
+ id?: string;
94
+ billedDate?: string | null;
95
+ brandId?: string | null;
96
+ cost?: number | null;
97
+ createdAt?: string;
98
+ customerId?: string;
99
+ /**
100
+ * True once every carrier has completed its DCA election and the campaign is
101
+ * operationally ready for traffic.
102
+ */
103
+ dcaElectionsComplete?: boolean | null;
104
+ dcaElectionsCompletedAt?: string | null;
105
+ description?: string;
106
+ /**
107
+ * True when the one-time campaign submission fee has already been charged.
108
+ */
109
+ hasSubmissionTransaction?: boolean;
110
+ helpKeywords?: string | null;
111
+ helpMessage?: string | null;
112
+ messageFlow?: string | null;
113
+ name?: string;
114
+ optinKeywords?: string | null;
115
+ optinMessage?: string | null;
116
+ optoutKeywords?: string | null;
117
+ optoutMessage?: string | null;
118
+ privacyPolicyLink?: string | null;
119
+ status?: 'SENT_CREATED' | 'ACTIVE' | 'EXPIRED' | null;
120
+ submittedAt?: string | null;
121
+ submittedToTCR?: boolean;
122
+ /**
123
+ * The Campaign Registry identifier, once the campaign has been accepted.
124
+ */
125
+ tcrCampaignId?: string | null;
126
+ /**
127
+ * Surfaced so customers can see why a submission did not reach the registry.
128
+ */
129
+ tcrSyncError?: string | null;
130
+ termsAndConditionsLink?: string | null;
131
+ /**
132
+ * Campaign type (for example KYC or App).
133
+ */
134
+ type?: string;
135
+ updatedAt?: string | null;
136
+ useCases?: Array<Data.UseCase>;
137
+ /**
138
+ * Expected messaging volume for this campaign — customer-supplied on
139
+ * create/update, and the input to both the TCR usecase classification (LOW_VOLUME
140
+ * vs MIXED/specific) and the campaign fee tier. Surfaced so customers can read
141
+ * back the value they set.
142
+ */
143
+ volume?: string | null;
144
+ }
145
+ namespace Data {
146
+ /**
147
+ * Customer-facing use-case representation for the public v3 campaign contract.
148
+ * Exists for the same reason as BrandCampaignV3Response: nesting the
149
+ * TcrCampaignUseCase database entity in a public response means any column added
150
+ * to that table silently becomes part of the customer-facing contract. This DTO is
151
+ * an explicit allowlist, so a new column stays invisible until it is added here on
152
+ * purpose. This mirrors exactly the fields the entity already serialized, so it
153
+ * removes nothing from the current response shape. It only closes the future-leak
154
+ * path.
155
+ */
156
+ interface UseCase {
157
+ id?: string;
158
+ campaignId?: string;
159
+ createdAt?: string;
160
+ customerId?: string;
161
+ messagingUseCaseUs?: CampaignsAPI.MessagingUseCaseUs;
162
+ /**
163
+ * Sample messages submitted to the registry for this use case.
164
+ */
165
+ sampleMessages?: Array<string>;
166
+ updatedAt?: string | null;
167
+ }
168
+ }
126
169
  /**
127
170
  * Error information
128
171
  */
129
- error?: WebhooksAPI.ErrorDetail | null;
172
+ interface Error {
173
+ /**
174
+ * Machine-readable error code (e.g., "RESOURCE_001")
175
+ */
176
+ code?: string;
177
+ /**
178
+ * Additional validation error details (field-level errors)
179
+ */
180
+ details?: {
181
+ [key: string]: Array<string>;
182
+ } | null;
183
+ /**
184
+ * URL to documentation about this error
185
+ */
186
+ doc_url?: string | null;
187
+ /**
188
+ * Human-readable error message
189
+ */
190
+ message?: string;
191
+ }
130
192
  /**
131
193
  * Request and response metadata
132
194
  */
133
- meta?: WebhooksAPI.APIMeta;
134
- /**
135
- * Indicates whether the request was successful
136
- */
137
- success?: boolean;
195
+ interface Meta {
196
+ /**
197
+ * Unique identifier for this request (for tracing and support)
198
+ */
199
+ request_id?: string;
200
+ /**
201
+ * Server timestamp when the response was generated
202
+ */
203
+ timestamp?: string;
204
+ /**
205
+ * API version used for this request
206
+ */
207
+ version?: string;
208
+ }
138
209
  }
139
210
  /**
140
- * A 10DLC campaign registered for a brand.
141
- */
142
- export interface BrandCampaign {
143
- id?: string;
144
- billedDate?: string | null;
145
- brandId?: string | null;
146
- cost?: number | null;
147
- createdAt?: string;
148
- customerId?: string;
149
- /**
150
- * True once every carrier has completed its DCA election and the campaign is
151
- * operationally ready for traffic.
152
- */
153
- dcaElectionsComplete?: boolean | null;
154
- dcaElectionsCompletedAt?: string | null;
155
- description?: string;
156
- /**
157
- * True when the one-time campaign submission fee has already been charged.
158
- */
159
- hasSubmissionTransaction?: boolean;
160
- helpKeywords?: string | null;
161
- helpMessage?: string | null;
162
- messageFlow?: string | null;
163
- name?: string;
164
- optinKeywords?: string | null;
165
- optinMessage?: string | null;
166
- optoutKeywords?: string | null;
167
- optoutMessage?: string | null;
168
- privacyPolicyLink?: string | null;
169
- status?: 'SENT_CREATED' | 'ACTIVE' | 'EXPIRED' | null;
170
- submittedAt?: string | null;
171
- submittedToTCR?: boolean;
172
- /**
173
- * The Campaign Registry identifier, once the campaign has been accepted.
174
- */
175
- tcrCampaignId?: string | null;
176
- /**
177
- * Surfaced so customers can see why a submission did not reach the registry.
178
- */
179
- tcrSyncError?: string | null;
180
- termsAndConditionsLink?: string | null;
181
- /**
182
- * Campaign type (for example KYC or App).
183
- */
184
- type?: string;
185
- updatedAt?: string | null;
186
- useCases?: Array<CampaignUseCase>;
187
- /**
188
- * Expected messaging volume for this campaign — customer-supplied on
189
- * create/update, and the input to both the TCR usecase classification (LOW_VOLUME
190
- * vs MIXED/specific) and the campaign fee tier. Surfaced so customers can read
191
- * back the value they set.
192
- */
193
- volume?: string | null;
194
- }
195
- /**
196
- * Campaign data for create or update operation
211
+ * Standard API response envelope for all v3 endpoints
197
212
  */
198
- export interface CampaignData {
199
- /**
200
- * Campaign description
201
- */
202
- description: string;
203
- /**
204
- * Campaign name
205
- */
206
- name: string;
213
+ export interface CampaignUpdateResponse {
207
214
  /**
208
- * Campaign type (e.g., "KYC", "App")
215
+ * A 10DLC campaign registered for a brand.
209
216
  */
210
- type: string;
217
+ data?: CampaignUpdateResponse.Data | null;
211
218
  /**
212
- * List of use cases with sample messages
219
+ * Error information
213
220
  */
214
- useCases: Array<CampaignUseCaseData>;
221
+ error?: CampaignUpdateResponse.Error | null;
215
222
  /**
216
- * Comma-separated keywords that trigger help message (e.g., "HELP, INFO, SUPPORT")
223
+ * Request and response metadata
217
224
  */
218
- helpKeywords?: string | null;
225
+ meta?: CampaignUpdateResponse.Meta;
219
226
  /**
220
- * Message sent when user requests help
227
+ * Indicates whether the request was successful
221
228
  */
222
- helpMessage?: string | null;
229
+ success?: boolean;
230
+ }
231
+ export declare namespace CampaignUpdateResponse {
223
232
  /**
224
- * Description of how messages flow in the campaign
233
+ * A 10DLC campaign registered for a brand.
225
234
  */
226
- messageFlow?: string | null;
235
+ interface Data {
236
+ id?: string;
237
+ billedDate?: string | null;
238
+ brandId?: string | null;
239
+ cost?: number | null;
240
+ createdAt?: string;
241
+ customerId?: string;
242
+ /**
243
+ * True once every carrier has completed its DCA election and the campaign is
244
+ * operationally ready for traffic.
245
+ */
246
+ dcaElectionsComplete?: boolean | null;
247
+ dcaElectionsCompletedAt?: string | null;
248
+ description?: string;
249
+ /**
250
+ * True when the one-time campaign submission fee has already been charged.
251
+ */
252
+ hasSubmissionTransaction?: boolean;
253
+ helpKeywords?: string | null;
254
+ helpMessage?: string | null;
255
+ messageFlow?: string | null;
256
+ name?: string;
257
+ optinKeywords?: string | null;
258
+ optinMessage?: string | null;
259
+ optoutKeywords?: string | null;
260
+ optoutMessage?: string | null;
261
+ privacyPolicyLink?: string | null;
262
+ status?: 'SENT_CREATED' | 'ACTIVE' | 'EXPIRED' | null;
263
+ submittedAt?: string | null;
264
+ submittedToTCR?: boolean;
265
+ /**
266
+ * The Campaign Registry identifier, once the campaign has been accepted.
267
+ */
268
+ tcrCampaignId?: string | null;
269
+ /**
270
+ * Surfaced so customers can see why a submission did not reach the registry.
271
+ */
272
+ tcrSyncError?: string | null;
273
+ termsAndConditionsLink?: string | null;
274
+ /**
275
+ * Campaign type (for example KYC or App).
276
+ */
277
+ type?: string;
278
+ updatedAt?: string | null;
279
+ useCases?: Array<Data.UseCase>;
280
+ /**
281
+ * Expected messaging volume for this campaign — customer-supplied on
282
+ * create/update, and the input to both the TCR usecase classification (LOW_VOLUME
283
+ * vs MIXED/specific) and the campaign fee tier. Surfaced so customers can read
284
+ * back the value they set.
285
+ */
286
+ volume?: string | null;
287
+ }
288
+ namespace Data {
289
+ /**
290
+ * Customer-facing use-case representation for the public v3 campaign contract.
291
+ * Exists for the same reason as BrandCampaignV3Response: nesting the
292
+ * TcrCampaignUseCase database entity in a public response means any column added
293
+ * to that table silently becomes part of the customer-facing contract. This DTO is
294
+ * an explicit allowlist, so a new column stays invisible until it is added here on
295
+ * purpose. This mirrors exactly the fields the entity already serialized, so it
296
+ * removes nothing from the current response shape. It only closes the future-leak
297
+ * path.
298
+ */
299
+ interface UseCase {
300
+ id?: string;
301
+ campaignId?: string;
302
+ createdAt?: string;
303
+ customerId?: string;
304
+ messagingUseCaseUs?: CampaignsAPI.MessagingUseCaseUs;
305
+ /**
306
+ * Sample messages submitted to the registry for this use case.
307
+ */
308
+ sampleMessages?: Array<string>;
309
+ updatedAt?: string | null;
310
+ }
311
+ }
227
312
  /**
228
- * Comma-separated keywords that trigger opt-in (e.g., "YES, START, SUBSCRIBE")
313
+ * Error information
229
314
  */
230
- optinKeywords?: string | null;
315
+ interface Error {
316
+ /**
317
+ * Machine-readable error code (e.g., "RESOURCE_001")
318
+ */
319
+ code?: string;
320
+ /**
321
+ * Additional validation error details (field-level errors)
322
+ */
323
+ details?: {
324
+ [key: string]: Array<string>;
325
+ } | null;
326
+ /**
327
+ * URL to documentation about this error
328
+ */
329
+ doc_url?: string | null;
330
+ /**
331
+ * Human-readable error message
332
+ */
333
+ message?: string;
334
+ }
231
335
  /**
232
- * Message sent when user opts in
336
+ * Request and response metadata
233
337
  */
234
- optinMessage?: string | null;
338
+ interface Meta {
339
+ /**
340
+ * Unique identifier for this request (for tracing and support)
341
+ */
342
+ request_id?: string;
343
+ /**
344
+ * Server timestamp when the response was generated
345
+ */
346
+ timestamp?: string;
347
+ /**
348
+ * API version used for this request
349
+ */
350
+ version?: string;
351
+ }
352
+ }
353
+ /**
354
+ * Standard API response envelope for all v3 endpoints
355
+ */
356
+ export interface CampaignListResponse {
235
357
  /**
236
- * Comma-separated keywords that trigger opt-out (e.g., "STOP, UNSUBSCRIBE, END")
358
+ * The response data (null if error)
237
359
  */
238
- optoutKeywords?: string | null;
360
+ data?: Array<CampaignListResponse.Data> | null;
239
361
  /**
240
- * Message sent when user opts out
362
+ * Error information
241
363
  */
242
- optoutMessage?: string | null;
364
+ error?: CampaignListResponse.Error | null;
243
365
  /**
244
- * URL to privacy policy
366
+ * Request and response metadata
245
367
  */
246
- privacyPolicyLink?: string | null;
368
+ meta?: CampaignListResponse.Meta;
247
369
  /**
248
- * URL to terms and conditions
370
+ * Indicates whether the request was successful
249
371
  */
250
- termsAndConditionsLink?: string | null;
372
+ success?: boolean;
373
+ }
374
+ export declare namespace CampaignListResponse {
251
375
  /**
252
- * Expected messaging volume for this campaign. Numeric string (e.g. "1999",
253
- * "5000"). Values below 2000 bill at the low-volume tier.
376
+ * A 10DLC campaign registered for a brand.
254
377
  */
255
- volume?: string | null;
256
- }
257
- /**
258
- * Customer-facing use-case representation for the public v3 campaign contract.
259
- * Exists for the same reason as BrandCampaignV3Response: nesting the
260
- * TcrCampaignUseCase database entity in a public response means any column added
261
- * to that table silently becomes part of the customer-facing contract. This DTO is
262
- * an explicit allowlist, so a new column stays invisible until it is added here on
263
- * purpose. This mirrors exactly the fields the entity already serialized, so it
264
- * removes nothing from the current response shape. It only closes the future-leak
265
- * path.
266
- */
267
- export interface CampaignUseCase {
268
- id?: string;
269
- campaignId?: string;
270
- createdAt?: string;
271
- customerId?: string;
272
- messagingUseCaseUs?: MessagingUseCaseUs;
378
+ interface Data {
379
+ id?: string;
380
+ billedDate?: string | null;
381
+ brandId?: string | null;
382
+ cost?: number | null;
383
+ createdAt?: string;
384
+ customerId?: string;
385
+ /**
386
+ * True once every carrier has completed its DCA election and the campaign is
387
+ * operationally ready for traffic.
388
+ */
389
+ dcaElectionsComplete?: boolean | null;
390
+ dcaElectionsCompletedAt?: string | null;
391
+ description?: string;
392
+ /**
393
+ * True when the one-time campaign submission fee has already been charged.
394
+ */
395
+ hasSubmissionTransaction?: boolean;
396
+ helpKeywords?: string | null;
397
+ helpMessage?: string | null;
398
+ messageFlow?: string | null;
399
+ name?: string;
400
+ optinKeywords?: string | null;
401
+ optinMessage?: string | null;
402
+ optoutKeywords?: string | null;
403
+ optoutMessage?: string | null;
404
+ privacyPolicyLink?: string | null;
405
+ status?: 'SENT_CREATED' | 'ACTIVE' | 'EXPIRED' | null;
406
+ submittedAt?: string | null;
407
+ submittedToTCR?: boolean;
408
+ /**
409
+ * The Campaign Registry identifier, once the campaign has been accepted.
410
+ */
411
+ tcrCampaignId?: string | null;
412
+ /**
413
+ * Surfaced so customers can see why a submission did not reach the registry.
414
+ */
415
+ tcrSyncError?: string | null;
416
+ termsAndConditionsLink?: string | null;
417
+ /**
418
+ * Campaign type (for example KYC or App).
419
+ */
420
+ type?: string;
421
+ updatedAt?: string | null;
422
+ useCases?: Array<Data.UseCase>;
423
+ /**
424
+ * Expected messaging volume for this campaign — customer-supplied on
425
+ * create/update, and the input to both the TCR usecase classification (LOW_VOLUME
426
+ * vs MIXED/specific) and the campaign fee tier. Surfaced so customers can read
427
+ * back the value they set.
428
+ */
429
+ volume?: string | null;
430
+ }
431
+ namespace Data {
432
+ /**
433
+ * Customer-facing use-case representation for the public v3 campaign contract.
434
+ * Exists for the same reason as BrandCampaignV3Response: nesting the
435
+ * TcrCampaignUseCase database entity in a public response means any column added
436
+ * to that table silently becomes part of the customer-facing contract. This DTO is
437
+ * an explicit allowlist, so a new column stays invisible until it is added here on
438
+ * purpose. This mirrors exactly the fields the entity already serialized, so it
439
+ * removes nothing from the current response shape. It only closes the future-leak
440
+ * path.
441
+ */
442
+ interface UseCase {
443
+ id?: string;
444
+ campaignId?: string;
445
+ createdAt?: string;
446
+ customerId?: string;
447
+ messagingUseCaseUs?: CampaignsAPI.MessagingUseCaseUs;
448
+ /**
449
+ * Sample messages submitted to the registry for this use case.
450
+ */
451
+ sampleMessages?: Array<string>;
452
+ updatedAt?: string | null;
453
+ }
454
+ }
273
455
  /**
274
- * Sample messages submitted to the registry for this use case.
456
+ * Error information
275
457
  */
276
- sampleMessages?: Array<string>;
277
- updatedAt?: string | null;
278
- }
279
- /**
280
- * Campaign use case with sample messages
281
- */
282
- export interface CampaignUseCaseData {
283
- messagingUseCaseUs: MessagingUseCaseUs;
458
+ interface Error {
459
+ /**
460
+ * Machine-readable error code (e.g., "RESOURCE_001")
461
+ */
462
+ code?: string;
463
+ /**
464
+ * Additional validation error details (field-level errors)
465
+ */
466
+ details?: {
467
+ [key: string]: Array<string>;
468
+ } | null;
469
+ /**
470
+ * URL to documentation about this error
471
+ */
472
+ doc_url?: string | null;
473
+ /**
474
+ * Human-readable error message
475
+ */
476
+ message?: string;
477
+ }
284
478
  /**
285
- * Sample messages for this use case (1-5 messages, max 1024 characters each)
479
+ * Request and response metadata
286
480
  */
287
- sampleMessages: Array<string>;
481
+ interface Meta {
482
+ /**
483
+ * Unique identifier for this request (for tracing and support)
484
+ */
485
+ request_id?: string;
486
+ /**
487
+ * Server timestamp when the response was generated
488
+ */
489
+ timestamp?: string;
490
+ /**
491
+ * API version used for this request
492
+ */
493
+ version?: string;
494
+ }
288
495
  }
289
- export type MessagingUseCaseUs = 'MARKETING' | 'ACCOUNT_NOTIFICATION' | 'CUSTOMER_CARE' | 'FRAUD_ALERT' | 'TWO_FA' | 'DELIVERY_NOTIFICATION' | 'SECURITY_ALERT' | 'M2M' | 'MIXED' | 'HIGHER_EDUCATION' | 'POLLING_VOTING' | 'PUBLIC_SERVICE_ANNOUNCEMENT' | 'LOW_VOLUME';
290
496
  export interface CampaignCreateParams {
291
497
  /**
292
498
  * Body param: Campaign data for create or update operation
293
499
  */
294
- campaign: CampaignData;
500
+ campaign: CampaignCreateParams.Campaign;
295
501
  /**
296
502
  * Body param: Sandbox flag - when true, the operation is simulated without side
297
503
  * effects Useful for testing integrations without actual execution
@@ -310,6 +516,88 @@ export interface CampaignCreateParams {
310
516
  */
311
517
  'x-profile-id'?: string;
312
518
  }
519
+ export declare namespace CampaignCreateParams {
520
+ /**
521
+ * Campaign data for create or update operation
522
+ */
523
+ interface Campaign {
524
+ /**
525
+ * Campaign description
526
+ */
527
+ description: string;
528
+ /**
529
+ * Campaign name
530
+ */
531
+ name: string;
532
+ /**
533
+ * Campaign type (e.g., "KYC", "App").
534
+ *
535
+ * Still required of a caller, and consulted by nothing. It named the signup path
536
+ * that produced the campaign, was written to a column no query filters on, no TCR
537
+ * payload carries and no fee or status decision reads, and is now defaulted at the
538
+ * entity instead. It stays required so that a request which was valid before is
539
+ * still valid — dropping it would be the client-visible change, not keeping it.
540
+ */
541
+ type: string;
542
+ /**
543
+ * List of use cases with sample messages
544
+ */
545
+ useCases: Array<Campaign.UseCase>;
546
+ /**
547
+ * Comma-separated keywords that trigger help message (e.g., "HELP, INFO, SUPPORT")
548
+ */
549
+ helpKeywords?: string | null;
550
+ /**
551
+ * Message sent when user requests help
552
+ */
553
+ helpMessage?: string | null;
554
+ /**
555
+ * Description of how messages flow in the campaign
556
+ */
557
+ messageFlow?: string | null;
558
+ /**
559
+ * Comma-separated keywords that trigger opt-in (e.g., "YES, START, SUBSCRIBE")
560
+ */
561
+ optinKeywords?: string | null;
562
+ /**
563
+ * Message sent when user opts in
564
+ */
565
+ optinMessage?: string | null;
566
+ /**
567
+ * Comma-separated keywords that trigger opt-out (e.g., "STOP, UNSUBSCRIBE, END")
568
+ */
569
+ optoutKeywords?: string | null;
570
+ /**
571
+ * Message sent when user opts out
572
+ */
573
+ optoutMessage?: string | null;
574
+ /**
575
+ * URL to privacy policy
576
+ */
577
+ privacyPolicyLink?: string | null;
578
+ /**
579
+ * URL to terms and conditions
580
+ */
581
+ termsAndConditionsLink?: string | null;
582
+ /**
583
+ * Expected messaging volume for this campaign. Numeric string (e.g. "1999",
584
+ * "5000"). Values below 2000 bill at the low-volume tier.
585
+ */
586
+ volume?: string | null;
587
+ }
588
+ namespace Campaign {
589
+ /**
590
+ * Campaign use case with sample messages
591
+ */
592
+ interface UseCase {
593
+ messagingUseCaseUs: CampaignsAPI.MessagingUseCaseUs;
594
+ /**
595
+ * Sample messages for this use case (1-5 messages, max 1024 characters each)
596
+ */
597
+ sampleMessages: Array<string>;
598
+ }
599
+ }
600
+ }
313
601
  export interface CampaignUpdateParams {
314
602
  /**
315
603
  * Path param: Profile ID from route
@@ -318,7 +606,7 @@ export interface CampaignUpdateParams {
318
606
  /**
319
607
  * Body param: Campaign data for create or update operation
320
608
  */
321
- campaign: CampaignData;
609
+ campaign: CampaignUpdateParams.Campaign;
322
610
  /**
323
611
  * Body param: Sandbox flag - when true, the operation is simulated without side
324
612
  * effects Useful for testing integrations without actual execution
@@ -337,6 +625,88 @@ export interface CampaignUpdateParams {
337
625
  */
338
626
  'x-profile-id'?: string;
339
627
  }
628
+ export declare namespace CampaignUpdateParams {
629
+ /**
630
+ * Campaign data for create or update operation
631
+ */
632
+ interface Campaign {
633
+ /**
634
+ * Campaign description
635
+ */
636
+ description: string;
637
+ /**
638
+ * Campaign name
639
+ */
640
+ name: string;
641
+ /**
642
+ * Campaign type (e.g., "KYC", "App").
643
+ *
644
+ * Still required of a caller, and consulted by nothing. It named the signup path
645
+ * that produced the campaign, was written to a column no query filters on, no TCR
646
+ * payload carries and no fee or status decision reads, and is now defaulted at the
647
+ * entity instead. It stays required so that a request which was valid before is
648
+ * still valid — dropping it would be the client-visible change, not keeping it.
649
+ */
650
+ type: string;
651
+ /**
652
+ * List of use cases with sample messages
653
+ */
654
+ useCases: Array<Campaign.UseCase>;
655
+ /**
656
+ * Comma-separated keywords that trigger help message (e.g., "HELP, INFO, SUPPORT")
657
+ */
658
+ helpKeywords?: string | null;
659
+ /**
660
+ * Message sent when user requests help
661
+ */
662
+ helpMessage?: string | null;
663
+ /**
664
+ * Description of how messages flow in the campaign
665
+ */
666
+ messageFlow?: string | null;
667
+ /**
668
+ * Comma-separated keywords that trigger opt-in (e.g., "YES, START, SUBSCRIBE")
669
+ */
670
+ optinKeywords?: string | null;
671
+ /**
672
+ * Message sent when user opts in
673
+ */
674
+ optinMessage?: string | null;
675
+ /**
676
+ * Comma-separated keywords that trigger opt-out (e.g., "STOP, UNSUBSCRIBE, END")
677
+ */
678
+ optoutKeywords?: string | null;
679
+ /**
680
+ * Message sent when user opts out
681
+ */
682
+ optoutMessage?: string | null;
683
+ /**
684
+ * URL to privacy policy
685
+ */
686
+ privacyPolicyLink?: string | null;
687
+ /**
688
+ * URL to terms and conditions
689
+ */
690
+ termsAndConditionsLink?: string | null;
691
+ /**
692
+ * Expected messaging volume for this campaign. Numeric string (e.g. "1999",
693
+ * "5000"). Values below 2000 bill at the low-volume tier.
694
+ */
695
+ volume?: string | null;
696
+ }
697
+ namespace Campaign {
698
+ /**
699
+ * Campaign use case with sample messages
700
+ */
701
+ interface UseCase {
702
+ messagingUseCaseUs: CampaignsAPI.MessagingUseCaseUs;
703
+ /**
704
+ * Sample messages for this use case (1-5 messages, max 1024 characters each)
705
+ */
706
+ sampleMessages: Array<string>;
707
+ }
708
+ }
709
+ }
340
710
  export interface CampaignListParams {
341
711
  /**
342
712
  * Profile UUID to scope the request to a child profile. Only organization API keys
@@ -362,6 +732,6 @@ export interface CampaignDeleteParams {
362
732
  'x-profile-id'?: string;
363
733
  }
364
734
  export declare namespace Campaigns {
365
- export { type APIResponseOfBrandCampaign as APIResponseOfBrandCampaign, type APIResponseOfListOfBrandCampaign as APIResponseOfListOfBrandCampaign, type BrandCampaign as BrandCampaign, type CampaignData as CampaignData, type CampaignUseCase as CampaignUseCase, type CampaignUseCaseData as CampaignUseCaseData, type MessagingUseCaseUs as MessagingUseCaseUs, type CampaignCreateParams as CampaignCreateParams, type CampaignUpdateParams as CampaignUpdateParams, type CampaignListParams as CampaignListParams, type CampaignDeleteParams as CampaignDeleteParams, };
735
+ export { type MessagingUseCaseUs as MessagingUseCaseUs, type CampaignCreateResponse as CampaignCreateResponse, type CampaignUpdateResponse as CampaignUpdateResponse, type CampaignListResponse as CampaignListResponse, type CampaignCreateParams as CampaignCreateParams, type CampaignUpdateParams as CampaignUpdateParams, type CampaignListParams as CampaignListParams, type CampaignDeleteParams as CampaignDeleteParams, };
366
736
  }
367
737
  //# sourceMappingURL=campaigns.d.mts.map