{
  "version":"2.0",
  "metadata":{
    "apiVersion":"2025-12-01",
    "auth":["aws.auth#sigv4"],
    "endpointPrefix":"agent-registry",
    "protocol":"rest-json",
    "protocols":["rest-json"],
    "serviceFullName":"Agent Registry",
    "serviceId":"Agent Registry",
    "signatureVersion":"v4",
    "signingName":"agent-registry",
    "uid":"agent-registry-2025-12-01"
  },
  "operations":{
    "BatchGetDiscoverableRegistryRecord":{
      "name":"BatchGetDiscoverableRegistryRecord",
      "http":{
        "method":"POST",
        "requestUri":"/discoverable-records-batch",
        "responseCode":200
      },
      "input":{"shape":"BatchGetDiscoverableRegistryRecordRequest"},
      "output":{"shape":"BatchGetDiscoverableRegistryRecordResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"UnauthorizedException"},
        {"shape":"ValidationException"}
      ],
      "documentation":"<p> Retrieves multiple discoverable registry records by ID from a single registry. Records that cannot be retrieved are reported individually in the <code>errors</code> list rather than failing the entire request.</p>"
    },
    "ListDiscoverableRegistryRecords":{
      "name":"ListDiscoverableRegistryRecords",
      "http":{
        "method":"POST",
        "requestUri":"/registries/{registryId}/discoverable-records-list",
        "responseCode":200
      },
      "input":{"shape":"ListDiscoverableRegistryRecordsRequest"},
      "output":{"shape":"ListDiscoverableRegistryRecordsResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"UnauthorizedException"},
        {"shape":"ValidationException"}
      ],
      "documentation":"<p> Lists the discoverable registry records in a registry. You can optionally filter and paginate the results.</p>",
      "readonly":true
    },
    "SearchDiscoverableRegistryRecords":{
      "name":"SearchDiscoverableRegistryRecords",
      "http":{
        "method":"POST",
        "requestUri":"/discoverable-records-search",
        "responseCode":200
      },
      "input":{"shape":"SearchDiscoverableRegistryRecordsRequest"},
      "output":{"shape":"SearchDiscoverableRegistryRecordsResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"UnauthorizedException"},
        {"shape":"ValidationException"}
      ],
      "documentation":"<p> Searches the discoverable registry records in a registry using a natural language query. Returns metadata for the matching records ordered by relevance.</p>"
    }
  },
  "shapes":{
    "A2aAgentCardDescriptor":{
      "type":"structure",
      "members":{
        "data":{"shape":"DescriptorData"},
        "dataSchemaVersion":{"shape":"DataSchemaVersion"},
        "source":{
          "shape":"DescriptorSource",
          "documentation":"<p> The source location from which the A2A (Agent-to-Agent) agent card descriptor content was retrieved.</p>"
        }
      },
      "documentation":"<p>Base mixin for A2A agent card descriptor content</p>"
    },
    "AccessDeniedException":{
      "type":"structure",
      "members":{
        "message":{"shape":"NonBlankString"}
      },
      "documentation":"<p>The caller is not authorized to perform the requested action.</p>",
      "error":{
        "httpStatusCode":403,
        "senderFault":true
      },
      "exception":true
    },
    "AgentSkillsAdditionalData":{
      "type":"structure",
      "members":{
        "skillMd":{"shape":"AgentSkillsMdDescriptor"}
      },
      "documentation":"<p> Additional data for an agent skills definition descriptor.</p>"
    },
    "AgentSkillsDefinitionDescriptor":{
      "type":"structure",
      "members":{
        "data":{"shape":"DescriptorData"},
        "dataSchemaVersion":{"shape":"DataSchemaVersion"},
        "additionalData":{
          "shape":"AgentSkillsAdditionalData",
          "documentation":"<p> Additional data for the agent skills definition, such as the skills markdown descriptor.</p>"
        }
      },
      "documentation":"<p>Base mixin for agent skills definition descriptor content</p>"
    },
    "AgentSkillsMdDescriptor":{
      "type":"structure",
      "members":{
        "data":{"shape":"DescriptorData"},
        "dataSchemaVersion":{"shape":"DataSchemaVersion"},
        "source":{
          "shape":"DescriptorSource",
          "documentation":"<p> The source location from which the agent skills markdown content was retrieved.</p>"
        }
      },
      "documentation":"<p>Base mixin for agent skills markdown descriptor content</p>"
    },
    "BatchGetDiscoverableRegistryRecordError":{
      "type":"structure",
      "required":[
        "registryId",
        "recordId",
        "errorCode"
      ],
      "members":{
        "registryId":{"shape":"RegistryIdentifier"},
        "recordId":{"shape":"RecordIdentifier"},
        "errorCode":{
          "shape":"BatchGetDiscoverableRegistryRecordErrorCode",
          "documentation":"<p> The machine-readable reason that the record could not be retrieved.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p> An optional human-readable detail about the error. Do not parse this value programmatically.</p>"
        }
      },
      "documentation":"<p> Describes why a requested record could not be retrieved.</p>"
    },
    "BatchGetDiscoverableRegistryRecordErrorCode":{
      "type":"string",
      "enum":[
        "RESOURCE_NOT_FOUND",
        "ACCESS_DENIED",
        "INTERNAL_ERROR"
      ]
    },
    "BatchGetDiscoverableRegistryRecordErrorList":{
      "type":"list",
      "member":{"shape":"BatchGetDiscoverableRegistryRecordError"}
    },
    "BatchGetDiscoverableRegistryRecordRequest":{
      "type":"structure",
      "required":["entries"],
      "members":{
        "entries":{
          "shape":"BatchGetDiscoverableRegistryRecordRequestEntriesList",
          "documentation":"<p> The registry-scoped groups of record IDs to retrieve. Currently, you can specify exactly one entry.</p>"
        }
      }
    },
    "BatchGetDiscoverableRegistryRecordRequestEntriesList":{
      "type":"list",
      "member":{"shape":"RegistryRecordsEntry"},
      "max":1,
      "min":1
    },
    "BatchGetDiscoverableRegistryRecordResponse":{
      "type":"structure",
      "required":[
        "registryRecords",
        "errors"
      ],
      "members":{
        "registryRecords":{
          "shape":"RegistryRecordSummaryList",
          "documentation":"<p> The records that were successfully retrieved. Each record correlates to the request by its <code>recordId</code>.</p>"
        },
        "errors":{
          "shape":"BatchGetDiscoverableRegistryRecordErrorList",
          "documentation":"<p> The per-record errors for records that could not be retrieved. This list is empty when all requested records were returned.</p>"
        }
      }
    },
    "CustomDescriptor":{
      "type":"structure",
      "members":{
        "data":{"shape":"DescriptorData"}
      },
      "documentation":"<p>Custom descriptor for user-defined content</p>"
    },
    "DataSchemaVersion":{
      "type":"string",
      "documentation":"<p>Version of the descriptor type schema</p>",
      "max":255,
      "min":1
    },
    "DateTimestamp":{
      "type":"timestamp",
      "documentation":"<p>Timestamp in ISO 8601 date-time format</p>",
      "timestampFormat":"iso8601"
    },
    "Description":{
      "type":"string",
      "documentation":"<p>Description of the Resource</p>",
      "max":4096,
      "min":1,
      "sensitive":true
    },
    "DescriptorData":{
      "type":"string",
      "documentation":"<p>Descriptor payload data</p>",
      "max":102400,
      "min":1,
      "sensitive":true
    },
    "DescriptorSource":{
      "type":"structure",
      "members":{
        "fromUrl":{"shape":"DescriptorSourceFromUrl"}
      },
      "documentation":"<p> The source location from which a descriptor's content was retrieved.</p>"
    },
    "DescriptorSourceFromUrl":{
      "type":"structure",
      "required":["url"],
      "members":{
        "url":{"shape":"DescriptorSourceUrl"}
      },
      "documentation":"<p>Base mixin for descriptor source from URL</p>"
    },
    "DescriptorSourceUrl":{
      "type":"string",
      "documentation":"<p>URL source for descriptor content</p>",
      "max":2048,
      "min":1,
      "pattern":"https://.*"
    },
    "Descriptors":{
      "type":"structure",
      "members":{
        "mcpServer":{"shape":"McpServerDescriptor"},
        "a2aAgentCard":{"shape":"A2aAgentCardDescriptor"},
        "agentSkillsDefinition":{"shape":"AgentSkillsDefinitionDescriptor"},
        "custom":{"shape":"CustomDescriptor"}
      },
      "documentation":"<p> The protocol-specific descriptors that describe how to connect to and use the registry record.</p>"
    },
    "DiscoverableFilterValues":{
      "type":"list",
      "member":{"shape":"FilterValue"},
      "max":10,
      "min":1
    },
    "DiscoverableRegistryRecordSummary":{
      "type":"structure",
      "required":[
        "registryArn",
        "recordArn",
        "recordId",
        "name",
        "recordType",
        "recordVersion",
        "status",
        "createdAt",
        "updatedAt"
      ],
      "members":{
        "registryArn":{"shape":"RegistryArn"},
        "recordArn":{"shape":"RegistryRecordArn"},
        "recordId":{"shape":"RegistryRecordId"},
        "name":{"shape":"RegistryRecordName"},
        "description":{"shape":"Description"},
        "displayName":{"shape":"RegistryRecordDisplayName"},
        "recordType":{"shape":"RecordType"},
        "recordVersion":{"shape":"RegistryRecordVersion"},
        "status":{"shape":"RegistryRecordStatus"},
        "createdAt":{"shape":"DateTimestamp"},
        "updatedAt":{"shape":"DateTimestamp"}
      },
      "documentation":"<p> Summary information about a discoverable registry record returned by <code> ListDiscoverableRegistryRecords</code>. This summary does not include descriptors.</p>"
    },
    "DiscoverableRegistryRecordSummaryList":{
      "type":"list",
      "member":{"shape":"DiscoverableRegistryRecordSummary"}
    },
    "FilterValue":{
      "type":"string",
      "documentation":"<p>A single filter value. Constrained by length only; the accepted set of values is filter-specific and validated server-side so enum-style values such as READY or AWS_IAM are accepted.</p>",
      "max":255,
      "min":1
    },
    "InternalServerException":{
      "type":"structure",
      "members":{
        "message":{"shape":"NonBlankString"}
      },
      "documentation":"<p>The request failed due to an unexpected internal error; the caller may retry.</p>",
      "error":{"httpStatusCode":500},
      "exception":true,
      "fault":true
    },
    "ListDiscoverableRegistryRecordsRequest":{
      "type":"structure",
      "required":["registryId"],
      "members":{
        "registryId":{
          "shape":"RegistryIdentifier",
          "location":"uri",
          "locationName":"registryId"
        },
        "maxResults":{
          "shape":"ListDiscoverableRegistryRecordsRequestMaxResultsInteger",
          "documentation":"<p> The maximum number of records to return in a single page. Valid values are 1 through 100.</p>"
        },
        "nextToken":{
          "shape":"ListDiscoverableRegistryRecordsRequestNextTokenString",
          "documentation":"<p> The pagination token returned by a previous request. Use this value to retrieve the next page of results.</p>"
        },
        "filters":{
          "shape":"RegistryRecordFilterList",
          "documentation":"<p> The filters to apply to the discoverable registry record list.</p>"
        }
      }
    },
    "ListDiscoverableRegistryRecordsRequestMaxResultsInteger":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "ListDiscoverableRegistryRecordsRequestNextTokenString":{
      "type":"string",
      "max":4096,
      "min":1
    },
    "ListDiscoverableRegistryRecordsResponse":{
      "type":"structure",
      "required":["registryRecords"],
      "members":{
        "registryRecords":{
          "shape":"DiscoverableRegistryRecordSummaryList",
          "documentation":"<p> The page of discoverable registry record summaries.</p>"
        },
        "nextToken":{
          "shape":"String",
          "documentation":"<p> The pagination token to pass to a subsequent request to retrieve the next page of results. This field is absent when there are no more results.</p>"
        }
      }
    },
    "McpServerAdditionalData":{
      "type":"structure",
      "members":{
        "tools":{"shape":"McpToolsDescriptor"}
      },
      "documentation":"<p>Additional data for an MCP server descriptor</p>"
    },
    "McpServerDescriptor":{
      "type":"structure",
      "members":{
        "data":{"shape":"DescriptorData"},
        "dataSchemaVersion":{"shape":"DataSchemaVersion"},
        "additionalData":{"shape":"McpServerAdditionalData"},
        "source":{
          "shape":"DescriptorSource",
          "documentation":"<p> The source location from which the MCP (Model Context Protocol) server descriptor content was retrieved.</p>"
        }
      },
      "documentation":"<p>Base mixin for MCP server descriptor content</p>"
    },
    "McpToolsDescriptor":{
      "type":"structure",
      "members":{
        "data":{"shape":"DescriptorData"},
        "dataSchemaVersion":{"shape":"DataSchemaVersion"}
      },
      "documentation":"<p>MCP tools descriptor containing tool definitions</p>"
    },
    "MetadataFilterExpression":{
      "type":"structure",
      "members":{},
      "document":true,
      "sensitive":true
    },
    "NonBlankString":{
      "type":"string",
      "max":2048,
      "min":1,
      "pattern":"[\\s\\S]+"
    },
    "RecordIdentifier":{
      "type":"string",
      "documentation":"<p>Record identifier that accepts either ARN or ID format</p>",
      "max":2048,
      "min":1,
      "pattern":"(arn:aws(-[^:]+)?:agent-registry:[a-z0-9-]+:[0-9]{12}:registry/[a-zA-Z0-9]{12,16}/record/)?[a-zA-Z0-9]{12}"
    },
    "RecordType":{
      "type":"string",
      "documentation":"<p>Record type enum for registry record classification</p>",
      "enum":[
        "MCP",
        "AGENT",
        "CUSTOM",
        "SKILL"
      ]
    },
    "RegistryArn":{
      "type":"string",
      "documentation":"<p>Registry Amazon Resource Name</p>",
      "max":2048,
      "min":46,
      "pattern":"arn:aws(-[^:]+)?:agent-registry:[a-z0-9-]+:[0-9]{12}:registry/[a-zA-Z0-9]{12,16}"
    },
    "RegistryIdentifier":{
      "type":"string",
      "documentation":"<p>Registry identifier that accepts either ARN or ID format</p>",
      "max":2048,
      "min":1,
      "pattern":"(arn:aws(-[^:]+)?:agent-registry:[a-z0-9-]+:[0-9]{12}:registry/)?[a-zA-Z0-9]{12,16}"
    },
    "RegistryRecordArn":{
      "type":"string",
      "documentation":"<p>Registry Record Amazon Resource Name</p>",
      "max":2048,
      "min":1,
      "pattern":"arn:aws(-[^:]+)?:agent-registry:[a-z0-9-]+:[0-9]{12}:registry/[a-zA-Z0-9]{12,16}/record/[a-zA-Z0-9]{12}"
    },
    "RegistryRecordDisplayName":{
      "type":"string",
      "documentation":"<p>Display name for a registry record</p>",
      "max":255,
      "min":1
    },
    "RegistryRecordFilter":{
      "type":"structure",
      "required":[
        "name",
        "values"
      ],
      "members":{
        "name":{
          "shape":"RegistryRecordFilterName",
          "documentation":"<p> The attribute to filter on.</p>"
        },
        "values":{
          "shape":"DiscoverableFilterValues",
          "documentation":"<p> The values to match for the attribute.</p>"
        }
      },
      "documentation":"<p> A single filter applied to a <code>ListDiscoverableRegistryRecords</code> request.</p>"
    },
    "RegistryRecordFilterList":{
      "type":"list",
      "member":{"shape":"RegistryRecordFilter"},
      "documentation":"<p> The list of filters applied to a <code>ListDiscoverableRegistryRecords</code> request.</p>",
      "max":10,
      "min":0
    },
    "RegistryRecordFilterName":{
      "type":"string",
      "documentation":"<p> The attribute to filter registry records on.</p>",
      "enum":[
        "recordType",
        "descriptorType"
      ]
    },
    "RegistryRecordId":{
      "type":"string",
      "documentation":"<p>Registry Record unique identifier - 12-character alphanumeric string</p>",
      "max":12,
      "min":12,
      "pattern":"[a-zA-Z0-9]{12}"
    },
    "RegistryRecordName":{
      "type":"string",
      "documentation":"<p>Registry Record name</p>",
      "max":255,
      "min":1,
      "pattern":"[a-zA-Z0-9][a-zA-Z0-9_\\-\\.\\/]*"
    },
    "RegistryRecordStatus":{
      "type":"string",
      "documentation":"<p>Registry record status</p>",
      "enum":[
        "DRAFT",
        "PENDING_APPROVAL",
        "APPROVED",
        "REJECTED",
        "DEPRECATED",
        "CREATING",
        "UPDATING",
        "CREATE_FAILED",
        "UPDATE_FAILED"
      ]
    },
    "RegistryRecordSummary":{
      "type":"structure",
      "required":[
        "registryArn",
        "recordArn",
        "recordId",
        "name",
        "recordType",
        "descriptors",
        "recordVersion",
        "status",
        "createdAt",
        "updatedAt"
      ],
      "members":{
        "registryArn":{"shape":"RegistryArn"},
        "recordArn":{"shape":"RegistryRecordArn"},
        "recordId":{"shape":"RegistryRecordId"},
        "name":{"shape":"RegistryRecordName"},
        "description":{"shape":"Description"},
        "displayName":{"shape":"RegistryRecordDisplayName"},
        "recordType":{"shape":"RecordType"},
        "descriptors":{
          "shape":"Descriptors",
          "documentation":"<p> The protocol-specific descriptors that describe how to connect to and use the record.</p>"
        },
        "recordVersion":{"shape":"RegistryRecordVersion"},
        "status":{"shape":"RegistryRecordStatus"},
        "createdAt":{"shape":"DateTimestamp"},
        "updatedAt":{"shape":"DateTimestamp"}
      },
      "documentation":"<p> Summary information about a registry record, including its descriptors.</p>"
    },
    "RegistryRecordSummaryList":{
      "type":"list",
      "member":{"shape":"RegistryRecordSummary"}
    },
    "RegistryRecordVersion":{
      "type":"string",
      "documentation":"<p>Version of the registry record</p>",
      "max":255,
      "min":1,
      "pattern":"[a-zA-Z0-9.-]+"
    },
    "RegistryRecordsEntry":{
      "type":"structure",
      "required":[
        "registryId",
        "recordIds"
      ],
      "members":{
        "registryId":{"shape":"RegistryIdentifier"},
        "recordIds":{
          "shape":"RegistryRecordsEntryRecordIdsList",
          "documentation":"<p> The record IDs to retrieve from the registry. You can specify 1 through 100 record IDs.</p>"
        }
      },
      "documentation":"<p> Binds one registry to the record IDs requested from it.</p>"
    },
    "RegistryRecordsEntryRecordIdsList":{
      "type":"list",
      "member":{"shape":"RecordIdentifier"},
      "max":100,
      "min":1
    },
    "ResourceNotFoundException":{
      "type":"structure",
      "members":{
        "message":{"shape":"NonBlankString"}
      },
      "documentation":"<p>The requested resource was not found.</p>",
      "error":{
        "httpStatusCode":404,
        "senderFault":true
      },
      "exception":true
    },
    "SearchDiscoverableRegistryRecordsRequest":{
      "type":"structure",
      "required":[
        "searchQuery",
        "registryIds"
      ],
      "members":{
        "searchQuery":{
          "shape":"SearchQuery",
          "documentation":"<p> The natural language query to search for matching registry records.</p>"
        },
        "registryIds":{
          "shape":"SearchDiscoverableRegistryRecordsRequestRegistryIdsList",
          "documentation":"<p> The registry identifiers to search within. Currently, you must specify exactly one registry identifier. You can provide either the full Amazon Web Services Resource Name (ARN) or the registry ID.</p>"
        },
        "maxResults":{
          "shape":"SearchDiscoverableRegistryRecordsRequestMaxResultsInteger",
          "documentation":"<p> The maximum number of results to return. Valid values are 1 through 20. The default value is 10.</p>"
        },
        "filters":{
          "shape":"MetadataFilterExpression",
          "documentation":"<p> An optional structured JSON metadata filter that narrows the search results. Supports the field-level operators <code>$eq</code>, <code>$ne</code>, and <code>$in</code>, and the logical operators <code>$and</code> and <code>$or</code> on filterable fields.</p>"
        }
      }
    },
    "SearchDiscoverableRegistryRecordsRequestMaxResultsInteger":{
      "type":"integer",
      "box":true,
      "max":20,
      "min":1
    },
    "SearchDiscoverableRegistryRecordsRequestRegistryIdsList":{
      "type":"list",
      "member":{"shape":"RegistryIdentifier"},
      "max":1,
      "min":1
    },
    "SearchDiscoverableRegistryRecordsResponse":{
      "type":"structure",
      "required":["registryRecords"],
      "members":{
        "registryRecords":{
          "shape":"RegistryRecordSummaryList",
          "documentation":"<p> The registry records that match the search query, ordered by relevance.</p>"
        }
      }
    },
    "SearchQuery":{
      "type":"string",
      "max":256,
      "min":0,
      "sensitive":true
    },
    "String":{"type":"string"},
    "ThrottlingException":{
      "type":"structure",
      "members":{
        "message":{"shape":"NonBlankString"}
      },
      "documentation":"<p>The request was denied due to request throttling; the caller may retry after a delay.</p>",
      "error":{
        "httpStatusCode":429,
        "senderFault":true
      },
      "exception":true
    },
    "UnauthorizedException":{
      "type":"structure",
      "members":{
        "message":{"shape":"NonBlankString"}
      },
      "documentation":"<p>The request could not be authenticated.</p>",
      "error":{
        "httpStatusCode":401,
        "senderFault":true
      },
      "exception":true
    },
    "ValidationException":{
      "type":"structure",
      "required":[
        "message",
        "reason"
      ],
      "members":{
        "message":{"shape":"String"},
        "reason":{
          "shape":"ValidationExceptionReason",
          "documentation":"<p>The reason the request failed validation.</p>"
        },
        "fieldList":{
          "shape":"ValidationExceptionFieldList",
          "documentation":"<p>The list of input fields that failed validation.</p>"
        }
      },
      "documentation":"<p>The request failed validation of one or more input fields.</p>",
      "error":{
        "httpStatusCode":400,
        "senderFault":true
      },
      "exception":true
    },
    "ValidationExceptionField":{
      "type":"structure",
      "required":[
        "name",
        "message"
      ],
      "members":{
        "name":{
          "shape":"String",
          "documentation":"<p>The name of the field that failed validation.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>A description of why the field failed validation.</p>"
        }
      },
      "documentation":"<p>Describes a single input field that failed validation.</p>"
    },
    "ValidationExceptionFieldList":{
      "type":"list",
      "member":{"shape":"ValidationExceptionField"}
    },
    "ValidationExceptionReason":{
      "type":"string",
      "enum":[
        "CannotParse",
        "FieldValidationFailed",
        "IdempotentParameterMismatchException",
        "EventInOtherSession",
        "ResourceConflict"
      ]
    }
  },
  "documentation":"<p>Agent Registry lets callers discover, list, and retrieve approved records published to a registry.</p>"
}
