{"openapi":"3.1.0","info":{"title":"OONI API","version":"1","description":"Public read-only endpoints of the OONI API."},"servers":[{"url":"https://api.ooni.io"}],"paths":{"/api/v1/files":{"get":{"tags":["files"],"summary":"List Files","description":"List files - unsupported","operationId":"list_files_api_v1_files_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/measurement/{measurement_uid}":{"get":{"tags":["oonimeasurements"],"summary":"Get Measurement","description":"Get one measurement by measurement_id,\nReturns only the measurement without extra data from the database","operationId":"get_measurement_api_v1_measurement__measurement_uid__get","parameters":[{"name":"measurement_uid","in":"path","required":true,"schema":{"type":"string","title":"Measurement Uid"}},{"name":"download","in":"query","required":true,"schema":{"type":"boolean","title":"Download"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/raw_measurement":{"get":{"summary":"Get Raw Measurement","description":"Get raw measurement body.\n\nYou should always provide at the least one of: `report_id`, `measurement_uid`","operationId":"get_raw_measurement_api_v1_raw_measurement_get","parameters":[{"name":"report_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"The report_id to search measurements for","title":"Report Id"},"description":"The report_id to search measurements for"},{"name":"input","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"The input (for example a URL or IP address) to search measurements for","title":"Input"},"description":"The input (for example a URL or IP address) to search measurements for"},{"name":"measurement_uid","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"The measurement_uid to search measurements for","title":"Measurement Uid"},"description":"The measurement_uid to search measurements for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/measurement_meta":{"get":{"summary":"Get Measurement Meta","description":"Get metadata on one measurement by measurement_uid or report_id + input","operationId":"get_measurement_meta_api_v1_measurement_meta_get","parameters":[{"name":"measurement_uid","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"title":"Measurement Uid"}},{"name":"report_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"title":"Report Id"}},{"name":"input","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"title":"Input"}},{"name":"full","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Full"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/MeasurementMeta"},{"type":"object","additionalProperties":true}],"title":"Response Get Measurement Meta Api V1 Measurement Meta Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/measurements":{"get":{"summary":"List Measurements","description":"Search for measurements using only the database. Provide pagination.","operationId":"list_measurements_api_v1_measurements_get","parameters":[{"name":"report_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"Report_id to search measurements for","title":"Report Id"},"description":"Report_id to search measurements for"},{"name":"input","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"Input (for example a URL or IP address) to search measurements for","title":"Input"},"description":"Input (for example a URL or IP address) to search measurements for"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"Domain to search measurements for","title":"Domain"},"description":"Domain to search measurements for"},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Two letter country code","title":"Probe Cc"},"description":"Two letter country code"},{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"description":"Autonomous system number in the format \"ASXXX\"","title":"Probe Asn"},"description":"Autonomous system number in the format \"ASXXX\""},{"name":"test_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the test","title":"Test Name"},"description":"Name of the test"},{"name":"category_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category code from the citizenlab list","title":"Category Code"},"description":"Category code from the citizenlab list"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Start date of when measurements were run (ex. '2016-10-20T10:30:00'). Note that the interval between `since` and `until` can't be greater than 180 days (~6 months)","title":"Since"},"description":"Start date of when measurements were run (ex. '2016-10-20T10:30:00'). Note that the interval between `since` and `until` can't be greater than 180 days (~6 months)"},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"End date of when measurement were run (ex. '2016-10-20T10:30:00'). Note that the interval between `since` and `until` can't be greater than 180 days (~6 months)","title":"Until"},"description":"End date of when measurement were run (ex. '2016-10-20T10:30:00'). Note that the interval between `since` and `until` can't be greater than 180 days (~6 months)"},{"name":"confirmed","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Set \"true\" for confirmed network anomalies (we found a blockpage, a middlebox, etc.). Default: no filtering (show both true and false)","title":"Confirmed"},"description":"Set \"true\" for confirmed network anomalies (we found a blockpage, a middlebox, etc.). Default: no filtering (show both true and false)"},{"name":"anomaly","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Set \"true\" for measurements that require special attention (likely to be a case of blocking).Default: no filtering (show both true and false)","title":"Anomaly"},"description":"Set \"true\" for measurements that require special attention (likely to be a case of blocking).Default: no filtering (show both true and false)"},{"name":"failure","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Set \"true\" for failed measurements (the control request failed, there was a bug, etc.). Default: no filtering (show both true and false)","title":"Failure"},"description":"Set \"true\" for failed measurements (the control request failed, there was a bug, etc.). Default: no filtering (show both true and false)"},{"name":"software_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter measurements by software version. Comma-separated.","title":"Software Version"},"description":"Filter measurements by software version. Comma-separated."},{"name":"test_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter measurements by test version. Comma-separated.","title":"Test Version"},"description":"Filter measurements by test version. Comma-separated."},{"name":"engine_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter measurements by engine version. Comma-separated.","title":"Engine Version"},"description":"Filter measurements by engine version. Comma-separated."},{"name":"ooni_run_link_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter measurements by OONIRun ID.","title":"Ooni Run Link Id"},"description":"Filter measurements by OONIRun ID."},{"name":"order_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated, kept for compatibility. Results are always ordered by `measurement_start_time` regardless of this field","deprecated":true,"title":"Order By"},"description":"Deprecated, kept for compatibility. Results are always ordered by `measurement_start_time` regardless of this field","deprecated":true},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"If the order should be ascending or descending (one of: `asc` or `desc`)","enum":["asc","desc","ASC","DESC"],"default":"desc","title":"Order"},"description":"If the order should be ascending or descending (one of: `asc` or `desc`)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset into the result set (default: 0). Offset-based pagination is now deprecated, use the continuation token `cont` instead","deprecated":true,"default":0,"title":"Offset"},"description":"Offset into the result set (default: 0). Offset-based pagination is now deprecated, use the continuation token `cont` instead","deprecated":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"exclusiveMinimum":0,"description":"Number of records to return (default: 100)","default":100,"title":"Limit"},"description":"Number of records to return (default: 100)"},{"name":"cont","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Continuation token: used to to determine the next page of measurements to retrieve. Usually comes from the `next_url` field in `metadata`.","title":"Cont"},"description":"Continuation token: used to to determine the next page of measurements to retrieve. Usually comes from the `next_url` field in `metadata`."},{"name":"user-agent","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User-Agent"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeasurementList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/torsf_stats":{"get":{"summary":"Get Torsf Stats","description":"Tor Pluggable Transports statistics\nAverage / percentiles / total_count grouped by day\nEither group-by or filter by probe_cc\nReturns a format similar to get_aggregated","operationId":"get_torsf_stats_api_v1_torsf_stats_get","parameters":[{"name":"probe_cc","in":"query","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Two letter country code","title":"Probe Cc"},"description":"Two letter country code"},{"name":"since","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Start date of when measurements were run (ex. \"2016-10-20T10:30:00\")","title":"Since"},"description":"Start date of when measurements were run (ex. \"2016-10-20T10:30:00\")"},{"name":"until","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"End date of when measurement were run (ex. \"2016-10-20T10:30:00\")","title":"Until"},"description":"End date of when measurement were run (ex. \"2016-10-20T10:30:00\")"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aggregation":{"get":{"summary":"Get Measurements","description":"Aggregate counters data","operationId":"get_measurements_api_v1_aggregation_get","parameters":[{"name":"input","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"The input (for example a URL or IP address) to search measurements for","title":"Input"},"description":"The input (for example a URL or IP address) to search measurements for"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3},{"type":"null"}],"description":"Domain to search measurements for, comma separated","title":"Domain"},"description":"Domain to search measurements for, comma separated"},{"name":"category_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[A-Z]+$"},{"type":"null"}],"description":"The category code from the citizenlab list","title":"Category Code"},"description":"The category code from the citizenlab list"},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Two letter capitalized country codes, comma separated","title":"Probe Cc"},"description":"Two letter capitalized country codes, comma separated"},{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Autonomous system number in the format ASxxx, comma separated","title":"Probe Asn"},"description":"Autonomous system number in the format ASxxx, comma separated"},{"name":"test_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-z0-9_,]+$"},{"type":"null"}],"description":"Name of the tests, comma separated","title":"Test Name"},"description":"Name of the tests, comma separated"},{"name":"ooni_run_link_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OONIRun descriptors comma separated","title":"Ooni Run Link Id"},"description":"OONIRun descriptors comma separated"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"\n            The start date of when measurements were run (ex. \"2016-10-20T10:30:00\")\n\n            If not provided, defaults to \"6 months ago\"\n            ","title":"Since"},"description":"\n            The start date of when measurements were run (ex. \"2016-10-20T10:30:00\")\n\n            If not provided, defaults to \"6 months ago\"\n            "},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"\n            The end date of when measurement were run (ex. \"2016-10-20T10:30:00\")\n\n            If not provided, defaults to \"now\"\n            ","title":"Until"},"description":"\n            The end date of when measurement were run (ex. \"2016-10-20T10:30:00\")\n\n            If not provided, defaults to \"now\"\n            "},{"name":"time_grain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time granularity. Used only when the X or Y axis represent time.","enum":["hour","day","week","month","year","auto"],"default":"auto","title":"Time Grain"},"description":"Time granularity. Used only when the X or Y axis represent time."},{"name":"axis_x","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-z_]+$"},{"type":"null"}],"description":"The dimension on the x axis e.g. measurement_start_day","title":"Axis X"},"description":"The dimension on the x axis e.g. measurement_start_day"},{"name":"axis_y","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-z_]+$"},{"type":"null"}],"description":"The dimension on the y axis e.g. probe_cc","title":"Axis Y"},"description":"The dimension on the y axis e.g. probe_cc"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Output format, JSON (default) or CSV","enum":["JSON","CSV","json","csv"],"default":"json","title":"Format"},"description":"Output format, JSON (default) or CSV"},{"name":"download","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"If we should be triggering a file download","default":false,"title":"Download"},"description":"If we should be triggering a file download"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeasurementAggregation"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/analysis":{"get":{"tags":["analysis","list_data"],"summary":"List Measurements","operationId":"list_measurements_api_v1_analysis_get","parameters":[{"name":"measurement_uid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Uid"}},{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Probe Asn"}},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Probe Cc"}},{"name":"test_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"order_by","in":"query","required":false,"schema":{"enum":["measurement_start_time","input","probe_cc","probe_asn","test_name"],"type":"string","default":"measurement_start_time","title":"Order By"}},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc","ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","title":"Order"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"ooni_run_link_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ooni Run Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAnalysisResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/observations":{"get":{"tags":["observations","list_data"],"summary":"List Observations","operationId":"list_observations_api_v1_observations_get","parameters":[{"name":"report_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Id"}},{"name":"measurement_uid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Uid"}},{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Probe Asn"}},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Probe Cc"}},{"name":"test_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Until"}},{"name":"order_by","in":"query","required":false,"schema":{"enum":["measurement_start_time","input","probe_cc","probe_asn","test_name"],"type":"string","default":"measurement_start_time","title":"Order By"}},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"enum":["asc","desc","ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","title":"Order"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"software_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Software Name"}},{"name":"software_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Software Version"}},{"name":"test_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Version"}},{"name":"engine_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Engine Version"}},{"name":"ooni_run_link_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ooni Run Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListObservationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aggregation/observations":{"get":{"tags":["aggregation","observations"],"summary":"Get Aggregation Observations","operationId":"get_aggregation_observations_api_v1_aggregation_observations_get","parameters":[{"name":"group_by","in":"query","required":false,"schema":{"type":"array","items":{"enum":["timestamp","failure","hostname","ip","probe_cc","probe_asn","test_name","measurement_uid"],"type":"string"},"default":["failure"],"title":"Group By"}},{"name":"test_name","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Test Name"}},{"name":"hostname","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Hostname"}},{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"null"}],"title":"Probe Asn"}},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Probe Cc"}},{"name":"resolver_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Resolver Asn"}},{"name":"ip","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Ip"}},{"name":"measurement_uid","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Measurement Uid"}},{"name":"ooni_run_link_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ooni Run Link Id"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"time_grain","in":"query","required":false,"schema":{"enum":["hour","day","week","month","year","auto"],"type":"string","default":"day","title":"Time Grain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/oonimeasurements__routers__data__aggregate_observations__AggregationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aggregation/observations/ctrl":{"get":{"tags":["aggregation","observations","ctrl"],"summary":"Get Ctrl Ground Truth","operationId":"get_ctrl_ground_truth_api_v1_aggregation_observations_ctrl_get","parameters":[{"name":"hostname","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"title":"Hostname"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CtrlGroundTruthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/aggregation/analysis":{"get":{"tags":["aggregation","analysis"],"summary":"Get Aggregation Analysis","description":"## Overview\n\nThe goal of analysis is to use observations to produce likelyhood of network\ninterference vectors.\nThese vectors are expressing the level of belief we have in a certain target\n(eg. a web resource) being blocked (ie. intentionally unavailable), down (ie.\nunavailable, but not due to a restriction) or ok (ie. available and not\nblocked) in a certain location (eg. country, ASN pair) in a given window of time\n(eg. from the 1st of January 2025 until the 20th of January 2025).\n\nWe express the outcome space a likelyhood vector where each value is between 0.0\nand 1.0, where 1.0 is absolute certainty, while 0.0 is the opposite.\n\nIt's useful to represent the outcome space as the following Venn diagram:\n\n![https://raw.githubusercontent.com/ooni/backend/a12522a729b6880b5e604cb80d6500e27d82fd57/ooniapi/services/oonimeasurements/docs/loni-outcome-space.svg]\n\nBelow we expand upon the meaning of each set:\n\n* B = { something is blocked, and also down or ok or both or only blocked}\n* D = { something is down, but also blocked or ok or both or only down}\n* K = { something is ok, and also down or blocked or both or only ok}\n* PB = { something is blocked, but is NOT down or blocked}\n* PD = { something is down, but is NOT blocked or ok}\n* PK = { something is ok, but is NOT down or blocked}\n* BD\u00acK = { something is blocked and down, but NOT ok}\n* BK\u00acD = { something is blocked and ok, but NOT down}\n* DK\u00acB = { something is down and ok, but NOT blocked}\n* BDK = { something is blocked and down and ok}\n\nAt first one might expect the intersection sets to always be null, after\nsomething can't be blocked and ok at the same time, however it's important to\nkeep in mind that these likelyhood vectors apply to a variable location and time\ncontour. This means that within a certain window of time the target might be\nunavailable only transiently or it might be unavailable only in a certain subset\nof all locations, resulting in it being, for example, blocked and ok at the same\ntime.\n\nWhile it would be nice to have something where the properties of these\nlikelyhood vectors are expressed in such a way where they are indepndent from\none another (ie. they sum to 1.0), doing so is not so easy.\nFor example, it's non-trivial to calculate the \"Pure\" (PB, PD, PK) values or the\n\u00ac values.\n\nAs a result we decide to focus in this first iteration on just estimating B,\nwhich we approximate by calculating a robust maximum value on the fuzzy logic\nbased analysis vectors.\nSpecifically they are estimated using quantiles over all the\nmeasurement_analysis tables. We don't use just a simple maximum, a single\noutlier would obviously skew the whole calculation.\n\nWe then proceed to estimate the likelyhood of the blocking happening at each\nlevel, dns_isp (probe_asn == resolver_asn), dns_other (probe_asn !=\nresolver_asn), tcp or tls.\n\nWe don't consider http level blocking, since that's prone to issues related to\nolder versions of the engine not properly marking the address of the\nmeasurement.\n\nEach entry inside of the analysis endpoint contains the following:\n\n* dns_isp_blocked: value between 0-1 (equivalent to P(B))\n* dns_isp_down: value between 0-1 (equivalent to P(D))\n* dns_isp_ok: value between 0-1 (equivalent to P(K))\n\n* dns_other_blocked: value between 0-1 (equivalent to P(B))\n* dns_other_down: value between 0-1 (equivalent to P(D))\n* dns_other_ok: value between 0-1 (equivalent to P(K))\n\n* tcp_blocked: value between 0-1 (equivalent to P(B))\n* tcp_down: value between 0-1 (equivalent to P(D))\n* tcp_ok: value between 0-1 (equivalent to P(K))\n\n* tls_blocked: value between 0-1 (equivalent to P(B))\n* tls_down: value between 0-1 (equivalent to P(D))\n* tls_ok: value between 0-1 (equivalent to P(K))\n\n* likely_blocked_protocols: is a list of strings identifying the protocols and\n  failure reason string with the associated max blocked likelyhood. (eg.\n  [(tcp.generic_timeout_error, 0.75)]). They are sorted by blocked likelyhood\n* blocked_max_outcome: the string of the first item in the likely_blocked_protocols list (eg. tcp.generic_timeout_error)\n* blocked_max: value between 0-1 of the first item in the likely_blocked_protocols list (eg. 0.75)\n\n* dns_isp_blocked_outcome: string value of the reason for which dns_isp is likely blocked\n* dns_other_blocked_outcome: string value of the reason for which dns_other is likely blocked\n* tcp_blocked_outcome: string value of the reason for which tcp is likely blocked\n* tls_blocked_outcome: string value of the reason for which tls is likely blocked\n\nIt's important to remember that since B, D and K are not independent, P(K) +\nP(D) + P(B) does not = 1!","operationId":"get_aggregation_analysis_api_v1_aggregation_analysis_get","parameters":[{"name":"axis_x","in":"query","required":false,"schema":{"enum":["measurement_start_day","domain","probe_cc","probe_asn","test_name","input"],"type":"string","default":"measurement_start_day","title":"Axis X"}},{"name":"axis_y","in":"query","required":false,"schema":{"anyOf":[{"enum":["measurement_start_day","domain","probe_cc","probe_asn","test_name","input"],"type":"string"},{"type":"null"}],"title":"Axis Y"}},{"name":"test_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"}},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}},{"name":"input","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"}},{"name":"measurement_uid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Uid"}},{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Probe Asn"}},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Probe Cc"}},{"name":"ooni_run_link_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ooni Run Link Id"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}},{"name":"time_grain","in":"query","required":false,"schema":{"enum":["hour","day","week","month","year","auto"],"type":"string","default":"day","title":"Time Grain"}},{"name":"anomaly_sensitivity","in":"query","required":false,"schema":{"type":"number","default":0.9,"title":"Anomaly Sensitivity"}},{"name":"format","in":"query","required":false,"schema":{"enum":["JSON","CSV"],"type":"string","default":"JSON","title":"Format"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/oonimeasurements__routers__data__aggregate_analysis__AggregationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/detector/changepoints":{"get":{"tags":["detector"],"summary":"List Changepoints","description":"List changepoints detected by the event detector using the cusum  algorithm","operationId":"list_changepoints_api_v1_detector_changepoints_get","parameters":[{"name":"probe_asn","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Probe Asn"}},{"name":"probe_cc","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Probe Cc"}},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"},{"type":"null"}],"title":"Until"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListChangePointsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/search":{"get":{"tags":["oonifindings"],"summary":"List Oonifindings","description":"Search and list incidents","operationId":"list_oonifindings_api_v1_incidents_search_get","parameters":[{"name":"only_mine","in":"query","required":false,"schema":{"type":"boolean","description":"show only owned items","default":false,"title":"Only Mine"},"description":"show only owned items"},{"name":"theme","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The theme key to filter by","title":"Theme"},"description":"The theme key to filter by"},{"name":"country_code","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The country code to filter by","title":"Country Code"},"description":"The country code to filter by"},{"name":"asn","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The asn to filter by","title":"Asn"},"description":"The asn to filter by"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"The domain to filter by","title":"Domain"},"description":"The domain to filter by"},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"authorization","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OONIFindingIncidents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/incidents/show/{finding_id}":{"get":{"tags":["oonifindings"],"summary":"Get Oonifinding By Id","description":"Returns an incident by id.\n\nIt supports **fetching by slug**, if the provided id is an integer, we\nassume it's an id. Otherwise we assume it's the slug.","operationId":"get_oonifinding_by_id_api_v1_incidents_show__finding_id__get","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"authorization","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OONIFindingIncident"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AggregationResult":{"properties":{"anomaly_count":{"type":"integer","title":"Anomaly Count"},"confirmed_count":{"type":"integer","title":"Confirmed Count"},"failure_count":{"type":"integer","title":"Failure Count"},"ok_count":{"type":"integer","title":"Ok Count"},"measurement_count":{"type":"integer","title":"Measurement Count"},"measurement_start_day":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Start Day"},"blocking_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocking Type"},"category_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Code"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"probe_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Cc"},"probe_asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Probe Asn"},"test_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"}},"type":"object","required":["anomaly_count","confirmed_count","failure_count","ok_count","measurement_count"],"title":"AggregationResult"},"AnalysisEntry":{"properties":{"measurement_uid":{"type":"string","title":"Measurement Uid"},"measurement_start_time":{"type":"string","format":"date-time","title":"Measurement Start Time"},"network_type":{"type":"string","title":"Network Type"},"probe_asn":{"type":"integer","title":"Probe Asn"},"probe_cc":{"type":"string","title":"Probe Cc"},"probe_as_org_name":{"type":"string","title":"Probe As Org Name"},"resolver_asn":{"type":"integer","title":"Resolver Asn"},"resolver_as_cc":{"type":"string","title":"Resolver As Cc"},"domain":{"type":"string","title":"Domain"},"input":{"type":"string","title":"Input"},"test_name":{"type":"string","title":"Test Name"},"top_probe_analysis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Top Probe Analysis"},"top_dns_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Top Dns Failure"},"top_tcp_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Top Tcp Failure"},"top_tls_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Top Tls Failure"},"top_dns_rule_id":{"type":"string","title":"Top Dns Rule Id"},"top_tcp_rule_id":{"type":"string","title":"Top Tcp Rule Id"},"top_tls_rule_id":{"type":"string","title":"Top Tls Rule Id"},"dns_blocked":{"type":"number","title":"Dns Blocked"},"dns_down":{"type":"number","title":"Dns Down"},"dns_ok":{"type":"number","title":"Dns Ok"},"tcp_blocked":{"type":"number","title":"Tcp Blocked"},"tcp_down":{"type":"number","title":"Tcp Down"},"tcp_ok":{"type":"number","title":"Tcp Ok"},"tls_blocked":{"type":"number","title":"Tls Blocked"},"tls_down":{"type":"number","title":"Tls Down"},"tls_ok":{"type":"number","title":"Tls Ok"}},"type":"object","required":["measurement_uid","measurement_start_time","network_type","probe_asn","probe_cc","probe_as_org_name","resolver_asn","resolver_as_cc","domain","input","test_name","top_probe_analysis","top_dns_failure","top_tcp_failure","top_tls_failure","top_dns_rule_id","top_tcp_rule_id","top_tls_rule_id","dns_blocked","dns_down","dns_ok","tcp_blocked","tcp_down","tcp_ok","tls_blocked","tls_down","tls_ok"],"title":"AnalysisEntry"},"BaseModel":{"properties":{},"type":"object","title":"BaseModel"},"ChangeDir":{"type":"string","enum":["up","down"],"title":"ChangeDir"},"ChangePointEntry":{"properties":{"probe_asn":{"type":"integer","title":"Probe Asn"},"probe_cc":{"type":"string","title":"Probe Cc"},"domain":{"type":"string","title":"Domain"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"count_isp_resolver":{"type":"integer","title":"Count Isp Resolver"},"count_other_resolver":{"type":"integer","title":"Count Other Resolver"},"count":{"type":"integer","title":"Count"},"dns_isp_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dns Isp Blocked"},"dns_other_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dns Other Blocked"},"tcp_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tcp Blocked"},"tls_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Blocked"},"change_dir":{"anyOf":[{"$ref":"#/components/schemas/ChangeDir"},{"type":"null"}],"description":"If blocking behaviour goes up or down"},"current_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current State"},"s_pos":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"S Pos"},"s_neg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"S Neg"},"h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"H"},"block_type":{"type":"string","title":"Block Type"}},"type":"object","required":["probe_asn","probe_cc","domain","start_time","count_isp_resolver","count_other_resolver","count","dns_isp_blocked","dns_other_blocked","tcp_blocked","tls_blocked","change_dir","current_state","s_pos","s_neg","h","block_type"],"title":"ChangePointEntry"},"CtrlGroundTruthEntry":{"properties":{"hostname":{"type":"string","title":"Hostname"},"ip":{"type":"string","title":"Ip"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Asn"},"as_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Org Name"},"is_cloud_provider":{"type":"boolean","title":"Is Cloud Provider"},"in_dns_answers":{"type":"boolean","title":"In Dns Answers"},"tls_consistent":{"type":"boolean","title":"Tls Consistent"},"tcp_success_count":{"type":"integer","title":"Tcp Success Count"},"tcp_failure_count":{"type":"integer","title":"Tcp Failure Count"},"tls_success_count":{"type":"integer","title":"Tls Success Count"},"tls_failure_count":{"type":"integer","title":"Tls Failure Count"},"dns_success_count":{"type":"integer","title":"Dns Success Count"},"dns_nxdomain_count":{"type":"integer","title":"Dns Nxdomain Count"},"dns_other_failure_count":{"type":"integer","title":"Dns Other Failure Count"}},"type":"object","required":["hostname","ip","is_cloud_provider","in_dns_answers","tls_consistent","tcp_success_count","tcp_failure_count","tls_success_count","tls_failure_count","dns_success_count","dns_nxdomain_count","dns_other_failure_count"],"title":"CtrlGroundTruthEntry"},"CtrlGroundTruthResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/CtrlGroundTruthEntry"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"CtrlGroundTruthResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ListAnalysisResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"results":{"items":{"$ref":"#/components/schemas/AnalysisEntry"},"type":"array","title":"Results"}},"type":"object","required":["metadata","results"],"title":"ListAnalysisResponse"},"ListChangePointsResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/ChangePointEntry"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"ListChangePointsResponse"},"ListObservationsResponse":{"properties":{"metadata":{"$ref":"#/components/schemas/ResponseMetadata"},"results":{"items":{"anyOf":[{"$ref":"#/components/schemas/WebObservationEntry"},{"$ref":"#/components/schemas/BaseModel"}]},"type":"array","title":"Results"}},"type":"object","required":["metadata","results"],"title":"ListObservationsResponse"},"Loni":{"properties":{"dns_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dns Blocked"},"dns_down":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dns Down"},"dns_ok":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dns Ok"},"tcp_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tcp Blocked"},"tcp_down":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tcp Down"},"tcp_ok":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tcp Ok"},"tls_blocked":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Blocked"},"tls_down":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Down"},"tls_ok":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Ok"},"likely_blocked_protocols":{"items":{"prefixItems":[{"type":"string"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},"type":"array","title":"Likely Blocked Protocols"},"blocked_max_outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Blocked Max Outcome"},"blocked_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Blocked Max"},"dns_blocked_outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Blocked Outcome"},"tcp_blocked_outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Blocked Outcome"},"tls_blocked_outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Blocked Outcome"}},"type":"object","required":["dns_blocked","dns_down","dns_ok","tcp_blocked","tcp_down","tcp_ok","tls_blocked","tls_down","tls_ok","likely_blocked_protocols","blocked_max_outcome","blocked_max","dns_blocked_outcome","tcp_blocked_outcome","tls_blocked_outcome"],"title":"Loni"},"Measurement":{"properties":{"anomaly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"check if the measurement is an anomaly"},"confirmed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"check if the measurement is a confirmed block"},"failure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"failure check if measurement is marked as failed"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"probe_asn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"ASN of the measurement probe"},"probe_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"country code of the probe ASN"},"report_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"report id of the measurement"},"scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"blocking scores of the measurement"},"test_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"test name of the measurement"},"measurement_url":{"type":"string","title":"url of the measurement"},"measurement_start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"start time of the measurement"},"measurement_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"uid of the measurement"},"verification_status":{"anyOf":[{"$ref":"#/components/schemas/VerificationStatus"},{"type":"null"}],"title":"Verification status","description":"Anonymous credentials verification status. A measurement can be in the following status: verified, unverified, failed. If set to None, we don't have information about the verification status of this measurement"}},"type":"object","required":["measurement_url"],"title":"Measurement"},"MeasurementAggregation":{"properties":{"v":{"type":"integer","title":"V"},"dimension_count":{"type":"integer","title":"Dimension Count"},"db_stats":{"$ref":"#/components/schemas/oonimeasurements__routers__v1__aggregation__DBStats"},"result":{"anyOf":[{"items":{"$ref":"#/components/schemas/AggregationResult"},"type":"array"},{"$ref":"#/components/schemas/AggregationResult"}],"title":"Result"}},"type":"object","required":["v","dimension_count","db_stats","result"],"title":"MeasurementAggregation"},"MeasurementList":{"properties":{"metadata":{"$ref":"#/components/schemas/ResultsMetadata","title":"metadata for query results"},"results":{"items":{"$ref":"#/components/schemas/Measurement"},"type":"array","title":"measurement results"}},"type":"object","required":["metadata","results"],"title":"MeasurementList"},"MeasurementMeta":{"properties":{"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"measurement_start_time":{"type":"string","title":"Measurement Start Time"},"measurement_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Uid"},"report_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Id"},"test_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"},"test_start_time":{"type":"string","title":"Test Start Time"},"probe_asn":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Probe Asn"},"probe_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Cc"},"scores":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scores"},"anomaly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Anomaly"},"confirmed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Confirmed"},"failure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Failure"},"raw_measurement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Measurement"},"category_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Code"},"verification_status":{"anyOf":[{"$ref":"#/components/schemas/VerificationStatus"},{"type":"null"}],"title":"Verification status","description":"Anonymous credentials verification status. A measurement can be in the following status: verified, unverified, failed. If set to None, we don't have information about the verification status of this measurement"}},"type":"object","title":"MeasurementMeta"},"OONIFinding":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"email_address":{"type":"string","title":"email address of user","default":""},"title":{"type":"string","title":"title of the ooni finding"},"short_description":{"type":"string","title":"short description of the oonifinding report","default":""},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"slug used to access the OONI Finding"},"start_time":{"type":"string","format":"date-time","title":"date when the oonifinding incident started"},"create_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"date when the oonifinding report was created"},"update_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"time when the oonifinding report was last updated"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"time when the oonifinding incident ended"},"reported_by":{"type":"string","title":"name of the oonifinding reporter","default":""},"creator_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"account id of the oonifinding report creator","default":""},"published":{"type":"boolean","title":"binary check if event is published","default":false},"event_type":{"type":"string","title":"type of oonifinding event","default":""},"ASNs":{"items":{"type":"integer"},"type":"array","title":"Asns","description":"list of ASNs associate with the oonifinding","default":[]},"CCs":{"items":{"type":"string"},"type":"array","title":"Ccs","description":"list of country codes associated with the oonifinding","default":[]},"themes":{"items":{"type":"string"},"type":"array","title":"Themes","description":"list of themes related to this oonifinding","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"tags associated with the oonifinding","default":[]},"test_names":{"items":{"type":"string"},"type":"array","title":"Test Names","description":"ooni tests associated with the oonifinding","default":[]},"domains":{"items":{"type":"string"},"type":"array","title":"Domains","description":"list of domains associated with the oonifinding","default":[]},"links":{"items":{"type":"string"},"type":"array","title":"Links","description":"links associated with the oonifinding","default":[]},"mine":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"check if creator account id matches user","default":false}},"type":"object","required":["title","start_time"],"title":"OONIFinding"},"OONIFindingIncident":{"properties":{"incident":{"$ref":"#/components/schemas/OONIFindingWithText"}},"type":"object","required":["incident"],"title":"OONIFindingIncident"},"OONIFindingIncidents":{"properties":{"incidents":{"items":{"$ref":"#/components/schemas/OONIFinding"},"type":"array","title":"Incidents"}},"type":"object","required":["incidents"],"title":"OONIFindingIncidents"},"OONIFindingWithText":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"email_address":{"type":"string","title":"email address of user","default":""},"title":{"type":"string","title":"title of the ooni finding"},"short_description":{"type":"string","title":"short description of the oonifinding report","default":""},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"slug used to access the OONI Finding"},"start_time":{"type":"string","format":"date-time","title":"date when the oonifinding incident started"},"create_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"date when the oonifinding report was created"},"update_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"time when the oonifinding report was last updated"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"time when the oonifinding incident ended"},"reported_by":{"type":"string","title":"name of the oonifinding reporter","default":""},"creator_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"account id of the oonifinding report creator","default":""},"published":{"type":"boolean","title":"binary check if event is published","default":false},"event_type":{"type":"string","title":"type of oonifinding event","default":""},"ASNs":{"items":{"type":"integer"},"type":"array","title":"Asns","description":"list of ASNs associate with the oonifinding","default":[]},"CCs":{"items":{"type":"string"},"type":"array","title":"Ccs","description":"list of country codes associated with the oonifinding","default":[]},"themes":{"items":{"type":"string"},"type":"array","title":"Themes","description":"list of themes related to this oonifinding","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","description":"tags associated with the oonifinding","default":[]},"test_names":{"items":{"type":"string"},"type":"array","title":"Test Names","description":"ooni tests associated with the oonifinding","default":[]},"domains":{"items":{"type":"string"},"type":"array","title":"Domains","description":"list of domains associated with the oonifinding","default":[]},"links":{"items":{"type":"string"},"type":"array","title":"Links","description":"links associated with the oonifinding","default":[]},"mine":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"check if creator account id matches user","default":false},"text":{"type":"string","title":"content of the oonifinding report"}},"type":"object","required":["title","start_time","text"],"title":"OONIFindingWithText"},"ResponseMetadata":{"properties":{"count":{"type":"integer","title":"Count"},"current_page":{"type":"integer","title":"Current Page"},"limit":{"type":"integer","title":"Limit"},"next_url":{"type":"string","title":"Next Url"},"offset":{"type":"integer","title":"Offset"},"pages":{"type":"integer","title":"Pages"},"query_time":{"type":"number","title":"Query Time"}},"type":"object","required":["count","current_page","limit","next_url","offset","pages","query_time"],"title":"ResponseMetadata"},"ResultsMetadata":{"properties":{"count":{"type":"integer","title":""},"current_page":{"type":"integer","title":""},"limit":{"type":"integer","title":""},"next_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":""},"offset":{"type":"integer","title":"Offset","description":"Offset based pagination is deprecated. Prefer cursor-based pagination implemented by the continuation `cont` token. This token will be provided in the `next_url` field when no offset-based pagination is used.","deprecated":true},"pages":{"type":"integer","title":""},"query_time":{"type":"number","title":""}},"type":"object","required":["count","current_page","limit","next_url","offset","pages","query_time"],"title":"ResultsMetadata"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerificationStatus":{"type":"string","enum":["verified","failed","unverified"],"title":"VerificationStatus"},"WebObservationEntry":{"properties":{"measurement_uid":{"type":"string","title":"Measurement Uid"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"report_id":{"type":"string","title":"Report Id"},"ooni_run_link_id":{"type":"string","title":"Ooni Run Link Id"},"measurement_start_time":{"type":"string","format":"date-time","title":"Measurement Start Time"},"software_name":{"type":"string","title":"Software Name"},"software_version":{"type":"string","title":"Software Version"},"test_name":{"type":"string","title":"Test Name"},"test_version":{"type":"string","title":"Test Version"},"bucket_date":{"type":"string","title":"Bucket Date"},"probe_asn":{"type":"integer","title":"Probe Asn"},"probe_cc":{"type":"string","title":"Probe Cc"},"probe_as_org_name":{"type":"string","title":"Probe As Org Name"},"probe_as_cc":{"type":"string","title":"Probe As Cc"},"probe_as_name":{"type":"string","title":"Probe As Name"},"network_type":{"type":"string","title":"Network Type"},"platform":{"type":"string","title":"Platform"},"origin":{"type":"string","title":"Origin"},"engine_name":{"type":"string","title":"Engine Name"},"engine_version":{"type":"string","title":"Engine Version"},"architecture":{"type":"string","title":"Architecture"},"resolver_ip":{"type":"string","title":"Resolver Ip"},"resolver_asn":{"type":"integer","title":"Resolver Asn"},"resolver_cc":{"type":"string","title":"Resolver Cc"},"resolver_as_org_name":{"type":"string","title":"Resolver As Org Name"},"resolver_as_cc":{"type":"string","title":"Resolver As Cc"},"observation_idx":{"type":"integer","title":"Observation Idx","default":0},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Id"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"transaction_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transaction Id"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"ip_asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ip Asn"},"ip_as_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip As Org Name"},"ip_as_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip As Cc"},"ip_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Cc"},"ip_is_bogon":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ip Is Bogon"},"dns_query_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Query Type"},"dns_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Failure"},"dns_engine":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Engine"},"dns_engine_resolver_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Engine Resolver Address"},"dns_answer_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Answer Type"},"dns_answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Answer"},"dns_answer_asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dns Answer Asn"},"dns_answer_as_org_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dns Answer As Org Name"},"dns_t":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dns T"},"tcp_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tcp Failure"},"tcp_success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tcp Success"},"tcp_t":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tcp T"},"tls_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Failure"},"tls_server_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Server Name"},"tls_outer_server_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Outer Server Name"},"tls_echconfig":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Echconfig"},"tls_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Version"},"tls_cipher_suite":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Cipher Suite"},"tls_is_certificate_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Tls Is Certificate Valid"},"tls_end_entity_certificate_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls End Entity Certificate Fingerprint"},"tls_end_entity_certificate_subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls End Entity Certificate Subject"},"tls_end_entity_certificate_subject_common_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls End Entity Certificate Subject Common Name"},"tls_end_entity_certificate_issuer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls End Entity Certificate Issuer"},"tls_end_entity_certificate_issuer_common_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls End Entity Certificate Issuer Common Name"},"tls_end_entity_certificate_san_list":{"items":{"type":"string"},"type":"array","title":"Tls End Entity Certificate San List"},"tls_end_entity_certificate_not_valid_after":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Tls End Entity Certificate Not Valid After"},"tls_end_entity_certificate_not_valid_before":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Tls End Entity Certificate Not Valid Before"},"tls_certificate_chain_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tls Certificate Chain Length"},"tls_certificate_chain_fingerprints":{"items":{"type":"string"},"type":"array","title":"Tls Certificate Chain Fingerprints"},"tls_handshake_read_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tls Handshake Read Count"},"tls_handshake_write_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tls Handshake Write Count"},"tls_handshake_read_bytes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Handshake Read Bytes"},"tls_handshake_write_bytes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Handshake Write Bytes"},"tls_handshake_last_operation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Handshake Last Operation"},"tls_handshake_time":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls Handshake Time"},"tls_t":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tls T"},"http_request_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Request Url"},"http_network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Network"},"http_alpn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Alpn"},"http_failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Failure"},"http_request_body_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Http Request Body Length"},"http_request_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Request Method"},"http_runtime":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Http Runtime"},"http_response_body_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Http Response Body Length"},"http_response_body_is_truncated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Http Response Body Is Truncated"},"http_response_body_sha1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Response Body Sha1"},"http_response_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Http Response Status Code"},"http_response_header_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Response Header Location"},"http_response_header_server":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Response Header Server"},"http_request_redirect_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Http Request Redirect From"},"http_request_body_is_truncated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Http Request Body Is Truncated"},"http_t":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Http T"},"probe_analysis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Analysis"}},"type":"object","required":["measurement_uid","input","report_id","ooni_run_link_id","measurement_start_time","software_name","software_version","test_name","test_version","bucket_date","probe_asn","probe_cc","probe_as_org_name","probe_as_cc","probe_as_name","network_type","platform","origin","engine_name","engine_version","architecture","resolver_ip","resolver_asn","resolver_cc","resolver_as_org_name","resolver_as_cc"],"title":"WebObservationEntry"},"oonimeasurements__routers__data__aggregate_analysis__AggregationEntry":{"properties":{"count":{"type":"number","title":"Count"},"measurement_start_day":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Measurement Start Day"},"loni":{"$ref":"#/components/schemas/Loni"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"probe_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Cc"},"probe_asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Probe Asn"},"test_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"},"input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input"},"measurement_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Uid"}},"type":"object","required":["count","loni"],"title":"AggregationEntry"},"oonimeasurements__routers__data__aggregate_analysis__AggregationResponse":{"properties":{"db_stats":{"$ref":"#/components/schemas/oonimeasurements__routers__data__aggregate_analysis__DBStats"},"dimension_count":{"type":"integer","title":"Dimension Count"},"results":{"items":{"$ref":"#/components/schemas/oonimeasurements__routers__data__aggregate_analysis__AggregationEntry"},"type":"array","title":"Results"}},"type":"object","required":["db_stats","dimension_count","results"],"title":"AggregationResponse"},"oonimeasurements__routers__data__aggregate_analysis__DBStats":{"properties":{"bytes":{"type":"integer","title":"Bytes"},"elapsed_seconds":{"type":"number","title":"Elapsed Seconds"},"row_count":{"type":"integer","title":"Row Count"},"total_row_count":{"type":"integer","title":"Total Row Count"}},"type":"object","required":["bytes","elapsed_seconds","row_count","total_row_count"],"title":"DBStats"},"oonimeasurements__routers__data__aggregate_observations__AggregationEntry":{"properties":{"observation_count":{"type":"integer","title":"Observation Count"},"failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"probe_cc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Cc"},"probe_asn":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Probe Asn"},"test_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Test Name"},"measurement_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Measurement Uid"},"timestamp":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Timestamp"}},"type":"object","required":["observation_count"],"title":"AggregationEntry"},"oonimeasurements__routers__data__aggregate_observations__AggregationResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/oonimeasurements__routers__data__aggregate_observations__AggregationEntry"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"AggregationResponse"},"oonimeasurements__routers__v1__aggregation__DBStats":{"properties":{"row_count":{"type":"integer","title":"Row Count"},"bytes":{"type":"integer","title":"Bytes"},"total_row_count":{"type":"integer","title":"Total Row Count"},"elapsed_seconds":{"type":"number","title":"Elapsed Seconds"}},"type":"object","required":["row_count","bytes","total_row_count","elapsed_seconds"],"title":"DBStats"}}}}
