Compartilhar via


Esquema de manifesto de plug-in da API 2.2 para Microsoft 365 Copilot

Os plug-ins de API permitem que Microsoft 365 Copilot interajam com as APIs REST descritas por uma descrição de OpenAPI. A descrição de OpenAPI num plug-in de API descreve as APIs REST com as quais o Copilot pode interagir. Além disso, um plug-in de API inclui um ficheiro de manifesto de plug-in que fornece metadados sobre o plug-in, como o nome, descrição e versão do plug-in. O manifesto de plug-in também inclui informações sobre as capacidades do plug-in, tais como as APIs que suporta e as operações que pode realizar.

O artigo seguinte descreve o esquema 2.2 utilizado pelos ficheiros de manifesto do plug-in da API. Para obter mais informações sobre plug-ins de API, veja Plug-ins de API para Microsoft 365 Copilot.

Alterações da versão anterior

Esta versão de esquema apresenta as seguintes alterações da versão 2.1.

  • Foi adicionada a security_info propriedade ao objeto Capacidades de função. Esta propriedade permite-lhe atestar o comportamento do plug-in para avaliar os riscos de chamar a função.
  • A propriedade preterida localization foi removida do objeto de capacidades do plug-in. Os manifestos gerados com o Teams Toolkit com o esquema 2.1 incluíam a propriedade preterida localization . Se esta propriedade estiver incluída, os manifestos que utilizam o esquema 2.2 falharão.

Esquema JSON

O esquema descrito neste documento pode ser encontrado no formato de Esquema JSONaqui.

Convenções

Referências relativas em URLs

Salvo especificação em contrário, todas as propriedades que são URLs poderão ser referências relativas. As referências relativas no documento de manifesto são relativas à localização do documento de manifesto.

Comprimento da cadeia

Salvo especificação em contrário, todas as propriedades de cadeia devem estar limitadas a 4K carateres. Este comprimento de cadeia não confere qualquer tamanho aceitável para todo o documento. Implementações livres para impor os seus próprios limites práticos ao comprimento do manifesto.

Propriedades não reconhecidas

Os objetos JSON definidos neste documento suportam apenas as propriedades descritas. As propriedades não reconhecidas em qualquer objeto JSON DEVEM tornar todo o documento inválido.

Localização de cadeias

As cadeias localizáveis podem utilizar uma chave de localização em vez de um valor literal. A sintaxe é [[key_name]], em key_name que é o nome da chave na localizationKeys propriedade nos ficheiros de localização. Para obter detalhes sobre a localização, veja Localizar o agente.

Exemplo de cadeia localizada

{
    "schema_version": "v2.2",
    "name_for_human": "[[plugin_name]]",
    "description_for_human": "[[plugin_description]]"
}

Objeto de manifesto de plug-in

A raiz do documento de manifesto de plug-in é um objeto JSON que contém propriedades que descrevem o plug-in.

O objeto de manifesto de plug-in contém as seguintes propriedades.

Propriedade Tipo Descrição
schema_version Cadeia de caracteres Obrigatório. A versão do esquema. As versões anteriores são v1 e v2. Deve ser definida como v2.2.
name_for_human Cadeia de caracteres Obrigatório. Um nome curto e legível por humanos para o plug-in. Tem de conter, pelo menos, um caráter não branco. Os carateres para além de 20 PODEM ser ignorados. Esta propriedade é localizável.
namespace Cadeia de caracteres Depreciado. Opcional.
description_for_model String Opcional. A descrição do plug-in fornecido ao modelo. Esta descrição deve descrever para que serve o plug-in e em que circunstâncias as suas funções são relevantes. Os carateres para além de 2048 PODEM ser ignorados. Esta propriedade é localizável.
description_for_human Cadeia de caracteres Obrigatório. Uma descrição legível por humanos do plug-in. Os carateres para além de 100 PODEM ser ignorados. Esta propriedade é localizável.
logo_url String Opcional. Um URL utilizado para obter um logótipo que pode ser utilizado pelo orquestrador. As implementações PODEM fornecer métodos alternativos para fornecer logótipos que cumpram os seus requisitos visuais. Esta propriedade é localizável.
contact_email String Opcional. Um endereço de e-mail de um contacto para segurança/moderação, suporte e desativação.
legal_info_url String Opcional. Um URL absoluto que localiza um documento que contém os termos de serviço do plug-in. Esta propriedade é localizável.
privacy_policy_url String Opcional. Um URL absoluto que localiza um documento que contém a política de privacidade do plug-in. Esta propriedade é localizável.
functions Matriz do objeto Função Opcional. Um conjunto de objetos de função que descreve as funções disponíveis para o plug-in. Cada nome de objeto de função TEM de ser exclusivo dentro da matriz. A ordem da matriz não é significativa. Se a functions propriedade não estiver presente e existir um runtime OpenAPI, as funções são inferidas a partir das operações OpenAPI.
runtimes Matriz do objeto de runtime OpenAPI Opcional. Um conjunto de objetos de runtime que descrevem os runtimes utilizados pelo plug-in.
capabilities Objeto de capacidades de plug-in Opcional. Descreve as capacidades do plug-in.

Objeto de função

Informações relacionadas com a forma como o modelo deve interagir com uma função.

O objeto de função contém as seguintes propriedades.

Propriedade Tipo Descrição
id String Opcional.
name Cadeia de caracteres Obrigatório. Uma cadeia que identifica exclusivamente esta função. Os objetos de runtime PODEM referenciar este identificador para vincular o runtime à função. Quando a função está vinculada a um runtime OpenAPI, o valor tem de corresponder a um operationId valor na descrição openAPI. O valor tem de corresponder à ^[A-Za-z0-9_]+$ expressão regular.
description String Opcional. Uma descrição melhor adaptada ao modelo, como considerações de comprimento do contexto de token ou palavra-chave utilização para pedidos de plug-in melhorados.
parameters Objeto parâmetros de função Opcional. Um objeto que contém propriedades que descrevem os parâmetros de uma função de uma forma agnóstica de runtime. Espelha a forma de json-schema , mas suporta apenas um pequeno subconjunto das capacidades de esquema JSON. Se a parameters propriedade não estiver presente, as funções descritas por um objeto de runtime do tipo OpenApi utilizam a descrição OpenAPI para determinar os parâmetros. Cada membro no objeto JSON é um objeto de parâmetro de função que descreve a semântica do parâmetro.
returns Devolver objeto OU Objeto de devolução avançada Opcional. Descreve a semântica do valor devolvido pela função.
states Objeto estados da função Opcional. Define objetos de estado para estados do orquestrador.
capabilities Objeto de capacidades de função Opcional. Contém uma coleção de dados utilizados para configurar capacidades opcionais do orquestrador ao invocar a função.

Exemplo de objeto de função

{
  "functions": [
    {
      "name": "add_todo",
      "description": "Adds a new Todo",
      "parameters": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          }
        },
        "required": [
          "description"
        ]
      },
      "returns": {
        "type": "string"
      }
    }
  ]
}

Objeto parâmetros de função

Um objeto que é utilizado para identificar o conjunto de parâmetros que podem ser transmitidos para a função. Este objeto está estruturado para espelho a forma de um objeto de Esquema JSON, mas só suporta um subconjunto de palavras-chave de Esquema JSON.

O objeto parâmetros da função contém as seguintes propriedades.

Propriedade Tipo Descrição
type String Opcional. O tipo de Esquema JSON. Tem que ser definida como object.
properties Objeto de propriedades de parâmetros de função Obrigatório. Um objeto que mapeia nomes de parâmetros para as respetivas definições.
required Matriz de cadeias de caracteres Opcional. Os nomes das propriedades que são parâmetros necessários. Ao contrário do esquema JSON, os valores nesta matriz TÊM de corresponder aos nomes listados na properties propriedade .
Exemplo de objeto de parâmetros de função
{
  "type": "object",
  "properties": {
    "param1": {
      "type": "string"
    },
    "param2": {
      "type": "number"
    }
  },
  "required": [
    "param1"
  ]
}

Objeto de propriedades de parâmetros de função

Um objeto que mapeia nomes de parâmetros para as respetivas definições.

O objeto de propriedades dos parâmetros da função contém as seguintes propriedades.

Propriedade Tipo Descrição
Correspondência de nomes ^[A-Za-z0-9_]+$ Objeto de parâmetro de função Opcional. A definição do parâmetro que corresponde ao parâmetro que corresponde ao nome da propriedade.

Objeto de parâmetro de função

Um objeto que descreve a semântica de um parâmetro de função.

O objeto do parâmetro de função contém as seguintes propriedades.

Propriedade Tipo Descrição
type Cadeia de caracteres Obrigatório. Especifica o tipo do parâmetro. Os valores possíveis são: string, array, boolean, integer, number.
items Objeto de parâmetro de função Opcional. Um objeto de parâmetro de função que descreve um único elemento numa matriz. SÓ tem de estar presente quando type for array.
enum Matriz de cadeias de caracteres Opcional. Uma matriz de valores válidos para este parâmetro. SÓ tem de estar presente quando type for string.
description String Opcional. Uma descrição do parâmetro.
default Matriz, Booleano, Cadeia, Número, Número Inteiro Opcional. Um valor do tipo especificado pela type propriedade que indica o valor que a API utiliza quando não é fornecido um valor para um parâmetro opcional.
Exemplo de parâmetro de função
{
  "type": "string",
  "description": "The color of the item",
  "enum": [
    "green",
    "blue",
    "orange"
  ]
}

Devolver objeto

Contém a semântica do valor devolvido pela função .

O objeto de retorno contém as seguintes propriedades.

Propriedade Tipo Descrição
type Cadeia de caracteres Obrigatório. Especifica o tipo do valor devolvido pela API. Os valores possíveis são: string.
description String Opcional. Uma descrição do valor devolvido pela API.

Objeto rich return

Indica que a função devolve uma resposta compatível com o protocolo Rich Responses.

O objeto rich return contém as seguintes propriedades.

Propriedade Tipo Descrição
$ref Cadeia de caracteres Obrigatório. Tem que ser definida como https://copilot.microsoft.com/schemas/rich-response-v1.0.json.

Objeto estados da função

Define objetos de estado para estados do orquestrador.

O objeto estados da função contém as seguintes propriedades.

Propriedade Tipo Descrição
reasoning Objeto de estado Opcional. O estado no qual o modelo pode chamar funções e realizar cálculos.
responding Objeto de estado Opcional. O estado em que o modelo pode gerar texto que é mostrado ao utilizador. O modelo não consegue invocar funções no estado de resposta.
disengaging Objeto de estado Opcional.

Objeto de estado

Contém instruções específicas para quando uma função é invocada num estado de orquestrador específico.

O objeto de estado contém as seguintes propriedades.

Propriedade Tipo Descrição
description String Opcional. Descreve o objetivo de uma função quando utilizada num estado de orquestrador específico.
instructions Matriz, Cadeia Opcional. Uma cadeia ou uma matriz de cadeias que são utilizadas para fornecer instruções ao orquestrador sobre como utilizar esta função enquanto está num estado de orquestrador específico. Fornecer uma única cadeia indica a intenção de fornecer um conjunto completo de instruções que substituiriam quaisquer pedidos de função incorporados. Fornecer uma matriz de cadeias indica a intenção de aumentar o mecanismo de solicitação da função incorporada.
examples Matriz, Cadeia Opcional. Uma cadeia ou uma matriz de cadeias que são utilizadas para fornecer exemplos ao orquestrador sobre como esta função pode ser invocada.
Exemplo de objeto de estado
{
  "functions": [
    {
      "name": "searchEmails",
      "description": "search for Emails from using 3S search Service",
      "states": {
        "reasoning": {
          "description": "\n# `searchEmails(**params) -> str` returns the emails from user's inbox based on search query.",
          "instructions": [
            "Examine the output of `searchEmails(**params) -> str`.",
            "Do not include any information that is not present in the JSON results.",
            "Exclude any irrelevant data from the JSON results",
            "Determine if the response contains an error field.",
            "If an error is present, provide the error code and error message extracted from the response JSON.",
            "If there is no error, extract and include as much relevant information as possible from the JSON result to meet the user's needs."
          ],
          "examples": []
        }
      }
    }
  ]
}

Objeto de capacidades de função

Contém uma coleção de dados utilizados para configurar capacidades opcionais do orquestrador ao invocar a função.

O objeto de capacidades de função contém as seguintes propriedades.

Propriedade Tipo Descrição
confirmation Objeto de confirmação Opcional. Descreve uma caixa de diálogo de confirmação que DEVE ser apresentada ao utilizador antes de invocar a função.
response_semantics Objeto semântica de resposta Opcional. Descreve como o orquestrador pode interpretar o payload de resposta e fornecer uma composição visual.
security_info Objeto de informações de segurança Opcional. Contém atestados sobre o comportamento do plug-in para avaliar os riscos de chamar a função. Se esta propriedade for omitida, a função não conseguirá interagir com outros plug-ins ou capacidades do agente que contém.

Objeto de confirmação

Descreve como o orquestrador pede ao utilizador para confirmar antes de chamar uma função.

O objeto de confirmação contém as seguintes propriedades.

Propriedade Tipo Descrição
type String Opcional. Especifica o tipo de confirmação. Os valores possíveis são: None e AdaptiveCard.
title String Opcional. O título da caixa de diálogo de confirmação. Esta propriedade é localizável.
body String Opcional. O texto da caixa de diálogo de confirmação. Esta propriedade é localizável.

Objeto semântica de resposta

Contém informações para identificar a semântica do payload de resposta e permitir a composição dessa informação numa experiência visual avançada com cartões adaptáveis.

O objeto semântica de resposta contém as seguintes propriedades.

Propriedade Tipo Descrição
data_path Cadeia de caracteres Obrigatório. Uma consulta JSONPath RFC9535 que identifica um conjunto de elementos da resposta da função a serem compostos com o modelo especificado em cada item.
properties Objeto de propriedades da semântica de resposta Opcional. Permite o mapeamento de consultas JSONPath para elementos de dados conhecidos. Cada consulta JSONPath é relativa a um valor de resultado.
static_template Objeto Opcional. Um objeto JSON em conformidade com o Esquema de Cartão Ajustável e a linguagem templating. Esta instância do Cartão Ajustável é utilizada para compor um resultado da resposta do plug-in. Este valor é utilizado se o template_selector não estiver presente ou não conseguir resolve a uma card adaptável.
oauth_card_path String Opcional.
Exemplo de modelo estático
{
  "functions": {
    "capabilities": {
      "response_semantics": {
        "data_path": "$.resources",
        "properties": {
          "title": "$.name",
          "subtitle": "$.location",
          "url": "$.href",
          "information_protection_label": "$.ipLabel"
        },
        "static_template": {
          "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
          "type": "AdaptiveCard",
          "version": "1.5",
          "body": [
            {
              "type": "TextBlock",
              "text": "${name}",
              "weight": "Bolder"
            },
            {
              "type": "TextBlock",
              "text": "${description}"
            }
          ],
          "action": [
            {
              "type": "Action.OpenUrl",
              "title": "View",
              "text": "${href}"
            }
          ]
        }
      }
    }
  }
}
Exemplo de modelo dinâmico
{
  "functions": {
    "capabilities": {
      "response_semantics": {
        "data_path": "$.attachments",
        "properties": {
          "title": "$.title",
          "subtitle": "$.subtitle",
          "url": "$.url",
          "thumbnail_url": "$.thumbnailUrl",
          "template_selector": "$.template"
        }
      }
    }
  }
}

Objeto de propriedades da semântica de resposta

Permite o mapeamento de consultas JSONPath para elementos de dados conhecidos. Cada consulta JSONPath é relativa a um valor de resultado.

O objeto de propriedades da semântica de resposta contém as seguintes propriedades.

Propriedade Tipo Descrição
title String Opcional. Título de uma citação para o resultado.
subtitle String Opcional. Subtítulo de uma citação para o resultado.
url String Opcional. URL de uma citação para o resultado.
thumbnail_url String Opcional. URL de uma imagem em miniatura para o resultado.
information_protection_label String Opcional. Indicador de confidencialidade dos dados dos conteúdos dos resultados.
template_selector String Opcional. Uma expressão JSONPath para uma instância de Cartão Ajustável a ser utilizada para compor o resultado.

Objeto de informações de segurança

Contém informações utilizadas para determinar o risco relativo de invocar a função.

O objeto de informações de segurança contém as seguintes propriedades.

Propriedade Tipo Descrição
data_handling Array of String Obrigatório. Uma matriz de cadeias que descrevem o comportamento de processamento de dados da função. Os valores válidos são GetPublicData, GetPrivateData, DataTransform, DataExporte ResourceStateUpdate.
Valores de processamento de dados
Valor Descrição Exemplo
GetPublicData Indica que a função obtém dados de uma origem externa que não requer autenticação. Uma função que faz uma chamada de serviço para obter dados de um site público.
GetPrivateData Indica que a função obtém dados de uma origem externa que requer autenticação ou da aplicação atual do utilizador. Uma função que obtém dados de uma base de dados privada ou do documento atualmente aberto do utilizador.
DataTransform Indica que a função só devolve uma saída com base na entrada, sem introduzir novos dados ou causar uma atualização de recursos. Uma função que converte um número numa palavra ou formate uma data.
DataExport Indica que a função envia ou escreve dados para uma localização fora da própria função. Uma função que guarda dados num ficheiro local ou na cloud.
ResourceStateUpdate Indica que a função afeta um recurso ao iniciar uma transação, alterar um processo no mundo real, conceder ou negar permissões ou efetuar qualquer outra ação que exija uma confirmação explícita do utilizador. Uma função que reserva um quarto de hotel ou altera o estado de um item de trabalho de active para resolved.

Observação

Os manifestos de plug-in que utilizam o DataExport valor podem falhar na validação ao tentar instalar o plug-in. Isto é temporário e será resolvido em breve.

Objeto de runtime OpenAPI

Descreve como o plug-in invoca funções OpenAPI.

O objeto runtime OpenAPI contém as seguintes propriedades.

Propriedade Tipo Descrição
type Cadeia de caracteres Obrigatório. Identifica este runtime como um runtime OpenAPI. Tem que ser definida como OpenApi.
auth Objeto de autenticação de runtime Obrigatório. Informações de autenticação necessárias para invocar o runtime.
run_for_functions Matriz de cadeias de caracteres Opcional. Os nomes das funções que estão disponíveis neste runtime. Se esta propriedade for omitida, todas as funções descritas pelo runtime estão disponíveis. Os valores de cadeia fornecidos podem conter carateres universais. Mais do que um runtime NÃO DEVE declarar suporte para a mesma função implicitamente ou explicitamente.
spec Objeto de especificação OpenAPI Obrigatório. Contém as informações de OpenAPI necessárias para invocar o runtime.

Objeto de especificação OpenAPI

Contém as informações de OpenAPI necessárias para invocar o runtime.

O objeto de especificação OpenAPI contém as seguintes propriedades.

Propriedade Tipo Descrição
url String Opcional. O URL para obter a especificação OpenAPI, chamada com um pedido GET. Este membro é necessário, a menos que api_description esteja presente.
api_description String Opcional. Uma cadeia que contém uma descrição openAPI. Se este membro estiver presente, url não será necessário e será ignorado se estiver presente.
progress_style String Opcional. O estilo de progresso que é utilizado para apresentar o progresso da função. Os valores possíveis são: None, ShowUsage, ShowUsageWithInput, ShowUsageWithInputAndOutput.
Exemplo de objeto de especificação OpenAPI
{
  "runtimes":
  [
    {  
      "type": "OpenApi",
      "auth": {
        "type": "None"
      },
      "spec": {
        "url": "https://example.org/api/openapi.yaml",  
      }
    }
  ]
}  

Objeto de autenticação de runtime

Contém informações utilizadas pelo plug-in para autenticar no runtime.

O objeto de autenticação de runtime contém as seguintes propriedades.

Propriedade Tipo Descrição
type String Opcional. Especifica o tipo de autenticação necessário para invocar uma função. Os valores possíveis são: None, OAuthPluginVault, ApiKeyPluginVault.
reference_id String Opcional. Um valor utilizado quando type é OAuthPluginVault ou ApiKeyPluginVault. O reference_id valor é adquirido de forma independente ao fornecer os valores de configuração de autenticação necessários. Este mecanismo existe para evitar a necessidade de armazenar valores secretos no manifesto do plug-in.
Exemplo de objeto de autenticação de runtime
{
  "type": "OAuthPluginVault",
  "reference_id": "0123456-abcdef"
}

Objeto de capacidades de plug-in

Descreve as capacidades do plug-in.

O objeto de capacidades de plug-in contém as seguintes propriedades.

Propriedade Tipo Descrição
conversation_starters Matriz do objeto inicial de Conversação Opcional. Iniciadores de conversação que podem ser apresentados ao utilizador para obter sugestões sobre como invocar o plug-in.

Objeto de iniciação de conversação

Um exemplo de uma pergunta à qual o plug-in pode responder.

O objeto inicial da conversação contém as seguintes propriedades.

Propriedade Tipo Descrição
text Cadeia de caracteres Obrigatório. O texto do iniciador da conversação. Esta propriedade é localizável.
title String Opcional. O título do iniciador de conversação. Esta propriedade é localizável.
Exemplo de objeto de iniciação de conversação
{
  "conversation_starters": [
    {
      "title": "Developer tasks",
      "text": "What issues are assigned to me?"
    }
  ]
}

Exemplo de manifesto

Eis um exemplo de um ficheiro de manifesto de plug-in que utiliza a maioria das propriedades do manifesto e propriedades do objeto descritas no artigo:

{
  "schema_version": "v2.2",
  "name_for_human": "Contoso Real Estate",
  "description_for_human": "Find up-to-date, detailed real estate properties for sale on the market",
  "description_for_model": "Plugin for finding properties for sale. Use it whenever a user asks about real estate properties for sale on the market. This plugin can be used to search for properties in a particular city, and with a given number of bedrooms, bathrooms, and amenities.",
  "capabilities": {
    "conversation_starters": [
      {
        "title": "Available listings",
        "text": "What listings are available in my area?"
      }
    ]
  },
  "functions": [
    {
      "name": "getListings",
      "description": "Get a list of properties matching the specified criteria",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "The city to search properties in"
          },
          "bedrooms": {
            "type": "number",
            "description": "The number of bedrooms the property should have"
          },
          "bathrooms": {
            "type": "number",
            "description": "The number of bathrooms the property should have"
          },
          "amenities": {
            "type": "array",
            "description": "The list of amenities the property should have",
            "items": {
              "type": "string",
              "description": "One amenity the property should have",
              "enum": [
                "air conditioning",
                "balcony",
                "dishwasher",
                "elevator",
                "fireplace",
                "furniture",
                "garden",
                "gym",
                "heating",
                "jacuzzi",
                "laundry room",
                "microwave",
                "no furniture",
                "parking",
                "patio",
                "sauna",
                "swimming pool",
                "terrace",
                "wi-fi"
              ]
            }
          }
        }
      },
      "returns": {
        "type": "string",
        "description": "A list of properties"
      },
      "states": {
        "reasoning": {
          "description": "`getListings` returns a list of real estate properties for sale based on the specified criteria.",
          "instructions": [
            "If the user mentions a city in their question, only search in that city by using the city parameter.",
            "If the user asks for properties with things like parking space, heating, jacuzzi, or similar amenities, use the amenities parameter to filter the results.",
            "Only use the list of amenities provided in the amenities parameter enum. If the user asked for an amenity that is not in the list, find the closest match from the list, or ignore it if no match can be found.",
            "Determine if the response contains an error field.",
            "If an error is present, provide the error code and error message from the JSON response to the user.",
            "If there is no error, extract and include as much relevant information as possible from the JSON response to meet the users needs."
          ]
        }
      },
      "capabilities": {
        "security_info": {
          "data_handling": [
            "GetPublicData",
            "GetPrivateData"
          ]
        }
      }
    },
    {
      "name": "saveSearch",
      "description": "Save a search for properties for sale",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "The city to search in"
          },
          "bedrooms": {
            "type": "number",
            "description": "The number of bedrooms"
          }
        },
        "required": [
          "city"
        ]
      },
      "returns": {
        "type": "string",
        "description": "The unique ID for the saved search"
      },
      "states": {
        "responding": {
          "description": "`saveSearch` returns a unique ID that identifies the newly saved search.",
          "instructions": [
            "Examine the output of the `saveSearch` function.",
            "Extract the unique ID integer from the output and include it in your response to the user."
          ]
        }
      },
      "capabilities": {
        "security_info": {
          "data_handling": [
            "ResourceStateUpdate"
          ]
        }
      }
    },
    {
      "name": "deleteSavedSearch",
      "description": "Delete a previously saved search",
      "parameters": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The unique ID of the saved search"
          }
        },
        "required": [
          "id"
        ]
      },
      "returns": {
        "type": "string",
        "description": "True if the saved search was deleted, false otherwise"
      },
      "capabilities": {
        "security_info": {
          "data_handling": [
            "ResourceStateUpdate"
          ]
        }
      }
    }
  ],
  "runtimes": [
    {
      "type": "OpenApi",
      "auth": {
        "type": "none"
      },
      "run_for_functions": [
        "getListings",
        "saveSearch",
        "deleteSavedSearch"
      ],
      "spec": {
        "url": "http://contoso.com/openapi.yaml"
      }
    }
  ],
  "logo_url": "http://contoso.com/logo.png",
  "contact_email": "contact@contoso.com",
  "legal_info_url": "https://contoso.com/legal/"
}