# `Jido.Chat.Postable`
[🔗](https://github.com/agentjido/jido_chat/blob/v1.0.0/lib/jido/chat/postable.ex#L1)

Typed post payload accepted by thread/channel post helpers.

# `t`

```elixir
@type t() :: %Jido.Chat.Postable{
  ast: nil | nil | any(),
  attachments: [
    %Jido.Chat.Attachment{
      data: term(),
      duration: term(),
      filename: term(),
      height: term(),
      kind: term(),
      media_type: term(),
      metadata: term(),
      path: term(),
      size_bytes: term(),
      url: term(),
      width: term()
    }
  ],
  card: nil | nil | any(),
  fallback_text: nil | nil | binary(),
  files: [
    %Jido.Chat.FileUpload{
      data: term(),
      duration: term(),
      filename: term(),
      height: term(),
      kind: term(),
      media_type: term(),
      metadata: term(),
      path: term(),
      size_bytes: term(),
      url: term(),
      width: term()
    }
  ],
  kind: :raw | :markdown | :ast | :card | :text | :stream,
  markdown: nil | nil | binary(),
  metadata: map(),
  raw: nil | nil | any(),
  stream: nil | nil | any(),
  text: nil | nil | binary()
}
```

# `ast`

Builds an AST payload wrapper.

# `card`

Builds a card payload wrapper.

# `markdown`

Builds a markdown post payload.

# `new`

Creates a new typed post payload.

# `raw`

Builds a raw payload wrapper.

# `schema`

Returns the Zoi schema for Postable.

# `stream`

Builds a stream payload wrapper.

# `text`

Builds a text post payload.

# `to_payload`

```elixir
@spec to_payload(t()) :: Jido.Chat.PostPayload.t()
```

Builds a normalized outbound payload preserving post intent.

# `to_text`

```elixir
@spec to_text(t()) :: String.t()
```

Flattens postable payload into adapter-safe text.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
