{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/axway/main/json-schema/axway-custom-query-schema.json",
  "title": "CustomQuery",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/axway-analytics-api-openapi.yml#/components/schemas/CustomQuery",
  "type": "object",
  "required": [
    "name",
    "span",
    "unit"
  ],
  "allOf": [
    {
      "$ref": "#/$defs/DefaultFields"
    }
  ],
  "properties": {
    "_id": {
      "type": "string",
      "description": "Identifier of the query.",
      "readOnly": true,
      "deprecated": true
    },
    "cross_org": {
      "type": "boolean",
      "description": "Whether the query is run against all organizations instead of just the organization it belongs to."
    },
    "endpoint": {
      "type": "string",
      "format": "url",
      "description": "The analytics endpoint called for the query."
    },
    "field": {
      "type": "string",
      "description": "Lexus query invoke field."
    },
    "filters": {
      "type": "string",
      "format": "json",
      "description": "Lexus filters JSON."
    },
    "granularity": {
      "type": "string",
      "description": "Unit of time for grouping results; with \"grquantity\", determines interval of results.",
      "enum": [
        "month",
        "day",
        "hour",
        "minute"
      ]
    },
    "groupings": {
      "type": "array",
      "description": "Field to group results by.",
      "items": {
        "type": "object",
        "required": [
          "field",
          "type"
        ],
        "additionalProperties": false,
        "properties": {
          "field": {
            "type": "string"
          },
          "interval": {
            "type": "integer",
            "description": "Interval used when grouping by a numeric field.",
            "minimum": 1
          },
          "limit": {
            "type": "integer",
            "description": "Maximum number of items to return for a grouping",
            "minimum": 1
          },
          "type": {
            "type": "string",
            "enum": [
              "string",
              "number",
              "duration"
            ]
          }
        }
      }
    },
    "grquantity": {
      "type": "integer",
      "description": "Number of units of time for grouping results; with \"granularity\", determines interval of results.",
      "minimum": 1,
      "maximum": 200
    },
    "guid": {
      "type": "string",
      "format": "uuid",
      "description": "Identifier for the query."
    },
    "include": {
      "type": "array",
      "description": "_Find method only._ Which fields to include in each document.",
      "items": {
        "type": "string",
        "description": "Field name."
      }
    },
    "limit": {
      "type": "integer",
      "description": "_Find method only._ How many results to include per grouping",
      "minimum": 1
    },
    "method": {
      "type": "string",
      "description": "Lexus query invoke method."
    },
    "name": {
      "type": "string",
      "description": "A name to give the query."
    },
    "offset": {
      "type": "integer",
      "description": "_Find method only._ How many documents to skip.",
      "minimum": 0
    },
    "org_guid": {
      "type": "integer",
      "description": "The guid of the organization the query is saved for."
    },
    "rateGranularity": {
      "type": "string",
      "description": "_Rate method only._ The granularity at which the rate is displayed.",
      "enum": [
        "second",
        "minute",
        "hour",
        "day"
      ]
    },
    "sortField": {
      "type": "string",
      "description": "_Find method only._ Field by which to sort events.",
      "maxProperties": 1
    },
    "sortOrder": {
      "type": "integer",
      "description": "_Find method only._ Order in which to sort events. 1 (ascending) or -1 (descending).",
      "enum": [
        1,
        -1
      ],
      "maxProperties": 1
    },
    "span": {
      "type": "integer",
      "description": "Number of units of time for queried date range; with \"unit\", determines queried date range.",
      "minimum": 1,
      "maximum": 200
    },
    "type": {
      "type": "string",
      "description": "Type of chart to use to display results.",
      "enum": [
        "list",
        "stream",
        "line",
        "bar"
      ]
    },
    "unit": {
      "type": "string",
      "description": "Unit of time for date range of query; with \"span\", determines queried date range.",
      "enum": [
        "quarter",
        "month",
        "week",
        "day",
        "hour",
        "minute"
      ]
    },
    "valueFormat": {
      "type": "string",
      "description": "How to format values for the query",
      "enum": [
        "duration",
        "percent"
      ]
    },
    "yAxis": {
      "type": "string",
      "description": "How to display series in the y-Axis of the chart.",
      "enum": [
        "overlap",
        "stacked",
        "ratio"
      ]
    }
  },
  "$defs": {
    "DefaultFields": {
      "type": "object",
      "unevaluatedProperties": false,
      "properties": {
        "created": {
          "type": "string",
          "format": "date-time",
          "description": "Date created.",
          "readOnly": true
        },
        "created_by": {
          "type": "object",
          "description": "Creator user or client.",
          "readOnly": true,
          "properties": {
            "guid": {
              "type": "string",
              "description": "`guid` of the creator."
            },
            "type": {
              "type": "string",
              "description": "Type of the creator.",
              "enum": [
                "user",
                "client"
              ]
            }
          }
        },
        "updated": {
          "type": "string",
          "format": "date-time",
          "description": "Date last updated.",
          "readOnly": true
        }
      }
    }
  }
}