{
    "properties": {
      "spec": {
        "properties": {
          "account": {
            "description": "Name of the account to which the Consumer belongs.",
            "pattern": "^[^.*>]*$",
            "type": "string"
          },
          "ackPolicy": {
            "default": "none",
            "description": "How messages should be acknowledged.",
            "enum": [
              "none",
              "all",
              "explicit"
            ],
            "type": "string"
          },
          "ackWait": {
            "default": "1ns",
            "description": "How long to allow messages to remain un-acknowledged before attempting redelivery.",
            "type": "string"
          },
          "backoff": {
            "description": "List of durations representing a retry time scale for NaK'd or retried messages",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "creds": {
            "default": "",
            "description": "NATS user credentials for connecting to servers. Please make sure your controller has mounted the cerds on its path.",
            "type": "string"
          },
          "deliverGroup": {
            "description": "The name of a queue group.",
            "type": "string"
          },
          "deliverPolicy": {
            "default": "all",
            "enum": [
              "all",
              "last",
              "new",
              "byStartSequence",
              "byStartTime"
            ],
            "type": "string"
          },
          "deliverSubject": {
            "description": "The subject to deliver observed messages, when not set, a pull-based Consumer is created.",
            "type": "string"
          },
          "description": {
            "description": "The description of the consumer.",
            "type": "string"
          },
          "durableName": {
            "description": "The name of the Consumer.",
            "minLength": 1,
            "pattern": "^[^.*>]+$",
            "type": "string"
          },
          "filterSubject": {
            "description": "Select only a specific incoming subjects, supports wildcards.",
            "type": "string"
          },
          "filterSubjects": {
            "description": "List of incoming subjects, supports wildcards. Available since 2.10.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "flowControl": {
            "default": false,
            "description": "Enables flow control.",
            "type": "boolean"
          },
          "headersOnly": {
            "default": false,
            "description": "When set, only the headers of messages in the stream are delivered, and not the bodies. Additionally, Nats-Msg-Size header is added to indicate the size of the removed payload",
            "type": "boolean"
          },
          "heartbeatInterval": {
            "description": "The interval used to deliver idle heartbeats for push-based consumers, in Go's time.Duration format.",
            "type": "string"
          },
          "maxAckPending": {
            "description": "Maximum pending Acks before consumers are paused.",
            "type": "integer"
          },
          "maxDeliver": {
            "minimum": -1,
            "type": "integer"
          },
          "maxRequestBatch": {
            "description": "The largest batch property that may be specified when doing a pull on a Pull Consumer.",
            "type": "integer"
          },
          "maxRequestExpires": {
            "description": "The maximum expires duration that may be set when doing a pull on a Pull Consumer.",
            "type": "string"
          },
          "maxRequestMaxBytes": {
            "description": "The maximum max_bytes value that maybe set when dong a pull on a Pull Consumer.",
            "type": "integer"
          },
          "maxWaiting": {
            "description": "The number of pulls that can be outstanding on a pull consumer, pulls received after this is reached are ignored.",
            "type": "integer"
          },
          "memStorage": {
            "default": false,
            "description": "Force the consumer state to be kept in memory rather than inherit the setting from the stream.",
            "type": "boolean"
          },
          "metadata": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Additional Consumer metadata.",
            "type": "object"
          },
          "nkey": {
            "default": "",
            "description": "NATS user NKey for connecting to servers.",
            "type": "string"
          },
          "optStartSeq": {
            "minimum": 0,
            "type": "integer"
          },
          "optStartTime": {
            "description": "Time format must be RFC3339.",
            "type": "string"
          },
          "preventDelete": {
            "default": false,
            "description": "When true, the managed Consumer will not be deleted when the resource is deleted",
            "type": "boolean"
          },
          "preventUpdate": {
            "default": false,
            "description": "When true, the managed Consumer will not be updated when the resource is updated",
            "type": "boolean"
          },
          "rateLimitBps": {
            "description": "rate at which messages will be delivered to clients, expressed in bit per second.",
            "type": "integer"
          },
          "replayPolicy": {
            "default": "instant",
            "description": "How messages are sent.",
            "enum": [
              "instant",
              "original"
            ],
            "type": "string"
          },
          "replicas": {
            "description": "When set do not inherit the replica count from the stream but specifically set it to this amount.",
            "type": "integer"
          },
          "sampleFreq": {
            "description": "What percentage of acknowledgements should be samples for observability.",
            "type": "string"
          },
          "servers": {
            "default": [],
            "description": "A list of servers for creating consumer",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "streamName": {
            "description": "The name of the Stream to create the Consumer in.",
            "type": "string"
          },
          "tls": {
            "description": "A client's TLS certs and keys.",
            "properties": {
              "clientCert": {
                "description": "A client's cert filepath. Should be mounted.",
                "type": "string"
              },
              "clientKey": {
                "description": "A client's key filepath. Should be mounted.",
                "type": "string"
              },
              "rootCas": {
                "description": "A list of filepaths to CAs. Should be mounted.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "type": "object",
            "additionalProperties": false
          }
        },
        "type": "object",
        "additionalProperties": false
      },
      "status": {
        "properties": {
          "conditions": {
            "items": {
              "properties": {
                "lastTransitionTime": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "reason": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "type": "array"
          },
          "observedGeneration": {
            "type": "integer"
          }
        },
        "type": "object",
        "additionalProperties": false
      }
    },
    "type": "object"
  }
  