sendblue 3.10.1 → 3.12.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 (263) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +7 -7
  3. package/client.d.mts +46 -7
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +46 -7
  6. package/client.d.ts.map +1 -1
  7. package/client.js +54 -6
  8. package/client.js.map +1 -1
  9. package/client.mjs +54 -6
  10. package/client.mjs.map +1 -1
  11. package/core/streaming.d.mts +33 -0
  12. package/core/streaming.d.mts.map +1 -0
  13. package/core/streaming.d.ts +33 -0
  14. package/core/streaming.d.ts.map +1 -0
  15. package/core/streaming.js +263 -0
  16. package/core/streaming.js.map +1 -0
  17. package/core/streaming.mjs +258 -0
  18. package/core/streaming.mjs.map +1 -0
  19. package/internal/decoders/line.d.mts +17 -0
  20. package/internal/decoders/line.d.mts.map +1 -0
  21. package/internal/decoders/line.d.ts +17 -0
  22. package/internal/decoders/line.d.ts.map +1 -0
  23. package/internal/decoders/line.js +113 -0
  24. package/internal/decoders/line.js.map +1 -0
  25. package/internal/decoders/line.mjs +108 -0
  26. package/internal/decoders/line.mjs.map +1 -0
  27. package/internal/parse.d.mts.map +1 -1
  28. package/internal/parse.d.ts.map +1 -1
  29. package/internal/parse.js +10 -0
  30. package/internal/parse.js.map +1 -1
  31. package/internal/parse.mjs +10 -0
  32. package/internal/parse.mjs.map +1 -1
  33. package/internal/request-options.d.mts +2 -0
  34. package/internal/request-options.d.mts.map +1 -1
  35. package/internal/request-options.d.ts +2 -0
  36. package/internal/request-options.d.ts.map +1 -1
  37. package/internal/request-options.js.map +1 -1
  38. package/internal/request-options.mjs.map +1 -1
  39. package/internal/tslib.js +17 -17
  40. package/package.json +11 -1
  41. package/resources/auth/auth.d.mts +10 -0
  42. package/resources/auth/auth.d.mts.map +1 -0
  43. package/resources/auth/auth.d.ts +10 -0
  44. package/resources/auth/auth.d.ts.map +1 -0
  45. package/resources/auth/auth.js +17 -0
  46. package/resources/auth/auth.js.map +1 -0
  47. package/resources/auth/auth.mjs +12 -0
  48. package/resources/auth/auth.mjs.map +1 -0
  49. package/resources/auth/index.d.mts +3 -0
  50. package/resources/auth/index.d.mts.map +1 -0
  51. package/resources/auth/index.d.ts +3 -0
  52. package/resources/auth/index.d.ts.map +1 -0
  53. package/resources/auth/index.js +9 -0
  54. package/resources/auth/index.js.map +1 -0
  55. package/resources/auth/index.mjs +4 -0
  56. package/resources/auth/index.mjs.map +1 -0
  57. package/resources/auth/tokens.d.mts +77 -0
  58. package/resources/auth/tokens.d.mts.map +1 -0
  59. package/resources/auth/tokens.d.ts +77 -0
  60. package/resources/auth/tokens.d.ts.map +1 -0
  61. package/resources/auth/tokens.js +51 -0
  62. package/resources/auth/tokens.js.map +1 -0
  63. package/resources/auth/tokens.mjs +47 -0
  64. package/resources/auth/tokens.mjs.map +1 -0
  65. package/resources/auth.d.mts +2 -0
  66. package/resources/auth.d.mts.map +1 -0
  67. package/resources/auth.d.ts +2 -0
  68. package/resources/auth.d.ts.map +1 -0
  69. package/resources/auth.js +6 -0
  70. package/resources/auth.js.map +1 -0
  71. package/resources/auth.mjs +3 -0
  72. package/resources/auth.mjs.map +1 -0
  73. package/resources/contacts/contacts.d.mts +8 -0
  74. package/resources/contacts/contacts.d.mts.map +1 -1
  75. package/resources/contacts/contacts.d.ts +8 -0
  76. package/resources/contacts/contacts.d.ts.map +1 -1
  77. package/resources/contacts/contacts.js.map +1 -1
  78. package/resources/contacts/contacts.mjs.map +1 -1
  79. package/resources/events.d.mts +45 -0
  80. package/resources/events.d.mts.map +1 -0
  81. package/resources/events.d.ts +45 -0
  82. package/resources/events.d.ts.map +1 -0
  83. package/resources/events.js +37 -0
  84. package/resources/events.js.map +1 -0
  85. package/resources/events.mjs +33 -0
  86. package/resources/events.mjs.map +1 -0
  87. package/resources/groups.d.mts +25 -0
  88. package/resources/groups.d.mts.map +1 -1
  89. package/resources/groups.d.ts +25 -0
  90. package/resources/groups.d.ts.map +1 -1
  91. package/resources/index.d.mts +8 -2
  92. package/resources/index.d.mts.map +1 -1
  93. package/resources/index.d.ts +8 -2
  94. package/resources/index.d.ts.map +1 -1
  95. package/resources/index.js +13 -1
  96. package/resources/index.js.map +1 -1
  97. package/resources/index.mjs +6 -0
  98. package/resources/index.mjs.map +1 -1
  99. package/resources/lines/call-forwarding.d.mts +3 -0
  100. package/resources/lines/call-forwarding.d.mts.map +1 -1
  101. package/resources/lines/call-forwarding.d.ts +3 -0
  102. package/resources/lines/call-forwarding.d.ts.map +1 -1
  103. package/resources/lines/call-forwarding.js +3 -0
  104. package/resources/lines/call-forwarding.js.map +1 -1
  105. package/resources/lines/call-forwarding.mjs +3 -0
  106. package/resources/lines/call-forwarding.mjs.map +1 -1
  107. package/resources/lines/index.d.mts +1 -1
  108. package/resources/lines/index.d.mts.map +1 -1
  109. package/resources/lines/index.d.ts +1 -1
  110. package/resources/lines/index.d.ts.map +1 -1
  111. package/resources/lines/index.js.map +1 -1
  112. package/resources/lines/index.mjs.map +1 -1
  113. package/resources/lines/lines.d.mts +30 -0
  114. package/resources/lines/lines.d.mts.map +1 -1
  115. package/resources/lines/lines.d.ts +30 -0
  116. package/resources/lines/lines.d.ts.map +1 -1
  117. package/resources/lines/lines.js +15 -0
  118. package/resources/lines/lines.js.map +1 -1
  119. package/resources/lines/lines.mjs +15 -0
  120. package/resources/lines/lines.mjs.map +1 -1
  121. package/resources/location.d.mts +156 -0
  122. package/resources/location.d.mts.map +1 -0
  123. package/resources/location.d.ts +156 -0
  124. package/resources/location.d.ts.map +1 -0
  125. package/resources/location.js +57 -0
  126. package/resources/location.js.map +1 -0
  127. package/resources/location.mjs +53 -0
  128. package/resources/location.mjs.map +1 -0
  129. package/resources/messages.d.mts +507 -9
  130. package/resources/messages.d.mts.map +1 -1
  131. package/resources/messages.d.ts +507 -9
  132. package/resources/messages.d.ts.map +1 -1
  133. package/resources/messages.js +16 -2
  134. package/resources/messages.js.map +1 -1
  135. package/resources/messages.mjs +16 -2
  136. package/resources/messages.mjs.map +1 -1
  137. package/resources/request-location.d.mts +54 -0
  138. package/resources/request-location.d.mts.map +1 -0
  139. package/resources/request-location.d.ts +54 -0
  140. package/resources/request-location.d.ts.map +1 -0
  141. package/resources/request-location.js +30 -0
  142. package/resources/request-location.js.map +1 -0
  143. package/resources/request-location.mjs +26 -0
  144. package/resources/request-location.mjs.map +1 -0
  145. package/resources/send-carousel.d.mts +67 -0
  146. package/resources/send-carousel.d.mts.map +1 -1
  147. package/resources/send-carousel.d.ts +67 -0
  148. package/resources/send-carousel.d.ts.map +1 -1
  149. package/resources/v2/groups.d.mts +82 -0
  150. package/resources/v2/groups.d.mts.map +1 -0
  151. package/resources/v2/groups.d.ts +82 -0
  152. package/resources/v2/groups.d.ts.map +1 -0
  153. package/resources/v2/groups.js +27 -0
  154. package/resources/v2/groups.js.map +1 -0
  155. package/resources/v2/groups.mjs +23 -0
  156. package/resources/v2/groups.mjs.map +1 -0
  157. package/resources/v2/index.d.mts +1 -0
  158. package/resources/v2/index.d.mts.map +1 -1
  159. package/resources/v2/index.d.ts +1 -0
  160. package/resources/v2/index.d.ts.map +1 -1
  161. package/resources/v2/index.js +3 -1
  162. package/resources/v2/index.js.map +1 -1
  163. package/resources/v2/index.mjs +1 -0
  164. package/resources/v2/index.mjs.map +1 -1
  165. package/resources/v2/v2.d.mts +4 -0
  166. package/resources/v2/v2.d.mts.map +1 -1
  167. package/resources/v2/v2.d.ts +4 -0
  168. package/resources/v2/v2.d.ts.map +1 -1
  169. package/resources/v2/v2.js +4 -0
  170. package/resources/v2/v2.js.map +1 -1
  171. package/resources/v2/v2.mjs +4 -0
  172. package/resources/v2/v2.mjs.map +1 -1
  173. package/resources/verified-contacts.d.mts +152 -0
  174. package/resources/verified-contacts.d.mts.map +1 -0
  175. package/resources/verified-contacts.d.ts +152 -0
  176. package/resources/verified-contacts.d.ts.map +1 -0
  177. package/resources/verified-contacts.js +56 -0
  178. package/resources/verified-contacts.js.map +1 -0
  179. package/resources/verified-contacts.mjs +52 -0
  180. package/resources/verified-contacts.mjs.map +1 -0
  181. package/resources/verify/index.d.mts +3 -0
  182. package/resources/verify/index.d.mts.map +1 -0
  183. package/resources/verify/index.d.ts +3 -0
  184. package/resources/verify/index.d.ts.map +1 -0
  185. package/resources/verify/index.js +9 -0
  186. package/resources/verify/index.js.map +1 -0
  187. package/resources/verify/index.mjs +4 -0
  188. package/resources/verify/index.mjs.map +1 -0
  189. package/resources/verify/verifications.d.mts +45 -0
  190. package/resources/verify/verifications.d.mts.map +1 -0
  191. package/resources/verify/verifications.d.ts +45 -0
  192. package/resources/verify/verifications.d.ts.map +1 -0
  193. package/resources/verify/verifications.js +19 -0
  194. package/resources/verify/verifications.js.map +1 -0
  195. package/resources/verify/verifications.mjs +15 -0
  196. package/resources/verify/verifications.mjs.map +1 -0
  197. package/resources/verify/verify.d.mts +10 -0
  198. package/resources/verify/verify.d.mts.map +1 -0
  199. package/resources/verify/verify.d.ts +10 -0
  200. package/resources/verify/verify.d.ts.map +1 -0
  201. package/resources/verify/verify.js +17 -0
  202. package/resources/verify/verify.js.map +1 -0
  203. package/resources/verify/verify.mjs +12 -0
  204. package/resources/verify/verify.mjs.map +1 -0
  205. package/resources/verify.d.mts +2 -0
  206. package/resources/verify.d.mts.map +1 -0
  207. package/resources/verify.d.ts +2 -0
  208. package/resources/verify.d.ts.map +1 -0
  209. package/resources/verify.js +6 -0
  210. package/resources/verify.js.map +1 -0
  211. package/resources/verify.mjs +3 -0
  212. package/resources/verify.mjs.map +1 -0
  213. package/resources/webhooks.d.mts +26 -10
  214. package/resources/webhooks.d.mts.map +1 -1
  215. package/resources/webhooks.d.ts +26 -10
  216. package/resources/webhooks.d.ts.map +1 -1
  217. package/resources/webhooks.js +13 -2
  218. package/resources/webhooks.js.map +1 -1
  219. package/resources/webhooks.mjs +13 -2
  220. package/resources/webhooks.mjs.map +1 -1
  221. package/src/client.ts +116 -15
  222. package/src/core/streaming.ts +319 -0
  223. package/src/internal/decoders/line.ts +135 -0
  224. package/src/internal/parse.ts +14 -0
  225. package/src/internal/request-options.ts +2 -0
  226. package/src/resources/auth/auth.ts +19 -0
  227. package/src/resources/auth/index.ts +4 -0
  228. package/src/resources/auth/tokens.ts +101 -0
  229. package/src/resources/auth.ts +3 -0
  230. package/src/resources/contacts/contacts.ts +10 -0
  231. package/src/resources/events.ts +75 -0
  232. package/src/resources/groups.ts +28 -0
  233. package/src/resources/index.ts +26 -1
  234. package/src/resources/lines/call-forwarding.ts +3 -0
  235. package/src/resources/lines/index.ts +1 -1
  236. package/src/resources/lines/lines.ts +44 -0
  237. package/src/resources/location.ts +237 -0
  238. package/src/resources/messages.ts +634 -9
  239. package/src/resources/request-location.ts +72 -0
  240. package/src/resources/send-carousel.ts +76 -0
  241. package/src/resources/v2/groups.ts +106 -0
  242. package/src/resources/v2/index.ts +1 -0
  243. package/src/resources/v2/v2.ts +6 -0
  244. package/src/resources/verified-contacts.ts +204 -0
  245. package/src/resources/verify/index.ts +9 -0
  246. package/src/resources/verify/verifications.ts +75 -0
  247. package/src/resources/verify/verify.ts +25 -0
  248. package/src/resources/verify.ts +3 -0
  249. package/src/resources/webhooks.ts +27 -10
  250. package/src/streaming.ts +2 -0
  251. package/src/version.ts +1 -1
  252. package/streaming.d.mts +3 -0
  253. package/streaming.d.mts.map +1 -0
  254. package/streaming.d.ts +3 -0
  255. package/streaming.d.ts.map +1 -0
  256. package/streaming.js +6 -0
  257. package/streaming.js.map +1 -0
  258. package/streaming.mjs +3 -0
  259. package/streaming.mjs.map +1 -0
  260. package/version.d.mts +1 -1
  261. package/version.d.ts +1 -1
  262. package/version.js +1 -1
  263. package/version.mjs +1 -1
@@ -71,12 +71,11 @@ export class Messages extends APIResource {
71
71
  }
72
72
 
73
73
  /**
74
- * Send an iMessage, SMS, or MMS to a single recipient
74
+ * Send an iMessage, SMS, MMS, or Sendblue App Card to a single recipient
75
75
  *
76
76
  * @example
77
77
  * ```ts
78
78
  * const messageResponse = await client.messages.send({
79
- * content: 'Hello, World!',
80
79
  * from_number: '+19998887777',
81
80
  * number: '+19998887777',
82
81
  * });
@@ -85,6 +84,26 @@ export class Messages extends APIResource {
85
84
  send(body: MessageSendParams, options?: RequestOptions): APIPromise<MessageResponse> {
86
85
  return this._client.post('/api/send-message', { body, ...options });
87
86
  }
87
+
88
+ /**
89
+ * Continues an existing App Card by sending a new Apple message in the same
90
+ * iMessage session, from the same sender line and inline-reply context. The
91
+ * continuation receives its own message handle and delivery/read status updates.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * const messageResponse = await client.messages.updateAppCard(
96
+ * 'message_handle',
97
+ * );
98
+ * ```
99
+ */
100
+ updateAppCard(
101
+ messageHandle: string,
102
+ body: MessageUpdateAppCardParams,
103
+ options?: RequestOptions,
104
+ ): APIPromise<MessageResponse> {
105
+ return this._client.post(path`/api/messages/${messageHandle}/update-app-card`, { body, ...options });
106
+ }
88
107
  }
89
108
 
90
109
  export interface MessageContent {
@@ -133,6 +152,12 @@ export interface MessageContent {
133
152
  */
134
153
  message_handle?: string;
135
154
 
155
+ /**
156
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
157
+ * account, conversation, and sending line.
158
+ */
159
+ reply_to?: MessageContent.ReplyTo;
160
+
136
161
  /**
137
162
  * UUID of the seat that sent the message. Present when `seat_id` was provided on
138
163
  * send, or for dashboard-originated group messages.
@@ -162,18 +187,65 @@ export interface MessageContent {
162
187
 
163
188
  status?: 'QUEUED' | 'SENT' | 'DELIVERED' | 'ERROR' | 'RECEIVED';
164
189
 
190
+ /**
191
+ * Message that originated an iMessage inline-reply thread.
192
+ */
193
+ thread_originator?: MessageContent.ThreadOriginator;
194
+
165
195
  /**
166
196
  * Recipient phone number
167
197
  */
168
198
  to_number?: string;
169
199
  }
170
200
 
201
+ export namespace MessageContent {
202
+ /**
203
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
204
+ * account, conversation, and sending line.
205
+ */
206
+ export interface ReplyTo {
207
+ /**
208
+ * Public handle of the immediate parent message
209
+ */
210
+ message_handle: string;
211
+
212
+ /**
213
+ * Advanced override for a known part of a multipart target. Omit this in normal
214
+ * reply requests and never guess it; requests default to 0. When replying to an
215
+ * attachment represented by its own webhook, use that webhook's `message_handle`
216
+ * and omit `part_index` so Sendblue can use the stored authoritative part.
217
+ * Responses omit it when no authoritative immediate-parent part is available.
218
+ */
219
+ part_index?: number;
220
+ }
221
+
222
+ /**
223
+ * Message that originated an iMessage inline-reply thread.
224
+ */
225
+ export interface ThreadOriginator {
226
+ /**
227
+ * Public handle of the thread's root message
228
+ */
229
+ message_handle: string;
230
+
231
+ /**
232
+ * Opaque Apple thread-originator part descriptor
233
+ */
234
+ part?: string;
235
+ }
236
+ }
237
+
171
238
  export interface MessageResponse {
172
239
  /**
173
240
  * Email of the account that sent the message
174
241
  */
175
242
  account_email?: string;
176
243
 
244
+ /**
245
+ * App Card data sent or received with this message.
246
+ */
247
+ app_card?: MessageResponse.AppCard | MessageResponse.InboundAppCard;
248
+
177
249
  /**
178
250
  * Message content
179
251
  */
@@ -209,6 +281,11 @@ export interface MessageResponse {
209
281
  */
210
282
  is_outbound?: boolean;
211
283
 
284
+ /**
285
+ * Decoded Find My location share coordinates.
286
+ */
287
+ location?: MessageResponse.Location;
288
+
212
289
  /**
213
290
  * URL of attached media
214
291
  */
@@ -219,11 +296,19 @@ export interface MessageResponse {
219
296
  */
220
297
  message_handle?: string;
221
298
 
299
+ message_type?: 'message' | 'group' | 'location';
300
+
222
301
  /**
223
302
  * Recipient phone number
224
303
  */
225
304
  number?: string;
226
305
 
306
+ /**
307
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
308
+ * account, conversation, and sending line.
309
+ */
310
+ reply_to?: MessageResponse.ReplyTo;
311
+
227
312
  /**
228
313
  * UUID of the seat that sent the message. Present when `seat_id` was provided on
229
314
  * send, or for dashboard-originated group messages.
@@ -255,6 +340,186 @@ export interface MessageResponse {
255
340
  sender_email?: string | null;
256
341
 
257
342
  status?: 'QUEUED' | 'SENT' | 'DELIVERED' | 'ERROR';
343
+
344
+ /**
345
+ * Message that originated an iMessage inline-reply thread.
346
+ */
347
+ thread_originator?: MessageResponse.ThreadOriginator;
348
+ }
349
+
350
+ export namespace MessageResponse {
351
+ /**
352
+ * A Sendblue App Card rendered with Apple's Messages framework. App Cards require
353
+ * a V2 Mac line and an iMessage-capable recipient; they never fall back to SMS.
354
+ * The URL is delivered to the identified Messages extension when the recipient
355
+ * taps the card. An initial App Card may include `reply_to` to create an inline
356
+ * reply. Later state changes use the update endpoint, which sends a new Apple
357
+ * message in the same App Card session. The feature is unavailable on the free
358
+ * plan.
359
+ */
360
+ export interface AppCard {
361
+ appName: string;
362
+
363
+ extensionBundleId: string;
364
+
365
+ /**
366
+ * Visible card fields mirroring Apple's MSMessageTemplateLayout.
367
+ */
368
+ layout: AppCard.Layout;
369
+
370
+ teamId: string;
371
+
372
+ /**
373
+ * URL delivered to the iMessage extension on tap. HTTPS URLs are limited to 2048
374
+ * characters; data URLs carrying inline app state are limited to 16384.
375
+ */
376
+ url: string;
377
+
378
+ /**
379
+ * Optional numeric App Store ID for recipients without the extension.
380
+ */
381
+ appStoreId?: number;
382
+
383
+ /**
384
+ * Fallback text for notifications and surfaces that cannot render the card.
385
+ */
386
+ fallbackText?: string;
387
+
388
+ /**
389
+ * Use Apple's live layout when the extension is installed; false always sends the
390
+ * static template layout.
391
+ */
392
+ interactive?: boolean;
393
+
394
+ /**
395
+ * Optional caller-supplied App Card session UUID. Generated automatically when
396
+ * omitted.
397
+ */
398
+ sessionIdentifier?: string;
399
+
400
+ /**
401
+ * Original message handle for an App Card continuation returned by the update
402
+ * endpoint.
403
+ */
404
+ updateMessageHandle?: string;
405
+ }
406
+
407
+ export namespace AppCard {
408
+ /**
409
+ * Visible card fields mirroring Apple's MSMessageTemplateLayout.
410
+ */
411
+ export interface Layout {
412
+ caption?: string;
413
+
414
+ /**
415
+ * Secondary text overlaid on the preview image. Requires imageUrl.
416
+ */
417
+ imageSubtitle?: string;
418
+
419
+ /**
420
+ * Text overlaid on the preview image. Requires imageUrl.
421
+ */
422
+ imageTitle?: string;
423
+
424
+ /**
425
+ * HTTPS preview image fetched by the worker and sent as a hidden card attachment.
426
+ * JPEG, PNG, HEIC, HEIF, and WebP are supported up to 10 MB.
427
+ */
428
+ imageUrl?: string;
429
+
430
+ subcaption?: string;
431
+
432
+ /**
433
+ * Fallback text used in notifications and non-rendering surfaces.
434
+ */
435
+ summary?: string;
436
+
437
+ trailingCaption?: string;
438
+
439
+ trailingSubcaption?: string;
440
+ }
441
+ }
442
+
443
+ /**
444
+ * App Card session metadata received from an iMessage contact.
445
+ */
446
+ export interface InboundAppCard {
447
+ balloonBundleId: string;
448
+
449
+ extensionBundleId: string;
450
+
451
+ /**
452
+ * Retry-stable occurrence revision assigned to this inbound App Card state.
453
+ */
454
+ revision: number;
455
+
456
+ sessionIdentifier: string;
457
+
458
+ teamId: string;
459
+
460
+ url: string;
461
+ }
462
+
463
+ /**
464
+ * Decoded Find My location share coordinates.
465
+ */
466
+ export interface Location {
467
+ latitude: number;
468
+
469
+ longitude: number;
470
+
471
+ /**
472
+ * Horizontal accuracy in meters
473
+ */
474
+ accuracy?: number;
475
+
476
+ /**
477
+ * Altitude in meters
478
+ */
479
+ altitude?: number;
480
+
481
+ /**
482
+ * Share duration selected by the recipient
483
+ */
484
+ duration?: string;
485
+
486
+ timestamp?: string;
487
+ }
488
+
489
+ /**
490
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
491
+ * account, conversation, and sending line.
492
+ */
493
+ export interface ReplyTo {
494
+ /**
495
+ * Public handle of the immediate parent message
496
+ */
497
+ message_handle: string;
498
+
499
+ /**
500
+ * Advanced override for a known part of a multipart target. Omit this in normal
501
+ * reply requests and never guess it; requests default to 0. When replying to an
502
+ * attachment represented by its own webhook, use that webhook's `message_handle`
503
+ * and omit `part_index` so Sendblue can use the stored authoritative part.
504
+ * Responses omit it when no authoritative immediate-parent part is available.
505
+ */
506
+ part_index?: number;
507
+ }
508
+
509
+ /**
510
+ * Message that originated an iMessage inline-reply thread.
511
+ */
512
+ export interface ThreadOriginator {
513
+ /**
514
+ * Public handle of the thread's root message
515
+ */
516
+ message_handle: string;
517
+
518
+ /**
519
+ * Opaque Apple thread-originator part descriptor
520
+ */
521
+ part?: string;
522
+ }
258
523
  }
259
524
 
260
525
  export interface MessageRetrieveResponse {
@@ -325,6 +590,11 @@ export namespace MessageRetrieveResponse {
325
590
  */
326
591
  is_outbound?: boolean;
327
592
 
593
+ /**
594
+ * Decoded Find My location share coordinates.
595
+ */
596
+ location?: Data.Location;
597
+
328
598
  /**
329
599
  * URL of attached media
330
600
  */
@@ -335,7 +605,7 @@ export namespace MessageRetrieveResponse {
335
605
  */
336
606
  message_handle?: string;
337
607
 
338
- message_type?: 'message' | 'group';
608
+ message_type?: 'message' | 'group' | 'location';
339
609
 
340
610
  /**
341
611
  * Primary phone number (to_number for outbound, from_number for inbound)
@@ -357,6 +627,12 @@ export namespace MessageRetrieveResponse {
357
627
  */
358
628
  plan?: string;
359
629
 
630
+ /**
631
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
632
+ * account, conversation, and sending line.
633
+ */
634
+ reply_to?: Data.ReplyTo;
635
+
360
636
  /**
361
637
  * UUID of the seat that sent the message. Present when `seat_id` was provided on
362
638
  * send, or for dashboard-originated group messages.
@@ -409,6 +685,11 @@ export namespace MessageRetrieveResponse {
409
685
  | 'ACCEPTED'
410
686
  | 'SUCCESS';
411
687
 
688
+ /**
689
+ * Message that originated an iMessage inline-reply thread.
690
+ */
691
+ thread_originator?: Data.ThreadOriginator;
692
+
412
693
  /**
413
694
  * Recipient phone number
414
695
  */
@@ -419,6 +700,69 @@ export namespace MessageRetrieveResponse {
419
700
  */
420
701
  was_downgraded?: boolean;
421
702
  }
703
+
704
+ export namespace Data {
705
+ /**
706
+ * Decoded Find My location share coordinates.
707
+ */
708
+ export interface Location {
709
+ latitude: number;
710
+
711
+ longitude: number;
712
+
713
+ /**
714
+ * Horizontal accuracy in meters
715
+ */
716
+ accuracy?: number;
717
+
718
+ /**
719
+ * Altitude in meters
720
+ */
721
+ altitude?: number;
722
+
723
+ /**
724
+ * Share duration selected by the recipient
725
+ */
726
+ duration?: string;
727
+
728
+ timestamp?: string;
729
+ }
730
+
731
+ /**
732
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
733
+ * account, conversation, and sending line.
734
+ */
735
+ export interface ReplyTo {
736
+ /**
737
+ * Public handle of the immediate parent message
738
+ */
739
+ message_handle: string;
740
+
741
+ /**
742
+ * Advanced override for a known part of a multipart target. Omit this in normal
743
+ * reply requests and never guess it; requests default to 0. When replying to an
744
+ * attachment represented by its own webhook, use that webhook's `message_handle`
745
+ * and omit `part_index` so Sendblue can use the stored authoritative part.
746
+ * Responses omit it when no authoritative immediate-parent part is available.
747
+ */
748
+ part_index?: number;
749
+ }
750
+
751
+ /**
752
+ * Message that originated an iMessage inline-reply thread.
753
+ */
754
+ export interface ThreadOriginator {
755
+ /**
756
+ * Public handle of the thread's root message
757
+ */
758
+ message_handle: string;
759
+
760
+ /**
761
+ * Opaque Apple thread-originator part descriptor
762
+ */
763
+ part?: string;
764
+ }
765
+ }
422
766
  }
423
767
 
424
768
  export interface MessageListResponse {
@@ -491,6 +835,11 @@ export namespace MessageListResponse {
491
835
  */
492
836
  is_outbound?: boolean;
493
837
 
838
+ /**
839
+ * Decoded Find My location share coordinates.
840
+ */
841
+ location?: Data.Location;
842
+
494
843
  /**
495
844
  * URL of attached media
496
845
  */
@@ -501,7 +850,7 @@ export namespace MessageListResponse {
501
850
  */
502
851
  message_handle?: string;
503
852
 
504
- message_type?: 'message' | 'group';
853
+ message_type?: 'message' | 'group' | 'location';
505
854
 
506
855
  /**
507
856
  * Primary phone number (to_number for outbound, from_number for inbound)
@@ -523,6 +872,12 @@ export namespace MessageListResponse {
523
872
  */
524
873
  plan?: string;
525
874
 
875
+ /**
876
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
877
+ * account, conversation, and sending line.
878
+ */
879
+ reply_to?: Data.ReplyTo;
880
+
526
881
  /**
527
882
  * UUID of the seat that sent the message. Present when `seat_id` was provided on
528
883
  * send, or for dashboard-originated group messages.
@@ -575,6 +930,11 @@ export namespace MessageListResponse {
575
930
  | 'ACCEPTED'
576
931
  | 'SUCCESS';
577
932
 
933
+ /**
934
+ * Message that originated an iMessage inline-reply thread.
935
+ */
936
+ thread_originator?: Data.ThreadOriginator;
937
+
578
938
  /**
579
939
  * Recipient phone number
580
940
  */
@@ -586,6 +946,69 @@ export namespace MessageListResponse {
586
946
  was_downgraded?: boolean;
587
947
  }
588
948
 
949
+ export namespace Data {
950
+ /**
951
+ * Decoded Find My location share coordinates.
952
+ */
953
+ export interface Location {
954
+ latitude: number;
955
+
956
+ longitude: number;
957
+
958
+ /**
959
+ * Horizontal accuracy in meters
960
+ */
961
+ accuracy?: number;
962
+
963
+ /**
964
+ * Altitude in meters
965
+ */
966
+ altitude?: number;
967
+
968
+ /**
969
+ * Share duration selected by the recipient
970
+ */
971
+ duration?: string;
972
+
973
+ timestamp?: string;
974
+ }
975
+
976
+ /**
977
+ * Immediate parent of an iMessage inline reply. The target must belong to the same
978
+ * account, conversation, and sending line.
979
+ */
980
+ export interface ReplyTo {
981
+ /**
982
+ * Public handle of the immediate parent message
983
+ */
984
+ message_handle: string;
985
+
986
+ /**
987
+ * Advanced override for a known part of a multipart target. Omit this in normal
988
+ * reply requests and never guess it; requests default to 0. When replying to an
989
+ * attachment represented by its own webhook, use that webhook's `message_handle`
990
+ * and omit `part_index` so Sendblue can use the stored authoritative part.
991
+ * Responses omit it when no authoritative immediate-parent part is available.
992
+ */
993
+ part_index?: number;
994
+ }
995
+
996
+ /**
997
+ * Message that originated an iMessage inline-reply thread.
998
+ */
999
+ export interface ThreadOriginator {
1000
+ /**
1001
+ * Public handle of the thread's root message
1002
+ */
1003
+ message_handle: string;
1004
+
1005
+ /**
1006
+ * Opaque Apple thread-originator part descriptor
1007
+ */
1008
+ part?: string;
1009
+ }
1010
+ }
1011
+
589
1012
  export interface Pagination {
590
1013
  /**
591
1014
  * Whether there are more messages available
@@ -744,11 +1167,6 @@ export interface MessageGetStatusParams {
744
1167
  }
745
1168
 
746
1169
  export interface MessageSendParams {
747
- /**
748
- * Message text content
749
- */
750
- content: string;
751
-
752
1170
  /**
753
1171
  * **REQUIRED** - The phone number to send from. Must be one of your registered
754
1172
  * Sendblue phone numbers in E.164 format. Without this parameter, the message will
@@ -761,11 +1179,33 @@ export interface MessageSendParams {
761
1179
  */
762
1180
  number: string;
763
1181
 
1182
+ /**
1183
+ * A Sendblue App Card rendered with Apple's Messages framework. App Cards require
1184
+ * a V2 Mac line and an iMessage-capable recipient; they never fall back to SMS.
1185
+ * The URL is delivered to the identified Messages extension when the recipient
1186
+ * taps the card. An initial App Card may include `reply_to` to create an inline
1187
+ * reply. Later state changes use the update endpoint, which sends a new Apple
1188
+ * message in the same App Card session. The feature is unavailable on the free
1189
+ * plan.
1190
+ */
1191
+ app_card?: MessageSendParams.AppCard;
1192
+
1193
+ /**
1194
+ * Message text content. Optional when `media_url` or `app_card` is provided.
1195
+ */
1196
+ content?: string;
1197
+
764
1198
  /**
765
1199
  * URL of media file to send (images, videos, etc.)
766
1200
  */
767
1201
  media_url?: string;
768
1202
 
1203
+ /**
1204
+ * Optional inline-reply target. This may be combined with `app_card`; the
1205
+ * resulting App Card is sent as an inline reply to the target.
1206
+ */
1207
+ reply_to?: MessageSendParams.ReplyTo;
1208
+
769
1209
  /**
770
1210
  * Optional. Identifies the seat (user) sending the message so the message is
771
1211
  * attributed to a specific rep. Accepts either the seat UUID or the Firebase Auth
@@ -798,6 +1238,190 @@ export interface MessageSendParams {
798
1238
  status_callback?: string;
799
1239
  }
800
1240
 
1241
+ export namespace MessageSendParams {
1242
+ /**
1243
+ * A Sendblue App Card rendered with Apple's Messages framework. App Cards require
1244
+ * a V2 Mac line and an iMessage-capable recipient; they never fall back to SMS.
1245
+ * The URL is delivered to the identified Messages extension when the recipient
1246
+ * taps the card. An initial App Card may include `reply_to` to create an inline
1247
+ * reply. Later state changes use the update endpoint, which sends a new Apple
1248
+ * message in the same App Card session. The feature is unavailable on the free
1249
+ * plan.
1250
+ */
1251
+ export interface AppCard {
1252
+ appName: string;
1253
+
1254
+ extensionBundleId: string;
1255
+
1256
+ /**
1257
+ * Visible card fields mirroring Apple's MSMessageTemplateLayout.
1258
+ */
1259
+ layout: AppCard.Layout;
1260
+
1261
+ teamId: string;
1262
+
1263
+ /**
1264
+ * URL delivered to the iMessage extension on tap. HTTPS URLs are limited to 2048
1265
+ * characters; data URLs carrying inline app state are limited to 16384.
1266
+ */
1267
+ url: string;
1268
+
1269
+ /**
1270
+ * Optional numeric App Store ID for recipients without the extension.
1271
+ */
1272
+ appStoreId?: number;
1273
+
1274
+ /**
1275
+ * Fallback text for notifications and surfaces that cannot render the card.
1276
+ */
1277
+ fallbackText?: string;
1278
+
1279
+ /**
1280
+ * Use Apple's live layout when the extension is installed; false always sends the
1281
+ * static template layout.
1282
+ */
1283
+ interactive?: boolean;
1284
+
1285
+ /**
1286
+ * Optional caller-supplied App Card session UUID. Generated automatically when
1287
+ * omitted.
1288
+ */
1289
+ sessionIdentifier?: string;
1290
+ }
1291
+
1292
+ export namespace AppCard {
1293
+ /**
1294
+ * Visible card fields mirroring Apple's MSMessageTemplateLayout.
1295
+ */
1296
+ export interface Layout {
1297
+ caption?: string;
1298
+
1299
+ /**
1300
+ * Secondary text overlaid on the preview image. Requires imageUrl.
1301
+ */
1302
+ imageSubtitle?: string;
1303
+
1304
+ /**
1305
+ * Text overlaid on the preview image. Requires imageUrl.
1306
+ */
1307
+ imageTitle?: string;
1308
+
1309
+ /**
1310
+ * HTTPS preview image fetched by the worker and sent as a hidden card attachment.
1311
+ * JPEG, PNG, HEIC, HEIF, and WebP are supported up to 10 MB.
1312
+ */
1313
+ imageUrl?: string;
1314
+
1315
+ subcaption?: string;
1316
+
1317
+ /**
1318
+ * Fallback text used in notifications and non-rendering surfaces.
1319
+ */
1320
+ summary?: string;
1321
+
1322
+ trailingCaption?: string;
1323
+
1324
+ trailingSubcaption?: string;
1325
+ }
1326
+ }
1327
+
1328
+ /**
1329
+ * Optional inline-reply target. This may be combined with `app_card`; the
1330
+ * resulting App Card is sent as an inline reply to the target.
1331
+ */
1332
+ export interface ReplyTo {
1333
+ /**
1334
+ * Public handle of the immediate parent message
1335
+ */
1336
+ message_handle: string;
1337
+
1338
+ /**
1339
+ * Advanced override for a known part of a multipart target. Omit this in normal
1340
+ * reply requests and never guess it; requests default to 0. When replying to an
1341
+ * attachment represented by its own webhook, use that webhook's `message_handle`
1342
+ * and omit `part_index` so Sendblue can use the stored authoritative part.
1343
+ * Responses omit it when no authoritative immediate-parent part is available.
1344
+ */
1345
+ part_index?: number;
1346
+ }
1347
+ }
1348
+
1349
+ export interface MessageUpdateAppCardParams {
1350
+ /**
1351
+ * Replacement fallback text for notifications and non-rendering surfaces.
1352
+ */
1353
+ fallback_text?: string;
1354
+
1355
+ /**
1356
+ * Reusing this key for the same App Card target returns the original update
1357
+ * instead of sending again.
1358
+ */
1359
+ idempotency_key?: string;
1360
+
1361
+ interactive?: boolean;
1362
+
1363
+ /**
1364
+ * Visible card fields mirroring Apple's MSMessageTemplateLayout.
1365
+ */
1366
+ layout?: MessageUpdateAppCardParams.Layout;
1367
+
1368
+ /**
1369
+ * The iMessage expressive message style for this update.
1370
+ */
1371
+ send_style?:
1372
+ | 'celebration'
1373
+ | 'shooting_star'
1374
+ | 'fireworks'
1375
+ | 'lasers'
1376
+ | 'love'
1377
+ | 'confetti'
1378
+ | 'balloons'
1379
+ | 'spotlight'
1380
+ | 'echo'
1381
+ | 'invisible'
1382
+ | 'gentle'
1383
+ | 'loud'
1384
+ | 'slam';
1385
+
1386
+ url?: string;
1387
+ }
1388
+
1389
+ export namespace MessageUpdateAppCardParams {
1390
+ /**
1391
+ * Visible card fields mirroring Apple's MSMessageTemplateLayout.
1392
+ */
1393
+ export interface Layout {
1394
+ caption?: string;
1395
+
1396
+ /**
1397
+ * Secondary text overlaid on the preview image. Requires imageUrl.
1398
+ */
1399
+ imageSubtitle?: string;
1400
+
1401
+ /**
1402
+ * Text overlaid on the preview image. Requires imageUrl.
1403
+ */
1404
+ imageTitle?: string;
1405
+
1406
+ /**
1407
+ * HTTPS preview image fetched by the worker and sent as a hidden card attachment.
1408
+ * JPEG, PNG, HEIC, HEIF, and WebP are supported up to 10 MB.
1409
+ */
1410
+ imageUrl?: string;
1411
+
1412
+ subcaption?: string;
1413
+
1414
+ /**
1415
+ * Fallback text used in notifications and non-rendering surfaces.
1416
+ */
1417
+ summary?: string;
1418
+
1419
+ trailingCaption?: string;
1420
+
1421
+ trailingSubcaption?: string;
1422
+ }
1423
+ }
1424
+
801
1425
  export declare namespace Messages {
802
1426
  export {
803
1427
  type MessageContent as MessageContent,
@@ -807,5 +1431,6 @@ export declare namespace Messages {
807
1431
  type MessageListParams as MessageListParams,
808
1432
  type MessageGetStatusParams as MessageGetStatusParams,
809
1433
  type MessageSendParams as MessageSendParams,
1434
+ type MessageUpdateAppCardParams as MessageUpdateAppCardParams,
810
1435
  };
811
1436
  }