> ## Documentation Index
> Fetch the complete documentation index at: https://noorle.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Agent Card

> The public A2A agent card at /.well-known/agent-card.json — interfaces, capabilities, Noorle extensions, and the bearer security scheme

The agent card is the contract that tells a caller what an agent supports and
what credential to attach.

```
GET https://agent-{handle}.noorle.com/.well-known/agent-card.json
```

This endpoint is **public and unauthenticated** by A2A convention. Do not send a
credential to fetch it.

## Request

```bash theme={null}
curl https://agent-my-agent.noorle.com/.well-known/agent-card.json
```

## Response

```json theme={null}
{
  "name": "Support Triage",
  "description": "Triages inbound support requests",
  "version": "1.0.0",
  "supportedInterfaces": [
    {
      "url": "https://agent-my-agent.noorle.com",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": true,
    "extensions": [
      {
        "uri": "https://a2a.noorle.dev/ext/a2ui/v1",
        "description": "Noorle A2UI surface artifacts",
        "required": false
      },
      {
        "uri": "https://a2a.noorle.dev/ext/approval-gate/v1",
        "description": "Noorle approval-gate input-required messages",
        "required": false
      }
    ]
  },
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["text/plain"],
  "skills": [],
  "provider": {
    "organization": "Noorle",
    "url": "https://noorle.com"
  },
  "securitySchemes": {
    "bearer": { "scheme": "Bearer" }
  },
  "securityRequirements": [{ "bearer": [] }]
}
```

## Fields

| Field                            | Value                                         | Notes                                                                                                                                                |
| -------------------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                           | Agent name                                    | From the agent's configuration                                                                                                                       |
| `description`                    | Agent description                             | From the agent's configuration                                                                                                                       |
| `version`                        | **`"1.0.0"`**                                 | A fixed literal — not the agent's version and not the platform's                                                                                     |
| `supportedInterfaces`            | One interface, at the gateway origin          | Each entry always carries `url`, `protocolBinding`, and `protocolVersion`. The only binding is `JSONRPC` — no gRPC, no HTTP+JSON, no other transport |
| `capabilities.streaming`         | `true`                                        | `SendStreamingMessage` and `SubscribeToTask` are available                                                                                           |
| `capabilities.pushNotifications` | `true`                                        | The four push-config methods are implemented                                                                                                         |
| `capabilities.extensions`        | Two Noorle extensions, both `required: false` | See below                                                                                                                                            |
| `defaultInputModes`              | `["text/plain"]`                              |                                                                                                                                                      |
| `defaultOutputModes`             | `["text/plain"]`                              |                                                                                                                                                      |
| `skills`                         | **Always `[]`**                               | The card does not enumerate the agent's tools or skills                                                                                              |
| `provider`                       | `Noorle`, `https://noorle.com`                | Fixed                                                                                                                                                |
| `securitySchemes`                | One HTTP Bearer scheme keyed `bearer`         |                                                                                                                                                      |
| `securityRequirements`           | `[{"bearer": []}]`                            | Required on every request; no scopes at this layer                                                                                                   |

The gateway leaves `documentationUrl`, `iconUrl`, `signatures`, and
`capabilities.extendedAgentCard` unset. An unset field is dropped from the JSON
entirely rather than serialized as `null`, so test for the key rather than
comparing against `null`.

<Warning>
  **The card does not list the agent's tools.** `skills` is always empty, and
  there is no `capabilities` array of tool names, no `models` list, and no
  `maxTokens` field. If you need to know what an agent can do, that is not
  discoverable from the card — send it a message.
</Warning>

## The security scheme

One HTTP Bearer scheme covers both credential kinds the gateway accepts: a
platform JWT (`eyJ…`) or a service-principal API key (`ak-…`). Both arrive on
`Authorization: Bearer` and are disambiguated by prefix.

See [Authentication](/docs/reference/authentication) for the admission rules.

## Extensions

Both declared extensions are optional and take effect only when you negotiate
them by sending the `A2A-Extensions` request header.

| URI                                           | What it adds                                              |
| --------------------------------------------- | --------------------------------------------------------- |
| `https://a2a.noorle.dev/ext/a2ui/v1`          | Generative UI surface artifacts in messages and artifacts |
| `https://a2a.noorle.dev/ext/approval-gate/v1` | Approval-gate `input-required` message payloads           |

Without negotiation, payloads for these extensions are not tagged with their
extension URI.

## `GetExtendedAgentCard`

The `GetExtendedAgentCard` JSON-RPC method returns the **same card** this
endpoint serves. There is no distinct extended card.

## Related

* [A2A overview](/docs/reference/a2a/overview)
* [Authentication](/docs/reference/authentication)
