SMS

What is the difference between one-way and two-way SMS?

One-way SMS goes out and nothing comes back. Two-way SMS means the person who received it can address a message to you in return, and your application gets it.

The distinction sounds like a feature you switch on. It is closer to a physical property of what you sent from, with a per-country policy layered over it.

What makes a sender one-way?

Having no address behind it.

A reply is a message addressed to whoever sent the last one. Where the sender was a number, that address exists and a handset can use it. Where the sender was an alphanumeric sender ID, there is no number to address, and Bird's own model records that absence directly: such a sender's country code is null, described as "the country of the number this sender sends from", and it carries no number id because "an alphanumeric sender has no number behind it".

So the first cut is structural. Long codes, toll-free numbers and short codes can receive. An alphanumeric sender cannot, in any country, under any registration.

The second cut is per country. Each sender type a destination carries reports a direction of one_way or two_way, so a number type that takes replies in one destination may be send-only in another. The country's SMS policy also carries an is_two_way_supported flag of its own. Both are per-destination values that move, so they are published on SMS destinations rather than listed here; each destination page answers "two-way messaging" as a single line at the top.

How does a reply reach my application?

As an event, pushed to you, with the message already stored.

When a subscriber texts one of your numbers, Bird stores the message alongside your sends and emits sms.received. The payload carries the body, the segment breakdown, both numbers, and the operator where the carrier reports one. There is nothing to poll.

One thing happens before that event reaches you, and it changes what you should do in the handler. Bird evaluates the reply against the keyword rules for that number first. A supported stop keyword records a sender-and-subscriber suppression and sends the opt-out confirmation, and it still emits sms.received. So an inbound message that was an opt-out arrives at your endpoint looking like any other inbound message, already acted on.

The consequence for your code: do not treat every sms.received as a conversational turn. Some of them are opt-outs Bird has already honoured, and re-sending anything in response to one is the mistake that pattern invites. What is a STOP keyword covers which keywords are recognised, where, and what happens in a country outside the catalog.

Which sender do I answer from?

The one they texted, and that path is treated differently on purpose.

When Bird sends on your behalf as a reply on the number a subscriber messaged, it does not consult the sender's registration or the destination's sender-type policy. The reasoning is that both of those gates ask whether your workspace may start a conversation from this sender in this country, and answering someone who wrote to you first is not that question.

This is worth knowing because it explains an asymmetry people hit and misread as a bug: a number that cannot yet open a conversation with a country can still answer one from it. That is deliberate, not a gap in the checks.

It also means the reply path is the one place where "can I send to this country" and "will this message go" come apart. Everywhere else, the three conditions in sender ID registration all have to hold.

What does two-way cost me that one-way does not?

Four things, none of them optional once you accept replies.

  1. An endpoint that is always up. Inbound is pushed. Webhooks covers signatures, retries and replay, and the event's identity rides in the webhook-id header rather than the body, which is your deduplication key.
  2. A number in every destination that needs one. An alphanumeric sender cannot be part of a two-way programme, so a campaign that mixes them needs a plan for the destinations where only the name is available. Going one-way is not a way out of the obligation either: a regime that grants a right to opt out can require a one-way sender to disclose that replies do not work and to offer another route, which what is the TCPA sets out.
  3. Handling the messages you did not design for. People reply to notifications. Some of those replies are questions, some are opt-outs, and some are neither.
  4. Reading the inbound side of your own numbers. Bird reports inbound volume separately from outbound, so a two-way programme has a second set of numbers to watch.

If none of those apply, one-way is not a downgrade. It is the smaller commitment, and an alphanumeric sender buys you a recognisable name in the from field in the destinations that carry it. Which sender type should I use has the trade in full, and two-way SMS covers what Bird ships for the reply side.

Construa na mesma rede.

Uma chave de API de teste é sua imediatamente. A produção é desbloqueada quando adicionar um método de pagamento e verificar um remetente.

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Usa Claude Code, Cursor ou Codex? Copie um prompt de configuração e o seu agente instala o Bird CLI e as skills por si. Escolha o seu:

Cursor