Bird
Send and receive across email, SMS, WhatsApp, and voice.
От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноМожет изменять данные
Что умеет
- Api Keys Create: Create a workspace key and receive its token once, in this response; no later call reads it back. Scopes are limited to the data plane, so a key can never issue or revoke another one.
- Audiences Add Contacts: 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` wi
- Audiences Create: Create an audience in the workspace. New audiences start empty; add contacts with `audiences_add_contacts` or `contacts_batch`. Only static audiences can be created today.
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Send and receive across email, SMS, WhatsApp, and voice. One API, one contract.
Список инструментов сервера (60)
Технические названия из tools/list. Нужны только разработчикам.
| api_keys_create | Create a workspace key and receive its token once, in this response; no later call reads it back. Scopes are limited to the data plane, so a key can never issue or revoke another one. Expiry is fixed at creation, and `cidrs` is applied in the same transaction, so an invalid range fails the whole call instead of leaving the key unrestricted. |
| audiences_add_contacts | 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. |
| audiences_create | Create an audience in the workspace. New audiences start empty; add contacts with `audiences_add_contacts` or `contacts_batch`. Only static audiences can be created today. |
| audiences_delete | Delete an audience and its memberships; contacts themselves are not deleted. Fails while a broadcast targeting the audience is scheduled, accepted, sending, or canceling. |
| audiences_get | Get a single audience by ID: name, description, and type. Members are listed separately with `audiences_list_contacts`. |
| audiences_list | List the workspace's audiences as a cursor page, newest first. Filter by name substring with `q`. |
| audiences_list_contacts | List the contacts in a static audience by ID, as a cursor page ordered by when each contact joined (most recent first). Each entry pairs the contact with its join time. |
| audiences_remove_contact | Remove one contact's membership from an audience. The contact itself is not deleted and stays a member of any other audiences. |
| audiences_remove_contacts | Remove up to 1,000 contacts from a static audience by ID. Fails entirely if any contact ID does not exist; contacts are not deleted. |
| audiences_update | Update an audience's name or description. Omitted fields are unchanged; a `null` description clears it. |
| billing_plans_get | Read a billing plan by ID, including its tier, list price, entitlements, and resource quotas. This operation requires no authentication. |
| billing_plans_list | List active billing plans with their tiers, list prices, entitlements, and resource quotas. This operation requires no authentication. |
| compliance_identities_list | List the businesses this workspace has stored as compliance parties, so a registration can name the one it is for. Returns one page, newest first; follow `next_cursor` as `starting_after` for the rest. |
| compliance_requirements | What one country asks for before it will approve one registration, with where each item stands and why any was refused. `sms_senders_requirements` says which countries want a registration; this says what one is asking for, addressed by that row's `registration_id` as `subject_id`. Without `subject_id` it answers the form with no submission behind it, every item unanswered except those `identity_id` prefills, and `program` turns required, because a country can run more than one and there is no registration to read it from. `satisfied` is whether every required item is approved or not applicable; `needs_input` separates items still waiting on you from answers already with a reviewer. |
| compliance_submissions_create | Files a country's registration answers, all of them in one call, and there is no draft to build up first. What to send is `compliance_requirements`'s `fields`, item by item; a country it does not cover is refused rather than accepted empty. Filing twice for the same registration returns 409, so correct a refused answer with `compliance_submissions_resupply` instead. The answers are a legal representation about the business, relayed onward to a carrier or a regulator under the name of the business they describe, so confirm them with the user before this call rather than filing on your own. |
| compliance_submissions_resupply | Replaces the answers a reviewer refused, that expired, or that were never supplied, on a registration already filed. Which ones, and why each was refused, is on the item in `compliance_requirements`'s `fields`; anything already accepted is left alone and does not need sending again. Correcting a refused answer is the same legal representation as making it, filed under the same business's name, so confirm the replacements with the user before this call rather than filing on your own. |
| contact_properties_archive | Archive a contact property: the key is rejected in new contact writes and stops rendering in templates, while stored values remain readable. The key stays reserved and counts toward the 200-property limit; reverse with `contact_properties_unarchive`. |
| contact_properties_create | Define a custom contact property (key + value type) that becomes available in contact data and as a broadcast template variable. The key and type cannot change after creation; a workspace holds at most 200 properties, archived included. |
| contact_properties_get | Get a single contact property by ID: key, type, fallback value, and archived state. |
| contact_properties_list | List the workspace's contact properties as a cursor page, newest first. Archived properties are included, marked by their archived flag. |
| contact_properties_unarchive | Reactivate an archived contact property so its key is accepted in contact writes and renders in templates again. Fails with a conflict if the property is not archived. |
| contact_properties_update | Update a contact property's fallback value. Only the fallback value can change; the key and type are fixed at creation, so a different key or type needs a new property. |
| contacts_batch | Create or update up to 1,000 contacts in one request. Match each entry against every supplied identifier (`email`, `phone_number`, and `external_id`), or set `match_on` to use one identifier. Optionally add all successful contacts to up to 10 audiences. Results follow submission order. |
| contacts_create | 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`. |
| contacts_delete | Delete a contact and remove it from every audience it belongs to. Suppression records for the address are unaffected. |
| contacts_get | Get a single contact by ID. Look up an ID by exact email, phone_number, or external_id with `contacts_list`. |
| contacts_list | 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. |
| contacts_update | 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. |
| docs_read | Fetch the full Markdown of one documentation page by the `slug` from a documentation search result. The response URL is the page's citable source. Use `index` for the documentation landing page. This operation requires no authentication. |
| docs_search | Search the documentation by keyword and return ranked sections with deep links, page slugs, and matching snippets. Use `docs_read` with a result's `slug` to fetch the full page. Set `contents` to `highlights` to include matching passages. This operation requires no authentication. |
| email_broadcasts_cancel | Cancel a scheduled, accepted, or sending broadcast. This stops every delivery that has not gone out yet. Recipients already dispatched are not recalled. Calling this again on a broadcast already canceling or canceled returns its current state rather than an error. A draft cannot be canceled, because it was never sent. Delete it with `email_broadcasts_delete` instead. |
| email_broadcasts_counts | Preview how many contacts a broadcast can reach before sending. The `total` value includes every contact in the audience. The `addressable` value counts contacts with an email address. The `sendable` value counts contacts that are not suppressed for the broadcast's category and can receive the broadcast. These describe the audience, not delivery, and sending does not change them: to find out what happened to a broadcast that has sent, read its recipients or its events. The broadcast must already have an audience selected. |
| email_broadcasts_create | Create a broadcast that sends one piece of template content to a stored audience. Leave `send` as `false` (the default) to save an editable draft. Update it with `email_broadcasts_update` and send it later with `email_broadcasts_send`. Set `send` to `true`, optionally with `scheduled_at`, to send it in this call. A send needs a verified `from` address, an `audience_id`, and a `template`. |
| email_broadcasts_delete | Permanently delete a draft broadcast. Only a draft can be deleted. To stop a scheduled or sending broadcast, use `email_broadcasts_cancel` instead. |
| email_broadcasts_get | Fetch one broadcast by its `broadcast_id`, with its audience reference and counters. For the full recipient list use `email_broadcasts_list_recipients`, and for the delivery timeline use `email_broadcasts_list_events`. |
| email_broadcasts_list | List broadcasts in the workspace, newest first. Filter by lifecycle `status`, `audience_id`, or `tag`, search tag names/values with `q`, or narrow to a window with `created_after`/`created_before`. Use `email_broadcasts_get` for full detail on one broadcast. |
| email_broadcasts_list_clicked_links | List the destination URLs a broadcast's recipients clicked, each with its exact click count, distinct-recipient count, and the link's own name (when the message named it). Grouped over every click event the broadcast has, not a sample; `data` is capped at the 100 most-clicked URLs and `total` is the uncapped count of distinct URLs clicked. |
| email_broadcasts_list_events | List the per-recipient delivery timeline for a broadcast (sends, opens, clicks, bounces, and so on), paginated. Filter by `type` (for example `email.bounced`, `email.opened`). |
| email_broadcasts_list_recipients | List the recipients resolved for a broadcast with their per-recipient delivery state, paginated. It shows who a broadcast reached and how far each one got. The list is empty until the broadcast starts sending. Pass `to` to look up one address instead of paging the whole set. |
| email_broadcasts_send | Send a draft or scheduled broadcast, either immediately or at `scheduled_at`. Calling this on a broadcast that already has a schedule reschedules it instead of sending a duplicate. Calling it on an `accepted` broadcast retries dispatch. Once the broadcast has started sending or reached a final state, calling this again returns a conflict error. |
| email_broadcasts_update | Update a draft or scheduled broadcast. Only the fields you supply change. The rest stay as they are. Once the broadcast is accepted for sending, editing returns a conflict error. Use `email_broadcasts_cancel` to stop a broadcast that is already sending. |
| email_cancel | 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. |
| email_content | Read the stored HTML and text bodies of a sent message. Content exists only if the message had content storage enabled, and only for 30 days after sending. A `404` means nothing was stored. A `425` means the content is still being stored, and the call can be retried. A `410` means it has expired. |
| email_dedicated_ips_assign | Move a dedicated IP into the IP pool given by ip_pool_id. An IP is always in exactly one pool, so this is a move. The last IP cannot leave the default pool, and the shared pool cannot hold dedicated IPs. |
| email_dedicated_ips_create | Purchase one or more dedicated IPs into an IP pool. The first purchase creates a dedicated pool automatically; later purchases require `ip_pool_id`. This paid organization-level action can require a wallet top-up. |
| email_dedicated_ips_delete | Cancel a dedicated IP subscription by id. The IP stays usable until the end of the billing period. The last IP in the default pool cannot be canceled. Destructive and billing-affecting. |
| email_dedicated_ips_get | Fetch one dedicated IP by ID with its current status, warmup progress, and pool assignment. This operation is read-only. |
| email_dedicated_ips_list | List the dedicated IPs available to the workspace as a cursor page, each with its status, warmup progress, and pool assignment. Read-only view shared across the organization. Purchase and manage IPs through the organization endpoints. |
| email_domains_create | Register a new sending domain and get the DNS records to publish. Flow: call this, publish the returned DNS records at your DNS provider, then call email_domains_verify (repeat until status is verified — DNS propagation can take minutes to hours). |
| email_domains_delete | Delete a sending domain by ID. Revokes its sender authorization: new sends from the domain are rejected afterward, while historical statistics and events for past sends are preserved. Destructive. |
| email_domains_get | Fetch one sending domain: verification status and the DNS records with their individual verification states. |
| email_domains_list | List the workspace's sending domains with their verification status, as a cursor page. |
| email_domains_update | 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, marked optional until inbound.enabled is set, so receiving starts only once you set it even when those records are already published. Publishing them earlier is not free: on a domain at the zone apex they replace the MX records carrying its existing mail, changing where that mail is delivered. |
| email_domains_verify | Trigger a DNS verification check for a sending domain and return the refreshed domain with per-record results. Safe to repeat while waiting for DNS propagation. |
| email_get | Fetch one email message by id — aggregate delivery status, per-recipient delivery states, and the event timeline (queued → processed → delivered, opens/clicks, or bounces with reason). High-volume emails return the first page of events; more are available via events_next_cursor. The message body (html, text) is not returned. |
| email_inbound_addresses_create | Create a new inbound address you can forward a real mailbox to. The response includes the address to forward that mailbox to. |
| email_inbound_addresses_delete | Delete an inbound address. Mail forwarded to it afterward is no longer received. |
| email_inbound_addresses_get | Fetch one inbound address by its ID: the address you forward mail to, plus its label. Use `email_inbound_addresses_list` to find IDs. |
| email_inbound_addresses_list | List the workspace's inbound addresses as a cursor page. |
| email_inbound_addresses_update | Update the label on an inbound address. |