Skip to main content

a2a_protocol_client/methods/
extended_card.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Tom F.
3
4//! `GetExtendedAgentCard` client method.
5
6use a2a_protocol_types::AuthenticatedExtendedCardResponse;
7
8use crate::client::A2aClient;
9use crate::error::{ClientError, ClientResult};
10use crate::interceptor::{ClientRequest, ClientResponse};
11
12impl A2aClient {
13    /// Fetches the full (private) agent card, authenticating the request.
14    ///
15    /// Calls `GetExtendedAgentCard`. The returned card may include
16    /// private skills, security schemes, or additional interfaces not exposed
17    /// in the public `/.well-known/agent.json`.
18    ///
19    /// The caller must have registered auth credentials via
20    /// [`crate::auth::AuthInterceptor`] or equivalent before calling this
21    /// method.
22    ///
23    /// # Errors
24    ///
25    /// Returns [`ClientError`] on transport or protocol errors.
26    pub async fn get_extended_agent_card(&self) -> ClientResult<AuthenticatedExtendedCardResponse> {
27        const METHOD: &str = "GetExtendedAgentCard";
28
29        let mut req = ClientRequest::new(METHOD, serde_json::Value::Null);
30        self.interceptors.run_before(&mut req).await?;
31
32        let result = self
33            .transport
34            .send_request(
35                METHOD,
36                serde_json::Value::Object(serde_json::Map::new()),
37                &req.extra_headers,
38            )
39            .await?;
40
41        let resp = ClientResponse {
42            method: METHOD.to_owned(),
43            result,
44            status_code: 200,
45        };
46        self.interceptors.run_after(&resp).await?;
47
48        serde_json::from_value::<AuthenticatedExtendedCardResponse>(resp.result)
49            .map_err(ClientError::Serialization)
50    }
51}