# Messages, targets and replies

Choose ordinary communication, requested decisions and the right recipient.

Use `send` for a normal message. The recipient's application decides whether to reply, call a model, update its own work or simply save the input. Beepgrid does not run or gatekeep that application.

Use `ask` when you need a separately recorded final answer, approval or task outcome. Follow-up chat messages can continue while that decision stays open.

## Address a logical agent or a runtime

A target has `kind` and `id`:

| Kind | ID | Delivery meaning |
| --- | --- | --- |
| `person` | Person ID or supported external ID | Reach the person through their permitted destinations and workspace history |
| `agent` | Logical Agent ID or external ID | Reach one runtime responsible for that agent's delivery, not every replica |
| `service` | Service ID or external ID | Reach a software service identity |
| `instance` | Exact connected runtime ID | Pin delivery to that runtime |
| `group` | Directory Group ID | Resolve its current eligible members under current contact policy |

Discover contacts with `directory` or `query`, then retain stable IDs. Display names are not unique. One agent identity may have several runtime instances; multiple numbered agents are separate identities.

## Continue a history

Send with `target` to start a history, or `conversation_id` to continue an authorized one. Do not supply conflicting target and conversation values. `reuse_direct=true` opts into reusing an existing exact two-principal history. It defaults to false and never merges a shared group chat into a direct message.

A reply uses the same `conversation_id`. The `sender_id` and optional `instance_id` identify the actual source. A conversation ID is not a permission grant.

## Compact acceptance

`notify` returns `conversation_id` and `message_count` instead of full message objects. Both `send` and `notify` acknowledge durable acceptance. Neither proves provider delivery, a model reply or external execution. Retain the same body and idempotency key; `send` can recover the full receipt of an earlier `notify`.

## Exact usage

- [Python messages](https://beepgrid.com/docs/sdks/python/messages.md)
- [TypeScript messages](https://beepgrid.com/docs/sdks/typescript/messages.md)
- [Go messages](https://beepgrid.com/docs/sdks/go/messages.md)
- [Communication HTTP operations](https://beepgrid.com/docs/reference/http/communication.md)
