@messagebird/sdk 0.27.0 → 0.29.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.mjs CHANGED
@@ -1411,7 +1411,15 @@ const sendRealtimeAppMemberEvent = (options) => (options.client ?? client).post(
1411
1411
  /**
1412
1412
  * List messages
1413
1413
  *
1414
- * Returns the workspace's sent and scheduled messages, newest first, as a cursor page. Each item carries the aggregate delivery `status` and per-state recipient counts, not the message body. Combine filters to narrow the page: `status`, `category`, `tag`, exact `to`/`from` address, and a `created_after`/`created_before` time window.
1414
+ * Returns the workspace's sent and scheduled messages, newest first, as a cursor page. Each item has the aggregate delivery `status` and per-state recipient counts, not the message body.
1415
+ *
1416
+ * Combine filters to narrow the page:
1417
+ *
1418
+ * - Delivery status.
1419
+ * - Category.
1420
+ * - Tag.
1421
+ * - An exact `to` or `from` address.
1422
+ * - A `created_after` or `created_before` time window.
1415
1423
  *
1416
1424
  */
1417
1425
  const listEmailMessages = (options) => (options?.client ?? client).get({
@@ -1431,7 +1439,7 @@ const listEmailMessages = (options) => (options?.client ?? client).get({
1431
1439
  *
1432
1440
  * Sends an email to the recipients you list explicitly in `to`/`cc`/`bcc`. Use it for
1433
1441
  * transactional sends (receipts, password resets, alerts) and for marketing sends where
1434
- * you have the recipient addresses on hand; to submit many independent messages in one
1442
+ * you have the recipient addresses on hand. To submit many independent messages in one
1435
1443
  * request, use [Send a batch of messages](/docs/api/reference/create-email-message-batch)
1436
1444
  * instead. The `category` field controls suppression policy independently of content:
1437
1445
  * set it to `marketing` when sending marketing content from this endpoint.
@@ -1440,10 +1448,10 @@ const listEmailMessages = (options) => (options?.client ?? client).get({
1440
1448
  * delivered. Fetch it by `id` or subscribe to webhook events to follow delivery. The
1441
1449
  * request never half-succeeds: an unverified sender domain or any field-level
1442
1450
  * validation failure rejects it immediately with a `422` naming the reason.
1443
- * Suppression is evaluated per recipient after acceptance: suppressed recipients
1444
- * surface as `rejected` on the message's recipient list, never as a synchronous
1451
+ * Suppression is evaluated per recipient after acceptance, so a suppressed recipient
1452
+ * appears as `rejected` on the message's recipient list rather than as a synchronous
1445
1453
  * error. New workspaces can send from the shared onboarding domain before verifying
1446
- * their own; the [quickstart](/docs/get-started/send-your-first-email) covers its
1454
+ * their own. The [quickstart](/docs/get-started/send-your-first-email) covers its
1447
1455
  * recipient and volume limits.
1448
1456
  *
1449
1457
  */
@@ -1466,7 +1474,7 @@ const createEmailMessage = (options) => (options.client ?? client).post({
1466
1474
  /**
1467
1475
  * Send a batch of messages
1468
1476
  *
1469
- * Accepts up to 100 independent email messages and queues them for delivery. All items are validated before any are queued: if one fails validation, the entire batch is rejected. Field-level validation failures and business-rule failures (such as `domain_not_verified`) both return `422`. Suppression is evaluated per recipient after acceptance, never as a synchronous error. The `202` response returns one entry per message in submission order, each with its own `id` to fetch or correlate webhook events against. Attachments are allowed per message. Each message must stay within the 20 MB estimated generated message-size cap, and the serialized JSON request body for the whole batch has a hard 20 MB cap.
1477
+ * Accepts up to 100 independent email messages and queues them for delivery. All items are validated before any are queued: if one fails validation, the entire batch is rejected. Field-level validation failures and business-rule failures (such as `domain_not_verified`) both return `422`. Suppression is evaluated per recipient after acceptance, never as a synchronous error. The `202` response returns one entry per message in submission order, each with its own `id` you can use to fetch that message or match it against webhook events. Attachments are allowed per message. Each message must stay within the 20 MB estimated generated message-size cap, and the serialized JSON request body for the whole batch has a hard 20 MB cap.
1470
1478
  *
1471
1479
  */
1472
1480
  const createEmailMessageBatch = (options) => (options.client ?? client).post({
@@ -1488,7 +1496,7 @@ const createEmailMessageBatch = (options) => (options.client ?? client).post({
1488
1496
  /**
1489
1497
  * Get a message
1490
1498
  *
1491
- * Returns a single message with its aggregate delivery `status` and per-state recipient counts. The response never includes the `html`/`text` bodies; when content storage is enabled for the send, fetch the stored bodies with [Get stored message content](/docs/api/reference/get-email-message-content). Per-recipient statuses and the event timeline are separate sub-resources.
1499
+ * Returns a single message with its aggregate delivery `status` and per-state recipient counts. The response never includes the `html`/`text` bodies. When content storage is enabled for the send, fetch the stored bodies with [Get stored message content](/docs/api/reference/get-email-message-content). Per-recipient statuses and the event timeline are separate sub-resources.
1492
1500
  *
1493
1501
  */
1494
1502
  const getEmailMessage = (options) => (options.client ?? client).get({
@@ -1506,7 +1514,7 @@ const getEmailMessage = (options) => (options.client ?? client).get({
1506
1514
  /**
1507
1515
  * Cancel a scheduled message
1508
1516
  *
1509
- * Cancels a message that was scheduled with `scheduled_at` before it sends. Only a message that is still scheduled can be canceled; a message that already started sending, was delivered, or was previously canceled returns a conflict error. The message's status becomes `canceled` and an `email.canceled` webhook event fires. Canceling does not return consumed scheduled-send quota.
1517
+ * Cancels a message that was scheduled with `scheduled_at` before it sends. Only a message that is still scheduled can be canceled. A message that already started sending, was delivered, or was previously canceled returns a conflict error. The message's status becomes `canceled` and an `email.canceled` webhook event fires. Canceling does not return consumed scheduled-send quota.
1510
1518
  *
1511
1519
  */
1512
1520
  const cancelEmailMessage = (options) => (options.client ?? client).post({
@@ -1524,7 +1532,7 @@ const cancelEmailMessage = (options) => (options.client ?? client).post({
1524
1532
  /**
1525
1533
  * List contacts
1526
1534
  *
1527
- * Returns a paginated list of contacts in the workspace, newest first. Look up a single contact by its exact `email`, `phone`, or `external_id`, or search by email, first name, last name, or phone substring with `q`. Pass `include_total=true` to add the total number of matching contacts to the response.
1535
+ * Returns a paginated list of contacts in the workspace, newest first. Look up a single contact by its exact `email`, `phone_number`, or `external_id`, or search by email, first name, last name, or phone substring with `q`. Repeat `phone_number` to resolve up to 50 numbers to their contacts in one request, raising `limit` to at least the number of values you pass. Pass `include_total=true` to add the total number of matching contacts to the response.
1528
1536
  *
1529
1537
  */
1530
1538
  const listContacts = (options) => (options?.client ?? client).get({
@@ -2088,6 +2096,72 @@ const getSmsTemplate = (options) => (options.client ?? client).get({
2088
2096
  ...options
2089
2097
  });
2090
2098
  /**
2099
+ * Look up a phone number
2100
+ *
2101
+ * Returns what we know about a phone number: which network serves it, which network issued it, whether it has been ported, its country, and what kind of line it is. That baseline is included with every lookup.
2102
+ *
2103
+ * Use `type` to buy more. Each value adds a block to the answer: how the number is classified, whether it is live on the network right now, whether it is roaming, when its SIM last changed, its porting record, or a credibility score. Omit `type` and the response is the baseline alone, and no intelligence provider is contacted.
2104
+ *
2105
+ * Every block you request comes back carrying a `status`, so a partial answer is visible rather than silent, and **you are billed for exactly the blocks whose status is `ok`**.
2106
+ *
2107
+ * Send the number in the body rather than the URL when you would rather it did not appear in request logs or browser history. [Look up a phone number by URL](/docs/api/reference/get-phone-number-lookup) is the same lookup with the number in the path.
2108
+ *
2109
+ * Send an `Idempotency-Key` and a retried request returns the stored answer instead of looking the number up and charging again. Without one, every attempt is a new lookup and is billed.
2110
+ *
2111
+ */
2112
+ const createPhoneNumberLookup = (options) => (options.client ?? client).post({
2113
+ security: [{
2114
+ scheme: "bearer",
2115
+ type: "http"
2116
+ }, {
2117
+ in: "cookie",
2118
+ name: "bird_session",
2119
+ type: "apiKey"
2120
+ }],
2121
+ url: "/v1/lookup/phone-number",
2122
+ ...options,
2123
+ headers: {
2124
+ "Content-Type": "application/json",
2125
+ ...options.headers
2126
+ }
2127
+ });
2128
+ /**
2129
+ * Look up an email address
2130
+ *
2131
+ * Returns whether an email address is worth sending to:
2132
+ *
2133
+ * - Whether it will accept mail.
2134
+ * - How confident that is.
2135
+ * - Why not, when it will not.
2136
+ * - Whether it is a role, disposable, or free-provider address.
2137
+ * - What it looks like it was meant to be, when it looks misspelled.
2138
+ *
2139
+ * One address per call, and one answer: `result` is the field to decide on. Every answer costs the same, including `undeliverable`, which is usually the most valuable one you can get.
2140
+ *
2141
+ * `result` and `reason` are open vocabularies: the values below are the ones in use today, and further ones may be added. Branch on the values you know and treat anything else as a future value rather than an error. `delivery_confidence` is always present and always comparable, so it is the safe fallback.
2142
+ *
2143
+ * Send the address in the body rather than the URL when you would rather it did not appear in request logs or browser history. [Look up an email address by URL](/docs/api/reference/get-email-lookup) is the same lookup with the address in the path.
2144
+ *
2145
+ * Send an `Idempotency-Key` and a retried request returns the stored answer instead of validating the address and charging again. Without one, every attempt is a new lookup and is billed.
2146
+ *
2147
+ */
2148
+ const createEmailLookup = (options) => (options.client ?? client).post({
2149
+ security: [{
2150
+ scheme: "bearer",
2151
+ type: "http"
2152
+ }, {
2153
+ in: "cookie",
2154
+ name: "bird_session",
2155
+ type: "apiKey"
2156
+ }],
2157
+ url: "/v1/lookup/email",
2158
+ ...options,
2159
+ headers: {
2160
+ "Content-Type": "application/json",
2161
+ ...options.headers
2162
+ }
2163
+ });
2164
+ /**
2091
2165
  * Create a verification
2092
2166
  *
2093
2167
  * Creates a verification for a recipient and sends them a one-time passcode. Provide the recipient in `to`: an email address (verified over email), a phone number (verified over the phone channels enabled for its destination country), or both. The passcode is sent over one channel at a time and delivery falls over to the next channel in the plan if one fails; it is never sent over two channels at once.
@@ -2168,9 +2242,18 @@ const createVerificationNextChannel = (options) => (options.client ?? client).po
2168
2242
  /**
2169
2243
  * List WhatsApp messages
2170
2244
  *
2171
- * Returns the workspace's WhatsApp messages as a cursor-paginated list, newest first. Filter by direction, status, contact phone number, business-scoped user ID, template category, tag, or creation time; pass the response's `next_cursor` back as `starting_after` to fetch the next page. To follow a single message's delivery, use [Get a WhatsApp message](/docs/api/reference/get-whats-app-message) instead.
2245
+ * Returns the workspace's WhatsApp messages as a cursor-paginated list,
2246
+ * newest first. Filter by direction, status, contact phone number,
2247
+ * business-scoped user ID, template category, tag, or creation time; pass the response's `next_cursor` back as
2248
+ * `starting_after` to fetch the next page. To follow a single message's
2249
+ * delivery, use
2250
+ * [Get a WhatsApp message](/docs/api/reference/get-whats-app-message)
2251
+ * instead.
2172
2252
  *
2173
- * Messages are retained for **30 days**. A `created_after` earlier than that is accepted and raised to the retention bound rather than rejected, so a wider window returns what is still retained instead of failing. There is no way to read messages older than the window.
2253
+ * Messages are retained for **30 days**. A `created_after` earlier than that
2254
+ * is accepted and raised to the retention bound rather than rejected, so a
2255
+ * wider window returns what is still retained instead of failing. There is no
2256
+ * way to read messages older than the window.
2174
2257
  *
2175
2258
  */
2176
2259
  const listWhatsAppMessages = (options) => (options?.client ?? client).get({
@@ -2307,11 +2390,11 @@ const getEmailStatsHourly = (options) => (options?.client ?? client).get({
2307
2390
  /**
2308
2391
  * Stats by tag
2309
2392
  *
2310
- * Returns aggregate delivery and engagement counts grouped by tag for the requested period. Rows are ranked by the `sort` metric (default `processed`) descending and capped at the requested `limit` (default 50, hard maximum 200). Use this to compare campaign performance across tags you set at send time.
2393
+ * Returns delivery and engagement counts for the requested period, grouped by tag. Use it to compare performance across the tags you set at send time. Rows are ranked by the `sort` metric, `processed` by default, and capped at the requested `limit` (50 by default, 200 at most).
2311
2394
  *
2312
- * Rows are computed against event time (not send time), so engagement received during the period for messages sent earlier is included.
2395
+ * Rows are computed against event time rather than send time, so engagement received during the period counts even for messages that were sent earlier.
2313
2396
  *
2314
- * The maximum window is 365 days; requesting a longer range returns 422.
2397
+ * The window can span at most 365 days. Ask for more and you get a 422.
2315
2398
  *
2316
2399
  */
2317
2400
  const getEmailStatsByTag = (options) => (options?.client ?? client).get({
@@ -2329,7 +2412,7 @@ const getEmailStatsByTag = (options) => (options?.client ?? client).get({
2329
2412
  /**
2330
2413
  * Aggregate stats summary
2331
2414
  *
2332
- * Returns a single-row aggregate across the requested period covering delivery, bounce, complaint, open, and click counts plus the derived rates, along with processing, delivery, and total latency percentiles (p50/p95/p99). Suitable for KPI tiles, campaign reports, and email digests; the daily and hourly endpoints carry the same metrics per time bucket.
2415
+ * Returns a single-row aggregate across the requested period covering delivery, bounce, complaint, open, and click counts plus the derived rates, along with processing, delivery, and total latency percentiles (p50/p95/p99). Suitable for KPI tiles, campaign reports, and email digests; the daily and hourly endpoints have the same metrics per time bucket.
2333
2416
  *
2334
2417
  * The aggregate is computed against event time (not send time), so engagement received during the period for messages sent earlier is included. Rate fields are null when their denominator is zero.
2335
2418
  *
@@ -2351,11 +2434,11 @@ const getEmailStatsSummary = (options) => (options?.client ?? client).get({
2351
2434
  /**
2352
2435
  * Stats by sending IP
2353
2436
  *
2354
- * Returns delivery and deliverability counts grouped by the specific IP address used to send each message. Use this to identify per-IP reputation issues: block bounces concentrated on a single IP usually indicate a reputation problem on that IP, and `sort=bounces.block` surfaces those IPs first.
2437
+ * Returns delivery and deliverability counts for the requested period, grouped by the specific IP address used to send each message. Use it to spot a reputation problem on one IP. Block bounces concentrated on a single IP usually mean that IP's reputation has taken a hit, and sorting by `bounces.block` puts those IPs first.
2355
2438
  *
2356
- * A sending IP is known only once the upstream mail system reports delivery, bounce, deferral, or a late bounce, so rows cover the delivery stage onward: `accepted` and `processed` counts, processing latency, engagement, and complaint attribution are not available per IP. For workspace-wide figures use `GET /v1/email/stats/daily`. Rows are computed against event time (not send time).
2439
+ * A sending IP is only known once the receiving mail server reports an outcome: a delivery, a bounce, a deferral, or a late bounce. So this breakdown starts from the delivery stage onward. Accepted, processed, and rejected counts aren't included at all, and neither are engagement counts or processing latency. Complaints and out-of-band bounces aren't attributed to a sending IP either, so `complained` and `oob_bounces` are included but always read 0 here. Bounced, deferred, delivery latency, and total latency are the ones that have real numbers. For workspace-wide figures, use `GET /v1/email/stats/daily`. Rows are computed against event time rather than send time.
2357
2440
  *
2358
- * Rows are ranked by the `sort` field (default `delivered`) descending and capped at the requested `limit` (default 50, hard maximum 200). The maximum window is 365 days; requesting a longer range returns 422.
2441
+ * Rows are ranked by the `sort` field, `delivered` by default, and capped at the requested `limit` (50 by default, 200 at most). The window can span at most 365 days. Ask for more and you get a 422.
2359
2442
  *
2360
2443
  */
2361
2444
  const getEmailStatsBySendingIp = (options) => (options?.client ?? client).get({
@@ -2373,11 +2456,11 @@ const getEmailStatsBySendingIp = (options) => (options?.client ?? client).get({
2373
2456
  /**
2374
2457
  * Stats by sending domain
2375
2458
  *
2376
- * Returns delivery, engagement, and deliverability counts grouped by sending domain (the portion of the `From` address after the `@`). Use this to compare deliverability across multiple verified domains in your workspace, for example transactional versus marketing domains, or sub-domain segregation during IP warming.
2459
+ * Returns delivery, engagement, and deliverability counts for the requested period, grouped by sending domain: the portion of the `From` address after the `@`. Use it to compare deliverability across multiple verified domains in your workspace, for example transactional versus marketing domains, or sub-domain segregation during IP warming.
2377
2460
  *
2378
- * Rows are computed against event time (not send time), so engagement and bounces received during the period for messages sent earlier are included.
2461
+ * Rows are computed against event time rather than send time, so engagement and bounces received during the period count even for messages that were sent earlier.
2379
2462
  *
2380
- * Rows are ranked by the `sort` metric (default `processed`) descending and capped at the requested `limit` (default 50, hard maximum 200). The maximum window is 365 days; requesting a longer range returns 422.
2463
+ * Rows are ranked by the `sort` metric, `processed` by default, and capped at the requested `limit` (50 by default, 200 at most). The window can span at most 365 days. Ask for more and you get a 422.
2381
2464
  *
2382
2465
  */
2383
2466
  const getEmailStatsBySendingDomain = (options) => (options?.client ?? client).get({
@@ -2395,11 +2478,11 @@ const getEmailStatsBySendingDomain = (options) => (options?.client ?? client).ge
2395
2478
  /**
2396
2479
  * Stats by category
2397
2480
  *
2398
- * Returns aggregate delivery and engagement counts grouped by category for the requested period. Rows are ranked by the `sort` metric (default `processed`) descending and capped at the requested `limit` (default 50, hard maximum 200). Use this to compare deliverability and engagement between your transactional and marketing traffic.
2481
+ * Returns delivery and engagement counts for the requested period, grouped by category, so you can compare deliverability and engagement between your transactional and marketing traffic. Rows are ranked by the `sort` metric, `processed` by default, and capped at the requested `limit` (50 by default, 200 at most).
2399
2482
  *
2400
- * Rows are computed against event time (not send time), so engagement received during the period for messages sent earlier is included.
2483
+ * Rows are computed against event time rather than send time, so engagement received during the period counts even for messages that were sent earlier.
2401
2484
  *
2402
- * The maximum window is 365 days; requesting a longer range returns 422.
2485
+ * The window can span at most 365 days. Ask for more and you get a 422.
2403
2486
  *
2404
2487
  */
2405
2488
  const getEmailStatsByCategory = (options) => (options?.client ?? client).get({
@@ -2417,11 +2500,11 @@ const getEmailStatsByCategory = (options) => (options?.client ?? client).get({
2417
2500
  /**
2418
2501
  * Stats by mailbox provider
2419
2502
  *
2420
- * Returns delivery, engagement, and deliverability counts grouped by recipient mailbox provider (for example `gmail`, `yahoo`, `microsoft`, `apple`): the deliverability-by-inbox-provider view. Use this to compare how each major inbox provider treats your mail, for example to spot a delivered-rate dip or complaint spike at one provider before it spreads; for a per-region split within a provider, use the mailbox-provider-region breakdown.
2503
+ * Returns delivery, engagement, and deliverability counts for the requested period, grouped by recipient mailbox provider, for example `gmail`, `yahoo`, `microsoft`, or `apple`. Use it to compare how each major inbox provider treats your mail, for example to spot a delivered-rate dip or a complaint spike at one provider before it spreads. For a per-region split within a provider, use the mailbox-provider-region breakdown.
2421
2504
  *
2422
- * A recipient's mailbox provider is known only once the receiving mail system reports an outcome, so rows cover the delivery stage onward: `accepted`, `processed`, and `rejected` counts and processing latency are not included. Rows are computed against event time (not send time).
2505
+ * A recipient's mailbox provider is only known once the receiving mail system reports an outcome, so this breakdown covers the delivery stage onward. Accepted, processed, and rejected counts and processing latency are not included. Rows are computed against event time rather than send time.
2423
2506
  *
2424
- * Rows are ranked by the `sort` metric (default `delivered`) descending and capped at the requested `limit` (default 50, hard maximum 200). The maximum window is 365 days; requesting a longer range returns 422.
2507
+ * Rows are ranked by the `sort` metric, `delivered` by default, and capped at the requested `limit` (50 by default, 200 at most). The window can span at most 365 days. Ask for more and you get a 422.
2425
2508
  *
2426
2509
  */
2427
2510
  const getEmailStatsByMailboxProvider = (options) => (options?.client ?? client).get({
@@ -2439,11 +2522,11 @@ const getEmailStatsByMailboxProvider = (options) => (options?.client ?? client).
2439
2522
  /**
2440
2523
  * Stats by mailbox provider region
2441
2524
  *
2442
- * Returns delivery, engagement, and deliverability counts grouped by mailbox provider and provider region pair, for example `gmail` in `NA` or `microsoft` in `EU`. The provider region is the regional pod the receiving mail system reports for the recipient's provider; pairing it with the provider disambiguates a region label that several providers share. Use this to spot a deliverability problem isolated to one provider in one region; for a per-provider view without the region split, use the mailbox-provider breakdown.
2525
+ * Returns delivery, engagement, and deliverability counts for the requested period, grouped by mailbox provider and provider region pair, for example `gmail` in `NA` or `microsoft` in `EU`. The provider region is the regional grouping the receiving mail system reports for the recipient's provider. Pairing it with the provider tells apart a region label that several providers share. Use it to spot a deliverability problem isolated to one provider in one region. For a per-provider view without the region split, use the mailbox-provider breakdown.
2443
2526
  *
2444
- * A provider region is known only once the receiving mail system reports an outcome, so rows cover the delivery stage onward: `accepted`, `processed`, and `rejected` counts and processing latency are not included. Rows are computed against event time (not send time).
2527
+ * A provider region is only known once the receiving mail system reports an outcome, so this breakdown covers the delivery stage onward. Accepted, processed, and rejected counts and processing latency are not included. Rows are computed against event time rather than send time.
2445
2528
  *
2446
- * Rows are ranked by the `sort` metric (default `delivered`) descending and capped at the requested `limit` (default 50, hard maximum 200). The maximum window is 365 days; requesting a longer range returns 422.
2529
+ * Rows are ranked by the `sort` metric, `delivered` by default, and capped at the requested `limit` (50 by default, 200 at most). The window can span at most 365 days. Ask for more and you get a 422.
2447
2530
  *
2448
2531
  */
2449
2532
  const getEmailStatsByMailboxProviderRegion = (options) => (options?.client ?? client).get({
@@ -2461,11 +2544,11 @@ const getEmailStatsByMailboxProviderRegion = (options) => (options?.client ?? cl
2461
2544
  /**
2462
2545
  * Stats by recipient domain
2463
2546
  *
2464
- * Returns aggregate delivery and engagement counts grouped by recipient mailbox domain (the part of each recipient address after the `@`, for example `gmail.com`, `yahoo.com`, `outlook.com`) for the requested period. This is the finest-grained deliverability view: where the mailbox-provider breakdown groups recipients into provider buckets such as `gmail` or `microsoft`, this keys on the exact destination domain. Use it to spot a delivery-rate dip or complaint spike at a specific domain.
2547
+ * Returns delivery and engagement counts for the requested period, grouped by recipient mailbox domain: the part of each recipient address after the `@`, for example `gmail.com`, `yahoo.com`, or `outlook.com`. This is the finest-grained deliverability view. Where the mailbox-provider breakdown groups recipients into provider buckets such as `gmail` or `microsoft`, this keys on the exact destination domain. Use it to spot a delivery-rate dip or a complaint spike at a specific domain.
2465
2548
  *
2466
- * Rows are ranked by the `sort` metric (default `processed`) descending and capped at the requested `limit` (default 50, hard maximum 200). Rows are computed against event time (not send time), so engagement received during the period for messages sent earlier is included.
2549
+ * Rows are ranked by the `sort` metric, `processed` by default, and capped at the requested `limit` (50 by default, 200 at most). Rows are computed against event time rather than send time, so engagement received during the period counts even for messages that were sent earlier.
2467
2550
  *
2468
- * The maximum window is 365 days; requesting a longer range returns 422.
2551
+ * The window can span at most 365 days. Ask for more and you get a 422.
2469
2552
  *
2470
2553
  */
2471
2554
  const getEmailStatsByRecipientDomain = (options) => (options?.client ?? client).get({
@@ -2505,11 +2588,11 @@ const getEmailStatsByTemplate = (options) => (options?.client ?? client).get({
2505
2588
  /**
2506
2589
  * Engagement by location
2507
2590
  *
2508
- * Returns engagement counts (opens and clicks) grouped by the location they were recorded from, for the requested period. Use it to see where your audience engages, for example the top countries by unique opens. Location is known from open and click events only, so rows carry engagement counts but no delivery counts or rates.
2591
+ * Returns engagement counts (opens and clicks) for the requested period, grouped by the location they were recorded from. Use it to see where your audience engages, for example the top countries by unique opens. The reading location is only known from open and click events, so rows have engagement counts but no delivery counts or rates.
2509
2592
  *
2510
- * Use `group_by` to choose the granularity: `country` (default), `region`, or `city`. Each row carries the location hierarchy down to the requested level (a `city` grouping also reports the row's region and country). Rows are ranked by the `sort` metric (default `unique_opens`) descending and capped at the requested `limit` (default 50, hard maximum 200).
2593
+ * Use `group_by` to choose the granularity: `country` (the default), `region`, or `city`. Each row has the location hierarchy down to the requested level, so a `city` grouping also reports that row's region and country. Rows are ranked by the `sort` metric, `unique_opens` by default, and capped at the requested `limit` (50 by default, 200 at most).
2511
2594
  *
2512
- * Rows are computed against event time (not send time). The maximum window is 365 days; requesting a longer range returns 422.
2595
+ * Rows are computed against event time rather than send time. The window can span at most 365 days. Ask for more and you get a 422.
2513
2596
  *
2514
2597
  */
2515
2598
  const getEmailStatsByLocation = (options) => (options?.client ?? client).get({
@@ -2527,11 +2610,11 @@ const getEmailStatsByLocation = (options) => (options?.client ?? client).get({
2527
2610
  /**
2528
2611
  * Engagement by email client
2529
2612
  *
2530
- * Returns engagement counts (opens and clicks) grouped by the email client, operating system, or device type they were recorded from, for the requested period. Use it for the classic "opens by mail client" view, for example the share of opens from Apple Mail versus Gmail versus Outlook. The reading environment is known from open and click events only, so rows carry engagement counts but no delivery counts or rates.
2613
+ * Returns engagement counts (opens and clicks) for the requested period, grouped by the email client, operating system, or device type they were recorded from. Use it for the classic view of opens by mail client, for example the share of opens from Apple Mail compared with Gmail and Outlook. The reading environment is only known from open and click events, so rows have engagement counts but no delivery counts or rates.
2531
2614
  *
2532
- * Use `group_by` to choose the facet: `email_client` (default), `os`, or `device_type`. Each row populates the chosen facet and leaves the other two null. Rows are ranked by the `sort` metric (default `unique_opens`) descending and capped at the requested `limit` (default 50, hard maximum 200).
2615
+ * Use `group_by` to choose the facet: `email_client` (the default), `os`, or `device_type`. Each row fills in the facet you chose and leaves the other two null. Rows are ranked by the `sort` metric, `unique_opens` by default, and capped at the requested `limit` (50 by default, 200 at most).
2533
2616
  *
2534
- * Rows are computed against event time (not send time). The maximum window is 365 days; requesting a longer range returns 422.
2617
+ * Rows are computed against event time rather than send time. The window can span at most 365 days. Ask for more and you get a 422.
2535
2618
  *
2536
2619
  */
2537
2620
  const getEmailStatsByClient = (options) => (options?.client ?? client).get({
@@ -2549,11 +2632,11 @@ const getEmailStatsByClient = (options) => (options?.client ?? client).get({
2549
2632
  /**
2550
2633
  * Bounces by SMTP error code
2551
2634
  *
2552
- * Returns bounce counts grouped by the SMTP error code the receiving mail server returned, for the requested period: the deliverability-debugging view that answers "which SMTP responses are driving my bounces". Each row reports the bounced recipients for one code plus the hard/soft/admin/block/undetermined split.
2635
+ * Returns bounce counts for the requested period, grouped by the SMTP error code the receiving mail server returned. It answers the question of which SMTP responses are driving your bounces. Each row reports how many recipients bounced with that code, plus the hard, soft, admin, block, and undetermined split for that code.
2553
2636
  *
2554
- * This breakdown reports the failure side only: it has no delivered, open, click, or rate fields, because a bounce code is recorded only on bounce events.
2637
+ * This breakdown only covers the failure side. There are no delivered, open, click, or rate fields, because a bounce code is only ever recorded on a bounce event.
2555
2638
  *
2556
- * Rows are ranked by the `sort` metric (default `bounced`) descending, capped at the requested `limit` (default 50, hard maximum 200), and computed against event time (not send time). The maximum window is 365 days; requesting a longer range returns 422.
2639
+ * Rows are ranked by the `sort` metric, `bounced` by default, and capped at the requested `limit` (50 by default, 200 at most). They are computed against event time rather than send time. The window can span at most 365 days. Ask for more and you get a 422.
2557
2640
  *
2558
2641
  */
2559
2642
  const getEmailStatsByBounceCode = (options) => (options?.client ?? client).get({
@@ -2571,11 +2654,11 @@ const getEmailStatsByBounceCode = (options) => (options?.client ?? client).get({
2571
2654
  /**
2572
2655
  * Complaints by type
2573
2656
  *
2574
- * Returns spam-complaint counts grouped by the feedback-loop complaint type reported by the mailbox provider (for example `abuse`, `fraud`, `virus`), for the requested period. Use it to understand what kind of complaints your mail attracts.
2657
+ * Returns spam-complaint counts for the requested period, grouped by the feedback-loop complaint type the mailbox provider reported, for example `abuse`, `fraud`, or `virus`. Use it to see what kind of complaints your mail attracts.
2575
2658
  *
2576
- * This breakdown reports the complaint side only: each row carries the complained count for one type and nothing else, because a complaint type is recorded only on spam-complaint events.
2659
+ * This breakdown only covers the complaint side. Each row has the complained count for one type and nothing else, because a complaint type is only ever recorded on a spam-complaint event.
2577
2660
  *
2578
- * Rows are ranked by `complained` descending, capped at the requested `limit` (default 50, hard maximum 200), and computed against event time (not send time). The maximum window is 365 days; requesting a longer range returns 422.
2661
+ * Rows are ranked by `complained` descending, and capped at the requested `limit` (default 50, hard maximum 200). They are computed against event time rather than send time. The window can span at most 365 days. Ask for more and you get a 422.
2579
2662
  *
2580
2663
  */
2581
2664
  const getEmailStatsByComplaintType = (options) => (options?.client ?? client).get({
@@ -2593,11 +2676,11 @@ const getEmailStatsByComplaintType = (options) => (options?.client ?? client).ge
2593
2676
  /**
2594
2677
  * Stats by broadcast
2595
2678
  *
2596
- * Returns aggregate delivery and engagement counts grouped by broadcast for the requested period, so each broadcast's deliverability and engagement can be compared side by side. Only messages sent as part of a broadcast appear here; one-off and transactional sends are not included, so a workspace that has not sent broadcasts returns an empty list rather than an error.
2679
+ * Returns aggregate delivery and engagement counts grouped by broadcast for the requested period, so each broadcast's deliverability and engagement can be compared side by side. Only messages sent as part of a broadcast appear here. One-off and transactional sends are not included, so a workspace that has not sent broadcasts returns an empty list rather than an error.
2597
2680
  *
2598
2681
  * Rows are ranked by the `sort` metric (default `processed`) descending and capped at the requested `limit` (default 50, hard maximum 200). Rows are computed against event time (not send time), so engagement received during the period for messages sent earlier is included.
2599
2682
  *
2600
- * The maximum window is 365 days; requesting a longer range returns 422. This breakdown is computed from per-message activity retained for 30 days, so it reflects roughly the last 30 days of activity even when the requested window reaches further back.
2683
+ * The maximum window is 365 days. Requesting a longer range returns a 422. This breakdown is computed from per-message activity retained for 30 days, so it reflects roughly the last 30 days of activity even when the requested window reaches further back.
2601
2684
  *
2602
2685
  */
2603
2686
  const getEmailStatsByBroadcast = (options) => (options?.client ?? client).get({
@@ -2635,12 +2718,12 @@ const listDomains = (options) => (options?.client ?? client).get({
2635
2718
  *
2636
2719
  * Registers a new sending domain and returns the DNS records to publish
2637
2720
  * for it. The DKIM TXT record proves ownership, and together with the
2638
- * return-path CNAME (which also covers SPF; no separate SPF record is
2721
+ * return-path CNAME (which also covers SPF, so no separate SPF record is
2639
2722
  * needed) and a DMARC policy it gates sending. The tracking CNAME is
2640
2723
  * optional and gates branded link tracking only. Publish the records at
2641
2724
  * your DNS provider, then check progress with
2642
- * [Trigger domain verification](/docs/api/reference/verify-domain); Bird
2643
- * also re-checks published records automatically. Setup walkthrough:
2725
+ * [Trigger domain verification](/docs/api/reference/verify-domain). Published
2726
+ * records are also re-checked for you automatically. Setup walkthrough:
2644
2727
  * [Sending domains](/docs/guides/email/sending-domains).
2645
2728
  *
2646
2729
  * The domain starts in `pending` status. A domain already registered in
@@ -2686,7 +2769,7 @@ const deleteDomain = (options) => (options.client ?? client).delete({
2686
2769
  /**
2687
2770
  * Get a sending domain
2688
2771
  *
2689
- * Returns the domain with its capability statuses and every DNS record's current verification state. This read reports the stored result of the last check; to run a fresh DNS check, use [Trigger domain verification](/docs/api/reference/verify-domain).
2772
+ * Returns the domain with its capability statuses and every DNS record's current verification state. This read reports the stored result of the last check. To run a fresh DNS check, use [Trigger domain verification](/docs/api/reference/verify-domain).
2690
2773
  *
2691
2774
  */
2692
2775
  const getDomain = (options) => (options.client ?? client).get({
@@ -2709,12 +2792,12 @@ const getDomain = (options) => (options.client ?? client).get({
2709
2792
  * `dkim` on a verified capability are staged: the current configuration
2710
2793
  * keeps serving until the new one's DNS records verify, then the change
2711
2794
  * is promoted automatically. Staged values are visible under
2712
- * `capabilities.*.pending`; the records to publish appear in
2795
+ * `capabilities.*.pending`. The records to publish appear in
2713
2796
  * `dns_records` with `state: pending`.
2714
2797
  *
2715
- * Invalid combinations are rejected: enabling tracking toggles without a
2798
+ * Invalid combinations are rejected. Enabling tracking toggles without a
2716
2799
  * tracking domain, or removing the tracking domain while a toggle is on,
2717
- * returns `409`; enabling inbound receiving has verification
2800
+ * returns `409`. Enabling inbound receiving has verification
2718
2801
  * prerequisites that return `422`. Each rule is detailed on its field.
2719
2802
  *
2720
2803
  */
@@ -2740,9 +2823,9 @@ const updateDomain = (options) => (options.client ?? client).patch({
2740
2823
  * Runs a fresh DNS check across the domain's records (DKIM, return path,
2741
2824
  * DMARC, tracking, inbound MX, and any staged changes) and returns the
2742
2825
  * updated domain. Use it for an immediate result after publishing or
2743
- * correcting records; [Get a sending domain](/docs/api/reference/get-domain)
2744
- * only reports the last stored result, and Bird re-checks published
2745
- * records automatically in the background.
2826
+ * correcting records. [Get a sending domain](/docs/api/reference/get-domain)
2827
+ * only reports the last stored result. Published records are also re-checked
2828
+ * for you automatically in the background.
2746
2829
  *
2747
2830
  * A `200` with records still `pending` is not a failure: the records were
2748
2831
  * not found yet, which is normal while DNS propagates (minutes to hours).
@@ -2783,7 +2866,7 @@ const listMailboxes = (options) => (options?.client ?? client).get({
2783
2866
  /**
2784
2867
  * Create a mailbox
2785
2868
  *
2786
- * Creates a mailbox. The address is `local_part@domain`. The domain defaults to `inbox.ai`, Bird's shared mailbox domain, where creating the mailbox claims the address for your organization first come, first served, and reserved to your organization even after the mailbox is deleted. You may instead name one of your own domains that is enabled for receiving email. An omitted local part is generated. On a custom domain, addresses of deleted mailboxes are quarantined: the same workspace can rebind one 30 days after deletion, other workspaces never can.
2869
+ * Creates a mailbox. The address is `local_part@domain`. The domain defaults to `inbox.ai`, our shared mailbox domain, where creating the mailbox claims the address for your organization. It is first come, first served, and reserved to your organization even after the mailbox is deleted. You may instead name one of your own domains that is enabled for receiving email. An omitted local part is generated. On a custom domain, addresses of deleted mailboxes are quarantined. The same workspace can rebind one 30 days after deletion, but other workspaces never can.
2787
2870
  *
2788
2871
  */
2789
2872
  const createMailbox = (options) => (options.client ?? client).post({
@@ -2805,7 +2888,7 @@ const createMailbox = (options) => (options.client ?? client).post({
2805
2888
  /**
2806
2889
  * Delete a mailbox
2807
2890
  *
2808
- * Deletes a mailbox. The address stops receiving mail immediately and enters quarantine: the same workspace can bind it to a new mailbox after 30 days, other workspaces never can. The mailbox and its remembered messages are kept for a 30-day restore window restore it with `POST /email/mailboxes/{mailbox_id}/restore` and are permanently deleted once the window closes.
2891
+ * Deletes a mailbox. The address stops receiving mail immediately and enters quarantine. The same workspace can bind it to a new mailbox after 30 days, but other workspaces never can. The mailbox and its remembered messages are kept for 30 days, so you can bring it back with `POST /email/mailboxes/{mailbox_id}/restore`. Once those 30 days are up they are deleted for good.
2809
2892
  *
2810
2893
  */
2811
2894
  const deleteMailbox = (options) => (options.client ?? client).delete({
@@ -2823,7 +2906,7 @@ const deleteMailbox = (options) => (options.client ?? client).delete({
2823
2906
  /**
2824
2907
  * Get a mailbox
2825
2908
  *
2826
- * Returns a single mailbox by ID. A mailbox deleted within its 30-day restore window is still returned, with a non-null `deleted_at`; once the window closes it is permanently removed and returns 404.
2909
+ * Returns a single mailbox by ID. A mailbox deleted within its 30-day restore window is still returned, with a non-null `deleted_at`. Once the window closes it is permanently removed and returns 404.
2827
2910
  *
2828
2911
  */
2829
2912
  const getMailbox = (options) => (options.client ?? client).get({
@@ -2841,7 +2924,7 @@ const getMailbox = (options) => (options.client ?? client).get({
2841
2924
  /**
2842
2925
  * Update a mailbox
2843
2926
  *
2844
- * Updates a mailbox. The address and domain are immutable. Lowering the retention tier deletes remembered messages older than the new horizon pass `confirm=true` to acknowledge.
2927
+ * Updates a mailbox. The address and domain are immutable. Lowering the retention tier deletes any remembered message older than the new cutoff, so that request needs `confirm=true` before it will run.
2845
2928
  *
2846
2929
  */
2847
2930
  const updateMailbox = (options) => (options.client ?? client).patch({
@@ -2881,8 +2964,10 @@ const restoreMailbox = (options) => (options.client ?? client).post({
2881
2964
  /**
2882
2965
  * Mailbox email statistics
2883
2966
  *
2884
- * Returns the mailbox's sent and received email statistics over a time window: a period-wide summary plus a bucketed series. Sent-mail metrics carry the same delivery, engagement, and latency breakdowns as the email stats endpoints; `received` counts mail that arrived at the mailbox.
2885
- * Rows are bucketed by event time, not send time — engagement received during the period for messages sent earlier is included. Statistics start when the mailbox starts sending and receiving; the mailbox's all-time `message_count` and `thread_count` live on the mailbox resource itself.
2967
+ * Returns the mailbox's sent and received email statistics over a time window: a period-wide summary plus a bucketed series. Sent-mail metrics have the same delivery, engagement, and latency breakdowns as the email stats endpoints. `received` counts mail that arrived at the mailbox.
2968
+ *
2969
+ * Rows are bucketed by the time the event happened rather than the time the message was sent, so engagement that arrived during the period for a message sent earlier is counted here. Statistics start when the mailbox starts sending and receiving; the mailbox's all-time `message_count` and `thread_count` live on the mailbox resource itself.
2970
+ *
2886
2971
  * `from` and `to` accept either calendar days (YYYY-MM-DD, `day` granularity only) or RFC 3339 instants (`hour` granularity only). Both bounds must use the same form. Window caps depend on `granularity`: 365 days at `day`, 30 days at `hour`. Set `timezone` to report in a local zone instead of UTC.
2887
2972
  *
2888
2973
  */
@@ -2901,7 +2986,7 @@ const getMailboxStats = (options) => (options.client ?? client).get({
2901
2986
  /**
2902
2987
  * Resume a suspended mailbox
2903
2988
  *
2904
- * Reactivates a mailbox that was suspended because the organization dropped below the plan needed to keep it active. The mailbox can send and receive again and its threads and messages become visible. Activation is refused when the organization has no room for another active mailbox, or for another custom inbox.ai handle, on its current plan free up a slot by deleting an active mailbox, or upgrade the plan. Activating a mailbox that is not suspended returns a conflict.
2989
+ * Resumes a mailbox that was suspended because the organization dropped below the plan needed to keep it active. The mailbox can send and receive again and its conversations and messages become visible. Resuming is refused when the organization has no room for another active mailbox, or for another custom inbox.ai handle, on its current plan. Free up a slot by deleting an active mailbox, or move to a bigger plan. Resuming a mailbox that is not suspended returns a conflict.
2905
2990
  *
2906
2991
  */
2907
2992
  const resumeMailbox = (options) => (options.client ?? client).post({
@@ -2937,7 +3022,7 @@ const listMailboxReceiveRules = (options) => (options.client ?? client).get({
2937
3022
  /**
2938
3023
  * Add a receive rule
2939
3024
  *
2940
- * Adds an allow or block rule to the mailbox. Rules match the message's envelope sender; domain entries also match subdomains. Block rules always win over allow rules and over the reply admission on allowlist mailboxes. An entry is either allow or block. Rules have no update operation, so a rule that needs the other action is a new rule and the old one is removed. A mailbox holds up to 200 rules.
3025
+ * Adds an allow or block rule to the mailbox. Rules match the message's envelope sender. Domain entries also match subdomains. Block rules always win, both over allow rules and over the reply admission on allowlist mailboxes. An entry is either allow or block. Rules have no update operation, so a rule that needs the other action is a new rule and the old one is removed. A mailbox holds up to 200 rules.
2941
3026
  *
2942
3027
  */
2943
3028
  const createMailboxReceiveRule = (options) => (options.client ?? client).post({
@@ -2977,7 +3062,13 @@ const deleteMailboxReceiveRule = (options) => (options.client ?? client).delete(
2977
3062
  /**
2978
3063
  * List threads
2979
3064
  *
2980
- * Returns a paginated list of conversations across the workspace's mailboxes, most recently active first. `label` selects the view: the inbox (the default when omitted), `archive`, `spam`, `blocked`, or any custom label. Filter by mailbox, linked contact, or last-activity time, or pass `q` to full-text search conversations by their messages' subject and text. Conversations whose every message has been trashed are omitted; restoring a message returns its conversation to the list. `before` and `after` filter by time; to page through results pass the response cursors back as `starting_after` or `ending_before`.
3065
+ * Returns a paginated list of conversations across the workspace's mailboxes, most recently active first. `label` selects the view: the inbox (the default when omitted), `archive`, `spam`, `blocked`, or any custom label. You can also filter by mailbox, by linked contact, by participant address, or by a subject substring.
3066
+ *
3067
+ * To search conversations by their messages' subject and text instead of listing them, use `GET /v1/email/threads/search`.
3068
+ *
3069
+ * Conversations whose every message has been trashed are left out of the list, and restoring a message brings the conversation back.
3070
+ *
3071
+ * `before` and `after` filter by time. To page through the results, pass the response cursors back as `starting_after` or `ending_before`.
2981
3072
  *
2982
3073
  */
2983
3074
  const listEmailThreads = (options) => (options?.client ?? client).get({
@@ -3013,7 +3104,7 @@ const deleteEmailThread = (options) => (options.client ?? client).delete({
3013
3104
  /**
3014
3105
  * Get a thread
3015
3106
  *
3016
- * Returns a single conversation. Fetch the messages in the conversation with `GET /v1/email/threads/{thread_id}/messages`. A thread whose retention period has ended returns `410 Gone`.
3107
+ * Returns a single conversation. Fetch the messages in the conversation with `GET /v1/email/threads/{thread_id}/messages`. A thread whose retention tier has ended returns `410 Gone`.
3017
3108
  *
3018
3109
  */
3019
3110
  const getEmailThread = (options) => (options.client ?? client).get({
@@ -3031,7 +3122,7 @@ const getEmailThread = (options) => (options.client ?? client).get({
3031
3122
  /**
3032
3123
  * Update a thread
3033
3124
  *
3034
- * Applies label changes to a conversation and links or unlinks a contact. System labels move the conversation: adding `spam` files it (and its received messages) as spam, adding `archive` files it away without deleting it, and adding `inbox` or removing `spam`, `blocked`, or `archive` returns it to the inbox; unread counts recompute to match. An archived conversation returns to the inbox by itself when a new message arrives. To block a sender going forward, add a receive rule instead. Omitted fields are left unchanged.
3125
+ * Applies label changes to a conversation, and links or unlinks a contact. Adding `spam` files the conversation, and its received messages, as spam. Adding `archive` files it away without deleting it. Adding `inbox`, or removing `spam`, `blocked`, or `archive`, returns it to the inbox, and its unread count recomputes to match. An archived conversation returns to the inbox by itself when a new message arrives. To block a sender going forward, add a receive rule instead. Any field you leave out stays unchanged.
3035
3126
  *
3036
3127
  */
3037
3128
  const updateEmailThread = (options) => (options.client ?? client).patch({
@@ -3053,7 +3144,11 @@ const updateEmailThread = (options) => (options.client ?? client).patch({
3053
3144
  /**
3054
3145
  * List messages in a thread
3055
3146
  *
3056
- * Returns the messages in a conversation newest first, both received and sent; page older messages with `starting_after` (fixed sort — render conversation order by reversing the page). By default every message that is not in the trash is returned, whichever folder the conversation is in; pass `label` to narrow the view instead `trash` for trashed messages, or any custom label. Pass `include=extracted_text` to inline each message's extracted plain text. A thread whose retention period has ended returns `410 Gone`.
3147
+ * Returns the messages in a conversation, newest first, both received and sent. To page through older messages, use `starting_after`. The sort order is fixed, so to render the messages in conversation order, reverse the page yourself.
3148
+ *
3149
+ * By default, every message that is not in the trash is returned, whichever folder the conversation is in. Pass `label` to narrow the view instead: use `trash` for trashed messages, or any custom label.
3150
+ *
3151
+ * Pass `include=extracted_text` to inline each message's extracted plain text. A thread whose retention tier has ended returns `410 Gone`.
3057
3152
  *
3058
3153
  */
3059
3154
  const listEmailThreadMessages = (options) => (options.client ?? client).get({
@@ -3071,7 +3166,7 @@ const listEmailThreadMessages = (options) => (options.client ?? client).get({
3071
3166
  /**
3072
3167
  * Get a message in a thread
3073
3168
  *
3074
- * Returns a single message in a conversation, including its extracted plain text. Metadata and extracted text remain readable for the mailbox's retention period; a message that has passed it returns `410 Gone`. A message that exists but does not belong to this thread returns `404`.
3169
+ * Returns a single message in a conversation, including its extracted plain text. Metadata and extracted text stay readable for the mailbox's retention tier. A message that has aged past its retention tier returns `410 Gone`. A message that exists but does not belong to this thread returns `404`.
3075
3170
  *
3076
3171
  */
3077
3172
  const getEmailThreadMessage = (options) => (options.client ?? client).get({
@@ -3089,7 +3184,7 @@ const getEmailThreadMessage = (options) => (options.client ?? client).get({
3089
3184
  /**
3090
3185
  * Get a thread message's original body
3091
3186
  *
3092
- * Returns the original rendered HTML and plain-text body of a message in a conversation. The original body is available for 30 days after the message occurred; after that this endpoint returns `410 Gone` while the message's extracted text remains readable on the message itself.
3187
+ * Returns the original rendered HTML and plain-text body of a message in a conversation. The original body is available for 30 days after the message occurred. After that, this endpoint returns `410 Gone`, but the message's extracted text stays readable on the message itself.
3093
3188
  *
3094
3189
  */
3095
3190
  const getEmailThreadMessageBody = (options) => (options.client ?? client).get({
@@ -3107,7 +3202,7 @@ const getEmailThreadMessageBody = (options) => (options.client ?? client).get({
3107
3202
  /**
3108
3203
  * List a thread message's attachments
3109
3204
  *
3110
- * Returns the attachments on a message in a conversation. Attachment bytes are downloadable for 30 days after the message occurred; after that this endpoint returns `410 Gone` while the attachment metadata remains readable on the message's `attachment_manifest`.
3205
+ * Returns the attachments on a message in a conversation. Attachment bytes are downloadable for 30 days after the message occurred. After that, this endpoint returns `410 Gone`, but the attachment metadata stays readable on the message's `attachment_manifest`.
3111
3206
  *
3112
3207
  */
3113
3208
  const listEmailThreadMessageAttachments = (options) => (options.client ?? client).get({
@@ -3125,7 +3220,7 @@ const listEmailThreadMessageAttachments = (options) => (options.client ?? client
3125
3220
  /**
3126
3221
  * Reply to a thread message
3127
3222
  *
3128
- * Sends a reply to a specific message in a conversation, from the mailbox's own address. Recipients are derived from the message being replied to its Reply-To address when present, otherwise its From address; set `reply_all` to also include the original To and Cc recipients. The subject and the threading headers that keep the reply in this conversation are set automatically, and the reply is recorded in the conversation. To reply to a conversation as a whole, target its newest received message.
3223
+ * Sends a reply to a specific message in a conversation, from the mailbox's own address. Recipients are derived from the message being replied to: its Reply-To address when present, otherwise its From address. Set `reply_all` to also include the original To and Cc recipients. The subject and the threading headers that keep the reply in this conversation are set automatically, and the reply is recorded in the conversation. To reply to a conversation as a whole, target its newest received message.
3129
3224
  *
3130
3225
  */
3131
3226
  const replyEmailThreadMessage = (options) => (options.client ?? client).post({
@@ -3147,7 +3242,7 @@ const replyEmailThreadMessage = (options) => (options.client ?? client).post({
3147
3242
  /**
3148
3243
  * Send a message from a mailbox
3149
3244
  *
3150
- * Sends a new message from the mailbox's own address and starts a new conversation with it. The request mirrors the plain send request minus `from` the mailbox is the sender identity and Bird mints the RFC 5322 Message-ID, so later replies from the recipients thread back into the conversation automatically. The send is recorded in the mailbox's durable memory and returned as the conversation's first message. Scheduled sends are not accepted on the mailbox surface. A suspended mailbox cannot send and returns `403`.
3245
+ * Sends a new message from the mailbox's own address and starts a new conversation with it. The request mirrors the plain send request minus `from`, because the mailbox is who the message comes from. We set the RFC 5322 Message-ID, so later replies from the recipients thread back into the conversation automatically. The send is added to the mailbox's remembered messages and returned as the conversation's first message. A mailbox always sends immediately, so this endpoint does not accept a scheduled send. A suspended mailbox cannot send and returns `403`.
3151
3246
  *
3152
3247
  */
3153
3248
  const createMailboxMessage = (options) => (options.client ?? client).post({
@@ -3169,7 +3264,18 @@ const createMailboxMessage = (options) => (options.client ?? client).post({
3169
3264
  /**
3170
3265
  * List a mailbox's labels
3171
3266
  *
3172
- * Returns the labels available in a mailbox: the built-in system labels — the placements `inbox`, `archive`, `spam`, `blocked`, and `sent`, plus `trash` and `unread` — followed by every custom label currently in use on its conversations and messages. Apply and remove labels through the conversation and message update endpoints; custom labels exist by being applied, so this list is discovery, not management.
3267
+ * Returns the labels available in a mailbox. First, the built-in system
3268
+ * labels:
3269
+ *
3270
+ * - The placements `inbox`, `archive`, `spam`, `blocked`, and `sent`.
3271
+ * - `trash`.
3272
+ * - `unread`.
3273
+ *
3274
+ * Then, every custom label currently in use on its conversations and
3275
+ * messages. You apply and remove labels through the conversation and
3276
+ * message update endpoints, and that is also what creates or removes a
3277
+ * custom label: it exists for as long as at least one message or
3278
+ * conversation has it applied.
3173
3279
  *
3174
3280
  */
3175
3281
  const listMailboxLabels = (options) => (options.client ?? client).get({
@@ -3273,7 +3379,7 @@ function mergeHeaders(idempotencyKey, extra) {
3273
3379
  //#region src/resources/email.gen.ts
3274
3380
  var EmailResourceBase = class extends Resource {
3275
3381
  /**
3276
- * Fetch one email message by id, with aggregate delivery status and per-state recipient counts. The message body (html, text) is not returned. Per-recipient delivery statuses and the event log are separate sub-resources: GET /v1/email/messages/{message_id}/recipients and GET /v1/email/messages/{message_id}/events.
3382
+ * Fetch one email message by `id`, with aggregate delivery status and per-state recipient counts. The message body (`html`, `text`) is not returned. Per-recipient delivery statuses and the event log are separate sub-resources: `GET /v1/email/messages/{message_id}/recipients` and `GET /v1/email/messages/{message_id}/events`.
3277
3383
  *
3278
3384
  * @example
3279
3385
  * const msg = await bird.email.get("em_abc123");
@@ -3290,7 +3396,7 @@ var EmailResourceBase = class extends Resource {
3290
3396
  }));
3291
3397
  }
3292
3398
  /**
3293
- * List sent email messages, newest first, as a cursor page ({data, next_cursor, …}). Pass next_cursor back as starting_after to fetch the next page. Filter by creation time with the half-open range created_after (inclusive) / created_before (exclusive). For a single UTC day, created_after is that day at 00:00:00Z and created_before is the next day at 00:00:00Z.
3399
+ * List sent email messages, newest first, as a cursor page (`{data, next_cursor, …}`). Pass `next_cursor` back as `starting_after` to fetch the next page. Filter by creation time with the half-open range `created_after` (inclusive) and `created_before` (exclusive). For a single UTC day, `created_after` is that day at 00:00:00Z and `created_before` is the next day at 00:00:00Z.
3294
3400
  *
3295
3401
  * @example
3296
3402
  * for await (const message of bird.email.list({ status: "bounced" })) {
@@ -3309,7 +3415,7 @@ var EmailResourceBase = class extends Resource {
3309
3415
  }));
3310
3416
  }
3311
3417
  /**
3312
- * Cancel a scheduled email before it sends. Only works while the message is still scheduled (status `scheduled`); once it starts sending, or was already canceled, the call returns a conflict error. Canceling does not return consumed scheduled-send quota.
3418
+ * Cancel a scheduled email before it sends. Only works while the message's `status` is still `scheduled`. Once it starts sending, or was already canceled, the call returns a conflict error. Canceling does not return consumed scheduled-send quota.
3313
3419
  *
3314
3420
  * @example
3315
3421
  * await bird.email.cancel("em_abc123");
@@ -3327,7 +3433,7 @@ var EmailResourceBase = class extends Resource {
3327
3433
  //#region src/resources/emailStats.gen.ts
3328
3434
  var EmailStatsResource = class extends Resource {
3329
3435
  /**
3330
- * Aggregate email KPIs for one period: sends, delivered, bounces, complaints, opens, clicks, their rates, and latency percentiles. `from`/`to` are both YYYY-MM-DD days or both RFC 3339 instants (hour grain); add `compare=previous_period` for deltas versus the prior window. For a per-day or per-hour series use email_stats_daily or email_stats_hourly.
3436
+ * Aggregate email KPIs for one period: sends, delivered, bounces, complaints, opens, clicks, their rates, and latency percentiles. `from`/`to` are both YYYY-MM-DD days or both RFC 3339 instants (hour grain); add `compare=previous_period` for deltas versus the prior window. For a per-day or per-hour series use `email.stats.daily` or `email.stats.hourly`.
3331
3437
  *
3332
3438
  * @example Summary for a month
3333
3439
  * const s = await bird.email.stats.summary({ from: "2026-05-01", to: "2026-05-31" });
@@ -3342,7 +3448,7 @@ var EmailStatsResource = class extends Resource {
3342
3448
  }));
3343
3449
  }
3344
3450
  /**
3345
- * Per-day email stats series (counts, rates, latency percentiles), gap-filled with zero rows, max 365 days. At most one filter of `category`, `sending_domain`, `tag`, `sending_ip`, `recipient_domain`, `template`. For hour resolution use email_stats_hourly; for one aggregate row use email_stats_summary.
3451
+ * Per-day email stats series (counts, rates, latency percentiles), gap-filled with zero rows, max 365 days. At most one filter of `category`, `sending_domain`, `tag`, `sending_ip`, `recipient_domain`, `template`. For hour resolution use `email.stats.hourly`; for one aggregate row use `email.stats.summary`.
3346
3452
  *
3347
3453
  * @example
3348
3454
  * const series = await bird.email.stats.daily({ from: "2026-05-01", to: "2026-05-31" });
@@ -3357,7 +3463,7 @@ var EmailStatsResource = class extends Resource {
3357
3463
  }));
3358
3464
  }
3359
3465
  /**
3360
- * Per-hour email stats series, gap-filled with zero rows, max 720 hours (30 days). Takes the same single-dimension filters as email_stats_daily; for longer ranges use email_stats_daily, for one aggregate row use email_stats_summary.
3466
+ * Per-hour email stats series, gap-filled with zero rows, max 720 hours (30 days). Takes the same single-dimension filters as `email.stats.daily`; for longer ranges use `email.stats.daily`, for one aggregate row use `email.stats.summary`.
3361
3467
  *
3362
3468
  * @example
3363
3469
  * const series = await bird.email.stats.hourly({ from: "2026-05-01", to: "2026-05-02" });
@@ -3372,7 +3478,7 @@ var EmailStatsResource = class extends Resource {
3372
3478
  }));
3373
3479
  }
3374
3480
  /**
3375
- * Email delivery and engagement stats grouped by tag, one row per `name:value` pair set at send time; ranked by `sort` (default `processed`). `include_trend=true` adds a per-bucket rate series to each row.
3481
+ * Email delivery and engagement stats grouped by tag, one row per `name:value` pair set at send time. Rows are ranked by `sort`, `processed` by default. Set `include_trend=true` to add a per-bucket rate series to each row.
3376
3482
  *
3377
3483
  * @example Top 10 tags by delivered
3378
3484
  * const { data } = await bird.email.stats.byTag({
@@ -3392,7 +3498,7 @@ var EmailStatsResource = class extends Resource {
3392
3498
  }));
3393
3499
  }
3394
3500
  /**
3395
- * Email delivery and engagement stats grouped by category (`transactional` versus `marketing`), ranked by `sort` (default `processed`). `include_trend=true` adds a per-bucket rate series to each row.
3501
+ * Email delivery and engagement stats grouped by category, meaning `transactional` compared with `marketing`. Rows are ranked by `sort`, `processed` by default. Set `include_trend=true` to add a per-bucket rate series to each row.
3396
3502
  *
3397
3503
  * @example
3398
3504
  * const { data } = await bird.email.stats.byCategory({ from: "2026-05-01", to: "2026-05-31" });
@@ -3407,7 +3513,7 @@ var EmailStatsResource = class extends Resource {
3407
3513
  }));
3408
3514
  }
3409
3515
  /**
3410
- * Delivery and bounce stats grouped by sending IP; `sort=bounces.block` surfaces reputation-damaged IPs first. No engagement, complaint, or accepted/processed counts per IP; use email_stats_daily for workspace-wide figures.
3516
+ * Delivery and bounce stats grouped by sending IP, with deferral counts alongside them. `sort=bounces.block` surfaces reputation-damaged IPs first. Engagement, accepted, and processed counts aren't available per IP, and complaint and out-of-band bounce counts always read 0 here. For workspace-wide figures, use `email.stats.daily`.
3411
3517
  *
3412
3518
  * @example
3413
3519
  * const { data } = await bird.email.stats.bySendingIp({
@@ -3427,7 +3533,7 @@ var EmailStatsResource = class extends Resource {
3427
3533
  }));
3428
3534
  }
3429
3535
  /**
3430
- * Email delivery and engagement stats grouped by sending (`From`) domain; compare deliverability across the workspace's verified domains. For per-IP reputation use email_stats_by_sending_ip.
3536
+ * Email delivery and engagement stats grouped by sending (`From`) domain, so you can compare deliverability across your workspace's verified domains. For per-IP reputation instead, use `email.stats.by_sending_ip`.
3431
3537
  *
3432
3538
  * @example
3433
3539
  * const { data } = await bird.email.stats.bySendingDomain({
@@ -3447,7 +3553,7 @@ var EmailStatsResource = class extends Resource {
3447
3553
  }));
3448
3554
  }
3449
3555
  /**
3450
- * Email delivery and engagement stats grouped by exact recipient mailbox domain (for example `gmail.com`). Finer-grained than email_stats_by_mailbox_provider, which buckets domains into providers.
3556
+ * Email delivery and engagement stats grouped by exact recipient mailbox domain, for example `gmail.com`. Finer-grained than `email.stats.by_mailbox_provider`, which buckets domains into providers.
3451
3557
  *
3452
3558
  * @example
3453
3559
  * const { data } = await bird.email.stats.byRecipientDomain({
@@ -3467,7 +3573,7 @@ var EmailStatsResource = class extends Resource {
3467
3573
  }));
3468
3574
  }
3469
3575
  /**
3470
- * Email delivery and engagement stats grouped by recipient mailbox provider (`gmail`, `microsoft`, `yahoo`, ...); covers the delivery stage onward, no accepted/processed counts. For a per-region split use email_stats_by_mailbox_provider_region; for exact destination domains use email_stats_by_recipient_domain.
3576
+ * Email delivery and engagement stats grouped by recipient mailbox provider, for example `gmail`, `microsoft`, or `yahoo`. It covers the delivery stage onward, so there are no accepted or processed counts. For a per-region split within a provider, use `email.stats.by_mailbox_provider_region`; for exact destination domains instead, use `email.stats.by_recipient_domain`.
3471
3577
  *
3472
3578
  * @example
3473
3579
  * const { data } = await bird.email.stats.byMailboxProvider({
@@ -3486,7 +3592,7 @@ var EmailStatsResource = class extends Resource {
3486
3592
  }));
3487
3593
  }
3488
3594
  /**
3489
- * Email delivery and engagement stats grouped by mailbox provider and provider region pair (for example `gmail` in `NA`); covers the delivery stage onward, no accepted/processed counts. For the provider-level view use email_stats_by_mailbox_provider.
3595
+ * Email delivery and engagement stats grouped by a mailbox provider and provider region pair, for example `gmail` in `NA`. It covers the delivery stage onward, so there are no accepted or processed counts. For the provider-level view without the region split, use `email.stats.by_mailbox_provider`.
3490
3596
  *
3491
3597
  * @example
3492
3598
  * const { data } = await bird.email.stats.byMailboxProviderRegion({
@@ -3505,7 +3611,7 @@ var EmailStatsResource = class extends Resource {
3505
3611
  }));
3506
3612
  }
3507
3613
  /**
3508
- * Email delivery and engagement stats grouped by the template used at send time, keyed by template id (`emt_…`); only templated sends appear. A single template's trend over time comes from email_stats_daily with its `template` filter.
3614
+ * Email delivery and engagement stats grouped by the template used at send time, keyed by template id (`emt_…`); only templated sends appear. A single template's trend over time comes from `email.stats.daily` with its `template` filter.
3509
3615
  *
3510
3616
  * @example
3511
3617
  * const { data } = await bird.email.stats.byTemplate({
@@ -3525,7 +3631,7 @@ var EmailStatsResource = class extends Resource {
3525
3631
  }));
3526
3632
  }
3527
3633
  /**
3528
- * Opens and clicks grouped by country, region, or city (`group_by`); engagement counts only, no delivery counts or rates. For engagement by mail client or device use email_stats_by_client.
3634
+ * Opens and clicks grouped by country, region, or city, whichever you choose with `group_by`. It only has engagement counts, no delivery counts or rates. For engagement grouped by mail client or device instead, use `email.stats.by_client`.
3529
3635
  *
3530
3636
  * @example
3531
3637
  * const { data } = await bird.email.stats.byLocation({
@@ -3544,7 +3650,7 @@ var EmailStatsResource = class extends Resource {
3544
3650
  }));
3545
3651
  }
3546
3652
  /**
3547
- * Opens and clicks grouped by mail client, OS, or device type (`group_by`); engagement counts only, no delivery counts or rates. For engagement by geography use email_stats_by_location.
3653
+ * Opens and clicks grouped by mail client, operating system, or device type, whichever you choose with `group_by`. It only has engagement counts, no delivery counts or rates. For engagement grouped by geography instead, use `email.stats.by_location`.
3548
3654
  *
3549
3655
  * @example
3550
3656
  * const { data } = await bird.email.stats.byClient({
@@ -3563,7 +3669,7 @@ var EmailStatsResource = class extends Resource {
3563
3669
  }));
3564
3670
  }
3565
3671
  /**
3566
- * Bounce counts grouped by the SMTP error code the receiving server returned, with the hard/soft/admin/block/undetermined split; failure side only. It shows what is driving bounces, while bounces by destination come from email_stats_by_recipient_domain or email_stats_by_mailbox_provider.
3672
+ * Bounce counts grouped by the SMTP error code the receiving mail server returned. Each row also breaks the bounce down into its hard, soft, admin, block, and undetermined split. There are no delivered, open, or click counts here, because a bounce code only appears on a bounce event. For bounces broken down by destination instead, use `email.stats.by_recipient_domain` or `email.stats.by_mailbox_provider`.
3567
3673
  *
3568
3674
  * @example
3569
3675
  * const { data } = await bird.email.stats.byBounceCode({
@@ -3583,7 +3689,7 @@ var EmailStatsResource = class extends Resource {
3583
3689
  }));
3584
3690
  }
3585
3691
  /**
3586
- * Spam-complaint counts grouped by the feedback-loop complaint type (for example `abuse`, `fraud`, `virus`); complaint side only. For complaints by destination use email_stats_by_mailbox_provider or email_stats_by_recipient_domain.
3692
+ * Spam-complaint counts grouped by the feedback-loop complaint type, for example `abuse`, `fraud`, or `virus`. Complaint side only, so there are no delivery or engagement counts. For complaints broken down by destination instead, use `email.stats.by_mailbox_provider` or `email.stats.by_recipient_domain`.
3587
3693
  *
3588
3694
  * @example
3589
3695
  * const { data } = await bird.email.stats.byComplaintType({ from: "2026-05-01", to: "2026-05-31" });
@@ -3598,7 +3704,7 @@ var EmailStatsResource = class extends Resource {
3598
3704
  }));
3599
3705
  }
3600
3706
  /**
3601
- * Email delivery and engagement stats grouped by broadcast; only broadcast sends appear. Reflects roughly the last 30 days of activity.
3707
+ * Email delivery and engagement stats grouped by broadcast. Only broadcast sends appear. Reflects roughly the last 30 days of activity.
3602
3708
  *
3603
3709
  * @example
3604
3710
  * const { data } = await bird.email.stats.byBroadcast({
@@ -3641,7 +3747,7 @@ var EmailMailboxesResourceBase = class extends Resource {
3641
3747
  }));
3642
3748
  }
3643
3749
  /**
3644
- * Create a mailbox: a durable agent identity that owns an email address, groups mail into threads, and remembers conversations for its retention tier.
3750
+ * Create a mailbox: a durable agent identity that owns an email address, groups mail into conversations, and remembers conversations for its retention tier.
3645
3751
  *
3646
3752
  * @example Create a mailbox
3647
3753
  * const mailbox = await bird.email.mailboxes.create({ display_name: "Support" });
@@ -3656,7 +3762,7 @@ var EmailMailboxesResourceBase = class extends Resource {
3656
3762
  }));
3657
3763
  }
3658
3764
  /**
3659
- * Read one mailbox by id. A mailbox deleted within its 30-day restore window is still returned, carrying a non-null `deleted_at`; once that window closes it is gone and this returns 404.
3765
+ * Read one mailbox by ID. A mailbox deleted within its 30-day restore window is still returned, with a non-null `deleted_at`. Once that window closes it is gone and this returns 404.
3660
3766
  *
3661
3767
  * @example Get a mailbox
3662
3768
  * const mailbox = await bird.email.mailboxes.get("mbx_01abc");
@@ -3671,7 +3777,7 @@ var EmailMailboxesResourceBase = class extends Resource {
3671
3777
  }));
3672
3778
  }
3673
3779
  /**
3674
- * Update a mailbox's display name, reply-to, receive policy, retention tier, IP pool, or metadata. Lowering the retention tier onto remembered messages older than the new horizon requires confirm=true.
3780
+ * Update a mailbox's display name, reply-to, receive policy, retention tier, IP pool, or metadata. Lowering the retention tier requires `confirm=true` when it would delete remembered messages older than the new cutoff.
3675
3781
  *
3676
3782
  * @example Change a mailbox's receive policy
3677
3783
  * const mailbox = await bird.email.mailboxes.update("mbx_01abc", {
@@ -3690,7 +3796,7 @@ var EmailMailboxesResourceBase = class extends Resource {
3690
3796
  }));
3691
3797
  }
3692
3798
  /**
3693
- * Delete a mailbox. The address stops receiving immediately and is quarantined; the mailbox and its remembered messages stay restorable for 30 days via the restore endpoint, then are permanently deleted.
3799
+ * Delete a mailbox. The address stops receiving immediately and is quarantined. The mailbox and its remembered messages stay restorable for 30 days through the restore endpoint, then are permanently deleted.
3694
3800
  *
3695
3801
  * @example Delete a mailbox
3696
3802
  * await bird.email.mailboxes.delete("mbx_01abc");
@@ -3704,7 +3810,7 @@ var EmailMailboxesResourceBase = class extends Resource {
3704
3810
  }));
3705
3811
  }
3706
3812
  /**
3707
- * Restore a mailbox deleted less than 30 days ago: the address starts receiving again and the remembered messages are back. Past the window the mailbox is permanently deleted and returns 404; a mailbox that is not deleted returns 409.
3813
+ * Restore a mailbox deleted less than 30 days ago: the address starts receiving again and the remembered messages are back. Past the window the mailbox is permanently deleted and returns 404. A mailbox that is not deleted returns 409.
3708
3814
  *
3709
3815
  * @example Restore a deleted mailbox
3710
3816
  * const mailbox = await bird.email.mailboxes.restore("mbx_01abc");
@@ -3719,7 +3825,7 @@ var EmailMailboxesResourceBase = class extends Resource {
3719
3825
  }));
3720
3826
  }
3721
3827
  /**
3722
- * Reactivate a suspended mailbox so it can send and receive again and its threads become visible. Fails if your plan does not have room for another active mailbox (or another custom inbox.ai handle); delete an active mailbox or upgrade first. A mailbox that is not suspended returns 409.
3828
+ * Resume a suspended mailbox so it can send and receive again and its conversations become visible. Fails if your plan does not have room for another active mailbox (or another custom inbox.ai handle). Delete an active mailbox or upgrade first. A mailbox that is not suspended returns 409.
3723
3829
  *
3724
3830
  * @example Resume a suspended mailbox
3725
3831
  * const mailbox = await bird.email.mailboxes.resume("mbx_01abc");
@@ -3812,7 +3918,7 @@ var EmailMailboxesReceiveRulesResource = class extends Resource {
3812
3918
  }));
3813
3919
  }
3814
3920
  /**
3815
- * Add an allow or block rule for a sender address or domain to a mailbox. Block always wins; up to 200 rules per mailbox.
3921
+ * Add an allow or block rule for a sender address or domain to a mailbox. Block always wins. Up to 200 rules per mailbox.
3816
3922
  *
3817
3923
  * @example Block a domain
3818
3924
  * const rule = await bird.email.mailboxes.receiveRules.create("mbx_01abc", {
@@ -3936,7 +4042,7 @@ var EmailThreadsResourceBase = class extends Resource {
3936
4042
  //#region src/resources/emailThreadsMessages.gen.ts
3937
4043
  var EmailThreadsMessagesResource = class extends Resource {
3938
4044
  /**
3939
- * List the messages in a conversation newest first, both directions. Page older messages with starting_after, and pass include=extracted_text to inline each message's durable plain text.
4045
+ * List the messages in a conversation newest first, both directions. Page older messages with starting_after, and pass include=extracted_text to inline each message's extracted plain text.
3940
4046
  *
3941
4047
  * @example List a thread's messages
3942
4048
  * for await (const msg of bird.email.threads.messages.list("thr_01abc")) {
@@ -3956,7 +4062,7 @@ var EmailThreadsMessagesResource = class extends Resource {
3956
4062
  }));
3957
4063
  }
3958
4064
  /**
3959
- * Get one conversation message with its extracted plain text, readable for the mailbox's full retention period without MIME parsing.
4065
+ * Get one conversation message with its extracted plain text, readable for the mailbox's full retention tier without MIME parsing.
3960
4066
  *
3961
4067
  * @example Get a message
3962
4068
  * const msg = await bird.email.threads.messages.get("thr_01abc", "rem_01xyz");
@@ -3974,7 +4080,7 @@ var EmailThreadsMessagesResource = class extends Resource {
3974
4080
  }));
3975
4081
  }
3976
4082
  /**
3977
- * Get the original rendered HTML and plain-text body of a conversation message. Available 30 days; after that use the message's extracted_text.
4083
+ * Get the original rendered HTML and plain-text body of a conversation message. Available for 30 days. After that, use the message's extracted_text.
3978
4084
  *
3979
4085
  * @example Get a message body
3980
4086
  * const body = await bird.email.threads.messages.body("thr_01abc", "rem_01xyz");
@@ -4013,7 +4119,7 @@ var EmailThreadsMessagesResource = class extends Resource {
4013
4119
  }));
4014
4120
  }
4015
4121
  /**
4016
- * List the attachments on a conversation message. Bytes are downloadable for 30 days; the metadata also rides the message's attachment_manifest durably.
4122
+ * List the attachments on a conversation message. Bytes are downloadable for 30 days, and the metadata stays readable afterward on the message's attachment_manifest.
4017
4123
  *
4018
4124
  * @example List a message's attachments
4019
4125
  * const atts = await bird.email.threads.messages.attachments("thr_01abc", "rem_01xyz");
@@ -4073,6 +4179,29 @@ var EmailResource = class extends EmailResourceBase {
4073
4179
  * });
4074
4180
  * console.log(msg.id, msg.status); // "em_…", "accepted"
4075
4181
  *
4182
+ * @example Send a published template instead of inline content
4183
+ * const msg = await bird.email.send({
4184
+ * from: { email: "onboarding@messagebird.dev", name: "Bird" },
4185
+ * to: ["delivered@messagebird.dev"],
4186
+ * category: "transactional",
4187
+ * template: {
4188
+ * slug: "welcome-email",
4189
+ * parameters: { first_name: "Jane" },
4190
+ * },
4191
+ * });
4192
+ * console.log(msg.id, msg.status);
4193
+ *
4194
+ * @example Sending to the sandbox bounce address, which hard-bounces every time
4195
+ * const msg = await bird.email.send({
4196
+ * from: { email: "onboarding@messagebird.dev", name: "Bird" },
4197
+ * to: ["bounce+signup-flow@messagebird.dev"],
4198
+ * subject: "Sandbox bounce test",
4199
+ * html: "<p>This message will hard-bounce.</p>",
4200
+ * tags: [{ name: "flow", value: "signup" }],
4201
+ * metadata: { test_run: "docs-capture-1" },
4202
+ * });
4203
+ * console.log(msg.id, msg.status); // "em_…", "accepted"
4204
+ *
4076
4205
  * @example A richer send — cc/bcc, reply-to, tags, metadata, click-tracking off, and an idempotency key (safe to retry; the server dedupes)
4077
4206
  * await bird.email.send(
4078
4207
  * {
@@ -4270,7 +4399,7 @@ var AudiencesResource = class extends Resource {
4270
4399
  }));
4271
4400
  }
4272
4401
  /**
4273
- * Add up to 1,000 existing contacts to a static audience by ID. Fails entirely if any contact ID does not exist.
4402
+ * Add up to 1,000 existing contacts to a static audience by ID. Fails entirely if any contact ID does not exist. To add contacts you have not created yet, use `contacts.batch` with `audience_ids` instead: it matches or creates each contact by email address and assigns it to the audience in one call.
4274
4403
  *
4275
4404
  * @example Add contacts to an audience
4276
4405
  * await bird.audiences.addContacts("adn_01krdgeqcxet5s7t44vh8rt9mg", {
@@ -4392,7 +4521,7 @@ var DomainsResource = class extends Resource {
4392
4521
  }));
4393
4522
  }
4394
4523
  /**
4395
- * Update a sending domain's tracking and inbound configuration. Tracking: click_tracking and open_tracking apply immediately to new sends, and the tracking domain can be set, changed, or removed (the name part only; Bird appends the sending domain). Enabling either toggle with no tracking domain configured returns 409, and removing the tracking domain while either toggle is still on also returns 409. Tracking-domain changes on a verified domain are staged behind DNS verification, so the current config keeps serving until the new records verify. Inbound receiving: inbound.enabled starts or stops receiving mail for the domain. Enabling requires the domain's DKIM to be verified first (a fresh enable on an unverified domain returns 422), and a domain already receiving inbound for another organization returns 422. The MX records to publish are always listed in dns_records regardless, so receiving starts only once inbound.enabled is set, even when those records are already published.
4524
+ * Update a sending domain's tracking and inbound configuration. Tracking: click_tracking and open_tracking apply immediately to new sends, and the tracking domain can be set, changed, or removed (the name part only, and the sending domain is appended for you). Enabling either toggle with no tracking domain configured returns 409, and removing the tracking domain while either toggle is still on also returns 409. Tracking-domain changes on a verified domain are staged behind DNS verification, so the current config keeps serving until the new records verify. Inbound receiving: inbound.enabled starts or stops receiving mail for the domain. Enabling requires the domain's DKIM to be verified first (a fresh enable on an unverified domain returns 422), and a domain already receiving inbound for another organization returns 422. The MX records to publish are always listed in dns_records regardless, so receiving starts only once inbound.enabled is set, even when those records are already published.
4396
4525
  *
4397
4526
  * @example Enable tracking on a domain
4398
4527
  * await bird.domains.update("dom_01krdgeqcxet5s7t44vh8rt9mg", {
@@ -4526,7 +4655,7 @@ var ContactPropertiesResource = class extends Resource {
4526
4655
  //#region src/resources/contacts.gen.ts
4527
4656
  var ContactsResource = class extends Resource {
4528
4657
  /**
4529
- * List the workspace's contacts as a cursor page, newest first. Look one up by exact email, phone, or external_id, or search by email, name, or phone substring. Pass include_total for a total count.
4658
+ * List the workspace's contacts as a cursor page, newest first. Look one up by exact email, phone_number, or external_id, repeating phone_number to resolve up to 50 numbers in one call (raise limit to match), or search by email, name, or phone substring. Pass include_total for a total count.
4530
4659
  *
4531
4660
  * @example Iterate every contact, or take one page
4532
4661
  * for await (const contact of bird.contacts.list({ q: "acme.com" })) {
@@ -4546,7 +4675,7 @@ var ContactsResource = class extends Resource {
4546
4675
  }));
4547
4676
  }
4548
4677
  /**
4549
- * Get a single contact by ID (`con_`-prefixed). Look up an ID by exact email, phone, or external_id with `contacts.list`.
4678
+ * Get a single contact by ID (`con_`-prefixed). Look up an ID by exact email, phone_number, or external_id with `contacts.list`.
4550
4679
  *
4551
4680
  * @example Fetch a contact by id
4552
4681
  * const contact = await bird.contacts.get("con_01krdgeqcxet5s7t44vh8rt9mg");
@@ -4561,7 +4690,7 @@ var ContactsResource = class extends Resource {
4561
4690
  }));
4562
4691
  }
4563
4692
  /**
4564
- * Create a contact identified by an email address, an E.164 phone number, or both. Fails with a conflict if the email, phone, or external_id is already used by another contact. For bulk import or create-or-update semantics use `contacts.batch`.
4693
+ * Create a contact identified by an email address, an E.164 phone number, or both. Fails with a conflict if the email, phone_number, or external_id is already used by another contact. For bulk import or create-or-update semantics use `contacts.batch`.
4565
4694
  *
4566
4695
  * @example Create a contact
4567
4696
  * const contact = await bird.contacts.create({
@@ -4579,7 +4708,7 @@ var ContactsResource = class extends Resource {
4579
4708
  }));
4580
4709
  }
4581
4710
  /**
4582
- * Update a contact's name, external_id, email, phone, or custom data. Only supplied fields change; custom data keys are merged, with null removing a key. A contact keeps at least one identifier: clearing both email and phone is rejected.
4711
+ * Update a contact's name, external_id, email, phone_number, or custom data. Only supplied fields change; custom data keys are merged, with null removing a key. A contact keeps at least one identifier: clearing both email and phone_number is rejected.
4583
4712
  *
4584
4713
  * @example Change a contact's fields
4585
4714
  * const contact = await bird.contacts.update("con_01krdgeqcxet5s7t44vh8rt9mg", {
@@ -4611,7 +4740,7 @@ var ContactsResource = class extends Resource {
4611
4740
  }));
4612
4741
  }
4613
4742
  /**
4614
- * Create or update up to 1,000 contacts in one request, each entry matched automatically against every identifier it supplies (email, phone, external_id) or, with match_on, by that one field only, and optionally add them all to one or more audiences. Per-contact results are returned in submission order.
4743
+ * Create or update up to 1,000 contacts in one request, each entry matched automatically against every identifier it supplies (email, phone_number, external_id) or, with match_on, by that one field only, and optionally add them all to one or more audiences. Per-contact results are returned in submission order.
4615
4744
  *
4616
4745
  * @example Create or update many contacts at once, matched by the identifiers each entry carries
4617
4746
  * const result = await bird.contacts.batch({
@@ -4674,7 +4803,7 @@ var SmsResourceBase = class extends Resource {
4674
4803
  var SmsResource = class extends SmsResourceBase {
4675
4804
  /**
4676
4805
  * Send one SMS to a single recipient. Supply either `text` (with a `category`)
4677
- * or a stored `template` (by `id` or `name`, with its `parameters`). The
4806
+ * or a stored `template` (by `id` or `slug`, with its `parameters`). The
4678
4807
  * result is `accepted`, not yet delivered — read it back with `get` to confirm.
4679
4808
  *
4680
4809
  * @example Send free text
@@ -4689,7 +4818,7 @@ var SmsResource = class extends SmsResourceBase {
4689
4818
  * @example Send by template
4690
4819
  * await bird.sms.send({
4691
4820
  * to: "+14155550100",
4692
- * template: { name: "bird_otp_verification", parameters: { code: "123456" } },
4821
+ * template: { slug: "bird_otp_verification", parameters: { code: "123456" } },
4693
4822
  * });
4694
4823
  */
4695
4824
  send(params, options) {
@@ -4727,7 +4856,7 @@ var SmsTemplatesResource = class extends Resource {
4727
4856
  *
4728
4857
  * @example List the built-in templates
4729
4858
  * const { data } = await bird.smsTemplates.list({ scope: "system" });
4730
- * for (const tpl of data) console.log(tpl.id, tpl.name);
4859
+ * for (const tpl of data) console.log(tpl.id, tpl.slug);
4731
4860
  */
4732
4861
  list(query, options) {
4733
4862
  return this.call("GET", options, ({ signal, headers }) => listSmsTemplates({
@@ -4738,9 +4867,9 @@ var SmsTemplatesResource = class extends Resource {
4738
4867
  }));
4739
4868
  }
4740
4869
  /**
4741
- * Get one SMS template by its name or id, including its body and the variables it expects. Fetch it before sms_send to see which parameter keys a template send requires.
4870
+ * Get one SMS template by its slug or id, including its body and the variables it expects. Fetch it before sms_send to see which parameter keys a template send requires.
4742
4871
  *
4743
- * @example Read one template by name or id
4872
+ * @example Read one template by slug or id
4744
4873
  * const tpl = await bird.smsTemplates.get("bird_otp_verification");
4745
4874
  * console.log(tpl.body, tpl.variables);
4746
4875
  */
@@ -4821,9 +4950,7 @@ var WhatsappResource = class extends WhatsappResourceBase {
4821
4950
  * to: "+15551234567",
4822
4951
  * template: {
4823
4952
  * slug: "bird_otp",
4824
- * components: [
4825
- * { type: "body", parameters: [{ type: "text", text: "123456" }] },
4826
- * ],
4953
+ * components: [{ type: "body", parameters: [{ type: "text", text: "123456" }] }],
4827
4954
  * },
4828
4955
  * });
4829
4956
  * console.log(msg.id, msg.status);
@@ -4880,7 +5007,7 @@ var VoiceResource = class extends Resource {
4880
5007
  //#region src/resources/verifyVerifications.gen.ts
4881
5008
  var VerifyVerificationsResource = class extends Resource {
4882
5009
  /**
4883
- * Start a verification: generate a one-time passcode and send it to the recipient in `to` (a phone number over the phone channels enabled for its destination country; an email address over email; or both). It is sent over one channel at a time and fails over to the next in the plan, never over two at once. Calling again for the same recipient reuses the in-progress verification and sends a fresh code after the resend cooldown; it does not start a second one, so use this both to send and to resend. The passcode is never returned; submit what the recipient enters with verify_verifications_check. SMS delivery draws on the workspace's SMS balance.
5010
+ * Start a verification: generate a one-time passcode and send it to the recipient in `to` (a phone number over the phone channels enabled for its destination country; an email address over email; or both). It is sent over one channel at a time and fails over to the next in the plan, never over two at once. Calling again for the same recipient reuses the in-progress verification and sends a fresh code after the resend cooldown; it does not start a second one, so use this both to send and to resend. The passcode is never returned; submit what the recipient enters with verify_verifications_check. SMS, WhatsApp and Telegram delivery all draw on the workspace's balance.
4884
5011
  *
4885
5012
  * @example Start a verification over SMS
4886
5013
  * const verification = await bird.verify.verifications.create({
@@ -5154,6 +5281,46 @@ var RealtimeResource = class extends RealtimeResourceBase {
5154
5281
  }
5155
5282
  };
5156
5283
  //#endregion
5284
+ //#region src/resources/lookup.gen.ts
5285
+ var LookupResource = class extends Resource {
5286
+ /**
5287
+ * Look up what a phone number is. Returns the serving network, the issuing network, whether the number was ported, its country, and its line type, free with every call. Pass `type` to buy extra blocks: `classification` (the allocated service of the range, from an intelligence source, reported beside the free `line_type` rather than replacing it), `porting` (whether the number ever moved network, when, and its full history), `presence` (reachable on the network right now), `roaming`, `sim_swap` (when the SIM last changed), and `score` (0-100 credibility). Every requested block reports its own status, and only the ones reading `ok` are billed on top of the lookup. Nothing is sent to the number.
5288
+ *
5289
+ * @example Look up a number, buying two extra blocks
5290
+ * const answer = await bird.lookup.phoneNumber({
5291
+ * phone_number: "+31612345678",
5292
+ * type: ["classification", "score"],
5293
+ * });
5294
+ * console.log(answer.country_code, answer.line_type);
5295
+ * // Only a block whose status is ok carries a value, and only that one is billed.
5296
+ * if (answer.score?.status === "ok") console.log(answer.score.value);
5297
+ */
5298
+ phoneNumber(params, options) {
5299
+ return this.call("POST", options, ({ signal, headers }) => createPhoneNumberLookup({
5300
+ client: this.client,
5301
+ body: params,
5302
+ headers,
5303
+ signal
5304
+ }));
5305
+ }
5306
+ /**
5307
+ * Look up whether an email address is worth sending to. Returns `result` (the verdict: `valid`; `neutral`, meaning it could not be confirmed either way; `risky`, meaning it will probably accept mail but is likelier than most to bounce or complain; `undeliverable`; or `typo`), `delivery_confidence` (0-100), `flags` (`role`, `disposable`, `free_provider`), `reason` on an undeliverable address (`invalid_syntax`, `invalid_domain`, `invalid_recipient`), and `did_you_mean` when the address looks like a misspelling of a real one. `result` and `reason` are OPEN vocabularies: the values listed here are today's and more may be added, so treat an unrecognized value as a future one rather than an error, falling back on `delivery_confidence`. One address per call. Every answered lookup is billed the same flat amount whatever the verdict, so treat it as a paid call rather than a free check, and use an `Idempotency-Key` so a retry does not buy a second answer. Nothing is sent to the address.
5308
+ *
5309
+ * @example Check whether an address is worth sending to
5310
+ * const answer = await bird.lookup.email({ email: "aisha.khan@example.com" });
5311
+ * // result is an open vocabulary; delivery_confidence is always comparable.
5312
+ * console.log(answer.result, answer.delivery_confidence);
5313
+ */
5314
+ email(params, options) {
5315
+ return this.call("POST", options, ({ signal, headers }) => createEmailLookup({
5316
+ client: this.client,
5317
+ body: params,
5318
+ headers,
5319
+ signal
5320
+ }));
5321
+ }
5322
+ };
5323
+ //#endregion
5157
5324
  //#region src/client.ts
5158
5325
  const DEFAULT_TIMEOUT_MS = 6e4;
5159
5326
  const DEFAULT_MAX_RETRIES = 2;
@@ -5227,6 +5394,8 @@ var BirdClient = class {
5227
5394
  contactProperties;
5228
5395
  /** Sending domains — `bird.domains.create(...)`, `.list(...)`, `.verify(...)`, … */
5229
5396
  domains;
5397
+ /** Recipient intelligence — `bird.lookup.email(...)`, `.phoneNumber(...)`. Every answer is billed. */
5398
+ lookup;
5230
5399
  /** Webhooks — `bird.webhooks.unwrap(payload, headers)` verifies an inbound delivery. */
5231
5400
  webhooks;
5232
5401
  /** Realtime — `bird.realtime.publish(...)`, `.channels.list(...)`, `.members.disconnect(...)`, … */
@@ -5238,9 +5407,9 @@ var BirdClient = class {
5238
5407
  this.#headers = {
5239
5408
  ...opts.defaultHeaders,
5240
5409
  Authorization: `Bearer ${opts.apiKey}`,
5241
- "User-Agent": `bird-sdk-js/0.27.0`,
5410
+ "User-Agent": `bird-sdk-js/0.29.0`,
5242
5411
  "Bird-Surface": "sdk-js",
5243
- "Bird-Version": "0.27.0"
5412
+ "Bird-Version": "0.29.0"
5244
5413
  };
5245
5414
  const caller = detectCaller();
5246
5415
  if (caller) this.#headers["Bird-Caller"] = caller;
@@ -5275,6 +5444,7 @@ var BirdClient = class {
5275
5444
  this.audiences = new AudiencesResource(this.core, this.#client);
5276
5445
  this.contactProperties = new ContactPropertiesResource(this.core, this.#client);
5277
5446
  this.domains = new DomainsResource(this.core, this.#client);
5447
+ this.lookup = new LookupResource(this.core, this.#client);
5278
5448
  this.webhooks = new WebhooksResource(opts.webhooks);
5279
5449
  this.realtime = new RealtimeResource(this.core, this.#client);
5280
5450
  }
@@ -5407,6 +5577,54 @@ const EmailEventType = {
5407
5577
  EmailUnsubscribed: "email.unsubscribed"
5408
5578
  };
5409
5579
  /**
5580
+ * Values of EmailLookupFlag known at this SDK version. The wire value is an open
5581
+ * string: a value added by a newer server deserializes unchanged, so switch on
5582
+ * these with a `default` branch rather than treating the set as closed.
5583
+ */
5584
+ const EmailLookupFlag = {
5585
+ Disposable: "disposable",
5586
+ FreeProvider: "free_provider",
5587
+ Role: "role"
5588
+ };
5589
+ /**
5590
+ * Values of EmailLookupReason known at this SDK version. The wire value is an open
5591
+ * string: a value added by a newer server deserializes unchanged, so switch on
5592
+ * these with a `default` branch rather than treating the set as closed.
5593
+ */
5594
+ const EmailLookupReason = {
5595
+ InvalidDomain: "invalid_domain",
5596
+ InvalidRecipient: "invalid_recipient",
5597
+ InvalidSyntax: "invalid_syntax"
5598
+ };
5599
+ /**
5600
+ * Values of EmailLookupResult known at this SDK version. The wire value is an open
5601
+ * string: a value added by a newer server deserializes unchanged, so switch on
5602
+ * these with a `default` branch rather than treating the set as closed.
5603
+ */
5604
+ const EmailLookupResult = {
5605
+ Neutral: "neutral",
5606
+ Risky: "risky",
5607
+ Typo: "typo",
5608
+ Undeliverable: "undeliverable",
5609
+ Valid: "valid"
5610
+ };
5611
+ /**
5612
+ * Values of LookupFlag known at this SDK version. The wire value is an open
5613
+ * string: a value added by a newer server deserializes unchanged, so switch on
5614
+ * these with a `default` branch rather than treating the set as closed.
5615
+ */
5616
+ const LookupFlag = { Ported: "ported" };
5617
+ /**
5618
+ * Values of LookupPropertyStatus known at this SDK version. The wire value is an open
5619
+ * string: a value added by a newer server deserializes unchanged, so switch on
5620
+ * these with a `default` branch rather than treating the set as closed.
5621
+ */
5622
+ const LookupPropertyStatus = {
5623
+ Inconclusive: "inconclusive",
5624
+ Ok: "ok",
5625
+ Unavailable: "unavailable"
5626
+ };
5627
+ /**
5410
5628
  * Values of SMSErrorCode known at this SDK version. The wire value is an open
5411
5629
  * string: a value added by a newer server deserializes unchanged, so switch on
5412
5630
  * these with a `default` branch rather than treating the set as closed.
@@ -5425,6 +5643,28 @@ const SMSErrorCode = {
5425
5643
  Unreachable: "unreachable"
5426
5644
  };
5427
5645
  /**
5646
+ * Values of TemplateLanguageStatus known at this SDK version. The wire value is an open
5647
+ * string: a value added by a newer server deserializes unchanged, so switch on
5648
+ * these with a `default` branch rather than treating the set as closed.
5649
+ */
5650
+ const TemplateLanguageStatus = {
5651
+ Draft: "draft",
5652
+ Live: "live",
5653
+ Superseded: "superseded"
5654
+ };
5655
+ /**
5656
+ * Values of TemplateStatus known at this SDK version. The wire value is an open
5657
+ * string: a value added by a newer server deserializes unchanged, so switch on
5658
+ * these with a `default` branch rather than treating the set as closed.
5659
+ */
5660
+ const TemplateStatus = {
5661
+ Active: "active",
5662
+ Draft: "draft",
5663
+ Inactive: "inactive",
5664
+ Pending: "pending",
5665
+ Rejected: "rejected"
5666
+ };
5667
+ /**
5428
5668
  * Values of VerificationAttemptFailureReason known at this SDK version. The wire value is an open
5429
5669
  * string: a value added by a newer server deserializes unchanged, so switch on
5430
5670
  * these with a `default` branch rather than treating the set as closed.
@@ -5446,6 +5686,7 @@ const VerificationAttemptFailureReason = {
5446
5686
  const VerificationChannel = {
5447
5687
  Email: "email",
5448
5688
  Sms: "sms",
5689
+ Telegram: "telegram",
5449
5690
  Whatsapp: "whatsapp"
5450
5691
  };
5451
5692
  /**
@@ -5472,6 +5713,19 @@ const WhatsAppErrorCode = {
5472
5713
  Undeliverable: "undeliverable"
5473
5714
  };
5474
5715
  /**
5716
+ * Values of WhatsAppEventType known at this SDK version. The wire value is an open
5717
+ * string: a value added by a newer server deserializes unchanged, so switch on
5718
+ * these with a `default` branch rather than treating the set as closed.
5719
+ */
5720
+ const WhatsAppEventType = {
5721
+ WhatsappAccepted: "whatsapp.accepted",
5722
+ WhatsappDelivered: "whatsapp.delivered",
5723
+ WhatsappFailed: "whatsapp.failed",
5724
+ WhatsappRead: "whatsapp.read",
5725
+ WhatsappRejected: "whatsapp.rejected",
5726
+ WhatsappSent: "whatsapp.sent"
5727
+ };
5728
+ /**
5475
5729
  * Values of WhatsAppTemplateCategory known at this SDK version. The wire value is an open
5476
5730
  * string: a value added by a newer server deserializes unchanged, so switch on
5477
5731
  * these with a `default` branch rather than treating the set as closed.
@@ -5495,6 +5749,6 @@ const WhatsAppTemplateParameterType = {
5495
5749
  Video: "video"
5496
5750
  };
5497
5751
  //#endregion
5498
- export { BirdAPIError, BirdAuthError, BirdBadRequestError, BirdBillingError, BirdClient, BirdConflictError, BirdConnectionError, BirdError, BirdInternalError, BirdMisdirectedError, BirdNotFoundError, BirdNotImplementedError, BirdPayloadTooLargeError, BirdPermissionError, BirdPreconditionError, BirdRateLimitError, BirdServiceUnavailableError, BirdTimeoutError, BirdValidationError, BirdWebhookVerificationError, EmailEventType, SMSErrorCode, VerificationAttemptFailureReason, VerificationChannel, VerificationTerminalReason, WebhookEventType, WhatsAppErrorCode, WhatsAppTemplateCategory, WhatsAppTemplateParameterType, baseUrlForRegion, regionFromApiKey };
5752
+ export { BirdAPIError, BirdAuthError, BirdBadRequestError, BirdBillingError, BirdClient, BirdConflictError, BirdConnectionError, BirdError, BirdInternalError, BirdMisdirectedError, BirdNotFoundError, BirdNotImplementedError, BirdPayloadTooLargeError, BirdPermissionError, BirdPreconditionError, BirdRateLimitError, BirdServiceUnavailableError, BirdTimeoutError, BirdValidationError, BirdWebhookVerificationError, EmailEventType, EmailLookupFlag, EmailLookupReason, EmailLookupResult, LookupFlag, LookupPropertyStatus, SMSErrorCode, TemplateLanguageStatus, TemplateStatus, VerificationAttemptFailureReason, VerificationChannel, VerificationTerminalReason, WebhookEventType, WhatsAppErrorCode, WhatsAppEventType, WhatsAppTemplateCategory, WhatsAppTemplateParameterType, baseUrlForRegion, regionFromApiKey };
5499
5753
 
5500
5754
  //# sourceMappingURL=index.mjs.map