{
  "openapi": "3.0.0",
  "info": {
    "description": "## Introduction\n\nThe search service is a global and shared resource properties repository that is integrated in the IBM Cloud® platform. It's used for storing and searching cloud resource attributes. It categorizes and classifies resources. A resource is controlled and owned by resource providers within the IBM Cloud platform, such as IBM Cloud Kubernetes Service, or Resource Controller. Resources are uniquely identified by a Cloud Resource Naming identifier (CRN). The properties of a resource include tags and system properties. Both properties are defined within an IBM Cloud billing account, and span across many regions.\n\nThe search service can list, query, and retrieve information about IBM Cloud resources in the user IBM Cloud billing account, including `IAM Access Groups` (AG) and `IAM Service IDs`. It cannot retrieve resources that are:\n\n- Users\n- IAM API keys\n- IAM Trusted profiles\n- Context Based Restrictions (CBR) Zones and Rules\n- Support Cases\n- Billing data\n- Cost estimations.\n\nThe search service cannot retrieve Deployable Architectures (DA) and related information, documentation, or release notes.\n\nSDKs for Java, Node, Python, and Go are available to make it easier to programmatically access the API from your code. The client libraries that are provided by the SDKs implement best practices for using the API and reduce the amount of code that you need to write. The tab for each language includes code examples that demonstrate how to use the client libraries. For more information about using the SDKs, see the [IBM Cloud SDK Common project](https://github.com/IBM/ibm-cloud-sdk-common) on GitHub.\n\nTo filter search results, you can apply query strings following the *Lucene* query syntax:\n\n- **Basic Term**: A single word is a term, and it searches for that word in all the resource attributes.  \n  Example: `database` searches for the word `database` in all the resource attributes.  \n- **Phrase**: A group of words surrounded by double quotes (\" \") forms a phrase query, and it searches\n  for all the words in the same order.  \n  Example: `\"My resource\"` searches for the exact phrase in all the resource attributes.  \n- **Field**: Specify a resource attribute for a term by prefixing it with the attribute name followed by a colon (:).  \n  Example: `name:my-resource` searches for resources whose attribute `name` is `my-resource`.  \n- **Boolean Operators**:  \n  AND (finds resources containing both terms),  \n  OR (finds resources containing either term),  \n  NOT (excludes resources containing the term).  \n  Boolean operators must be capitalized.  \n  Example: `my-resource AND database` searches for words `my-resource` and `database` in all the resource attributes.  \n- **Wildcards**: `*` matches any character sequence (including none), and `?` matches a single character.  \n  Example: `my-res*` finds `my-resource`, `my-resources`, etc.  \n- **Special characters**: Enclose in double-quotes terms containing special characters: `+ & | ! ( ) { } [ ] ^ ~ : \\ /` as they\n  are reserved in *Lucene* query syntax (e.g. CRNs, type-4 GUIDs).\n  Example: `name:\"Fancy!Resource&Co.\"`.\n- **Ranges**: Search for terms within a range. Can be numeric or alphabetical.  \n  Inclusive range: [start TO end], exclusive range: {start TO end}.  \n  Example: `creation_date:[2021-01-01 TO 2021-12-31]` finds resources whose `creation_date` is in the range.  \n- **Grouping**: Group queries with parentheses (()) to control operator precedence.  \n  Example: `(database OR containers-kubernetes) AND name:my-resource` find `database` or `container-kubernetes` resources named `my-resource`.\n\nThe most commonly used resource attributes (or fields) that you can query and retrieve are:\n\n- **access_tags**: The list of access management tags attached to the resource.  \n- **account_id**: The billing account ID of the resource.  \n- **catalog_tags**: The list of tags determining the resource categories.  \n- **creation_date**: The date on which the resource was created in ISO format \"YYYY-MM-DDTHH:mm:ss.SSSZ\".  \n- **crn**: The Cloud Resource Name in the format: \"crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource\".  \n- **modification_date**: The date on which the resource was last updated in ISO format \"YYYY-MM-DDTHH:mm:ss.SSSZ\".  \n- **name**: The user-provided resource name.  \n- **region**: The IBM Cloud location of the resource.  \n- **resource_group_id**: The unique identifier of the resource group into which the resource is provisioned.  \n- **service_instance**: The unique identifier of the service instance.  \n- **resource_id**: The unique identifier of the resource provisioned by a service instance.  \n- **service_name**: The name of the service as it appears in the `Name` column of the output of `ibmcloud catalog service-marketplace`.  \n- **service_tags**: The list of service tags attached to the resource.  \n- **tags**: The list of user tags attached to the resource.  \n- **type**: The type of the resource.  \n\nUsing the `/resources/search` API you can retrieve or list IBM Cloud resources and services using\na variety of filters.  \nOnly resources that belong to the account ID and that are accessible by the client are returned.\n\nHereafter only some of the use cases that you can accomplish by building\nthe right Lucene query.\n\nTo check if your backup policies are correctly configured you can use the query:  \n`service_name:is AND type:backup-policy`  \nwhich returns the backup policies that you are entitled to view.\n\nYou can verify when a PostgreSQL database named `mydb` was created and updated by using the query\n`service_name:compose-for-postgresql AND name:mydb` and check the `creation_date` and `modification_date` fields.  \n\nYou can list resources whose name starts with either `climate_change` or `global_warming` by using the query\n`name:(climate_change* OR global_warming*)`.\n\nYou can retrieve resources by date. For example, those updated between 2020 and 2022 using the query `modification_date:[2020 TO 2022]`.  \nYou can use the notation `[now-X TO now]` for time relative queries:  \n\n- For \"last X years\" use the range `[now-Xy TO now]`  \n- For \"last X months\" use the range `[now-XM TO now]`  \n- For \"last X weeks\" use the range `[now-Xw TO now]`  \n- For \"last X days\" use the range `[now-Xd TO now]`  \n- For \"last X hours\" use the range `[now-Xh TO now]`  \n- For \"last X minutes\" use the range `[now-Xm TO now]`  \n- For \"last X seconds\" use the range `[now-Xs TO now]`  \n\nFor example, the query `creation_date:[now-1w TO now]` returns the resources created in the last week.\n\nAnother interesting set of use cases is querying resources in your account by category: e.g., `compute`, `network`, `storage`, `databases`, `security`, `devops`.  \nSuppose you want to know if there are databases in your account. You can list them using the query:  \n`catalog_tags:databases`.\n\nSimilarly, if you want to know if there are specific services provisioned in your account you can use a query like:  \n`service_name:(databases-for-elasticsearch OR cloudantnosqldb)`  \nwhich returns instances of Elasticsearch or Cloudant databases that you are entitled to view.\n\nSometimes, you need to obtain the CRN of a resource given its name, or vice versa: the name of a resource given its CRN.  \nTo do so you can use the queries:  \n`name:your-resource-name` and `crn:”your-resource-crn”` respectively.  \nYou can use the `service_instance:your-service-instance-id` or `resource_id:your-resource-id` as an alternative to the CRN to retrieve the name of a resource.\n\nFinally, you can filter resources by tags.  \nSuppose that you are interested in resources tagged as `dev`, `test`, and `production`.  \nYou can use the queries:  \n`tags:dev`, `tags:test`, and `tags:production` respectively.\n\nWhat if you are interested in resources provisioned with an enterprise project configuration?  \nAll resources provisioned with a project do have service tags, which can be used to get them. For example, the query:  \n`service_tags:(”project::config_id:1e3bf974-0f34-4a96-960b-15823558f952” AND “project::project_id:efd46015-1902-4465-99a4-a0e12fba5759”)`  \nreturns all the resources provisioned with the specified `project_id` and `config_id`.\n\nInstalling the Java SDK\n\nMaven\n\n```xml\n<dependency>\n\t<groupId>com.ibm.cloud</groupId>\n\t<artifactId>global-search</artifactId>\n\t<version>{version}</version>\n</dependency>\n```\n\nGradle\n\n```bash\ncompile 'com.ibm.cloud:global-search:{version}'\n```\n\nReplace `{version}` in these examples with the release version.\n\nView on GitHub\n\n[https://github.com/IBM/platform-services-java-sdk](https://github.com/IBM/platform-services-java-sdk)\n\nInstalling the Node SDK\n\n```bash\nnpm install @ibm-cloud/platform-services\n```\n\nView on GitHub\n\n[https://github.com/IBM/platform-services-node-sdk](https://github.com/IBM/platform-services-node-sdk)\n\nInstalling the Python SDK\n\n```bash\npip install --upgrade \"ibm-platform-services\"\n```\n\nView on GitHub\n\n[https://github.com/IBM/platform-services-python-sdk](https://github.com/IBM/platform-services-python-sdk)\n\nInstalling the Go SDK\n\nGo modules (recommended): Add the following import in your code, and then run `go build` or `go mod tidy`\n\n```go\nimport (\n\t\"github.com/IBM/platform-services-go-sdk/globalsearchv2\"\n)\n```\n\nGo get\n\n```bash\ngo get -u github.com/IBM/platform-services-go-sdk/globalsearchv2\n```\n\nView on GitHub\n\n[https://github.com/IBM/platform-services-go-sdk](https://github.com/IBM/platform-services-go-sdk)\n\n## Endpoint URLs\n\nThe Global Search API uses the following public global endpoint URL. When you call the API, add the path for each method to form the complete API endpoint for your requests.\n\n```\nhttps://api.global-search-tagging.cloud.ibm.com\n```\n\nIf you enabled service endpoints in your account, you can send API requests over the IBM Cloud private network at the following base endpoint URLs. For more information, see [Enabling VRF and service endpoints](https://cloud.ibm.com/docs/account?topic=account-vrf-service-endpoint).\n\n- Private endpoint URL for VPC infrastructure (Dallas, Washington, Sydney, London, Frankfurt, Madrid, San Paulo, Tokyo, Osaka, Toronto, Montreal, Chennai, Mumbai regions): `https://api.private.global-search-tagging.cloud.ibm.com`\n- Private endpoint URL for classic infrastructure:\n  - Dallas `https://api.private.us-south.global-search-tagging.cloud.ibm.com`\n  - Washington `https://api.private.us-east.global-search-tagging.cloud.ibm.com`\n  - Sydney `https://api.private.au-syd.global-search-tagging.cloud.ibm.com`\n  - London `https://api.private.eu-gb.global-search-tagging.cloud.ibm.com`\n  - Frankfurt `https://api.private.eu-de.global-search-tagging.cloud.ibm.com`\n\nExample API request\n\n```sh\ncurl --request POST \\\n--header \"Content-Type: application/json\" \\\n--header \"Accept: application/json\" \\\n--header \"Authorization: Bearer <IAM token>\" \\\n--data \"{\\\"query\\\":\\\"string\\\"}\" \\\n--url \"https://api.global-search-tagging.cloud.ibm.com/v3/resources/search?account_id=string&limit=10&timeout=0&sort=string\"\n```\n\nReplace `<IAM token>` in this example with the value for your particular API call.\n\n## Authentication\n\nAuthorization to the Global Search API is enforced by using an IBM Cloud Identity and Access Management (IAM) access token. The token is used to determine the actions that a user or service ID has access to when they use the API. \n\nObtaining an IAM token for an authenticated user or service ID is described in the [IAM Identity Services API](https://cloud.ibm.com/apidocs/iam-identity-token-api) documentation. \n\nTo use the API, add a valid IAM token to the HTTP Authorization request header, for example, `--header \"Authorization: Bearer <TOKEN>\"`.\n\nWhen you use the SDK, configure an IAM authenticator with the IAM API key. The authenticator automatically obtains the IAM access token for the API key and includes it with each request. You can construct an authenticator in either of two ways:\n- Programmatically by constructing an IAM authenticator instance and supplying your IAM API key \n- By defining the API key in external configuration properties and then using the SDK authenticator factory to construct an IAM authenticator that uses the configured IAM API key\n\nIn this example of using external configuration properties, an IAM authenticator instance is created with the configured API key, and then the service client is constructed with this authenticator instance and the configured service URL.\n\nFor more information, see the Authentication section of the [IBM Cloud SDK Common](https://github.com/IBM/ibm-cloud-sdk-common/blob/main/README.md) documentation.\n\nTo call each method, you'll need to be assigned a role that includes the required IAM actions. Each method lists the associated action. For more information about IAM actions and how they map to roles, see [Assigning access to account management services](https://cloud.ibm.com/docs/account?topic=account-account-services).\n\nTo retrieve your access token:\n\n```bash\ncurl -X POST \\\n  \"https://iam.cloud.ibm.com/identity/token\" \\\n  --header 'Content-Type: application/x-www-form-urlencoded' \\\n  --header 'Accept: application/json' \\\n  --data-urlencode 'grant_type=urn:ibm:params:oauth:grant-type:apikey' \\\n  --data-urlencode 'apikey=<API_KEY>'\n```\n\nReplace `<API_KEY>` with your IAM API key.\n\nSetting client options through external configuration\n\nExample environment variables, where `<SERVICE_URL>` is the endpoint URL and `<API_KEY>` is your IAM API key\n```sh\nexport GLOBAL_SEARCH_URL=<SERVICE_URL>\nexport GLOBAL_SEARCH_AUTHTYPE=iam\nexport GLOBAL_SEARCH_APIKEY=<API_KEY>\n```\n\nExample of constructing the service client\n```go\nimport {\n    \"github.com/IBM/platform-services-go-sdk/globalsearchv2\"\n}\n...\nserviceClientOptions := &globalsearchv2.GlobalSearchV2Options{}\nserviceClient, err := globalsearchv2.NewGlobalSearchV2UsingExternalConfig(serviceClientOptions)\n```\n\nSetting client options through external configuration\n\nExample environment variables, where `<SERVICE_URL>` is the endpoint URL and `<API_KEY>` is your IAM API key\n```sh\nexport GLOBAL_SEARCH_URL=<SERVICE_URL>\nexport GLOBAL_SEARCH_AUTHTYPE=iam\nexport GLOBAL_SEARCH_APIKEY=<API_KEY>\n```\n\nExample of constructing the service client\n```java\nimport com.ibm.cloud.platform_services.global_search.v2.GlobalSearch;\n...\nGlobalSearch serviceClient = GlobalSearch.newInstance();\n```\n\nSetting client options through external configuration\n\nExample environment variables, where `<SERVICE_URL>` is the endpoint URL and `<API_KEY>` is your IAM API key\n```sh\nexport GLOBAL_SEARCH_URL=<SERVICE_URL>\nexport GLOBAL_SEARCH_AUTHTYPE=iam\nexport GLOBAL_SEARCH_APIKEY=<API_KEY>\n```\n\nExample of constructing the service client\n```javascript\nconst GlobalSearchV2 = require('@ibm-cloud/platform-services/global-search/v2');\n...\nconst serviceClient = GlobalSearchV2.newInstance({});\n```\n\nSetting client options through external configuration\n\nExample environment variables, where `<SERVICE_URL>` is the endpoint URL and `<API_KEY>` is your IAM API key\n```sh\nexport GLOBAL_SEARCH_URL=<SERVICE_URL>\nexport GLOBAL_SEARCH_AUTHTYPE=iam\nexport GLOBAL_SEARCH_APIKEY=<API_KEY>\n```\n\nExample of constructing the service client\n```python\nfrom ibm_platform_services import GlobalSearchV2\n...\nglobal_search_service = GlobalSearchV2.new_instance()\n```\n\n## Error handling\n\nGlobal Search uses standard HTTP response codes to indicate whether a method completed successfully. A `200` type response always indicates success. A `400` type response is a failure, and a `500` type response is an internal system error.\n\n| HTTP Error Code | Description | Recovery |\n|-----------------|-------------|----------|\n| `200` | Success | The request was successful. |\n| `400` | Bad Request | The input parameters in the request body are either incomplete or in the wrong format. Be sure to include all required parameters in your request. |\n| `401` | Unauthorized | You are not authorized to make this request. Log in to IBM Cloud and try again. If this error persists, contact the account owner to check your permissions.\t|\n| `403` | Forbidden | The supplied authentication is not authorized to access '{namespace}'. |\n| `404` | Not Found | The requested resource could not be found. |\n| `409` | Conflict | The entity is already in the requested state. |\n| `410` | Gone | The resource is valid but has been removed already in a previous call |\n| `500` | Internal Server Error | *offering_name* is currently unavailable. Your request could not be processed. Wait a few minutes and try again. |",
    "version": "2.0.1",
    "title": "Global Search",
    "x-alternate-name": "global_search",
    "license": {
      "name": "This product includes software originally developed by IBM Corporation, Copyright 2016-2019 IBM Corp.",
      "url": "https://www.ibm.com/legal/copyright-trademark"
    },
    "x-ibm-name": "global-searching-and-tagging-api-specification",
    "x-codegen-config": {
      "java": {
        "apiPackage": "com.ibm.cloud.platform_services"
      },
      "go": {
        "apiPackage": "github.com/IBM/platform-services-go-sdk",
        "improvedNameFormattingV2": true
      },
      "python": {
        "apiPackage": "ibm_platform_services"
      }
    },
    "x-sdk-supported-languages": [
      "curl",
      "go",
      "java",
      "node",
      "python"
    ],
    "x-github": "https://github.ibm.com/cloud-api-docs/tagging",
    "x-github-issues": "https://github.ibm.com/cloud-api-docs/tagging/issues/new",
    "x-last-updated": "2022-05-09"
  },
  "servers": [
    {
      "url": "https://api.global-search-tagging.cloud.ibm.com"
    }
  ],
  "tags": [
    {
      "name": "Search",
      "description": "Operations for finding resources"
    },
    {
      "name": "Resource Types",
      "description": "Operations for resource types"
    }
  ],
  "paths": {
    "/v2/resources/search": {
      "post": {
        "x-swagger-router-controller": "swagger_controllers",
        "operationId": "v2_search",
        "x-eov-operation-id": "v2_search",
        "x-eov-operation-handler": "api/swagger_controllers",
        "x-ibm-permissions": {
          "actions": [
            {
              "name": "global-search-tagging.resource.read"
            }
          ]
        },
        "tags": [
          "Search"
        ],
        "x-sdk-exclude": true,
        "summary": "Find instances of resources (v2)",
        "description": "Find IAM-enabled resources or storage and network resources that run on\nclassic infrastructure in a specific account ID.\n\nTo filter results, you can apply query strings following the *Lucene* query syntax.\n\nOnly resources that belong to the account ID and that are accessible by the\nclient are returned.\n\nThe usage of this API is deprecated for cases when the provider is not specified or\n`provider=ghost`.\n`/v3/resources/search` replaces this API for the deprecated cases.",
        "security": [
          {
            "IAM": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/x-request-id"
          },
          {
            "$ref": "#/components/parameters/x-correlation-id"
          },
          {
            "$ref": "#/components/parameters/account_id"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/timeout"
          },
          {
            "$ref": "#/components/parameters/is_deleted"
          },
          {
            "$ref": "#/components/parameters/is_reclaimed"
          },
          {
            "$ref": "#/components/parameters/impersonate_user"
          },
          {
            "$ref": "#/components/parameters/can_tag"
          },
          {
            "$ref": "#/components/parameters/is_project_resource"
          },
          {
            "in": "query",
            "name": "offset",
            "description": "The offset is the index of the item you want to start returning data from. Default is 0.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000,
              "default": 0
            }
          },
          {
            "in": "query",
            "name": "sort",
            "description": "Comma separated properties name that is used for sorting",
            "required": false,
            "allowReserved": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "X-IMS-Auth-Token",
            "description": "The SoftLayer authorization token. You must set it only if you are searching SoftLayer resources, which you do adding `ims` to the search `providers` query parameter.",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^Basic .*$"
            }
          },
          {
            "in": "query",
            "name": "provider",
            "required": false,
            "description": "Search providers. Supported values are `ghost` and `ims`. If not specified, the defaults to `ghost`. Specify a single provider.",
            "schema": {
              "type": "string",
              "enum": [
                "ghost",
                "ims"
              ],
              "default": "ghost"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SearchBody"
              }
            }
          },
          "description": "It contains the query filters, the list of fields to be returned, and the search token (initially set to null or undefined)",
          "required": true
        },
        "x-codegen-request-body-name": "body",
        "responses": {
          "200": {
            "description": "A result paging with the list of resources that match the provided filters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResults"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized / Wrong auth token type IAM / Auth token not valid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "403": {
            "description": "Unauthorized operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error / IAM not initialized / Malformed IAM credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "502": {
            "description": "Search IAM error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "default": {
            "description": "System problem or unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          }
        }
      }
    },
    "/v3/resources/search": {
      "post": {
        "x-swagger-router-controller": "swagger_controllers",
        "operationId": "search",
        "x-eov-operation-id": "search",
        "x-eov-operation-handler": "api/swagger_controllers",
        "x-ibm-permissions": {
          "actions": [
            {
              "name": "global-search-tagging.resource.read"
            }
          ]
        },
        "tags": [
          "Search"
        ],
        "summary": "Find instances of resources (v3)",
        "description": "Find IAM-enabled resources or storage and network resources that run on\nclassic infrastructure in a specific account ID.\n\nYou must use `/v3/resources/search` when you need to fetch more than `10000`\nresource items. On the first call, the operation returns a live cursor on the\ndata that you must use on all the subsequent calls to get the next batch of\nresults until you get the empty result set.\n\nTo filter results, you can apply query strings following the *Lucene* query syntax.\n\nBy default, the fields that are returned for every resource are **crn**, **name**,\n**family**, **type**, and **account_id**.\nYou can specify the subset of the fields you want in your request using the `fields`\nrequest body attribute. Set `\"fields\": [\"*\"]` to discover the complete set of fields which are\navailable to request.",
        "security": [
          {
            "IAM": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/x-request-id"
          },
          {
            "$ref": "#/components/parameters/x-correlation-id"
          },
          {
            "$ref": "#/components/parameters/account_id"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/timeout"
          },
          {
            "$ref": "#/components/parameters/sort"
          },
          {
            "$ref": "#/components/parameters/is_deleted"
          },
          {
            "$ref": "#/components/parameters/is_reclaimed"
          },
          {
            "$ref": "#/components/parameters/impersonate_user"
          },
          {
            "$ref": "#/components/parameters/can_tag"
          },
          {
            "$ref": "#/components/parameters/is_project_resource"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScanBody"
              }
            }
          },
          "description": "It contains the query filters on the first operation call, or the search_cursor on next calls. On subsequent calls, set the `search_cursor` to the value returned by the previous call. After the first, you must set only the `search_cursor`. Any other parameter but the `search_cursor` are ignored. The `search_cursor` encodes all the information that needs to get the next batch of `limit` data.",
          "required": true
        },
        "x-codegen-request-body-name": "body",
        "responses": {
          "200": {
            "description": "A result paging with the list of resources that match the provided filters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ScanResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized / Wrong auth token type IAM / Auth token not valid",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "403": {
            "description": "Unauthorized operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitError"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error / IAM not initialized / Malformed IAM credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "502": {
            "description": "Search IAM error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          },
          "default": {
            "description": "System problem or unexpected error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Errors"
                }
              }
            }
          }
        },
        "x-sdk-operations": {
          "request-examples": {
            "curl": [
              {
                "name": "Example request",
                "example": [
                  {
                    "type": "code",
                    "source": [
                      "curl -X POST --header \"Authorization: Bearer {iam_token}\" \\\n",
                      "  --header \"Accept: application/json\" \\\n",
                      "  --header \"Content-Type: application/json\" \\\n",
                      "  -d '{\"query\": \"GST-sdk-*\", \"fields\": [\"*\"]}' \\\n",
                      "  \"{base_url}/v3/resources/search\""
                    ]
                  }
                ]
              }
            ],
            "go": [
              {
                "name": "Example request",
                "example": [
                  {
                    "type": "code",
                    "source": [
                      "searchOptions := globalSearchService.NewSearchOptions()\n",
                      "searchOptions.SetLimit(10)\n",
                      "searchOptions.SetQuery(\"GST-sdk-*\")\n",
                      "searchOptions.SetFields([]string{\"*\"})\n",
                      "\n",
                      "scanResult, response, err := globalSearchService.Search(searchOptions)\n",
                      "if err != nil {\n",
                      "  panic(err)\n",
                      "}\n",
                      "b, _ := json.MarshalIndent(scanResult, \"\", \"  \")\n",
                      "fmt.Println(string(b))"
                    ]
                  }
                ]
              }
            ],
            "java": [
              {
                "name": "Example request",
                "example": [
                  {
                    "type": "code",
                    "source": [
                      "SearchOptions searchOptions = new SearchOptions.Builder()\n",
                      "  .query(\"GST-sdk-*\")\n",
                      "  .fields(new java.util.ArrayList<String>(java.util.Arrays.asList(\"*\")))\n",
                      "  .searchCursor(searchCursor)\n",
                      "  .build();\n",
                      "\n",
                      "Response<ScanResult> response = service.search(searchOptions).execute();\n",
                      "ScanResult scanResult = response.getResult();\n",
                      "\n",
                      "System.out.println(scanResult);"
                    ]
                  }
                ]
              }
            ],
            "node": [
              {
                "name": "Example request",
                "example": [
                  {
                    "type": "code",
                    "source": [
                      "const params = {\n",
                      "  query: 'GST-sdk-*',\n",
                      "  fields: ['*'],\n",
                      "  searchCursor: searchCursor,\n",
                      "};\n",
                      "\n",
                      "globalSearchService.search(params)\n",
                      "  .then(res => {\n",
                      "    console.log(JSON.stringify(res.result, null, 2));\n",
                      "  })\n",
                      "  .catch(err => {\n",
                      "    console.warn(err)\n",
                      "  });"
                    ]
                  }
                ]
              }
            ],
            "python": [
              {
                "name": "Example request",
                "example": [
                  {
                    "type": "code",
                    "source": [
                      "response = global_search_service.search(query='GST-sdk-*',\n",
                      "                    fields=['*'])\n",
                      "scan_result = response.get_result()\n",
                      "\n",
                      "print(json.dumps(scan_result, indent=2))"
                    ]
                  }
                ]
              }
            ]
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "x-request-id": {
        "in": "header",
        "name": "x-request-id",
        "description": "An alphanumeric string that is used to trace the request. The value  may include ASCII alphanumerics and any of following segment separators: space ( ), comma (,), hyphen, (-), and underscore (_) and may have a length up to 1024 bytes. The value is considered invalid and must be ignored if that value includes any other character or is longer than 1024 bytes or is fewer than 8 characters. If not specified or invalid, it is automatically replaced by a random (version 4) UUID.",
        "required": false,
        "schema": {
          "type": "string",
          "pattern": ".*"
        }
      },
      "x-correlation-id": {
        "in": "header",
        "name": "x-correlation-id",
        "description": "An alphanumeric string that is used to trace the request as a part of a larger context: the same value is used for downstream requests and retries of those requests. The value may include ASCII alphanumerics and any of following segment separators: space ( ), comma (,), hyphen, (-), and underscore (_) and may have a length up to 1024 bytes. The value is considered invalid and must be ignored if that value includes any other character or is longer than 1024 bytes or is fewer than 8 characters. If not specified or invalid, it is automatically replaced by a random (version 4) UUID.",
        "required": false,
        "schema": {
          "type": "string",
          "pattern": ".*"
        }
      },
      "account_id": {
        "in": "query",
        "name": "account_id",
        "description": "The account ID to filter resources.",
        "required": false,
        "allowReserved": true,
        "schema": {
          "type": "string",
          "pattern": "^[a-fA-F0-9]{32}$|^[*]{1}$"
        }
      },
      "timeout": {
        "in": "query",
        "name": "timeout",
        "description": "A search timeout in milliseconds, bounding the search request to run within the specified time value and bail with the hits accumulated up to that point when expired. Defaults to the system defined timeout.",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 600000,
          "default": 0
        }
      },
      "sort": {
        "in": "query",
        "name": "sort",
        "description": "Comma separated properties names that are used for sorting",
        "required": false,
        "style": "form",
        "explode": false,
        "allowReserved": true,
        "schema": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[+-]?\\w+[\\w\\-\\.]*$"
          }
        }
      },
      "is_deleted": {
        "in": "query",
        "name": "is_deleted",
        "description": "Determines if deleted documents should be included in result set or not. Possible values are false (default), true or any. If false, only existing documents are returned; if true, only deleted documents are returned; If any, both existing and deleted documents are returned. (_for administrators only_).",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true",
            "false",
            "any"
          ],
          "default": "false"
        }
      },
      "is_reclaimed": {
        "in": "query",
        "name": "is_reclaimed",
        "description": "Determines if reclaimed documents should be included in result set or not. Possible values are false (default), true or any. If false, only not reclaimed documents are returned; if true, only reclaimed documents are returned; If any, both reclaimed and not reclaimed documents are returned.",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true",
            "false",
            "any"
          ],
          "default": "false"
        }
      },
      "impersonate_user": {
        "in": "query",
        "name": "impersonate_user",
        "description": "The user on whose behalf the search must be performed. Only a GhoST admin can impersonate a user, so be sure you set a GhoST admin IAM token in the Authorization header if you set this parameter. (_for administrators only_).",
        "required": false,
        "allowReserved": true,
        "schema": {
          "type": "string",
          "pattern": "^.*-.*$"
        }
      },
      "can_tag": {
        "in": "query",
        "name": "can_tag",
        "description": "Determines if the result set must return the resources that the user can tag or the resources that the user can view (only a GhoST admin can use this parameter). If false (default), only resources user can view are returned; if true, only resources that user has permissions for tagging are returned (_for administrators only_).",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true",
            "false"
          ],
          "default": "false"
        }
      },
      "limit": {
        "in": "query",
        "name": "limit",
        "description": "The maximum number of hits to return. Defaults to 10.",
        "required": false,
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000,
          "default": 10
        }
      },
      "is_project_resource": {
        "in": "query",
        "name": "is_project_resource",
        "description": "Determines if documents belonging to Project family should be included in result set or not. Possible values are false (default), true or any. If false, documents belonging to all families except Project are returned; if true, only documents belonging to Project family are returned; if any, documents of any family are returned. Only authorized ServiceIds can use this query parameter.",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "true",
            "false",
            "any"
          ],
          "default": "false"
        }
      }
    },
    "securitySchemes": {
      "IAM": {
        "description": "A valid IAM token. Remember to add the 'bearer' prefix to the token",
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
      }
    },
    "schemas": {
      "SearchBody": {
        "description": "search body",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "The query string",
            "type": "string"
          },
          "fields": {
            "description": "The list of the fields that are returned by the search. The CRN is always returned.",
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^\\S+$"
            }
          },
          "token": {
            "description": "An opaque token. Initially set to null or undefined, then passes the value that was returned by the previous call",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "example": {
          "query": "(region:us-south OR region:us-east) AND (type:image OR type:key)",
          "fields": [
            "crn",
            "doc.*"
          ]
        }
      },
      "SearchResults": {
        "description": "The results of the requested search.",
        "type": "object",
        "properties": {
          "token": {
            "description": "The search token to use on the next call.",
            "type": "string"
          },
          "more_data": {
            "description": "If false, there is no more data to retrieve on the next page. If true, it's possible that there is more data to retrieve on the next page.",
            "type": "boolean"
          },
          "items": {
            "type": "array",
            "description": "The array of results. Each item represents a resource and contains all visible properties that are associated with it.",
            "items": {
              "$ref": "#/components/schemas/ResultItem"
            }
          },
          "filter_error": {
            "description": "It is set to true if the result is a partial of an IAM error when user authorization is validated on one or more resources. This field is DEPRECATED and will be removed in future versions of this API",
            "type": "boolean"
          },
          "partial_data": {
            "description": "Indicates if the result that is set might be partial or not. Value 0 means that the result set is complete. A value greater than 0 means that the result set might be incomplete. Its single bits identify the cause. The first bit means that the error is in the IAM filter. The second bit means that errors are in elasticsearch shards.",
            "type": "integer"
          },
          "offset": {
            "description": "Offset parameter specified by the user",
            "type": "integer"
          },
          "limit": {
            "description": "Limit parameter specified by the user",
            "type": "integer"
          }
        },
        "required": [
          "more_data",
          "items",
          "filter_error",
          "partial_data",
          "offset",
          "limit"
        ]
      },
      "ResultItem": {
        "description": "A resource returned in a search result, which is identified by its `crn`. It contains other properties that depend on the resource type.",
        "type": "object",
        "properties": {
          "crn": {
            "type": "string",
            "description": "Resource identifier in CRN format.",
            "pattern": "^crn:v1(:[^:]*){8}$"
          }
        },
        "required": [
          "crn"
        ],
        "additionalProperties": true
      },
      "ScanBody": {
        "description": "The request body associated with a search request. At least one of `query` or `search_cursor` must be set.",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "The Lucene-formatted query string. Default to '*' if not set.",
            "type": "string",
            "default": "*"
          },
          "fields": {
            "description": "The list of the fields returned by the search. By default, the returned fields are the `account_id`, `name`, `type`, `family`, and `crn`. For all queries, `crn` is always returned. You may set `\"fields\": [\"*\"]` to discover the set of fields available to request.",
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^\\S+$"
            },
            "minItems": 1
          },
          "search_cursor": {
            "description": "An opaque cursor that is returned on each call and that must be set on the subsequent call to get the next batch of items. You can stop paging when the search returns less items than the specified `limit` or when the `search_cursor` is not present in the response. NOTE: when setting this parameter, any other properties present in the body will be ignored.",
            "type": "string",
            "minLength": 1
          }
        },
        "example": {
          "query": "(region:us-south OR region:us-east) AND (type:image OR type:key)",
          "fields": [
            "crn",
            "doc.*"
          ]
        }
      },
      "ScanResult": {
        "description": "The search scan response",
        "properties": {
          "search_cursor": {
            "description": "The search cursor to use on all calls after the first one.",
            "type": "string",
            "minLength": 1
          },
          "limit": {
            "description": "Value of the limit parameter specified by the user",
            "type": "integer"
          },
          "items": {
            "description": "The array of results. Each item represents a resource. For each resource, the requested `fields` are returned. If you did not set the `fields` request body parameter, then the `account_id`, `name`, `type`, `family`, and `crn` are returned. An empty array signals the end of the result set, which means there are no more results to fetch",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResultItem"
            }
          }
        },
        "required": [
          "items",
          "limit"
        ]
      },
      "CatalogCategories": {
        "description": "The Global catalog categories, subcategories, and services",
        "properties": {
          "categories": {
            "description": "The array of Global catalog categories.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CatalogCategory"
            }
          }
        },
        "required": [
          "categories"
        ]
      },
      "CatalogCategory": {
        "description": "A Global catalog category",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The category identifier"
          },
          "display_name": {
            "type": "string",
            "description": "The category display name in the selected language"
          },
          "tags": {
            "description": "The category tags",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "services": {
            "description": "The services that belong to the category",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CatalogCategoryService"
            }
          },
          "children": {
            "description": "The category subcategories",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CatalogCategoryChild"
            }
          }
        },
        "required": [
          "id",
          "tags",
          "display_name"
        ],
        "additionalProperties": true
      },
      "CatalogCategoryChild": {
        "description": "A Global catalog category",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The category identifier"
          },
          "display_name": {
            "type": "string",
            "description": "The category display name in the selected language"
          },
          "tags": {
            "description": "The category tags",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "services": {
            "description": "The services that belong to the category",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CatalogCategoryService"
            }
          }
        },
        "required": [
          "id",
          "tags",
          "display_name"
        ]
      },
      "CatalogCategoryService": {
        "description": "A Global catalog category service",
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The service identifier in Globacatalog"
          },
          "display_name": {
            "type": "string",
            "description": "The service display name in the selected language"
          },
          "name": {
            "description": "The name of the service. It can be used to query GhoST property service_name",
            "type": "string"
          },
          "kind": {
            "description": "The kind of the Global catalog entry. Example values are `service`, `runtime`, `application`, `buildpack`",
            "type": "string"
          },
          "gst_support": {
            "description": "A flag that indicates whether the service is onboarded in GhoST",
            "type": "boolean"
          },
          "gst_data": {
            "type": "array",
            "description": "gst_data",
            "items": {
              "$ref": "#/components/schemas/GstData"
            }
          }
        },
        "required": [
          "id",
          "display_name",
          "name",
          "kind",
          "gst_support"
        ],
        "additionalProperties": true
      },
      "GstData": {
        "description": "A Global Search and Tagging service data information",
        "type": "object",
        "properties": {
          "family": {
            "type": "string",
            "description": "family"
          },
          "types": {
            "description": "types",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "service_name": {
            "description": "service_name",
            "type": "string"
          }
        },
        "required": [
          "family",
          "types",
          "service_name"
        ],
        "additionalProperties": true
      },
      "RateLimitError": {
        "description": "Error encountered when hitting rate limiter.",
        "type": "string"
      },
      "TermsAggregation": {
        "description": "The aggregation request, which is based on terms (aka values) stored in fields: e.g. `us-south`, `eu-gb-1` stored in the `region` field.",
        "type": "object",
        "properties": {
          "terms": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "field": {
                "description": "The field on which to perform the aggregation.",
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": "^([_a-z0-9]+)(\\.[_a-z0-9]+)*$"
              },
              "size": {
                "description": "The number of buckets to return, one per unique term. If you have more than 1000 different terms in the aggregating field, and you want to get them, then you must perform multiple aggregations leveraging the query parameter to aggregate on disjointed results set. For example, aggregating on the account_id field may produce a high number of buckets, depending on the query, which may exceed the limit of 1000.",
                "type": "integer",
                "minimum": 1,
                "maximum": 1000,
                "default": 10
              },
              "order": {
                "description": "By default, the terms aggregation orders terms by descending document count. You can also order by term in ascending and descending orders. You cannot order by document count in ascending order.",
                "type": "string",
                "enum": [
                  "count_desc",
                  "term_asc",
                  "term_desc"
                ],
                "default": "count_desc"
              },
              "missing": {
                "description": "Defines how documents that are missing a value should be treated. By default they will be ignored but it is also possible to treat them as if they had a value.",
                "type": "string",
                "minLength": 1,
                "maxLength": 128
              },
              "after_key": {
                "description": "The cursor to use for pagination. If provided, the response will include the next page of results. It is allowed only for `term_asc` order.",
                "type": "string",
                "minLength": 1,
                "maxLength": 128
              }
            },
            "required": [
              "field"
            ]
          }
        },
        "required": [
          "terms"
        ]
      },
      "AggregateBody": {
        "description": "The request body associated with an aggregate request.",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "The Lucene-formatted query string. Default to '*' if not set.",
            "type": "string",
            "minLength": 1,
            "default": "*"
          },
          "aggregation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TermsAggregation"
              }
            ]
          }
        },
        "required": [
          "aggregation"
        ],
        "example": {
          "query": "region:(us-south OR us-east) AND service_name:cloudantsqldb",
          "aggregation": {
            "terms": {
              "field": "account_id",
              "missing": "N/A",
              "order": "term_asc"
            }
          }
        }
      },
      "TermsAggregationResult": {
        "description": "The results of the terms aggregation request.",
        "type": "object",
        "properties": {
          "terms": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "doc_count_error_upper_bound": {
                "description": "An upper bound of the error on the document counts for each term.",
                "type": "integer",
                "minimum": 0
              },
              "sum_other_doc_count": {
                "description": "When there are lots of unique terms, the buckets array only returns the top terms you requested with the `size` request attribute. The `sum_other_doc_count` is the sum of the document counts for all the buckets that are not part of the response.",
                "type": "integer",
                "minimum": 0
              },
              "after_key": {
                "description": "The key of the last bucket returned. Use this to get the next page of results. It is not present if there are no more results.",
                "type": "string",
                "minLength": 1
              },
              "buckets": {
                "description": "The buckets of field terms",
                "type": "array",
                "minItems": 0,
                "items": {
                  "type": "object",
                  "properties": {
                    "term": {
                      "description": "The field term",
                      "type": "string"
                    },
                    "doc_count": {
                      "description": "The number of documents whose field value is set to term. Note that this value may be approximate.",
                      "type": "integer",
                      "minimum": 1
                    }
                  }
                }
              }
            },
            "required": [
              "buckets"
            ]
          }
        },
        "required": [
          "terms"
        ]
      },
      "AggregateResult": {
        "description": "The resources aggregate response",
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "aggregation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TermsAggregationResult"
              }
            ]
          }
        },
        "required": [
          "aggregation"
        ],
        "example": {
          "aggregation": {
            "terms": {
              "doc_count_error_upper_bound": 0,
              "sum_other_doc_count": 4794,
              "buckets": [
                {
                  "term": "f065ca930006416511b1ebd61681ef9f",
                  "doc_count": 123234
                },
                {
                  "term": "b0000a9831104111171eae0089e90300",
                  "doc_count": 3456
                }
              ]
            }
          }
        }
      },
      "Error": {
        "description": "Error encountered in processing in the request",
        "type": "object",
        "properties": {
          "code": {
            "description": "A code that identifies the error.",
            "type": "string"
          },
          "response": {
            "description": "The response received for the request.",
            "type": "string"
          },
          "message": {
            "description": "A description of the error detected in the request.",
            "type": "string"
          },
          "level": {
            "description": "The severity level of the error.",
            "type": "string",
            "enum": [
              "error",
              "warning",
              "info"
            ]
          },
          "description": {
            "description": "A description of the solution to the error.",
            "type": "string"
          },
          "more_info": {
            "description": "A description that contains more details about the error.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "response",
          "message",
          "level"
        ]
      },
      "Errors": {
        "description": "Error response",
        "type": "object",
        "properties": {
          "errors": {
            "description": "List of errors that were encountered in processing the request",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "HealthSummary": {
        "description": "Information about of microservice health",
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "plan": {
            "description": "plan service",
            "type": "string"
          },
          "status": {
            "description": "status service",
            "type": "string"
          },
          "depStatus": {
            "description": "status dependencies service",
            "type": "string"
          },
          "serviceInput": {
            "description": "service input",
            "type": "string"
          },
          "responseTime": {
            "description": "response Time",
            "type": "integer"
          },
          "deployVersion": {
            "description": "deploy version",
            "type": "string"
          },
          "serviceOutput": {
            "description": "service output",
            "type": "string"
          },
          "depEsClusters": {
            "description": "ES cluster dependencies",
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "depIamXacml": {
            "description": "IAM dependency status",
            "type": "integer"
          },
          "depIstioEgress": {
            "description": "Istio cluster dependencies status",
            "type": "integer"
          },
          "depMaintenance": {
            "description": "Maintenance status",
            "type": "integer"
          }
        }
      },
      "HealthResponse": {
        "description": "Definition of success health response",
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "service": {
            "description": "Name of the microservice",
            "type": "string"
          },
          "version": {
            "description": "Version of the microservice",
            "type": "string"
          },
          "health": {
            "description": "Information about of microservice health",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HealthSummary"
            }
          },
          "region": {
            "description": "Information about Kubernetes cluster",
            "type": "string"
          },
          "timestamp": {
            "description": "Current timestamp",
            "type": "string"
          }
        }
      },
      "AliveResponse": {
        "description": "Definition of success alive response",
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "deployVersion": {
            "description": "deploy version",
            "type": "string"
          },
          "httpCode": {
            "description": "code http",
            "type": "integer"
          }
        }
      },
      "AliveResponseError": {
        "description": "Definition of failed alive response",
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "message": {
            "description": "message text",
            "type": "string"
          },
          "stack": {
            "description": "error stack",
            "type": "string"
          }
        }
      }
    }
  }
}