@messagebird/sdk 0.5.0 → 0.7.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.
package/dist/index.d.mts CHANGED
@@ -503,8 +503,30 @@ type EventSmsAccepted = {
503
503
  timestamp: string;
504
504
  data: EventSmsAcceptedData;
505
505
  };
506
+ type SuppressionId = string;
506
507
  /**
507
- * An email address was added to the workspace's suppression list (manually, via complaint, or via hard bounce). Payload schema not yet finalized.
508
+ * Payload of the email_suppression.created event.
509
+ */
510
+ type EventEmailSuppressionCreatedData = {
511
+ /**
512
+ * The suppression entry that was created.
513
+ */
514
+ suppression_id: SuppressionId;
515
+ /**
516
+ * The recipient address that was added to the suppression list.
517
+ */
518
+ email: string;
519
+ /**
520
+ * Why the address was suppressed.
521
+ */
522
+ reason: "hard_bounce" | "complaint" | "unsubscribe" | "manual";
523
+ /**
524
+ * The workspace the suppression belongs to.
525
+ */
526
+ workspace_id: WorkspaceId;
527
+ };
528
+ /**
529
+ * An email address was added to the workspace's suppression list (manually, via complaint, or via hard bounce).
508
530
  */
509
531
  type EventEmailSuppressionCreated = {
510
532
  /**
@@ -515,12 +537,7 @@ type EventEmailSuppressionCreated = {
515
537
  * When the event occurred.
516
538
  */
517
539
  timestamp: string;
518
- /**
519
- * Event payload. The fields for this event are not yet finalized.
520
- */
521
- data: {
522
- [key: string]: never;
523
- };
540
+ data: EventEmailSuppressionCreatedData;
524
541
  };
525
542
  /**
526
543
  * Payload of the email_mailbox.thread_created event.
@@ -619,22 +636,7 @@ type EventEmailMailboxMessageSent = {
619
636
  data: EventEmailMailboxMessageSentData;
620
637
  };
621
638
  /**
622
- * An email was received into a mailbox and stored with disposition unauthenticated — sender authentication could not be verified. Opt-in. Non-inbox dispositions fire only this mailbox variant, never email.receivedexisting email.received automations never start processing unauthenticated mail because a mailbox was attached. The payload carries identifiers, threading, authentication results, and the extracted text.
623
- */
624
- type EventEmailMailboxMessageReceivedUnauthenticated = {
625
- /**
626
- * Event type.
627
- */
628
- type: "email_mailbox.message_received_unauthenticated";
629
- /**
630
- * When the event occurred.
631
- */
632
- timestamp: string;
633
- data: EventEmailMailboxMessageReceivedData;
634
- };
635
- type InboundEmailMessageId = string;
636
- /**
637
- * Payload shared by the email_mailbox.message_received event family. Carries identifiers, threading, disposition, authentication results, and the extracted text — enough for an agent to act without a fetch. Fetch original source (while within its 30-day window) via the thread-member endpoints.
639
+ * Payload for the email_mailbox.message_received event. Carries identifiers, threading, authentication results, and the extracted textenough for an agent to act without a fetch. Fetch original source (while within its 30-day window) via the thread-member endpoints.
638
640
  */
639
641
  type EventEmailMailboxMessageReceivedData = {
640
642
  /**
@@ -665,10 +667,6 @@ type EventEmailMailboxMessageReceivedData = {
665
667
  * Subject line as received, or null when the message had no subject.
666
668
  */
667
669
  subject: string | null;
668
- /**
669
- * Where the message landed after receive policy, rules, and scanning were applied.
670
- */
671
- disposition: "inbox" | "blocked" | "unauthenticated";
672
670
  /**
673
671
  * Plain-text body with quoted history stripped, capped at 64 KB (see truncated_text). Null when extraction produced nothing. This copy is what the mailbox durably retains.
674
672
  */
@@ -694,22 +692,9 @@ type EventEmailMailboxMessageReceivedData = {
694
692
  */
695
693
  dmarc_pass?: boolean | null;
696
694
  };
695
+ type InboundEmailMessageId = string;
697
696
  /**
698
- * An email was received into a mailbox and stored with disposition blocked it failed the mailbox receive policy or a block rule. Opt-in. Non-inbox dispositions fire only this mailbox variant, never email.received existing email.received automations never start processing blocked mail because a mailbox was attached. The payload carries identifiers, threading, authentication results, and the extracted text.
699
- */
700
- type EventEmailMailboxMessageReceivedBlocked = {
701
- /**
702
- * Event type.
703
- */
704
- type: "email_mailbox.message_received_blocked";
705
- /**
706
- * When the event occurred.
707
- */
708
- timestamp: string;
709
- data: EventEmailMailboxMessageReceivedData;
710
- };
711
- /**
712
- * An email was received into a mailbox, threaded, and stored with disposition inbox. The payload carries identifiers, threading, authentication results, and the extracted text — enough for an agent to act without a fetch. Dual-fire rule: mailbox-owned inbound with disposition inbox ALSO fires the unchanged email.received event; the streams are unordered relative to each other, so pick one family per automation and dedupe by message_id.
697
+ * An email arrived in a mailbox and was filed to its inbox, threaded and stored. The payload carries identifiers, threading, authentication results, and the extracted text enough for an agent to act without a fetch. Dual-fire rule: the same message ALSO fires the unchanged email.received event; the streams are unordered relative to each other, so pick one family per automation and dedupe by message_id.
713
698
  */
714
699
  type EventEmailMailboxMessageReceived = {
715
700
  /**
@@ -1269,7 +1254,25 @@ type EventEmailAccepted = {
1269
1254
  data: EventEmailAcceptedData;
1270
1255
  };
1271
1256
  /**
1272
- * A sending domain completed DNS verification successfully. Payload schema not yet finalized.
1257
+ * Payload of the domain.verified event.
1258
+ */
1259
+ type EventDomainVerifiedData = {
1260
+ /**
1261
+ * The sending domain resource that verified.
1262
+ */
1263
+ domain_id: DomainId;
1264
+ /**
1265
+ * The sending domain hostname.
1266
+ */
1267
+ domain: string;
1268
+ /**
1269
+ * The workspace the domain is assigned to.
1270
+ */
1271
+ workspace_id: WorkspaceId;
1272
+ };
1273
+ type DomainId = string;
1274
+ /**
1275
+ * A sending domain completed DNS verification successfully.
1273
1276
  */
1274
1277
  type EventDomainVerified = {
1275
1278
  /**
@@ -1280,15 +1283,31 @@ type EventDomainVerified = {
1280
1283
  * When the event occurred.
1281
1284
  */
1282
1285
  timestamp: string;
1286
+ data: EventDomainVerifiedData;
1287
+ };
1288
+ /**
1289
+ * Payload of the domain.failed event.
1290
+ */
1291
+ type EventDomainFailedData = {
1283
1292
  /**
1284
- * Event payload. The fields for this event are not yet finalized.
1293
+ * The sending domain resource whose verification failed.
1285
1294
  */
1286
- data: {
1287
- [key: string]: never;
1288
- };
1295
+ domain_id: DomainId;
1296
+ /**
1297
+ * The sending domain hostname.
1298
+ */
1299
+ domain: string;
1300
+ /**
1301
+ * The workspace the domain is assigned to.
1302
+ */
1303
+ workspace_id: WorkspaceId;
1304
+ /**
1305
+ * Why verification failed, when a specific reason is available (for example, the DKIM record was not found at the expected selector).
1306
+ */
1307
+ failure_reason?: string | null;
1289
1308
  };
1290
1309
  /**
1291
- * A sending domain failed DNS verification. Payload schema not yet finalized.
1310
+ * A sending domain failed DNS verification.
1292
1311
  */
1293
1312
  type EventDomainFailed = {
1294
1313
  /**
@@ -1299,12 +1318,7 @@ type EventDomainFailed = {
1299
1318
  * When the event occurred.
1300
1319
  */
1301
1320
  timestamp: string;
1302
- /**
1303
- * Event payload. The fields for this event are not yet finalized.
1304
- */
1305
- data: {
1306
- [key: string]: never;
1307
- };
1321
+ data: EventDomainFailedData;
1308
1322
  };
1309
1323
  /**
1310
1324
  * Discriminated union of every webhook event the Bird platform emits.
@@ -1353,10 +1367,6 @@ type WebhookEvent = ({
1353
1367
  } & EventEmailMailboxMessageFailed) | ({
1354
1368
  type: "email_mailbox.message_received";
1355
1369
  } & EventEmailMailboxMessageReceived) | ({
1356
- type: "email_mailbox.message_received_blocked";
1357
- } & EventEmailMailboxMessageReceivedBlocked) | ({
1358
- type: "email_mailbox.message_received_unauthenticated";
1359
- } & EventEmailMailboxMessageReceivedUnauthenticated) | ({
1360
1370
  type: "email_mailbox.message_sent";
1361
1371
  } & EventEmailMailboxMessageSent) | ({
1362
1372
  type: "email_mailbox.suspended";
@@ -1384,67 +1394,420 @@ type Timestamps = {
1384
1394
  readonly updated_at: string;
1385
1395
  };
1386
1396
  /**
1387
- * File attached to an email send. The attachment bytes are passed as base64-encoded `content` directly in the request body (required). The `path` field (provide a URL and Bird fetches the attachment for you) is a preview feature and currently unavailable. Requests are rejected with 422 if `content` is missing — `path` alone does not satisfy the schema. When `path` becomes generally available, the schema will be relaxed so that exactly one of `content` or `path` is required.
1388
- * Inline images for `<img src="cid:..."/>` references in the HTML body use the `content_id` field together with `content`.
1389
- * Bird enforces a **20 MB estimated generated message size** cap. The estimate is the HTML and text body plus all attachments and inline images measured after base64 encoding. This is not a raw file-size cap. As a rule of thumb, keep total raw attachment content at or below **15 MB** so the generated message has enough room after encoding and MIME wrapping.
1390
- * Recipient-side delivery reality: downstream limits vary by product and tenant/server policy. Gmail personal and Outlook.com document 25 MB attachment limits. Exchange Online defaults to 35 MB send / 36 MB receive, but admins can configure limits; on-prem Exchange Server organizational defaults are 10 MB. Sends close to Bird's 20 MB generated-message cap may be accepted by Bird but bounce at the recipient's mail server.
1391
- * Batch sends can include attachments on individual message objects. Each message still has the 20 MB estimated generated-size cap, and the serialized JSON request body for the whole batch has a hard 20 MB cap. Certain executable / script content types are rejected at validation time.
1397
+ * An email address with an optional display name.
1398
+ */
1399
+ type EmailAddress = {
1400
+ /**
1401
+ * Email address.
1402
+ */
1403
+ email: string;
1404
+ /**
1405
+ * Display name shown alongside the address in mail clients.
1406
+ */
1407
+ name?: string;
1408
+ };
1409
+ type WhatsAppTemplateList = {
1410
+ /**
1411
+ * The templates available to your workspace.
1412
+ */
1413
+ data: Array<WhatsAppTemplate>;
1414
+ };
1415
+ type WhatsAppTemplateButton = {
1416
+ /**
1417
+ * The button's behavior type.
1418
+ */
1419
+ readonly type: string;
1420
+ /**
1421
+ * The button's label text.
1422
+ */
1423
+ readonly text: string;
1424
+ /**
1425
+ * The URL the button opens, with any variable placeholder shown inline. Present on link buttons.
1426
+ */
1427
+ readonly url?: string;
1428
+ /**
1429
+ * Example values for this button's variables, in placeholder order. Present when the button URL has variables.
1430
+ */
1431
+ readonly example_parameters?: Array<WhatsAppTemplateExampleParameter>;
1432
+ };
1433
+ /**
1434
+ * The type of a template parameter.
1435
+ */
1436
+ type WhatsAppTemplateParameterType = string;
1437
+ type WhatsAppTemplateExampleParameter = {
1438
+ /**
1439
+ * The kind of value this parameter accepts.
1440
+ */
1441
+ readonly type: WhatsAppTemplateParameterType;
1442
+ /**
1443
+ * An example value for a text parameter. Present when `type` is `text`.
1444
+ */
1445
+ readonly text?: string;
1446
+ };
1447
+ type WhatsAppTemplateComponent = {
1448
+ /**
1449
+ * The content block's type within the template.
1450
+ */
1451
+ readonly type: string;
1452
+ /**
1453
+ * The block's text content, with any variable placeholders shown inline. Present when the block carries text.
1454
+ */
1455
+ readonly text?: string;
1456
+ /**
1457
+ * Example values for this block's variables, in placeholder order — one per `{{n}}`. Use them to see what a filled message looks like. Present when the block has variables.
1458
+ */
1459
+ readonly example_parameters?: Array<WhatsAppTemplateExampleParameter>;
1460
+ /**
1461
+ * The buttons attached to this block. Present when the block carries buttons.
1462
+ */
1463
+ readonly buttons?: Array<WhatsAppTemplateButton>;
1464
+ };
1465
+ /**
1466
+ * A message template's review and health status. `approved`, `pending`, and `rejected` are review outcomes; `paused`, `disabled`, `in_appeal`, `pending_deletion`, and `limit_exceeded` reflect a template's ongoing health after approval.
1467
+ */
1468
+ type WhatsAppTemplateStatus = string;
1469
+ /**
1470
+ * WhatsApp template category — Meta's content classification for a template. Open enum — Meta may add new categories over time, so treat any unrecognized value as a future category rather than an error. The values below are the categories known at this version.
1471
+ */
1472
+ type WhatsAppTemplateCategory = string;
1473
+ /**
1474
+ * Whether the template is a built-in Bird template (`system`) or one your workspace authored (`workspace`).
1475
+ */
1476
+ type TemplateScope = "system" | "workspace";
1477
+ /**
1478
+ * A template's send-by handle — the stable reference used in place of the template id when sending. Lowercase letters, numbers, hyphens, and underscores; starts and ends with a letter or number.
1392
1479
  *
1393
1480
  */
1394
- type EmailAttachment = {
1481
+ type TemplateName = string;
1482
+ type WhatsAppTemplate = {
1395
1483
  /**
1396
- * Filename shown to the recipient. Required.
1484
+ * The template's stable handle. Pass it as the template reference when sending.
1397
1485
  */
1398
- filename: string;
1486
+ readonly name: TemplateName;
1487
+ scope: TemplateScope;
1399
1488
  /**
1400
- * Base64-encoded attachment bytes. Required. Counts toward the 20 MB estimated generated message-size cap after encoding and MIME wrapping.
1489
+ * The language code of this template variant (for example `en` or `pt_BR`).
1490
+ */
1491
+ readonly language: string;
1492
+ /**
1493
+ * Content classification applied to messages sent from this template.
1494
+ */
1495
+ readonly category: WhatsAppTemplateCategory;
1496
+ /**
1497
+ * The template's review and health status.
1498
+ */
1499
+ readonly status: WhatsAppTemplateStatus;
1500
+ /**
1501
+ * The content blocks that make up the template, in display order.
1502
+ */
1503
+ readonly components: Array<WhatsAppTemplateComponent>;
1504
+ };
1505
+ type WhatsAppEventList = {
1506
+ /**
1507
+ * Timeline events for this WhatsApp message, in chronological order. The timeline is bounded and returned in full — this list is not paginated.
1508
+ */
1509
+ data: Array<WhatsAppEvent>;
1510
+ };
1511
+ /**
1512
+ * Bird-stable failure reason, uniform whether the failure happened internally or was reported by the WhatsApp network. `insufficient_balance` — the workspace could not afford the send. `price_not_found` — no price was configured for this destination/template combination. `internal_error` — an unexpected Bird-side failure. `undeliverable` — the recipient could not be reached (e.g. not on WhatsApp, number invalid). `service_window_expired` — the 24-hour customer care window has closed and a free-form message cannot be sent; send a template instead. `rate_limited` — the send was throttled.
1513
+ *
1514
+ */
1515
+ type WhatsAppErrorCode = string;
1516
+ /**
1517
+ * Failure detail for a message that could not be delivered. Null when there is no failure.
1518
+ */
1519
+ type WhatsAppError = {
1520
+ code: WhatsAppErrorCode;
1521
+ /**
1522
+ * Human-readable explanation of the failure.
1523
+ */
1524
+ readonly description: string;
1525
+ /**
1526
+ * When the failure occurred.
1527
+ */
1528
+ readonly occurred_at: string;
1529
+ } | null;
1530
+ type WhatsAppEventId = string;
1531
+ type WhatsAppEvent = {
1532
+ /**
1533
+ * Event ID.
1534
+ */
1535
+ readonly id: WhatsAppEventId;
1536
+ /**
1537
+ * Lifecycle event type. `whatsapp.accepted` — Bird accepted the request. `whatsapp.sent` — handed to the WhatsApp network. `whatsapp.delivered` — delivery confirmed to the recipient's device. `whatsapp.read` — the recipient opened the message (this does not change the message `status`, which never becomes `read`). `whatsapp.failed` — terminal permanent failure. Open enum — new event types may be added over time, so treat any unrecognized value as a future event rather than an error.
1401
1538
  *
1402
1539
  */
1403
- content: string;
1540
+ readonly type: string;
1404
1541
  /**
1405
- * Preview feature — provide a URL and Bird fetches the attachment for you. Currently unavailable. Use `content` instead. The schema currently requires `content`, so a request with only `path` is rejected with 422 for missing `content`; a request supplying both `content` and `path` is rejected with 422 `unsupported_feature` until this preview ships. When generally available: HTTPS-only, single redirect followed and re-validated, private IP ranges blocked, request timeout enforced, fetched content counts toward the 20 MB estimated generated message-size cap after encoding and MIME wrapping.
1542
+ * When this event occurred.
1543
+ */
1544
+ readonly occurred_at: string;
1545
+ /**
1546
+ * Failure detail. Present on `whatsapp.failed` events; null otherwise.
1547
+ */
1548
+ error: WhatsAppError;
1549
+ };
1550
+ type SendWhatsAppMessageRequest = {
1551
+ /**
1552
+ * The message recipient's phone number in E.164 format (for example `+31612345678`).
1553
+ */
1554
+ to: string;
1555
+ /**
1556
+ * The template to send. Bird selects the sender number from the template's category, so there is no sender field on this request. Templates are currently the only supported content type, so every send must include one; free-text content will be added in a future release.
1406
1557
  *
1407
1558
  */
1408
- path?: string;
1559
+ template?: SendWhatsAppMessageTemplate;
1409
1560
  /**
1410
- * MIME type. Inferred from `filename` extension when omitted. Used to enforce the blocklist of disallowed executable / script types.
1561
+ * Structured `{name, value}` labels for filtering. Tags become first-class query dimensions: filter the list endpoint by tag name. Maximum 20 tags per send. Use tags for low-cardinality dimensions (`category`, `experiment_variant`). For arbitrary structured context you do not need as a filter dimension, use `metadata` instead.
1411
1562
  *
1412
1563
  */
1413
- content_type?: string;
1564
+ tags?: Array<Tag>;
1414
1565
  /**
1415
- * RFC 2392 Content-ID. When set, the attachment is rendered inline and can be referenced from the HTML body as `<img src="cid:{content_id}"/>`. When omitted, the attachment is rendered as a regular file attachment.
1566
+ * Arbitrary JSON object stored on the message and returned on API reads. Maximum 2 KB serialized. Use metadata for per-send context like internal IDs and foreign keys. For low-cardinality filterable labels, use `tags` instead.
1416
1567
  *
1417
1568
  */
1418
- content_id?: string;
1569
+ metadata?: {
1570
+ [key: string]: unknown;
1571
+ };
1572
+ };
1573
+ type WhatsAppMessageTemplateComponentParameter = {
1574
+ /**
1575
+ * Parameter type.
1576
+ */
1577
+ type: WhatsAppTemplateParameterType;
1578
+ /**
1579
+ * Parameter value.
1580
+ */
1581
+ text: string;
1582
+ };
1583
+ type WhatsAppMessageTemplateComponent = {
1584
+ /**
1585
+ * Which part of the template this fills in.
1586
+ */
1587
+ type: string;
1588
+ /**
1589
+ * The values that fill this part's placeholders, in order.
1590
+ */
1591
+ parameters?: Array<WhatsAppMessageTemplateComponentParameter>;
1592
+ };
1593
+ type SendWhatsAppMessageTemplate = {
1594
+ /**
1595
+ * The template to send, by its name (for example `bird_otp`).
1596
+ */
1597
+ name: TemplateName;
1598
+ /**
1599
+ * Language code of the template variant to send (for example `en` or `pt_BR`). May be omitted when the template has a single language.
1600
+ *
1601
+ */
1602
+ language?: string;
1603
+ /**
1604
+ * The values that fill the template's placeholders.
1605
+ */
1606
+ components?: Array<WhatsAppMessageTemplateComponent>;
1419
1607
  };
1420
1608
  /**
1421
- * An email address with an optional display name.
1609
+ * Delivery status. `scheduled` means the message is queued to send at a future time and has not been dispatched yet. `accepted` means Bird accepted the request and it is queued for sending. `sent` means it was handed to the WhatsApp network. `delivered` is confirmed delivery to the recipient's device. `failed` is a terminal permanent failure. `canceled` means a scheduled message was canceled before it was sent. `received` is the status of an inbound message (`direction: inbound`) sent to you by a contact. There is no `read` status — a read receipt is reported as `read_at` and a `whatsapp.read` event, not a status value.
1610
+ *
1422
1611
  */
1423
- type EmailAddress = {
1612
+ type WhatsAppMessageStatus = "scheduled" | "accepted" | "sent" | "delivered" | "failed" | "canceled" | "received";
1613
+ /**
1614
+ * The template a message was sent from. On reads `name`, `language`, `category`, and `components` are always present — `components` is an empty array for an authentication template (the filled-in values, e.g. a verification code, are never returned).
1615
+ *
1616
+ */
1617
+ type WhatsAppMessageTemplate = {
1424
1618
  /**
1425
- * Email address.
1619
+ * The template's stable handle (for example `bird_otp`).
1426
1620
  */
1427
- email: string;
1621
+ readonly name: TemplateName;
1428
1622
  /**
1429
- * Display name shown alongside the address in mail clients.
1623
+ * Content classification applied to messages sent from this template.
1430
1624
  */
1431
- name?: string;
1625
+ readonly category: WhatsAppTemplateCategory;
1626
+ /**
1627
+ * The language code of the template variant that was sent (for example `en`).
1628
+ */
1629
+ readonly language: string;
1630
+ /**
1631
+ * The values that filled the template's placeholders. Empty for an authentication template, whose content is never returned.
1632
+ *
1633
+ */
1634
+ readonly components: Array<WhatsAppMessageTemplateComponent>;
1432
1635
  };
1433
1636
  /**
1434
- * A sender or recipient address. Accepts a plain email string (`jane@example.com`), an RFC 5322 mailbox string with an embedded display name (`Jane Doe <jane@example.com>`), or an object carrying the address and an optional display name. All forms can be mixed freely within one request; responses always return the object form.
1637
+ * Contact on the other end of the message. Fields are omitted when not available; at least one is always present.
1638
+ */
1639
+ type WhatsAppMessageContact = {
1640
+ /**
1641
+ * Contact's phone number in E.164 format, when known.
1642
+ */
1643
+ readonly phone_number?: string;
1644
+ /**
1645
+ * Business-scoped user ID (Meta's WhatsApp identifier for this contact within the business account), when available.
1646
+ */
1647
+ readonly bsuid?: string;
1648
+ };
1649
+ /**
1650
+ * The business identity that sent the message. `phone_number` is always present; `phone_number_id` is included only for account-owned numbers.
1435
1651
  *
1436
1652
  */
1437
- type EmailAddressInput = string | EmailAddress;
1438
- type ContactId = string;
1653
+ type WhatsAppMessageBusiness = {
1654
+ /**
1655
+ * E.164 phone number of the WhatsApp business account that sent the message.
1656
+ */
1657
+ readonly phone_number?: string;
1658
+ /**
1659
+ * The WhatsApp phone number identifier. Present only for account-owned numbers.
1660
+ */
1661
+ readonly phone_number_id?: string;
1662
+ };
1663
+ type WhatsAppMessageId = string;
1664
+ type WhatsAppMessage = {
1665
+ /**
1666
+ * Message ID.
1667
+ */
1668
+ readonly id: WhatsAppMessageId;
1669
+ /**
1670
+ * Whether the message was sent by the business (`outbound`) or received from the contact (`inbound`).
1671
+ */
1672
+ readonly direction: "outbound" | "inbound";
1673
+ readonly business: WhatsAppMessageBusiness;
1674
+ readonly contact: WhatsAppMessageContact;
1675
+ /**
1676
+ * The template the message was sent from. For authentication templates the filled-in values are not returned.
1677
+ */
1678
+ readonly template?: WhatsAppMessageTemplate;
1679
+ readonly status: WhatsAppMessageStatus;
1680
+ /**
1681
+ * Failure detail for a message that did not reach the recipient. Null when there is no failure.
1682
+ */
1683
+ last_error?: WhatsAppError;
1684
+ /**
1685
+ * When the message was accepted for delivery.
1686
+ */
1687
+ readonly created_at: string;
1688
+ /**
1689
+ * When the message was handed to the WhatsApp network. Null until then.
1690
+ */
1691
+ readonly sent_at?: string | null;
1692
+ /**
1693
+ * When delivery was confirmed. Null until then.
1694
+ */
1695
+ readonly delivered_at?: string | null;
1696
+ /**
1697
+ * When the message was read by the recipient. Null until then.
1698
+ */
1699
+ readonly read_at?: string | null;
1700
+ /**
1701
+ * Structured `{name, value}` filter labels applied to this message.
1702
+ */
1703
+ tags?: Array<Tag>;
1704
+ /**
1705
+ * Arbitrary JSON metadata stored on the message.
1706
+ */
1707
+ metadata?: {
1708
+ [key: string]: unknown;
1709
+ };
1710
+ };
1711
+ type VerificationCheckResult = {
1712
+ /**
1713
+ * Whether the submitted passcode verified this verification. true means the passcode was correct and the verification is now complete; false means it was not verified — see reason. A verification that has already reached a final state is no longer checkable and returns 404.
1714
+ */
1715
+ readonly success: boolean;
1716
+ /**
1717
+ * Why the check did not succeed, or null when success is true. incorrect_code means the passcode was wrong and attempts remain; expired means the time window elapsed; attempts_exhausted means too many incorrect attempts. Open enum — treat any unrecognized value as a future reason.
1718
+ */
1719
+ readonly reason?: string | null;
1720
+ verification: Verification;
1721
+ /**
1722
+ * The number of check attempts left, or null once the verification is complete.
1723
+ */
1724
+ readonly attempts_remaining?: number | null;
1725
+ };
1439
1726
  /**
1440
- * Whether the template is a built-in Bird template (`system`) or one your workspace authored (`workspace`).
1727
+ * The channel a passcode is delivered over. Open enum new channels may be added over time, so treat any unrecognized value as a future channel rather than an error.
1441
1728
  */
1442
- type TemplateScope = "system" | "workspace";
1729
+ type VerificationChannel = string;
1730
+ type VerificationChannelEntry = {
1731
+ channel: VerificationChannel;
1732
+ };
1443
1733
  /**
1444
- * A template's send-by handle — the stable reference used in place of the template id when sending. Lowercase letters, numbers, hyphens, and underscores; starts and ends with a letter or number.
1445
- *
1734
+ * The recipient to verify. Provide an email_address, a phone_number, or both; at least one is required.
1446
1735
  */
1447
- type TemplateName = string;
1736
+ type VerificationTo = {
1737
+ /**
1738
+ * The recipient's email address.
1739
+ */
1740
+ email_address?: string;
1741
+ /**
1742
+ * The recipient's phone number in E.164 format.
1743
+ */
1744
+ phone_number?: string;
1745
+ };
1746
+ type VerificationId = string;
1747
+ type Verification = {
1748
+ readonly id: VerificationId;
1749
+ /**
1750
+ * The verification's current state: pending (awaiting a valid passcode), verified, failed (too many incorrect attempts), or expired (the time window elapsed before a correct passcode).
1751
+ */
1752
+ readonly status: "pending" | "verified" | "failed" | "expired" | "canceled" | "blocked";
1753
+ /**
1754
+ * Why the verification reached its final state, or null while pending or once verified. Open enum — treat any unrecognized value as a future reason.
1755
+ */
1756
+ readonly reason?: string | null;
1757
+ readonly to: VerificationTo;
1758
+ /**
1759
+ * The ordered channels this verification uses to deliver the passcode. An email recipient is verified over email; a phone recipient is verified over SMS.
1760
+ */
1761
+ readonly channels: Array<VerificationChannelEntry>;
1762
+ /**
1763
+ * The channel the most recent passcode was sent on, or null before the first send. Open enum — new channels may be added over time, so treat any unrecognized value as a future channel rather than an error.
1764
+ */
1765
+ readonly last_channel?: string | null;
1766
+ /**
1767
+ * The key/value pairs attached when the verification was created.
1768
+ */
1769
+ readonly metadata?: {
1770
+ [key: string]: unknown;
1771
+ };
1772
+ /**
1773
+ * When the verification expires if no correct passcode is submitted.
1774
+ */
1775
+ readonly expires_at: string;
1776
+ /**
1777
+ * When the verification was completed, or null if it is not yet verified.
1778
+ */
1779
+ readonly verified_at?: string | null;
1780
+ } & Timestamps;
1781
+ type VerificationCheckRequest = {
1782
+ to: VerificationTo;
1783
+ /**
1784
+ * The passcode the recipient received.
1785
+ */
1786
+ code: string;
1787
+ };
1788
+ type VerificationCreateRequest = {
1789
+ to: VerificationTo;
1790
+ options?: VerificationOptions;
1791
+ /**
1792
+ * Optional key/value pairs to attach to the verification, for example a correlation id. Returned on the verification.
1793
+ */
1794
+ metadata?: {
1795
+ [key: string]: unknown;
1796
+ };
1797
+ };
1798
+ /**
1799
+ * Per-request overrides applied to this verification only.
1800
+ */
1801
+ type VerificationOptions = {
1802
+ /**
1803
+ * Passcode length for this verification, overriding the configured length.
1804
+ */
1805
+ code_length?: number;
1806
+ /**
1807
+ * Reorder or narrow the delivery channels for this request. List channel names in the order to try them; a channel you omit is not used for this request, and a channel not already enabled for the recipient is ignored. Omit the field to use the configured order.
1808
+ */
1809
+ channels?: Array<VerificationChannel>;
1810
+ };
1448
1811
  type SmsTemplateList = {
1449
1812
  /**
1450
1813
  * The templates available to your workspace. The catalogue is small and returned in full — this list is not paginated.
@@ -1815,6 +2178,7 @@ type AudienceContactsRemoveRequest = {
1815
2178
  */
1816
2179
  contact_ids: Array<ContactId>;
1817
2180
  };
2181
+ type ContactId = string;
1818
2182
  type AudienceContactsAddRequest = {
1819
2183
  /**
1820
2184
  * Contacts to add to the audience. Adding a contact that is already a member has no effect. If any ID does not exist, the whole request fails and no contacts are added.
@@ -2069,6 +2433,40 @@ type EmailMessageBatchItem = {
2069
2433
  *
2070
2434
  */
2071
2435
  type EmailMessageBatchRequest = Array<EmailMessageSendRequest>;
2436
+ /**
2437
+ * File attached to an email send. The attachment bytes are passed as base64-encoded `content` directly in the request body (required). The `path` field (provide a URL and Bird fetches the attachment for you) is a preview feature and currently unavailable. Requests are rejected with 422 if `content` is missing — `path` alone does not satisfy the schema. When `path` becomes generally available, the schema will be relaxed so that exactly one of `content` or `path` is required.
2438
+ * Inline images for `<img src="cid:..."/>` references in the HTML body use the `content_id` field together with `content`.
2439
+ * Bird enforces a **20 MB estimated generated message size** cap. The estimate is the HTML and text body plus all attachments and inline images measured after base64 encoding. This is not a raw file-size cap. As a rule of thumb, keep total raw attachment content at or below **15 MB** so the generated message has enough room after encoding and MIME wrapping.
2440
+ * Recipient-side delivery reality: downstream limits vary by product and tenant/server policy. Gmail personal and Outlook.com document 25 MB attachment limits. Exchange Online defaults to 35 MB send / 36 MB receive, but admins can configure limits; on-prem Exchange Server organizational defaults are 10 MB. Sends close to Bird's 20 MB generated-message cap may be accepted by Bird but bounce at the recipient's mail server.
2441
+ * Batch sends can include attachments on individual message objects. Each message still has the 20 MB estimated generated-size cap, and the serialized JSON request body for the whole batch has a hard 20 MB cap. Certain executable / script content types are rejected at validation time.
2442
+ *
2443
+ */
2444
+ type EmailAttachment = {
2445
+ /**
2446
+ * Filename shown to the recipient. Required.
2447
+ */
2448
+ filename: string;
2449
+ /**
2450
+ * Base64-encoded attachment bytes. Required. Counts toward the 20 MB estimated generated message-size cap after encoding and MIME wrapping.
2451
+ *
2452
+ */
2453
+ content: string;
2454
+ /**
2455
+ * Preview feature — provide a URL and Bird fetches the attachment for you. Currently unavailable. Use `content` instead. The schema currently requires `content`, so a request with only `path` is rejected with 422 for missing `content`; a request supplying both `content` and `path` is rejected with 422 `unsupported_feature` until this preview ships. When generally available: HTTPS-only, single redirect followed and re-validated, private IP ranges blocked, request timeout enforced, fetched content counts toward the 20 MB estimated generated message-size cap after encoding and MIME wrapping.
2456
+ *
2457
+ */
2458
+ path?: string;
2459
+ /**
2460
+ * MIME type. Inferred from `filename` extension when omitted. Used to enforce the blocklist of disallowed executable / script types.
2461
+ *
2462
+ */
2463
+ content_type?: string;
2464
+ /**
2465
+ * RFC 2392 Content-ID. When set, the attachment is rendered inline and can be referenced from the HTML body as `<img src="cid:{content_id}"/>`. When omitted, the attachment is rendered as a regular file attachment.
2466
+ *
2467
+ */
2468
+ content_id?: string;
2469
+ };
2072
2470
  type EmailTemplateId = string;
2073
2471
  type EmailTemplateSend = unknown & {
2074
2472
  /**
@@ -2076,7 +2474,7 @@ type EmailTemplateSend = unknown & {
2076
2474
  */
2077
2475
  id?: EmailTemplateId;
2078
2476
  /**
2079
- * The template to send, by its name handle (for example `welcome-email`).
2477
+ * The template to send, by its name handle — a workspace template (for example `welcome-email`) or a built-in `system` template (for example `bird_welcome`).
2080
2478
  */
2081
2479
  name?: TemplateName;
2082
2480
  /**
@@ -2087,6 +2485,11 @@ type EmailTemplateSend = unknown & {
2087
2485
  [key: string]: unknown;
2088
2486
  };
2089
2487
  };
2488
+ /**
2489
+ * A sender or recipient address. Accepts a plain email string (`jane@example.com`), an RFC 5322 mailbox string with an embedded display name (`Jane Doe <jane@example.com>`), or an object carrying the address and an optional display name. All forms can be mixed freely within one request; responses always return the object form.
2490
+ *
2491
+ */
2492
+ type EmailAddressInput = string | EmailAddress;
2090
2493
  type EmailMessageSendRequest = {
2091
2494
  /**
2092
2495
  * Sender address, as a plain email string, an RFC 5322 mailbox string (`Jane <jane@example.com>`), or an object with an optional display name. Must be from a verified domain in this workspace.
@@ -2394,7 +2797,7 @@ type ListEmailMessagesData = {
2394
2797
  */
2395
2798
  status?: "scheduled" | "accepted" | "processed" | "deferred" | "delivered" | "partial_failure" | "bounced" | "complained" | "rejected" | "canceled";
2396
2799
  /**
2397
- * Filter by tag. Accepts `name` to match any send carrying that tag name, or `name:value` to match a specific tag pair (e.g. `category:welcome`). Repeat the parameter to AND-combine several tag filters.
2800
+ * Filter by tag. Accepts `name` to match any message carrying that tag name, or `name:value` to match a specific tag pair (e.g. `category:welcome`). Repeat the parameter to AND-combine several tag filters.
2398
2801
  *
2399
2802
  */
2400
2803
  tag?: Array<string>;
@@ -2563,7 +2966,7 @@ type ListSmsMessagesData = {
2563
2966
  */
2564
2967
  from?: string;
2565
2968
  /**
2566
- * Filter by tag. Accepts `name` to match any message carrying that tag name, or `name:value` to match a specific tag pair. Repeat the parameter to AND-combine several tag filters.
2969
+ * Filter by tag. Accepts `name` to match any message carrying that tag name, or `name:value` to match a specific tag pair (e.g. `category:welcome`). Repeat the parameter to AND-combine several tag filters.
2567
2970
  *
2568
2971
  */
2569
2972
  tag?: Array<string>;
@@ -2589,6 +2992,66 @@ type ListSmsTemplatesData = {
2589
2992
  };
2590
2993
  url: "/v1/sms/templates";
2591
2994
  };
2995
+ type ListWhatsAppMessagesData = {
2996
+ body?: never;
2997
+ path?: never;
2998
+ query?: {
2999
+ /**
3000
+ * Maximum number of items to return per page.
3001
+ */
3002
+ limit?: number;
3003
+ /**
3004
+ * Cursor from the `next_cursor` field of a previous list response. Returns items immediately after the cursor position in the current sort order.
3005
+ */
3006
+ starting_after?: string;
3007
+ /**
3008
+ * Cursor from the `prev_cursor` field of a previous list response. Returns items immediately before the cursor position in the current sort order.
3009
+ */
3010
+ ending_before?: string;
3011
+ /**
3012
+ * Return only resources created strictly after this timestamp. RFC 3339 / ISO 8601 with timezone.
3013
+ */
3014
+ created_after?: string;
3015
+ /**
3016
+ * Return only resources created strictly before this timestamp. RFC 3339 / ISO 8601 with timezone.
3017
+ */
3018
+ created_before?: string;
3019
+ /**
3020
+ * Filter by status. Repeat the parameter to match any of several statuses.
3021
+ */
3022
+ status?: Array<WhatsAppMessageStatus>;
3023
+ /**
3024
+ * Filter by contact phone number (E.164 exact match).
3025
+ */
3026
+ phone_number?: string;
3027
+ /**
3028
+ * Filter by business-scoped user ID (Meta identifier).
3029
+ */
3030
+ bsuid?: string;
3031
+ /**
3032
+ * Filter by tag. Accepts `name` to match any message carrying that tag name, or `name:value` to match a specific tag pair (e.g. `category:welcome`). Repeat the parameter to AND-combine several tag filters.
3033
+ *
3034
+ */
3035
+ tag?: Array<string>;
3036
+ };
3037
+ url: "/v1/whatsapp/messages";
3038
+ };
3039
+ type ListWhatsAppMessageEventsData = {
3040
+ body?: never;
3041
+ path: {
3042
+ /**
3043
+ * Message ID.
3044
+ */
3045
+ message_id: WhatsAppMessageId;
3046
+ };
3047
+ query?: {
3048
+ /**
3049
+ * Filter by event type (e.g. `whatsapp.delivered`, `whatsapp.failed`).
3050
+ */
3051
+ type?: string;
3052
+ };
3053
+ url: "/v1/whatsapp/messages/{message_id}/events";
3054
+ };
2592
3055
  //#endregion
2593
3056
  //#region src/generated/core/auth.gen.d.ts
2594
3057
  type AuthToken = string | undefined;
@@ -3371,6 +3834,119 @@ declare class SmsTemplatesResource extends Resource {
3371
3834
  get(templateRef: string, options?: RequestOptions): APIPromise<SmsTemplate>;
3372
3835
  }
3373
3836
  //#endregion
3837
+ //#region src/resources/whatsapp.d.ts
3838
+ /** Body for `bird.whatsapp.send` — a template send; Bird picks the sender from the template's category. */
3839
+ type WhatsappSendParams = SendWhatsAppMessageRequest;
3840
+ /** Filters and cursor params for `bird.whatsapp.list`. */
3841
+ type WhatsappListQuery = NonNullable<ListWhatsAppMessagesData["query"]>;
3842
+ /** Filter for `bird.whatsapp.listEvents`. */
3843
+ type WhatsappListEventsQuery = NonNullable<ListWhatsAppMessageEventsData["query"]>;
3844
+ declare class WhatsappResource extends Resource {
3845
+ /**
3846
+ * Send a template message. Bird selects the sender number from the
3847
+ * template's category, so there is no sender field on the request. The
3848
+ * result is `accepted`, not yet delivered — read it back with `get` to
3849
+ * confirm.
3850
+ *
3851
+ * @example
3852
+ * const msg = await bird.whatsapp.send({
3853
+ * to: "+15551234567",
3854
+ * template: {
3855
+ * name: "bird_otp",
3856
+ * components: [
3857
+ * { type: "body", parameters: [{ type: "text", text: "123456" }] },
3858
+ * ],
3859
+ * },
3860
+ * });
3861
+ * console.log(msg.id, msg.status);
3862
+ */
3863
+ send(params: WhatsappSendParams, options?: RequestOptions): APIPromise<WhatsAppMessage>;
3864
+ /**
3865
+ * Fetch a single WhatsApp message: its current delivery status and failure
3866
+ * detail if it failed.
3867
+ *
3868
+ * @example
3869
+ * const msg = await bird.whatsapp.get("wa_abc123");
3870
+ * msg.status; // "accepted" | "delivered" | …
3871
+ */
3872
+ get(messageId: string, options?: RequestOptions): APIPromise<WhatsAppMessage>;
3873
+ /**
3874
+ * List WhatsApp messages, newest first. `await` resolves the first page;
3875
+ * `for await` walks every message across all pages. Filter by status,
3876
+ * recipient phone number, or business-scoped user ID.
3877
+ *
3878
+ * @example
3879
+ * for await (const msg of bird.whatsapp.list({ status: ["delivered"] })) {
3880
+ * console.log(msg.id, msg.status);
3881
+ * }
3882
+ */
3883
+ list(query?: WhatsappListQuery, options?: RequestOptions): PaginatedPromise<WhatsAppMessage>;
3884
+ /**
3885
+ * List a WhatsApp message's lifecycle event timeline, in chronological
3886
+ * order. The timeline is bounded and returned in full — this list is not
3887
+ * paginated.
3888
+ *
3889
+ * @example
3890
+ * const { data } = await bird.whatsapp.listEvents("wa_abc123");
3891
+ * for (const event of data) console.log(event.type, event.occurred_at);
3892
+ */
3893
+ listEvents(messageId: string, query?: WhatsappListEventsQuery, options?: RequestOptions): APIPromise<WhatsAppEventList>;
3894
+ }
3895
+ //#endregion
3896
+ //#region src/resources/whatsappTemplates.d.ts
3897
+ declare class WhatsappTemplatesResource extends Resource {
3898
+ /**
3899
+ * List the WhatsApp message templates available to the workspace — Meta's
3900
+ * approved templates for this business account. The catalogue is small and
3901
+ * returned in full (`.data`); this list is not paginated.
3902
+ *
3903
+ * @example
3904
+ * const { data } = await bird.whatsappTemplates.list();
3905
+ * for (const tpl of data) console.log(tpl.name, tpl.status);
3906
+ */
3907
+ list(options?: RequestOptions): APIPromise<WhatsAppTemplateList>;
3908
+ }
3909
+ //#endregion
3910
+ //#region src/resources/verify.d.ts
3911
+ /** Body for `bird.verify.verifications.create` — a recipient in `to`, plus optional `options`/`metadata`. */
3912
+ type VerificationCreateParams = VerificationCreateRequest;
3913
+ /** Body for `bird.verify.verifications.check` — the recipient in `to` and the submitted `code`. */
3914
+ type VerificationCheckParams = VerificationCheckRequest;
3915
+ declare class VerificationsResource extends Resource {
3916
+ /**
3917
+ * Start a verification and send a one-time passcode to the recipient in `to`
3918
+ * (a `phone_number` over SMS, an `email_address` over email, or both). Calling
3919
+ * again for the same recipient re-sends the code after the cooldown rather than
3920
+ * starting a second verification. The passcode is never returned — submit the
3921
+ * recipient's entry with `check`.
3922
+ *
3923
+ * @example Start over SMS
3924
+ * const verification = await bird.verify.verifications.create({
3925
+ * to: { phone_number: "+15551234567" },
3926
+ * });
3927
+ * console.log(verification.id, verification.status);
3928
+ */
3929
+ create(params: VerificationCreateParams, options?: RequestOptions): APIPromise<Verification>;
3930
+ /**
3931
+ * Check a passcode the recipient submitted. Identify the verification by the same
3932
+ * `to` recipient used to start it — no id needed. A wrong, expired, or already-used
3933
+ * code resolves with `success: false` and a `reason`, not an error.
3934
+ *
3935
+ * @example
3936
+ * const result = await bird.verify.verifications.check({
3937
+ * to: { phone_number: "+15551234567" },
3938
+ * code: "123456",
3939
+ * });
3940
+ * console.log(result.success);
3941
+ */
3942
+ check(params: VerificationCheckParams, options?: RequestOptions): APIPromise<VerificationCheckResult>;
3943
+ }
3944
+ /** The Verify product namespace — holds the `verifications` collection. */
3945
+ declare class VerifyResource {
3946
+ readonly verifications: VerificationsResource;
3947
+ constructor(...args: ConstructorParameters<typeof Resource>);
3948
+ }
3949
+ //#endregion
3374
3950
  //#region src/resources/webhooks.d.ts
3375
3951
  /** A verified webhook event — discriminated on `type` (ADR-0028 wire contract). */
3376
3952
  type BirdWebhookEvent = WebhookEvent;
@@ -3504,6 +4080,12 @@ declare class BirdClient<const O extends BirdClientOptions = BirdClientOptions>
3504
4080
  readonly sms: SmsResource;
3505
4081
  /** SMS templates — `bird.smsTemplates.list(...)`, `.get(...)`. */
3506
4082
  readonly smsTemplates: SmsTemplatesResource;
4083
+ /** The WhatsApp channel — `bird.whatsapp.send(...)`, `.get(...)`, `.list(...)`, `.listEvents(...)`. */
4084
+ readonly whatsapp: WhatsappResource;
4085
+ /** WhatsApp templates — `bird.whatsappTemplates.list(...)`. */
4086
+ readonly whatsappTemplates: WhatsappTemplatesResource;
4087
+ /** The Verify product — `bird.verify.verifications.create(...)`, `.check(...)`. */
4088
+ readonly verify: VerifyResource;
3507
4089
  /** Contacts — `bird.contacts.create(...)`, `.list(...)`, `.get(...)`, `.batch(...)`, … */
3508
4090
  readonly contacts: ContactsResource;
3509
4091
  /** Audiences — `bird.audiences.create(...)`, `.list(...)`, `.addContacts(...)`, … */
@@ -3554,8 +4136,6 @@ declare const WebhookEventType: {
3554
4136
  readonly EmailMailboxMessageDelivered: "email_mailbox.message_delivered";
3555
4137
  readonly EmailMailboxMessageFailed: "email_mailbox.message_failed";
3556
4138
  readonly EmailMailboxMessageReceived: "email_mailbox.message_received";
3557
- readonly EmailMailboxMessageReceivedBlocked: "email_mailbox.message_received_blocked";
3558
- readonly EmailMailboxMessageReceivedUnauthenticated: "email_mailbox.message_received_unauthenticated";
3559
4139
  readonly EmailMailboxMessageSent: "email_mailbox.message_sent";
3560
4140
  readonly EmailMailboxSuspended: "email_mailbox.suspended";
3561
4141
  readonly EmailMailboxThreadCreated: "email_mailbox.thread_created";
@@ -3578,5 +4158,5 @@ declare const WebhookEventType: {
3578
4158
  /** A known webhook event type value. */
3579
4159
  type WebhookEventTypeValue = (typeof WebhookEventType)[keyof typeof WebhookEventType];
3580
4160
  //#endregion
3581
- export { type APIPromise, type Audience, type AudienceAddContactsParams, type AudienceContactsQuery, type AudienceCreateParams, type AudienceListQuery, type AudienceMember, type AudienceRemoveContactsParams, type AudienceUpdateParams, BirdAPIError, BirdAuthError, BirdBadRequestError, BirdBillingError, BirdClient, type BirdClientOptions, BirdConflictError, BirdConnectionError, BirdError, BirdInternalError, BirdMisdirectedError, BirdNotFoundError, BirdNotImplementedError, BirdPayloadTooLargeError, BirdPermissionError, BirdPreconditionError, BirdRateLimitError, type BirdRequest, type BirdResponse, BirdServiceUnavailableError, BirdTimeoutError, BirdValidationError, type BirdWebhookEvent, BirdWebhookVerificationError, type Contact, type ContactBatchParams, type ContactCreateParams, type ContactListQuery, type ContactProperty, type ContactPropertyCreateParams, type ContactPropertyListQuery, type ContactPropertyUpdateParams, type ContactUpdateParams, type ContactUpsertResult, type CursorPage, type EmailChannelDefaults, type EmailListQuery, type EmailMessage, type EmailSendBatchParams, type EmailSendBatchResult, type EmailSendParams, type ErrorDetail, type ErrorNextAction, type PaginatedPromise, type RequestOptions, type SafeResult, type SmsListQuery, type SmsMessage, type SmsSendBatchParams, type SmsSendBatchResult, type SmsSendParams, type SmsTemplate, type SmsTemplateList, type SmsTemplateListQuery, type UnmetGate, WebhookEventType, type WebhookEventTypeValue, type WebhookHeaders, type WebhookOptions, baseUrlForRegion, regionFromApiKey };
4161
+ export { type APIPromise, type Audience, type AudienceAddContactsParams, type AudienceContactsQuery, type AudienceCreateParams, type AudienceListQuery, type AudienceMember, type AudienceRemoveContactsParams, type AudienceUpdateParams, BirdAPIError, BirdAuthError, BirdBadRequestError, BirdBillingError, BirdClient, type BirdClientOptions, BirdConflictError, BirdConnectionError, BirdError, BirdInternalError, BirdMisdirectedError, BirdNotFoundError, BirdNotImplementedError, BirdPayloadTooLargeError, BirdPermissionError, BirdPreconditionError, BirdRateLimitError, type BirdRequest, type BirdResponse, BirdServiceUnavailableError, BirdTimeoutError, BirdValidationError, type BirdWebhookEvent, BirdWebhookVerificationError, type Contact, type ContactBatchParams, type ContactCreateParams, type ContactListQuery, type ContactProperty, type ContactPropertyCreateParams, type ContactPropertyListQuery, type ContactPropertyUpdateParams, type ContactUpdateParams, type ContactUpsertResult, type CursorPage, type EmailChannelDefaults, type EmailListQuery, type EmailMessage, type EmailSendBatchParams, type EmailSendBatchResult, type EmailSendParams, type ErrorDetail, type ErrorNextAction, type PaginatedPromise, type RequestOptions, type SafeResult, type SmsListQuery, type SmsMessage, type SmsSendBatchParams, type SmsSendBatchResult, type SmsSendParams, type SmsTemplate, type SmsTemplateList, type SmsTemplateListQuery, type UnmetGate, type Verification, type VerificationCheckParams, type VerificationCheckResult, type VerificationCreateParams, WebhookEventType, type WebhookEventTypeValue, type WebhookHeaders, type WebhookOptions, type WhatsAppEventList, type WhatsAppMessage, type WhatsAppTemplate, type WhatsAppTemplateList, type WhatsappListEventsQuery, type WhatsappListQuery, type WhatsappSendParams, baseUrlForRegion, regionFromApiKey };
3582
4162
  //# sourceMappingURL=index.d.mts.map