# `A2A.AgentCard`
[🔗](https://github.com/actioncard/a2a-elixir/blob/main/lib/a2a/agent_card.ex#L1)

Decoded agent card from the A2A discovery endpoint.

Contains the agent's identity, capabilities, and skills as returned by
`GET /.well-known/agent-card.json`. This is the wire-format struct used
by clients; server-side agents define their card via the `agent_card/0` callback.

## Example

    {:ok, card} = A2A.Client.discover("https://agent.example.com")
    card.name   #=> "my-agent"
    card.skills #=> [%{id: "greet", name: "Greet", ...}]

# `capabilities`

```elixir
@type capabilities() :: %{
  optional(:streaming) =&gt; boolean(),
  optional(:push_notifications) =&gt; boolean(),
  optional(:state_transition_history) =&gt; boolean(),
  optional(:extended_agent_card) =&gt; boolean(),
  optional(:extensions) =&gt; [A2A.AgentExtension.t()]
}
```

# `provider`

```elixir
@type provider() :: %{organization: String.t(), url: String.t()}
```

# `skill`

```elixir
@type skill() :: %{
  id: String.t(),
  name: String.t(),
  description: String.t(),
  tags: [String.t()]
}
```

# `supported_interface`

```elixir
@type supported_interface() :: %{
  url: String.t(),
  protocol_binding: String.t(),
  protocol_version: String.t()
}
```

# `t`

```elixir
@type t() :: %A2A.AgentCard{
  capabilities: capabilities(),
  default_input_modes: [String.t()],
  default_output_modes: [String.t()],
  description: String.t(),
  documentation_url: String.t() | nil,
  icon_url: String.t() | nil,
  name: String.t(),
  protocol_version: String.t() | nil,
  provider: provider() | nil,
  security: [%{required(String.t()) =&gt; [String.t()]}],
  security_schemes: %{required(String.t()) =&gt; A2A.SecurityScheme.t()},
  signatures: [map()],
  skills: [skill()],
  supported_interfaces: [supported_interface()],
  url: String.t(),
  version: String.t()
}
```

---

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