# `ASM.Extensions.PubSub.Payload`
[🔗](https://github.com/nshkrdotcom/agent_session_manager/blob/v0.9.2/lib/asm/extensions/pub_sub/payload.ex#L1)

Canonical payload contract for PubSub broadcast events.

Payload shape (`asm.pubsub.event.v1`):

    %{
      schema: "asm.pubsub.event.v1",
      event: %ASM.Event{},
      meta: %{
        event_id: String.t(),
        event_kind: atom(),
        session_id: String.t(),
        run_id: String.t(),
        provider: atom() | nil,
        published_at: DateTime.t(),
        source: atom(),
        topics: [String.t()]
      }
    }

# `meta`

```elixir
@type meta() :: %{
  :event_id =&gt; String.t(),
  :event_kind =&gt; ASM.Event.kind(),
  :session_id =&gt; String.t(),
  :run_id =&gt; String.t(),
  :provider =&gt; atom() | nil,
  :published_at =&gt; DateTime.t(),
  :source =&gt; atom(),
  optional(:topics) =&gt; [String.t()]
}
```

# `t`

```elixir
@type t() :: %{schema: String.t(), event: ASM.Event.t(), meta: meta()}
```

# `build`

```elixir
@spec build(
  ASM.Event.t(),
  keyword()
) :: t()
```

# `schema`

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

---

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