{
  "swagger" : "2.0",
  "info" : {
    "description" : "Data Holder Consumer Data Standards Administration End Points",
    "version" : "1.3.0",
    "title" : "Consumer Data Standards Administration End Points",
    "contact" : {
      "name" : "Consumer Data Standards Administration End Points",
      "url" : "https://consumerdatastandards.org.au/",
      "email" : "cdr-data61@csiro.au"
    },
    "license" : {
      "name" : "MIT License",
      "url" : "https://opensource.org/licenses/MIT"
    }
  },
  "host" : "data.holder.com.au",
  "basePath" : "/cds-au/v1",
  "schemes" : [ "https" ],
  "consumes" : [ "application/json" ],
  "produces" : [ "application/json" ],
  "paths" : {
    "/admin/register/metadata" : {
      "post" : {
        "tags" : [ "Admin", "Register" ],
        "summary" : "Metadata Update",
        "description" : "Indicate that a critical update to the metadata for Accredited Data Recipients has been made and should be obtained",
        "operationId" : "metadataUpdate",
        "parameters" : [ {
          "in" : "body",
          "name" : "action",
          "required" : true,
          "schema" : {
            "$ref" : "#/definitions/RequestMetaDataUpdate"
          }
        }, {
          "name" : "x-v",
          "in" : "header",
          "description" : "Version of the API end point requested by the client. Must be set to a positive integer. The data holder should respond with the highest supported version between [x-min-v](#request-headers) and [x-v](#request-headers). If the value of [x-min-v](#request-headers) is equal to or higher than the value of [x-v](#request-headers) then the [x-min-v](#request-headers) header should be treated as absent. If all versions requested are not supported then the data holder should respond with a 406 Not Acceptable. See [HTTP Headers](#request-headers)",
          "required" : true,
          "type" : "string"
        }, {
          "name" : "x-min-v",
          "in" : "header",
          "description" : "Minimum version of the API end point requested by the client. Must be set to a positive integer if provided. The data holder should respond with the highest supported version between [x-min-v](##request-headers) and [x-v](##request-headers). If all versions requested are not supported then the data holder should respond with a 406 Not Acceptable.",
          "required" : false,
          "type" : "string"
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "headers" : {
              "x-v" : {
                "type" : "string",
                "description" : "The [version](##response-headers) of the API end point that the data holder has responded with."
              }
            }
          }
        },
        "x-version" : "1"
      }
    },
    "/admin/metrics" : {
      "get" : {
        "tags" : [ "Admin", "Metrics" ],
        "summary" : "Get Metrics",
        "description" : "This end point allows the ACCC to obtain operational statistics from the Data Holder on the operation of their CDR compliant implementation. The statistics obtainable from this end point are determined by the non-functional requirements for the CDR regime.\n\nNOTE: This version must be implemented by **July 31st 2021**\n\nObsolete versions: [v1](includes/obsolete/get-metrics-v1.html)",
        "operationId" : "getMetrics",
        "parameters" : [ {
          "name" : "period",
          "in" : "query",
          "description" : "The period of metrics to be requested. Values can be CURRENT (meaning metrics for current day), HISTORIC (meaning metrics for previous days or months) or ALL. If absent the default is ALL.",
          "required" : false,
          "type" : "string",
          "default" : "ALL",
          "enum" : [ "CURRENT", "HISTORIC", "ALL" ]
        }, {
          "name" : "x-v",
          "in" : "header",
          "description" : "Version of the API end point requested by the client. Must be set to a positive integer. The data holder should respond with the highest supported version between [x-min-v](#request-headers) and [x-v](#request-headers). If the value of [x-min-v](#request-headers) is equal to or higher than the value of [x-v](#request-headers) then the [x-min-v](#request-headers) header should be treated as absent. If all versions requested are not supported then the data holder should respond with a 406 Not Acceptable. See [HTTP Headers](#request-headers)",
          "required" : true,
          "type" : "string"
        }, {
          "name" : "x-min-v",
          "in" : "header",
          "description" : "Minimum version of the API end point requested by the client. Must be set to a positive integer if provided. The data holder should respond with the highest supported version between [x-min-v](##request-headers) and [x-v](##request-headers). If all versions requested are not supported then the data holder should respond with a 406 Not Acceptable.",
          "required" : false,
          "type" : "string"
        } ],
        "responses" : {
          "200" : {
            "description" : "Success",
            "headers" : {
              "x-v" : {
                "type" : "string",
                "description" : "The [version](#response-headers) of the API end point that the data holder has responded with."
              }
            },
            "schema" : {
              "$ref" : "#/definitions/ResponseMetricsListV2"
            }
          }
        },
        "x-version" : "2"
      }
    }
  },
  "definitions" : {
    "RequestMetaDataUpdate" : {
      "type" : "object",
      "required" : [ "data" ],
      "properties" : {
        "data" : {
          "$ref" : "#/definitions/RequestMetaDataUpdate_data"
        },
        "meta" : {
          "$ref" : "#/definitions/Meta"
        }
      }
    },
    "ResponseMetricsListV2" : {
      "type" : "object",
      "required" : [ "data", "links" ],
      "properties" : {
        "data" : {
          "$ref" : "#/definitions/ResponseMetricsListV2_data"
        },
        "links" : {
          "$ref" : "#/definitions/Links"
        },
        "meta" : {
          "$ref" : "#/definitions/Meta"
        }
      }
    },
    "AvailabilityMetrics" : {
      "type" : "object",
      "properties" : {
        "currentMonth" : {
          "type" : "number",
          "description" : "Percentage availability of the CDR platform so far for the current calendar month. 0.0 means 0%. 1.0 means 100%."
        },
        "previousMonths" : {
          "type" : "array",
          "description" : "Percentage availability of the CDR platform for previous calendar months. The first element indicates the last month and so on. A maximum of twelve entries is required if available. 0.0 means 0%. 1.0 means 100%.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Percentage availability of the CDR platform over time",
      "x-conditional" : [ "currentMonth", "previousMonths" ]
    },
    "PerformanceMetrics" : {
      "type" : "object",
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Percentage of calls within the performance threshold for the current day. 0.0 means 0%. 1.0 means 100%"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Percentage of calls within the performance threshold for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available. 0.0 means 0%. 1.0 means 100%",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Percentage of calls within the performance thresholds",
      "x-conditional" : [ "currentDay", "previousDays" ]
    },
    "InvocationMetrics" : {
      "type" : "object",
      "properties" : {
        "unauthenticated" : {
          "$ref" : "#/definitions/InvocationMetrics_unauthenticated"
        },
        "highPriority" : {
          "$ref" : "#/definitions/InvocationMetrics_highPriority"
        },
        "lowPriority" : {
          "$ref" : "#/definitions/InvocationMetrics_lowPriority"
        },
        "unattended" : {
          "$ref" : "#/definitions/InvocationMetrics_unattended"
        },
        "largePayload" : {
          "$ref" : "#/definitions/InvocationMetrics_largePayload"
        }
      },
      "description" : "Number of API calls in each performance tier over time",
      "x-conditional" : [ "unauthenticated", "highPriority", "lowPriority", "unattended", "largePayload" ]
    },
    "AverageResponseMetrics" : {
      "type" : "object",
      "properties" : {
        "unauthenticated" : {
          "$ref" : "#/definitions/AverageResponseMetrics_unauthenticated"
        },
        "highPriority" : {
          "$ref" : "#/definitions/AverageResponseMetrics_highPriority"
        },
        "lowPriority" : {
          "$ref" : "#/definitions/AverageResponseMetrics_lowPriority"
        },
        "unattended" : {
          "$ref" : "#/definitions/AverageResponseMetrics_unattended"
        },
        "largePayload" : {
          "$ref" : "#/definitions/AverageResponseMetrics_largePayload"
        }
      },
      "description" : "Average response time in seconds, at millisecond resolution, within each performance tier",
      "x-conditional" : [ "unauthenticated", "highPriority", "lowPriority", "unattended", "largePayload" ]
    },
    "SessionCountMetrics" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Session count for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Session count for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Session counts over time. Note that a session is defined as the provisioning of an Access Token.",
      "x-conditional" : [ "currentDay", "previousDays" ]
    },
    "AverageTPSMetrics" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Average TPS for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Average TPS for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Transactions per second over time",
      "x-conditional" : [ "currentDay", "previousDays" ]
    },
    "PeakTPSMetrics" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Peak TPS for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Peak TPS for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Maximum record transactions per second over time",
      "x-conditional" : [ "currentDay", "previousDays" ]
    },
    "ErrorMetrics" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Number of errors for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Number of errors for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Number of calls resulting in error due to server execution over time",
      "x-conditional" : [ "currentDay", "previousDays" ]
    },
    "RejectionMetricsV2" : {
      "properties" : {
        "authenticated" : {
          "$ref" : "#/definitions/RejectionMetricsV2_authenticated"
        },
        "unauthenticated" : {
          "$ref" : "#/definitions/RejectionMetricsV2_unauthenticated"
        }
      },
      "description" : "Number of calls rejected due to traffic thresholds over time",
      "x-conditional" : [ "currentDay", "previousDays" ]
    },
    "Links" : {
      "type" : "object",
      "required" : [ "self" ],
      "properties" : {
        "self" : {
          "type" : "string",
          "description" : "Fully qualified link to this API call",
          "x-cds-type" : "URIString"
        }
      }
    },
    "Meta" : {
      "type" : "object"
    },
    "RequestMetaDataUpdate_data" : {
      "required" : [ "action" ],
      "properties" : {
        "action" : {
          "type" : "string",
          "description" : "The action to take for the meta data. At the moment the only option is REFRESH which requires the data holder to call the ACCC to refresh meta data as soon as practicable",
          "default" : "REFRESH",
          "enum" : [ "REFRESH" ]
        }
      }
    },
    "ResponseMetricsListV2_data" : {
      "required" : [ "requestTime" ],
      "properties" : {
        "requestTime" : {
          "type" : "string",
          "description" : "The date and time that the metrics in this payload were requested.",
          "x-cds-type" : "DateTimeString"
        },
        "availability" : {
          "$ref" : "#/definitions/AvailabilityMetrics"
        },
        "performance" : {
          "$ref" : "#/definitions/PerformanceMetrics"
        },
        "invocations" : {
          "$ref" : "#/definitions/InvocationMetrics"
        },
        "averageResponse" : {
          "$ref" : "#/definitions/AverageResponseMetrics"
        },
        "sessionCount" : {
          "$ref" : "#/definitions/SessionCountMetrics"
        },
        "averageTps" : {
          "$ref" : "#/definitions/AverageTPSMetrics"
        },
        "peakTps" : {
          "$ref" : "#/definitions/PeakTPSMetrics"
        },
        "errors" : {
          "$ref" : "#/definitions/ErrorMetrics"
        },
        "rejections" : {
          "$ref" : "#/definitions/RejectionMetricsV2"
        },
        "customerCount" : {
          "type" : "integer",
          "description" : "Number of customers with active authorisations at the time of the call"
        },
        "recipientCount" : {
          "type" : "integer",
          "description" : "Number of data recipients with active authorisations at the time of the call"
        }
      }
    },
    "InvocationMetrics_unauthenticated" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "API call counts for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "API call counts for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "API call counts for the unauthenticated tier"
    },
    "InvocationMetrics_highPriority" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "API call counts for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "API call counts for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "API call counts for the high priority tier"
    },
    "InvocationMetrics_lowPriority" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "API call counts for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "API call counts for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "API call counts for the low priority tier"
    },
    "InvocationMetrics_unattended" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "API call counts for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "API call counts for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "API call counts for the unattended tier"
    },
    "InvocationMetrics_largePayload" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "API call counts for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "API call counts for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "API call counts for the large payload tier"
    },
    "AverageResponseMetrics_unauthenticated" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Average response time for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Average response time for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Average response time for the unauthenticated tier"
    },
    "AverageResponseMetrics_highPriority" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Average response time for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Average response time for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Average response time for the high priority tier"
    },
    "AverageResponseMetrics_lowPriority" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Average response time for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Average response time for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Average response time for the low priority tier"
    },
    "AverageResponseMetrics_unattended" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Average response time for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Average response time for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Average response time for the unattended tier"
    },
    "AverageResponseMetrics_largePayload" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Average response time for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Average response time for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Average response time for the large payload tier"
    },
    "RejectionMetricsV2_authenticated" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Number of calls rejected for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Number of calls rejected for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Rejection counts for all authenticated end points"
    },
    "RejectionMetricsV2_unauthenticated" : {
      "properties" : {
        "currentDay" : {
          "type" : "number",
          "description" : "Number of calls rejected for current day"
        },
        "previousDays" : {
          "type" : "array",
          "description" : "Number of calls rejected for previous days. The first element indicates yesterday and so on. A maximum of seven entries is required if available.",
          "items" : {
            "type" : "number"
          }
        }
      },
      "description" : "Rejection counts for all uauthenticated end points"
    }
  },
  "parameters" : {
    "RequestHeader_x-v" : {
      "name" : "x-v",
      "in" : "header",
      "description" : "Version of the API end point requested by the client. Must be set to a positive integer. The data holder should respond with the highest supported version between [x-min-v](#request-headers) and [x-v](#request-headers). If the value of [x-min-v](#request-headers) is equal to or higher than the value of [x-v](#request-headers) then the [x-min-v](#request-headers) header should be treated as absent. If all versions requested are not supported then the data holder should respond with a 406 Not Acceptable. See [HTTP Headers](#request-headers)",
      "required" : true,
      "type" : "string"
    },
    "RequestHeader_x-min-v" : {
      "name" : "x-min-v",
      "in" : "header",
      "description" : "Minimum version of the API end point requested by the client. Must be set to a positive integer if provided. The data holder should respond with the highest supported version between [x-min-v](##request-headers) and [x-v](##request-headers). If all versions requested are not supported then the data holder should respond with a 406 Not Acceptable.",
      "required" : false,
      "type" : "string"
    }
  }
}