{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
        "structuredFilter": {
            "type": "object",
            "description": "A set of structured filters to apply to the search. This is mutually exclusive with the 'passthrough' parameter, and should only be used when the client is not providing a passthrough value.",
            "properties": {
                "q": {
                    "type": "string",
                    "description": "Text phrase to use for performing fuzzy or semantic search for ArcGIS Items"
                },
                "owner": {
                    "type": "string",
                    "description": "An owner user id by which to filter"
                },
                "type": {
                    "type": "string",
                    "description": "The ArcGIS Item Type by which to filter",
                    "examples": [
                        "feature service",
                        "pdf",
                        "web map",
                        "web mapping application",
                        "storymap",
                        "map service",
                        "image service",
                        "image",
                        "dashboard",
                        "web experience"
                    ]
                },
                "typekeyword": {
                    "type": "string",
                    "description": "A typekeyword by which to filter"
                },
                "tag": {
                    "type": "string",
                    "description": "An tag by which to filter"
                }
            },
            "required": []
        },
        "passthrough": {
            "type": "string",
            "description": "A raw passthrough q string to send directly to the underlying Portal API. This allows for maximum flexibility and control over the search query, but requires the client to be familiar with the Portal API's q syntax and capabilities. Generally you should ONLY use this specifically if the client tells you it needs to do a raw search, passthrough search, etc."
        },
        "options": {
            "type": "object",
            "description": "Additional options to apply to the search",
            "properties": {
                "num": {
                    "type": "number",
                    "description": "The number of results to return. Default is 10, maximum is 100",
                    "minimum": 1,
                    "maximum": 100
                },
                "start": {
                    "type": "number",
                    "description": "The starting index of the results to return (for pagination)",
                    "minimum": 1
                },
                "sortField": {
                    "type": "string",
                    "description": "The field by which to sort the results. When none is provided the results are sorted by relevance to the search query. Note that not EVERY field is sortable, and attempting to sort by a non-sortable field may result in an error from the underlying Portal API. Common sortable fields include: title, owner, type, modified, etc.",
                    "examples": [
                        "title",
                        "created",
                        "type",
                        "owner",
                        "modified",
                        "avgrating",
                        "numratings",
                        "numcomments",
                        "numviews",
                        "scorecompleteness"
                    ]
                },
                "sortOrder": {
                    "type": "string",
                    "description": "The order by which to sort the results. Ascending (asc) or descending (desc). Default is desc",
                    "enum": [
                        "asc",
                        "desc"
                    ],
                    "default": "desc"
                }
            },
            "required": []
        }
    },
    "required": []
}