{
  "openapi": "3.1.0",
  "info": {
    "title": "CDQ Genius - A2A (JSON-RPC 2.0) API",
    "version": "1.0",
    "x-cdq-beta": true,
    "description": "This document describes **CDQ Genius**'s Agent2Agent (A2A) protocol\nJSON-RPC 2.0 binding, per the [A2A 1.0 specification, §9](https://a2a-protocol.org/latest/specification/#9-json-rpc-protocol-binding).\n\n### How the transport works\nThe A2A JSON-RPC binding exposes **one physical HTTP endpoint**. Every\noperation is a `POST` of a JSON-RPC 2.0 envelope to the base URL, and the\nserver dispatches on the envelope's `method` field:\n\n```\nPOST https://api.cdq.com/a2a/cdq-genius/\nContent-Type: application/json\nA2A-Version: 1.0\nX-API-KEY: {YOUR_API_KEY}\n```\n\nSupported methods are shown as selectable request examples on the\n`POST /` operation below (`SendMessage`, `GetTask`, `CancelTask`).\n\nThe [Agent Card](https://api.cdq.com/a2a/cdq-genius/.well-known/agent-card.json)\n(served by the `GET` operation below) is the authoritative source for the\nendpoint URL, transport, and capabilities.\n",
    "x-badges": [
      {
        "name": "BETA",
        "color": "blue",
        "position": "after"
      }
    ]
  },
  "servers": [
    {
      "url": "https://api.cdq.com/a2a/cdq-genius",
      "description": "CDQ Genius A2A base URL. The Agent Card is served at /.well-known/agent-card.json and all JSON-RPC operations are POSTed to /."
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Agent Card",
      "description": "Agent discovery document describing this agent's endpoint, transport, and capabilities."
    },
    {
      "name": "JSON-RPC",
      "description": "The single JSON-RPC 2.0 transport endpoint that dispatches all A2A methods on the envelope's method field."
    }
  ],
  "paths": {
    "/.well-known/agent-card.json": {
      "get": {
        "tags": [
          "Agent Card"
        ],
        "summary": "Read Agent Card",
        "x-cdq-beta": true,
        "description": "Returns the A2A Agent Card — the discovery document that declares this agent's name, endpoint URL, transport binding, capabilities and skills. Clients read this first to learn where and how to call the agent.\n",
        "responses": {
          "200": {
            "description": "The Agent Card describing CDQ Genius.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentCard"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error while producing the Agent Card."
          }
        },
        "x-badges": [
          {
            "name": "BETA",
            "color": "blue",
            "position": "after"
          }
        ]
      }
    },
    "/": {
      "post": {
        "tags": [
          "JSON-RPC"
        ],
        "summary": "Send JSON-RPC Request",
        "x-cdq-beta": true,
        "description": "Single A2A JSON-RPC 2.0 transport endpoint. The body is a JSON-RPC envelope whose `method` field selects the operation. Choose a request example (`SendMessage`, `GetTask`, `CancelTask`) to see the payload for each method. On success the response `result` holds a Task or a Message. All failures — including request-validation errors such as an invalid enum value — are returned as a JSON-RPC `error` object with HTTP status 200, per the A2A JSON-RPC binding; the endpoint does not use HTTP 4xx status codes to signal application or validation errors.\n",
        "parameters": [
          {
            "name": "A2A-Version",
            "in": "header",
            "required": false,
            "description": "A2A protocol version the client targets.",
            "schema": {
              "type": "string",
              "example": "1.0"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JSONRPCRequest"
              },
              "examples": {
                "SendMessage": {
                  "summary": "SendMessage — send a message to the agent",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 1,
                    "method": "SendMessage",
                    "params": {
                      "message": {
                        "messageId": "9229e770-767c-417b-a0b0-f0741243c581",
                        "role": "ROLE_USER",
                        "parts": [
                          {
                            "text": "Provide me data to help onboarding my business partner Name: Boehringer Ingelheim GmbH, Country: DE, City: Bieberach"
                          }
                        ]
                      },
                      "metadata": {}
                    }
                  }
                },
                "GetTask": {
                  "summary": "GetTask — read the current state of a task",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 2,
                    "method": "GetTask",
                    "params": {
                      "id": "task-abc123",
                      "historyLength": 10
                    }
                  }
                },
                "CancelTask": {
                  "summary": "CancelTask — request cancellation of a task",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 3,
                    "method": "CancelTask",
                    "params": {
                      "id": "task-abc123"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC 2.0 response. On success `result` is a Task or a Message; on any failure — including validation errors — `error` is populated (see JSONRPCError). This endpoint always responds with HTTP 200; it does not return HTTP 4xx codes for application or validation errors.\n",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/JSONRPCSuccessResponse"
                    },
                    {
                      "$ref": "#/components/schemas/JSONRPCErrorResponse"
                    }
                  ]
                },
                "examples": {
                  "taskCompleted": {
                    "summary": "Success — task completed with an artifact",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "id": "task-abc123",
                        "contextId": "ctx-xyz789",
                        "status": {
                          "state": "TASK_STATE_COMPLETED",
                          "timestamp": "2026-08-26T10:00:00Z"
                        },
                        "artifacts": [
                          {
                            "artifactId": "artifact-1",
                            "name": "Onboarding data",
                            "parts": [
                              {
                                "text": "Boehringer Ingelheim GmbH, Birkendorfer Str. 65, 88397 Biberach an der Riss, DE."
                              }
                            ]
                          }
                        ]
                      }
                    }
                  },
                  "invalidParams": {
                    "summary": "Error — invalid request content (e.g. bad enum value)",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "error": {
                        "code": -32602,
                        "message": "Invalid request content: ...",
                        "data": [
                          {
                            "reason": "INVALID_PARAMS",
                            "domain": "a2a-protocol.org",
                            "metadata": {}
                          }
                        ]
                      }
                    }
                  },
                  "taskNotFound": {
                    "summary": "Error — task not found",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 2,
                      "error": {
                        "code": -32001,
                        "message": "Task not found."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-badges": [
          {
            "name": "BETA",
            "color": "blue",
            "position": "after"
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-KEY"
      }
    },
    "schemas": {
      "JSONRPCRequest": {
        "type": "object",
        "description": "JSON-RPC 2.0 request envelope. The method field selects the A2A operation and params carries its method-specific parameters.",
        "required": [
          "jsonrpc",
          "id",
          "method",
          "params"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "description": "JSON-RPC protocol version. Always \"2.0\".",
            "const": "2.0",
            "example": "2.0"
          },
          "id": {
            "description": "Client-chosen request identifier, echoed back in the response.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              }
            ],
            "example": 1
          },
          "method": {
            "type": "string",
            "description": "The A2A method to invoke. Supported values: `SendMessage`, `GetTask`, `CancelTask`. Confirm the exact literals against the Agent Card before use, as additional methods may be added over time.\n",
            "example": "SendMessage"
          },
          "params": {
            "type": "object",
            "description": "Method-specific parameters. The shape depends on `method` — see the request examples on the POST operation for each supported method.\n",
            "example": {
              "message": {
                "messageId": "9229e770-767c-417b-a0b0-f0741243c581",
                "role": "ROLE_USER",
                "parts": [
                  {
                    "text": "Provide me data to help onboarding my business partner Name: Boehringer Ingelheim GmbH, Country: DE, City: Bieberach"
                  }
                ]
              },
              "metadata": {}
            }
          }
        }
      },
      "JSONRPCSuccessResponse": {
        "type": "object",
        "description": "JSON-RPC 2.0 success response envelope.",
        "required": [
          "jsonrpc",
          "id",
          "result"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "description": "JSON-RPC protocol version. Always \"2.0\".",
            "const": "2.0",
            "example": "2.0"
          },
          "id": {
            "description": "The request identifier echoed back from the request.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              }
            ],
            "example": 1
          },
          "result": {
            "description": "The successful result — a Task (for asynchronous processing) or a direct Message.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/Task"
              },
              {
                "$ref": "#/components/schemas/Message"
              }
            ]
          }
        }
      },
      "JSONRPCErrorResponse": {
        "type": "object",
        "description": "JSON-RPC 2.0 error response envelope.",
        "required": [
          "jsonrpc",
          "id",
          "error"
        ],
        "properties": {
          "jsonrpc": {
            "type": "string",
            "description": "JSON-RPC protocol version. Always \"2.0\".",
            "const": "2.0",
            "example": "2.0"
          },
          "id": {
            "description": "The request identifier echoed back from the request.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              }
            ],
            "example": 1
          },
          "error": {
            "description": "The error object describing the failure.",
            "$ref": "#/components/schemas/JSONRPCError"
          }
        }
      },
      "JSONRPCError": {
        "type": "object",
        "description": "JSON-RPC 2.0 error object. Standard JSON-RPC errors use codes\n-32700..-32603; A2A-specific errors use codes -32001..-32009\n(see the A2A specification §3.3.2 / §9.5).\n\n| Code | Name | Meaning |\n| --- | --- | --- |\n| -32700 | ParseError | Invalid JSON was received; the payload could not be parsed. |\n| -32600 | InvalidRequest | The payload is not a valid JSON-RPC 2.0 request object. |\n| -32601 | MethodNotFound | The requested `method` does not exist or is not supported. |\n| -32602 | InvalidParams | The `params` are invalid, e.g. a bad enum value or missing field. |\n| -32603 | InternalError | An internal error occurred while processing the request. |\n| -32001 | TaskNotFoundError | The referenced task does not exist. |\n| -32002 | TaskNotCancelableError | The task exists but is in a state that cannot be canceled. |\n| -32003 | PushNotificationNotSupportedError | The agent does not support push notifications. |\n| -32004 | UnsupportedOperationError | The requested operation is not supported by the agent. |\n| -32005 | ContentTypeNotSupportedError | A content type in the request is not supported. |\n| -32006 | InvalidAgentResponseError | The agent produced an invalid response. |\n| -32007 | ExtendedAgentCardNotConfiguredError | An authenticated extended Agent Card was requested but is not configured. |\n| -32008 | ExtensionSupportRequiredError | A required A2A extension is not supported by the client. |\n| -32009 | VersionNotSupportedError | The requested A2A protocol version is not supported. |\n",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int32",
            "description": "The JSON-RPC or A2A error code. See the table in this object's description for the full list of values and their meanings.",
            "example": -32602
          },
          "message": {
            "type": "string",
            "description": "A short human-readable description of the error.",
            "example": "Task not found."
          },
          "data": {
            "type": "array",
            "description": "Optional structured error details, following the google.rpc error detail model. Present for validation errors and other cases where the agent can supply machine-readable context.\n",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            }
          }
        }
      },
      "ErrorDetail": {
        "type": "object",
        "description": "A single structured error detail providing machine-readable context about a failure, following the reason/domain/metadata error model.\n",
        "properties": {
          "reason": {
            "type": "string",
            "description": "A short, uppercase reason code identifying the cause of the error.",
            "example": "INVALID_PARAMS"
          },
          "domain": {
            "type": "string",
            "description": "The logical domain that owns the reason code.",
            "example": "a2a-protocol.org"
          },
          "metadata": {
            "type": "object",
            "description": "Additional key-value context about the error.",
            "example": {}
          }
        }
      },
      "Role": {
        "type": "string",
        "description": "The role of the message sender.\n\nList of values:\n* ROLE_UNSPECIFIED: The role is not specified.\n* ROLE_USER: The message was produced by the client (user).\n* ROLE_AGENT: The message was produced by the agent.\n",
        "example": "ROLE_USER",
        "enum": [
          "ROLE_UNSPECIFIED",
          "ROLE_USER",
          "ROLE_AGENT"
        ],
        "x-enumDescriptions": {
          "ROLE_UNSPECIFIED": "The role is not specified.",
          "ROLE_USER": "The message was produced by the client.",
          "ROLE_AGENT": "The message was produced by the agent."
        }
      },
      "Part": {
        "type": "object",
        "description": "One content unit of a Message or Artifact. Exactly one of text, raw, url or data is set.",
        "properties": {
          "text": {
            "type": "string",
            "description": "Plain-text content of the part.",
            "example": "What's the weather in Berlin?"
          },
          "raw": {
            "type": "string",
            "format": "byte",
            "description": "Base64-encoded raw bytes of a file.",
            "example": "SGVsbG8gd29ybGQ="
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "URL pointing to the content of the part.",
            "example": "https://files.cdq.com/example.pdf"
          },
          "data": {
            "description": "Arbitrary structured JSON value.",
            "example": {
              "key": "value"
            }
          },
          "metadata": {
            "type": "object",
            "description": "Optional metadata about the part.",
            "example": {}
          },
          "filename": {
            "type": "string",
            "description": "File name for file parts.",
            "example": "report.pdf"
          },
          "mediaType": {
            "type": "string",
            "description": "MIME type of the part content, e.g. \"text/plain\", \"application/json\", \"image/png\".",
            "example": "text/plain"
          }
        }
      },
      "Message": {
        "type": "object",
        "description": "A message exchanged between a client and the agent.",
        "required": [
          "messageId",
          "role",
          "parts"
        ],
        "properties": {
          "messageId": {
            "type": "string",
            "description": "Unique identifier of the message, chosen by the sender.",
            "example": "9229e770-767c-417b-a0b0-f0741243c581"
          },
          "contextId": {
            "type": "string",
            "description": "Identifier of the conversation context this message belongs to.",
            "example": "ctx-xyz789"
          },
          "taskId": {
            "type": "string",
            "description": "Identifier of the task this message relates to, if any.",
            "example": "task-abc123"
          },
          "role": {
            "description": "Role of the message sender.",
            "$ref": "#/components/schemas/Role"
          },
          "parts": {
            "type": "array",
            "description": "Ordered content parts that make up the message.",
            "items": {
              "$ref": "#/components/schemas/Part"
            }
          },
          "metadata": {
            "type": "object",
            "description": "Optional metadata about the message.",
            "example": {}
          },
          "extensions": {
            "type": "array",
            "description": "URIs of A2A extensions active for this message.",
            "items": {
              "type": "string",
              "example": "https://a2a-protocol.org/ext/example/v1"
            }
          },
          "referenceTaskIds": {
            "type": "array",
            "description": "Identifiers of tasks referenced by this message.",
            "items": {
              "type": "string",
              "example": "task-abc123"
            }
          }
        }
      },
      "Artifact": {
        "type": "object",
        "description": "An output produced by the agent as part of a task.",
        "required": [
          "artifactId",
          "parts"
        ],
        "properties": {
          "artifactId": {
            "type": "string",
            "description": "Unique identifier of the artifact.",
            "example": "artifact-1"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name of the artifact.",
            "example": "Onboarding data"
          },
          "description": {
            "type": "string",
            "description": "Human-readable description of the artifact.",
            "example": "Enriched business partner data for onboarding."
          },
          "parts": {
            "type": "array",
            "description": "Content parts that make up the artifact.",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Part"
            }
          },
          "metadata": {
            "type": "object",
            "description": "Optional metadata about the artifact.",
            "example": {}
          },
          "extensions": {
            "type": "array",
            "description": "URIs of A2A extensions active for this artifact.",
            "items": {
              "type": "string",
              "example": "https://a2a-protocol.org/ext/example/v1"
            }
          }
        }
      },
      "TaskState": {
        "type": "string",
        "description": "The lifecycle state of a task.\n\nList of values:\n* TASK_STATE_UNSPECIFIED: The state is not specified.\n* TASK_STATE_SUBMITTED: The task has been submitted and is queued.\n* TASK_STATE_WORKING: The task is being processed.\n* TASK_STATE_COMPLETED: The task finished successfully.\n* TASK_STATE_FAILED: The task terminated with an error.\n* TASK_STATE_CANCELED: The task was canceled.\n* TASK_STATE_INPUT_REQUIRED: The task is paused waiting for client input.\n* TASK_STATE_REJECTED: The task was rejected by the agent.\n* TASK_STATE_AUTH_REQUIRED: The task requires authentication to proceed.\n",
        "example": "TASK_STATE_COMPLETED",
        "enum": [
          "TASK_STATE_UNSPECIFIED",
          "TASK_STATE_SUBMITTED",
          "TASK_STATE_WORKING",
          "TASK_STATE_COMPLETED",
          "TASK_STATE_FAILED",
          "TASK_STATE_CANCELED",
          "TASK_STATE_INPUT_REQUIRED",
          "TASK_STATE_REJECTED",
          "TASK_STATE_AUTH_REQUIRED"
        ],
        "x-enumDescriptions": {
          "TASK_STATE_UNSPECIFIED": "The state is not specified.",
          "TASK_STATE_SUBMITTED": "The task has been submitted and is queued.",
          "TASK_STATE_WORKING": "The task is being processed.",
          "TASK_STATE_COMPLETED": "The task finished successfully.",
          "TASK_STATE_FAILED": "The task terminated with an error.",
          "TASK_STATE_CANCELED": "The task was canceled.",
          "TASK_STATE_INPUT_REQUIRED": "The task is paused waiting for client input.",
          "TASK_STATE_REJECTED": "The task was rejected by the agent.",
          "TASK_STATE_AUTH_REQUIRED": "The task requires authentication to proceed."
        }
      },
      "TaskStatus": {
        "type": "object",
        "description": "The current status of a task, including its state and an optional status message.",
        "required": [
          "state"
        ],
        "properties": {
          "state": {
            "description": "The current lifecycle state of the task.",
            "$ref": "#/components/schemas/TaskState"
          },
          "message": {
            "description": "An optional message describing the current status.",
            "$ref": "#/components/schemas/Message"
          },
          "timestamp": {
            "type": "string",
            "description": "ISO 8601 timestamp of when this status was set.",
            "example": "2026-10-29T07:29:22Z"
          }
        }
      },
      "Task": {
        "type": "object",
        "description": "A unit of work processed by the agent, tracked through its lifecycle.",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the task.",
            "example": "task-abc123"
          },
          "contextId": {
            "type": "string",
            "description": "Identifier of the conversation context this task belongs to.",
            "example": "ctx-xyz789"
          },
          "status": {
            "description": "The current status of the task.",
            "$ref": "#/components/schemas/TaskStatus"
          },
          "artifacts": {
            "type": "array",
            "description": "Artifacts produced by the task.",
            "items": {
              "$ref": "#/components/schemas/Artifact"
            }
          },
          "history": {
            "type": "array",
            "description": "The message history of the task.",
            "items": {
              "$ref": "#/components/schemas/Message"
            }
          },
          "metadata": {
            "type": "object",
            "description": "Optional metadata about the task.",
            "example": {}
          }
        }
      },
      "AgentCard": {
        "type": "object",
        "description": "The A2A discovery document describing an agent's endpoint, transport, capabilities and skills.",
        "required": [
          "protocolVersion",
          "name",
          "url",
          "version",
          "capabilities",
          "defaultInputModes",
          "defaultOutputModes",
          "skills"
        ],
        "properties": {
          "protocolVersion": {
            "type": "string",
            "description": "The A2A protocol version this agent implements.",
            "example": "1.0"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name of the agent.",
            "example": "CDQ Genius"
          },
          "description": {
            "type": "string",
            "description": "Human-readable description of what the agent does.",
            "example": "CDQ's agent for business partner data enrichment, lookup and onboarding."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The base URL of the agent's A2A endpoint.",
            "example": "https://api.cdq.com/a2a/cdq-genius/"
          },
          "preferredTransport": {
            "type": "string",
            "description": "The transport binding used at the endpoint URL, e.g. \"JSONRPC\".",
            "example": "JSONRPC"
          },
          "version": {
            "type": "string",
            "description": "The version of the agent.",
            "example": "1.0"
          },
          "documentationUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL to human-readable documentation for the agent.",
            "example": "https://developer.cdq.com"
          },
          "provider": {
            "description": "Information about the organization providing the agent.",
            "$ref": "#/components/schemas/AgentProvider"
          },
          "capabilities": {
            "description": "Optional capabilities supported by the agent.",
            "$ref": "#/components/schemas/AgentCapabilities"
          },
          "defaultInputModes": {
            "type": "array",
            "description": "Media types the agent accepts as input by default.",
            "items": {
              "type": "string",
              "example": "text/plain"
            }
          },
          "defaultOutputModes": {
            "type": "array",
            "description": "Media types the agent produces as output by default.",
            "items": {
              "type": "string",
              "example": "text/plain"
            }
          },
          "skills": {
            "type": "array",
            "description": "The skills the agent offers.",
            "items": {
              "$ref": "#/components/schemas/AgentSkill"
            }
          }
        }
      },
      "AgentProvider": {
        "type": "object",
        "description": "Information about the organization providing an agent.",
        "required": [
          "organization",
          "url"
        ],
        "properties": {
          "organization": {
            "type": "string",
            "description": "Name of the providing organization.",
            "example": "CDQ AG"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "URL of the providing organization.",
            "example": "https://www.cdq.com"
          }
        }
      },
      "AgentCapabilities": {
        "type": "object",
        "description": "The optional capabilities an agent supports.",
        "properties": {
          "streaming": {
            "type": "boolean",
            "description": "Whether the agent supports streaming responses.",
            "example": false
          },
          "pushNotifications": {
            "type": "boolean",
            "description": "Whether the agent supports push notifications for task updates.",
            "example": false
          },
          "stateTransitionHistory": {
            "type": "boolean",
            "description": "Whether the agent exposes task state transition history.",
            "example": false
          }
        }
      },
      "AgentSkill": {
        "type": "object",
        "description": "A distinct capability or function the agent can perform.",
        "required": [
          "id",
          "name",
          "description",
          "tags"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the skill.",
            "example": "business-partner-onboarding"
          },
          "name": {
            "type": "string",
            "description": "Human-readable name of the skill.",
            "example": "Business Partner Onboarding"
          },
          "description": {
            "type": "string",
            "description": "Human-readable description of the skill.",
            "example": "Provides enriched reference data to onboard a business partner."
          },
          "tags": {
            "type": "array",
            "description": "Keywords describing the skill's capability categories.",
            "items": {
              "type": "string",
              "example": "onboarding"
            }
          },
          "examples": {
            "type": "array",
            "description": "Example prompts or scenarios the skill can handle.",
            "items": {
              "type": "string",
              "example": "Provide me data to help onboarding my business partner Boehringer Ingelheim GmbH."
            }
          },
          "inputModes": {
            "type": "array",
            "description": "Media types the skill accepts, overriding the agent defaults.",
            "items": {
              "type": "string",
              "example": "text/plain"
            }
          },
          "outputModes": {
            "type": "array",
            "description": "Media types the skill produces, overriding the agent defaults.",
            "items": {
              "type": "string",
              "example": "text/plain"
            }
          }
        }
      }
    }
  }
}