{"info":{"name":"DTN Aviation API EFH collection","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json","description":"Enhanced Flight Hazards (EFH) cover a range of forecasted data, in some cases across various flight levels that may show hazardous flight conditions.  These data are based on global forecast model runs.\n\n### Turbulence\n\nForecasted turbulence accounts for boundary layer, mountain wave, and clear air types.  Data provide Eddy Dissipation Rate (EDR) values representing the intensity of the turbulence.  Forecasts are hourly for 29 flight layers and out to 36 hours in the future.\n\n### Nowcast turbulence\n\nRapid Update Convective forecast is updated every ten minutes.  It emphasizes dynamic strong convective weather and provides a forecast for one hour ahead of the present time.\n\n### Icing\n\nForecasted icing data provide categories to the degree of icing where expected.  Four distinct forecasts are provided for four sizes of aircraft -- fixed wing small, imtermediate, and large, plus helicopters.  Forecasts are hourly for 9 flight layers, except fewer for helicopters which do not operate at the higher levels, and out to 36 hours in the future.\n\n### High ice water content (HIWC)\n\nForecasted HIWC gives information for levels above those for which regular icing data are available.  Data indicate ice crystals at notable and severe concentrations.  Forecasts are hourly for 11 flight layers and out to 36 hours in the future.\n\n### Thunderstorms\n\nForecasts for thunderstorms provide hourly spatial coverage out 36 hours in the future.  Data include vertical velocity (updraft) values which correlate to degrees of turbulence and icing as well as top height to indicate vertical extent.\n\n### Ozone\n\nForecasts for ozone provide spatial coverage out 36 hours in the future for 6-hour periods.  Data indicate where cabin ozone concentrations would be expected to exceed moderate (between 0.10ppm - 0.25ppm above FL270) or high (greater than 0.25ppm above FL270) amounts.\n\n### Jet Stream Axis\n\nForecast axes of jet streams are provided to indicate the speed and altitude.  Data are line segments, possibly with contiguous segments with different speed or altitude values.   Data are available every six hours but valid only for the first two hours of each 6-hour period.\n\n### Ash Cloud QVAs\n\nIWXXM parsed ash cloud polygons from Quantitative Volcanic Ash (QVA) data.  These polygons represent ash cloud areas as parsed from IWXXM volcanic ash advisories, sourced from the qva_iwxxm_ash_clouds_view.  Data include volcano identification, flight level ranges, concentration thresholds, and VAAC information.\n\n### Deterministic QVAs\n\nDeterministic ash concentration polygons from Quantitative Volcanic Ash (QVA) data.  These polygons represent modeled ash concentration areas at specific flight levels.  Data include concentration values, volcano identification, VAAC information, and model run metadata.\n\n### Probabilistic QVAs\n\nProbabilistic ash probability polygons from Quantitative Volcanic Ash (QVA) data.  These polygons represent the probability of ash presence at specific flight levels above given threshold values.  Data include probability values, threshold values, volcano identification, VAAC information, and model run metadata.\n\n### Active Volcanoes\n\nActive volcanoes with current QVA forecast data.  Returns volcanoes that have at least one IWXXM ash cloud forecast with a valid time at or after the current time.  Each feature is a GeoJSON Point at the volcano location and includes volcano metadata, VAAC information, data availability flags (hasiwxxm, hasdeterministic, hasprobabilistic), and the latest forecast timestamps.  Use this endpoint to discover valid volcanoid values for filtering calls to the Ash Cloud, Deterministic, and Probabilistic QVA endpoints.\n\n### Collection organization\n\nThis EFH collection includes requests categorization in:\n- Authorization\n- health-check\n- Turbulence\n    - Example turbulence: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox turbulence: starting point for requests utilizing any possible parameters\n- Nowcast\n    - Example Nowcast: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox Nowcast: starting point for requests utilizing any possible parameters\n- Icing\n    - Example icing: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox icing: starting point for requests utilizing any possible parameters\n- HIWC\n    - Example HIWC: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox HIWC: starting point for requests utilizing any possible parameters\n- Thunderstorms\n    - Example thunderstorm: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox thunderstorm: starting point for requests utilizing any possible parameters\n- Ozone\n    - Example ozone: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox ozone: starting point for requests utilizing any possible parameters\n- Jet Stream Axis\n    - Example jet stream axis: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox jet stream axis: starting point for requests utilizing any possible parameters\n- Ash Cloud QVAs\n    - Example ash cloud QVAs: should all succeed though perhaps not provide data\n    - Sandbox ash cloud QVAs: starting point for requests utilizing any possible parameters\n- Deterministic QVAs\n    - Example deterministic QVAs: should all succeed though perhaps not provide data\n    - Sandbox deterministic QVAs: starting point for requests utilizing any possible parameters\n- Probabilistic QVAs\n    - Example probabilistic QVAs: should all succeed though perhaps not provide data\n    - Sandbox probabilistic QVAs: starting point for requests utilizing any possible parameters\n- Active Volcanoes\n    - Example active volcanoes: should all succeed though perhaps not provide data\n    - Sandbox active volcanoes: starting point for requests utilizing any possible parameters\n"},"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{token}}","type":"string"}]},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"variable":[{"key":"version","value":"v1"}],"item":[{"name":"Authorization","item":[{"name":"Generate Authorization Token","event":[{"listen":"prerequest","script":{"exec":[""],"type":"text/javascript","packages":{}}},{"listen":"test","script":{"exec":["var jsonData = JSON.parse(responseBody);","pm.environment.set(\"token\", jsonData.data.access_token);"],"type":"text/javascript","packages":{}}}],"protocolProfileBehavior":{"disabledSystemHeaders":{"accept":true,"content-type":true}},"request":{"auth":{"type":"noauth"},"method":"POST","header":[{"key":"Accept","value":"application/json"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"grant_type\": \"client_credentials\",\n    \"client_id\": \"{{client_id}}\",\n    \"client_secret\": \"{{client_secret}}\",\n    \"audience\": \"{{audience}}\"\n}"},"url":{"raw":"{{auth_url}}/v1/tokens/authorize","host":["{{auth_url}}"],"path":["v1","tokens","authorize"]},"description":"- For authorization token request.\n- Requires No Auth for its own Auth Type.\n- Environment sets structure for automatically placing details from received token.\n- Make request any time previous token has expired."},"response":[]}],"description":"- For encompassing the authorization token request.\n- Requires No Auth for its own Auth Type.\n- Environment sets structure for automatically placing details from received token.\n- Make request any time previous token has expired.","auth":{"type":"noauth"},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}]},{"name":"health-check","description":"- For encompassing the health-check request.\n- Uses inherited Auth Type set for collection.\n- Request is to validate API is functional and will show API version.","item":[{"name":"health-check","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"raw":"{{api_url}}/v1/health-check","host":["{{api_url}}"],"path":["v1","health-check"]},"description":"- For health-check request.\n- Uses inherited Auth Type set for collection.\n- Request is to validate API is functional and will show API version."},"response":[]}]},{"name":"Turbulence","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_19h', moment().subtract(19,'hours'))","pm.environment.set('timestamp_minus_18h', moment().subtract(18,'hours'))","pm.environment.set('timestamp_minus_17h', moment().subtract(17,'hours'))","pm.environment.set('timestamp_minus_16h', moment().subtract(16,'hours'))","pm.environment.set('timestamp_minus_15h', moment().subtract(15,'hours'))","pm.environment.set('timestamp_minus_14h', moment().subtract(14,'hours'))","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","pm.environment.set('timestamp_plus_6h', moment().add(6,'hours'))","pm.environment.set('timestamp_plus_7h', moment().add(7,'hours'))","pm.environment.set('timestamp_plus_8h', moment().add(8,'hours'))","pm.environment.set('timestamp_plus_9h', moment().add(9,'hours'))","pm.environment.set('timestamp_plus_10h', moment().add(10,'hours'))","pm.environment.set('timestamp_plus_11h', moment().add(11,'hours'))","pm.environment.set('timestamp_plus_12h', moment().add(12,'hours'))","pm.environment.set('timestamp_plus_13h', moment().add(13,'hours'))","pm.environment.set('timestamp_plus_14h', moment().add(14,'hours'))","pm.environment.set('timestamp_plus_15h', moment().add(15,'hours'))","pm.environment.set('timestamp_plus_16h', moment().add(16,'hours'))","pm.environment.set('timestamp_plus_17h', moment().add(17,'hours'))","pm.environment.set('timestamp_plus_18h', moment().add(18,'hours'))","pm.environment.set('timestamp_plus_19h', moment().add(19,'hours'))","pm.environment.set('timestamp_plus_20h', moment().add(20,'hours'))","pm.environment.set('timestamp_plus_21h', moment().add(21,'hours'))","pm.environment.set('timestamp_plus_22h', moment().add(22,'hours'))","pm.environment.set('timestamp_plus_23h', moment().add(23,'hours'))","pm.environment.set('timestamp_plus_24h', moment().add(24,'hours'))","pm.environment.set('timestamp_plus_25h', moment().add(25,'hours'))","pm.environment.set('timestamp_plus_26h', moment().add(26,'hours'))","pm.environment.set('timestamp_plus_27h', moment().add(27,'hours'))","pm.environment.set('timestamp_plus_28h', moment().add(28,'hours'))","pm.environment.set('timestamp_plus_29h', moment().add(29,'hours'))","pm.environment.set('timestamp_plus_30h', moment().add(30,'hours'))","pm.environment.set('timestamp_plus_31h', moment().add(31,'hours'))","pm.environment.set('timestamp_plus_32h', moment().add(32,'hours'))","pm.environment.set('timestamp_plus_33h', moment().add(33,'hours'))","pm.environment.set('timestamp_plus_34h', moment().add(34,'hours'))","pm.environment.set('timestamp_plus_35h', moment().add(35,'hours'))","pm.environment.set('timestamp_plus_36h', moment().add(36,'hours'))","pm.environment.set('timestamp_plus_37h', moment().add(37,'hours'))","// Get most recent model run time relative to 3 hours ago -- this should work for EFH requests","pm.environment.set('timestamp_earlier_model_run', moment.unix(Math.floor((moment().unix() - 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","// Get next model run time for time 3 hours ahead -- this will fail since need model run to be at least 3 hours earlier than current time","pm.environment.set('timestamp_invalid_future_model_run', moment.unix(Math.ceil((moment().unix() + 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","","pm.collectionVariables.set(\"endpoint\", \"turbulence\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example turbulence","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.rid).to.be.a(\"number\");","        pm.expect(feature.properties.edr).to.be.a(\"number\");","        pm.expect(feature.properties.validDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.flightLevel).to.match(/^FL\\d{3}$/);","    })","});"]}}],"item":[{"name":"FL160 DEN circle 200km valid now","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL160","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"circle","value":"-105,40,200","description":"<lon>,<lat>,<radius>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL160&isValidAt={{timestamp_current}}&circle=-105,40,200&distanceUnits=km"},"description":"Data...\n- on FL160\n- within circle of radius 200km with center at Denver airport\n- valid time at the current time"}},{"name":"FL200 Rockies SRID 3857 EDR 0.2 bbox valid now consolidate","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL200","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minEdr","value":"0.2","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1"},{"key":"bbox","value":"-13358339,3503550,-11131949,6446276","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL200&isValidAt={{timestamp_current}}&minEdr=0.2&bbox=-13358339,3503550,-11131949,6446276&srid=3857&consolidate=true"},"description":"Data...\n- on FL200\n- within polygon defined encompassing Rocky Mountains region in USA defined by SRID 3857 coordinates\n- with EDR values at least 0.2\n- valid time at the current time\n- with consolidated multipolygons made from the polygons of the same icing category value"}},{"name":"FL270 NAtlantic polygon EDR 0.3 valid+4h allowPartialModelRun","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL270","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_4h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data"},{"key":"minEdr","value":"0.3","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1"},{"key":"polygon","value":"-80,40,0,70,-80,70,-80,40","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL270&isValidAt={{timestamp_plus_4h}}&allowPartialModelRun=1&minEdr=0.3&polygon=-80,40,0,70,-80,70,-80,40"},"description":"Data...\n- on FL270\n- within polygon encompassing North Atlantic Ocean\n- with EDR values at least 0.3\n- with valid time 4 hours after the current time\n- allowing to pull from incompletely ingest model run if that provides the latest data"}},{"name":"FL340 global 0.6 valid+8h specific model run","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_8h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"modelDateTime","value":"{{timestamp_earlier_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"},{"key":"minEdr","value":"0.6","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL340&isValidAt={{timestamp_plus_8h}}&modelDateTime={{timestamp_earlier_model_run}}&minEdr=0.6"},"description":"Data...\n- on FL340\n- from worldwide (no spatial filter)\n- with valid time 8 hours after the current time\n- from model run time specified by variable\n- allowing to pull from incompletely ingest model run if that provides the latest data"}},{"name":"FL370 DEN-LAX corridor consolidate valid+1h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL370","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_1h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"corridor","value":"-105,40,-118,34,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL370&isValidAt={{timestamp_plus_1h}}&corridor=-105,40,-118,34,50&consolidate=true"},"description":"Data...\n- on FL370\n- within corridor defined with 50nm halfwidth and line connecting Denver and Los Angeles\n- with valid time 1 hour after the current time\n- with consolidated multipolygons made from the polygons of the same icing category value"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests turbulence","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid flight level","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL090","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL090&isValidAt={{timestamp_current}}"},"description":"Uses flight level for which there is not turbulence data"}},{"name":"BAD invalid EDR","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minEdr","value":"30","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1"},{"key":"bbox","value":"-120,40,-110,50","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL340&isValidAt={{timestamp_current}}&minEdr=30&bbox=-120,40,-110,50"},"description":"Uses value not among specific allowed values for minEdr"}},{"name":"BAD unallowed valid time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL240","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_minus_19h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL240&limit=5&isValidAt={{timestamp_minus_19h}}"},"description":"Valid time is outside allowed constraints for turbulence"}},{"name":"BAD invalid model run time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL140","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"modelDateTime","value":"{{timestamp_invalid_future_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL140&modelDateTime={{timestamp_invalid_future_model_run}}"},"description":"Uses model time in the future but value must be from past"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox turbulence","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any turbulence","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"2025-03-14 18:00:00","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"isValidAt","value":"{{timestamp_plus_1h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_3h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"{{timestamp_minus_1h}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2025-05-20 12:00:00","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data","disabled":true},{"key":"minEdr","value":"0.3","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1","disabled":true},{"key":"bbox","value":"-120,40,-110,50","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"bbox","value":"-18924313.434856508,3248973.789650975,-18479035.471683413,3763310.627144653","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,40,-95,35,-90,30,-85,35,-90,40","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"polygon","value":"-18924313,3248973,-18479035,3248973,-18479035,3763310,-18924313,3763310","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-40,65,50","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-18701674.453269962,3375646.034919311,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"-118.414591,33.942910,144.845704,-37.668717,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-105,40,-118,34,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-18479035,3763310,-18924313,3763310,61","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL340&isValidAt={{timestamp_current}}&consolidate=true"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of turbulence response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `flightLevel`: Flight level, in format `FL###` where `###` indicates hundreds of feet.  Was specified in request.\n- `rid`: Opaque reference identifier related to ingest and not part of data.\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `edr`: Numerical value for Eddy Dissipation Rate (EDR) for forecast data object.  Values range from 0.1 to 0.9 at even tenths.\n\n#### Flight levels available for turbulence\n\n| flight level | approximate mb | available? |\n| ------------ | -------------- | ---------- |\n| FL010 | 980 | yes |\n| FL030 | 900 | yes |\n| FL050 | 850 | yes |\n| FL080 | 750 | yes |\n| FL100 | 700 | yes |\n| FL120 | 650 | yes |\n| FL140 | 600 | yes |\n| FL160 | 550 | yes |\n| FL180 | 500 | yes |\n| FL200 | 475 | yes |\n| FL220 | 425 | yes |\n| FL240 | 400 | yes |\n| FL260 | 375 | yes |\n| FL270 | 350 | yes |\n| FL280 | 325 | yes |\n| FL300 | 300 | yes |\n| FL320 | 275 | yes |\n| FL330 | 260 | yes |\n| FL340 | 250 | yes |\n| FL350 | 230 | yes |\n| FL360 | 225 | yes |\n| FL370 | 215 | yes |\n| FL380 | 210 | yes |\n| FL390 | 200 | yes |\n| FL400 | 190 | yes |\n| FL410 | 180 | yes |\n| FL430 | 160 | yes |\n| FL450 | 150 | yes |\n| FL530 | 100 | yes |"},{"name":"Nowcast","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_current', moment())","","pm.collectionVariables.set(\"endpoint\", \"nowcast\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example Nowcast","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.rid).to.be.a(\"number\");","        pm.expect(feature.properties.edr).to.be.a(\"number\");","        pm.expect(feature.properties.validDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.flightLevel).to.match(/^FL\\d{3}$/i);","    })","});"]}}],"item":[{"name":"FL050 SIN 100nm circle SRID 3857 allowPartialModelRun","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL050","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"circle","value":"11577449.7,149849.8,100","description":"<lon>,<lat>,<radius>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL050&circle=11577449.7,149849.8,100&srid=3857&allowPartialModelRun=1"},"description":"Data...\n- on FL050\n- within circle of radius 100nm with center at Singapore defined by SRID 3857 coordinates\n- allowing to pull from incompletely ingest model run if that provides the latest data"}},{"name":"FL180 Colombia polygon 0.2 EDR no geometry","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minEdr","value":"0.2","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1"},{"key":"polygon","value":"-70,-5,-67,3,-67.5,7,-72.5,7.5,-71,13,-77,11,-79,6","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"geometry","value":"false","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl340&minEdr=0.2&polygon=-70,-5,-67,3,-67.5,7,-72.5,7.5,-71,13,-77,11,-79,6&geometry=false"},"description":"Data...\n- on FL180\n- within polygon encompassing Colombia\n- with EDR values at least 0.2\n- with geometry removed"}},{"name":"FL180 IAH-MSY-ATL 80km corridor consolidate","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"corridor","value":"-95.342,29.982,-90.265,29.993,-84.422,33.642,80","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"consolidate","value":"1","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl340&corridor=-95.342,29.982,-90.265,29.993,-84.422,33.642,80&distanceUnits=km&consolidate=1"},"description":"Data...\n- on FL180\n- within corridor defined with 80km halfwidth and line connecting Houston, New Orleans, and Atlanta\n- with consolidated multipolygons made from the polygons of the same icing category value"}},{"name":"FL340 SCentral US bbox consolidate","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"-100,30,-90,40","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl340&bbox=-100,30,-90,40&consolidate=true"},"description":"Data...\n- on FL340\n- within polygon defined encompassing south Central USA region\n- with consolidated multipolygons made from the polygons of the same icing category value"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests Nowcast","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid flightLevel","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl190","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"0","description":"Where to start in paginated response set (default=0, i.e., first object)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl190&limit=5&offset=0"},"description":"Uses flight level for which there is not turbulence data"}},{"name":"BAD invalid minEdr","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minEdr","value":"1.5","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl340&limit=5&minEdr=1.5"},"description":"Uses value not among specific allowed values for minEdr"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox Nowcast","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any Nowcast","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minEdr","value":"0.3","description":"Include only features whose edr values are this or greater ; Allowed values of tenths between 0 and 1","disabled":true},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data","disabled":true},{"key":"bbox","value":"-100,30,-90,40","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"bbox","value":"-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"polygon","value":"","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"90,-30,200","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"129,-16,115,4,150","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl340&bbox=-100,30,-90,40&consolidate=true"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of Nowcast turbulence response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `flightLevel`: Flight level, in format `FL###` where `###` indicates hundreds of feet.  Was specified in request.\n- `rid`: Opaque reference identifier related to ingest and not part of data.\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `edr`: Numerical value for Eddy Dissipation Rate (EDR) for forecast data object.  Values range from 0.1 to 0.9 at even tenths.\n\n#### Flight levels available for Nowcast turbulence\n\n| flight level | approximate mb | available? |\n| ------------ | -------------- | ---------- |\n| FL010 | 980 | yes |\n| FL030 | 900 | yes |\n| FL050 | 850 | yes |\n| FL080 | 750 | yes |\n| FL100 | 700 | yes |\n| FL120 | 650 | yes |\n| FL140 | 600 | yes |\n| FL160 | 550 | yes |\n| FL180 | 500 | yes |\n| FL200 | 475 | yes |\n| FL220 | 425 | yes |\n| FL240 | 400 | yes |\n| FL260 | 375 | yes |\n| FL270 | 350 | yes |\n| FL280 | 325 | yes |\n| FL300 | 300 | yes |\n| FL320 | 275 | yes |\n| FL330 | 260 | yes |\n| FL340 | 250 | yes |\n| FL350 | 230 | yes |\n| FL360 | 225 | yes |\n| FL370 | 215 | yes |\n| FL380 | 210 | yes |\n| FL390 | 200 | yes |\n| FL400 | 190 | yes |\n| FL410 | 180 | yes |\n| FL430 | 160 | yes |\n| FL450 | 150 | yes |\n| FL530 | 100 | yes |"},{"name":"Icing","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_19h', moment().subtract(19,'hours'))","pm.environment.set('timestamp_minus_18h', moment().subtract(18,'hours'))","pm.environment.set('timestamp_minus_17h', moment().subtract(17,'hours'))","pm.environment.set('timestamp_minus_16h', moment().subtract(16,'hours'))","pm.environment.set('timestamp_minus_15h', moment().subtract(15,'hours'))","pm.environment.set('timestamp_minus_14h', moment().subtract(14,'hours'))","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","pm.environment.set('timestamp_plus_6h', moment().add(6,'hours'))","pm.environment.set('timestamp_plus_7h', moment().add(7,'hours'))","pm.environment.set('timestamp_plus_8h', moment().add(8,'hours'))","pm.environment.set('timestamp_plus_9h', moment().add(9,'hours'))","pm.environment.set('timestamp_plus_10h', moment().add(10,'hours'))","pm.environment.set('timestamp_plus_11h', moment().add(11,'hours'))","pm.environment.set('timestamp_plus_12h', moment().add(12,'hours'))","pm.environment.set('timestamp_plus_13h', moment().add(13,'hours'))","pm.environment.set('timestamp_plus_14h', moment().add(14,'hours'))","pm.environment.set('timestamp_plus_15h', moment().add(15,'hours'))","pm.environment.set('timestamp_plus_16h', moment().add(16,'hours'))","pm.environment.set('timestamp_plus_17h', moment().add(17,'hours'))","pm.environment.set('timestamp_plus_18h', moment().add(18,'hours'))","pm.environment.set('timestamp_plus_19h', moment().add(19,'hours'))","pm.environment.set('timestamp_plus_20h', moment().add(20,'hours'))","pm.environment.set('timestamp_plus_21h', moment().add(21,'hours'))","pm.environment.set('timestamp_plus_22h', moment().add(22,'hours'))","pm.environment.set('timestamp_plus_23h', moment().add(23,'hours'))","pm.environment.set('timestamp_plus_24h', moment().add(24,'hours'))","pm.environment.set('timestamp_plus_25h', moment().add(25,'hours'))","pm.environment.set('timestamp_plus_26h', moment().add(26,'hours'))","pm.environment.set('timestamp_plus_27h', moment().add(27,'hours'))","pm.environment.set('timestamp_plus_28h', moment().add(28,'hours'))","pm.environment.set('timestamp_plus_29h', moment().add(29,'hours'))","pm.environment.set('timestamp_plus_30h', moment().add(30,'hours'))","pm.environment.set('timestamp_plus_31h', moment().add(31,'hours'))","pm.environment.set('timestamp_plus_32h', moment().add(32,'hours'))","pm.environment.set('timestamp_plus_33h', moment().add(33,'hours'))","pm.environment.set('timestamp_plus_34h', moment().add(34,'hours'))","pm.environment.set('timestamp_plus_35h', moment().add(35,'hours'))","pm.environment.set('timestamp_plus_36h', moment().add(36,'hours'))","pm.environment.set('timestamp_plus_37h', moment().add(37,'hours'))","// Get most recent model run time relative to 3 hours ago -- this should work for EFH requests","pm.environment.set('timestamp_earlier_model_run', moment.unix(Math.floor((moment().unix() - 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","// Get next model run time for time 3 hours ahead -- this will fail since need model run to be at least 3 hours earlier than current time","pm.environment.set('timestamp_invalid_future_model_run', moment.unix(Math.ceil((moment().unix() + 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","","pm.collectionVariables.set(\"endpoint\", \"icing\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example icing","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.rid).to.be.a(\"number\");","        pm.expect(feature.properties.icingCategory).to.be.oneOf([\"SLIGHT\", \"MODERATE\", \"SEVERE\"]);","        pm.expect(feature.properties.validDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.flightLevel).to.match(/^FL\\d{3}$/);","        pm.expect(feature.properties.aircraftSize).to.be.oneOf([\"S\", \"I\", \"L\", \"H\"]);","    })","});"]}}],"item":[{"name":"FL080H Jackson WY 100km circle valid now consolidate allowPartialModelRun","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL080","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"H","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data"},{"key":"circle","value":"-110.762452,43.478030,100","description":"<lon>,<lat>,<radius>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL080&aircraftSize=H&isValidAt={{timestamp_current}}&allowPartialModelRun=1&circle=-110.762452,43.478030,100&distanceUnits=km&consolidate=true"},"description":"Data...\n- on FL080 for helicopter aircraft size\n- within circle of radius 100km with center at Jackson, WY\n- valid at the current time\n- with consolidated multipolygons made from the polygons of the same icing category value\n- allowing to pull from incompletely ingest model run if that provides the latest data"}},{"name":"FL100S Rockies moderate/severe SRID 3857 bbox consolidate valid+1h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL100","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"S","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_1h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"icingCategories","value":"MODERATE,SEVERE","description":"Include only objects whose icing category is one of these ; Comma-delimited list of one or more of \"SLIGHT\", \"MODERATE\", \"SEVERE\""},{"key":"bbox","value":"-13358339,3503550,-11131949,6446276","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL100&aircraftSize=S&isValidAt={{timestamp_plus_1h}}&icingCategories=MODERATE,SEVERE&bbox=-13358339,3503550,-11131949,6446276&srid=3857&consolidate=true"},"description":"Data...\n- on FL100 for small aircraft size\n- within bounding box encompassing Rocky Mountains region in USA defined by SRID 3857 coordinates\n- valid at time 1 hour after the current time\n- with consolidated multipolygons made from the polygons of the same icing category value"}},{"name":"FL180L Brazil polygon valid+3h specific model run","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL180","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"L","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_3h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"modelDateTime","value":"{{timestamp_earlier_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"},{"key":"polygon","value":"-60,10,-80,-10,-50,-30,-30,-10,-60,10","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL180&aircraftSize=L&isValidAt={{timestamp_plus_3h}}&modelDateTime={{timestamp_earlier_model_run}}&polygon=-60,10,-80,-10,-50,-30,-30,-10,-60,10"},"description":"Data...\n- on FL180 for large aircraft size\n- within polygon encompassing Brazil\n- valid at time 3 hours after the current time\n- from model run time specified by variable"}},{"name":"FL240I MEL-MNL-NRT corridor 60nm consolidate valid+6h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL240","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"I","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_6h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"corridor","value":"145,-38,121,15,140,35,60","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"distanceUnits","value":"nm","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL240&aircraftSize=I&isValidAt={{timestamp_plus_6h}}&corridor=145,-38,121,15,140,35,60&distanceUnits=nm&consolidate=true"},"description":"Data...\n- on FL240 for intermediate aircraft size\n- within corridor defined with 60nm halfwidth and line connecting Melbourne, Manila, and Tokyo\n- valid at time 6 hours after the current time\n- with consolidated multipolygons made from the polygons of the same icing category value"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests icing","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid flight level","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL130","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"S","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL130&aircraftSize=S&isValidAt={{timestamp_current}}"},"description":"Uses flight level for which there is not icing data"}},{"name":"BAD invalid aircraftSize","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL200","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"M","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL200&aircraftSize=M&isValidAt={{timestamp_current}}"},"description":"Uses value not among specific allowed values for aircraftSize (there is no medium, as \"I\" for intermediate is between small and large)"}},{"name":"BAD missing aircraftSize","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL180","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"S","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)","disabled":true},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL180&isValidAt={{timestamp_current}}"},"description":"Must include aircraftSize but parameter is disabled"}},{"name":"BAD invalid icing category","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL080","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"H","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_1h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"icingCategories","value":"SIVERE","description":"Include only objects whose icing category is one of these ; Comma-delimited list of one or more of \"SLIGHT\", \"MODERATE\", \"SEVERE\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL080&aircraftSize=H&isValidAt={{timestamp_plus_1h}}&icingCategories=SIVERE"},"description":"Uses value not among specific allowed values for icingCategories"}},{"name":"BAD unallowed valid time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL180","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"I","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_minus_19h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL180&aircraftSize=I&limit=5&isValidAt={{timestamp_minus_19h}}"},"description":"Valid time is outside allowed constraints for icing"}},{"name":"BAD invalid model run time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL140","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"S","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"modelDateTime","value":"{{timestamp_invalid_future_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL140&aircraftSize=S&modelDateTime={{timestamp_invalid_future_model_run}}"},"description":"Uses model time in the future but value must be from past"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox icing","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any icing","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL180","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"aircraftSize","value":"S","description":"[required] Aircraft size code ; Must be one of \"S\" (small), \"I\" (intermediate), \"L\" (large), \"H\" (helicopter)"},{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"2025-03-14 18:00:00","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"isValidAt","value":"{{timestamp_plus_1h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_3h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"{{timestamp_minus_1h}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2025-05-20 12:00:00","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data","disabled":true},{"key":"icingCategories","value":"MODERATE,SEVERE","description":"Include only objects whose icing category is one of these ; Comma-delimited list of one or more of \"SLIGHT\", \"MODERATE\", \"SEVERE\""},{"key":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\"","disabled":true},{"key":"bbox","value":"-100,25,-90,30","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"bbox","value":"-18924313.434856508,3248973.789650975,-18479035.471683413,3763310.627144653","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"polygon","value":"-18924313,3248973,-18479035,3248973,-18479035,3763310,-18924313,3763310","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-119,37,40","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-18701674.453269962,3375646.034919311,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"-118.414591,33.942910,144.845704,-37.668717,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-105,40,-118,34,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-18479035,3763310,-18924313,3763310,61","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL180&aircraftSize=S&isValidAt={{timestamp_current}}&icingCategories=MODERATE,SEVERE&bbox=-100,25,-90,30&consolidate=true"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of turbulence response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `flightLevel`: Flight level for which forecast applies, in format `FL###` where `###` indicates hundreds of feet.  Was specified in request.\n- `aircraftSize`: Aircraft size for which forecast applies, one of `S` (small), `I` (intermediate), `L` (large), or `H` (helicopter).  Was specified in request.\n- `rid`: Opaque reference identifier related to ingest and not part of data.\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `icingCategory`: Degree of icing for forecast data object.  Values may be `SLIGHT`, `MODERATE`, or `SEVERE`.\n\n#### Flight levels available for turbulence\n\nS/I/L sizes available for different set that H.\n\n| flight level | approximate mb | available for S/I/L? | available for H? |\n| ------------ | -------------- | -------------------- | ---------------- |\n| FL010 | 980 | yes | yes |\n| FL030 | 900 | yes | yes |\n| FL050 | 850 | yes | yes |\n| FL080 | 750 | yes | yes |\n| FL100 | 700 | yes | no |\n| FL120 | 650 | no | no |\n| FL140 | 600 | yes | no |\n| FL160 | 550 | no | no |\n| FL180 | 500 | yes | no |\n| FL200 | 475 | no | no |\n| FL220 | 425 | no | no |\n| FL240 | 400 | yes | no |\n| FL260 | 375 | no | no |\n| FL270 | 350 | yes | no |\n| FL280 | 325 | no | no |\n| FL300 | 300 | no | no |\n| FL320 | 275 | no | no |\n| FL330 | 260 | no | no |\n| FL340 | 250 | no | no |\n| FL350 | 230 | no | no |\n| FL360 | 225 | no | no |\n| FL370 | 215 | no | no |\n| FL380 | 210 | no | no |\n| FL390 | 200 | no | no |\n| FL400 | 190 | no | no |\n| FL410 | 180 | no | no |\n| FL430 | 160 | no | no |\n| FL450 | 150 | no | no |\n| FL530 | 100 | no | no |\n\n#### EFH icing categories\n\nIcing data are provided through three category values indicative of different degrees of potential effect on aviation activity.  The units are what is called Percent Power Increase (PPI).  This represents the additional degree of thrust power required to maintain performance.  These are the categorizations for the EFH icing data.\n\n| category descriptor | PPI interval |\n| ---------- ------------ |\n| SLIGHT | 0 < PPI <= 0.1 |\n| MODERATE | 0.1 < PPI <= 0.6 |\n| SEVERE | 0.6 < PPI |"},{"name":"HIWC","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_19h', moment().subtract(19,'hours'))","pm.environment.set('timestamp_minus_18h', moment().subtract(18,'hours'))","pm.environment.set('timestamp_minus_17h', moment().subtract(17,'hours'))","pm.environment.set('timestamp_minus_16h', moment().subtract(16,'hours'))","pm.environment.set('timestamp_minus_15h', moment().subtract(15,'hours'))","pm.environment.set('timestamp_minus_14h', moment().subtract(14,'hours'))","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","pm.environment.set('timestamp_plus_6h', moment().add(6,'hours'))","pm.environment.set('timestamp_plus_7h', moment().add(7,'hours'))","pm.environment.set('timestamp_plus_8h', moment().add(8,'hours'))","pm.environment.set('timestamp_plus_9h', moment().add(9,'hours'))","pm.environment.set('timestamp_plus_10h', moment().add(10,'hours'))","pm.environment.set('timestamp_plus_11h', moment().add(11,'hours'))","pm.environment.set('timestamp_plus_12h', moment().add(12,'hours'))","pm.environment.set('timestamp_plus_13h', moment().add(13,'hours'))","pm.environment.set('timestamp_plus_14h', moment().add(14,'hours'))","pm.environment.set('timestamp_plus_15h', moment().add(15,'hours'))","pm.environment.set('timestamp_plus_16h', moment().add(16,'hours'))","pm.environment.set('timestamp_plus_17h', moment().add(17,'hours'))","pm.environment.set('timestamp_plus_18h', moment().add(18,'hours'))","pm.environment.set('timestamp_plus_19h', moment().add(19,'hours'))","pm.environment.set('timestamp_plus_20h', moment().add(20,'hours'))","pm.environment.set('timestamp_plus_21h', moment().add(21,'hours'))","pm.environment.set('timestamp_plus_22h', moment().add(22,'hours'))","pm.environment.set('timestamp_plus_23h', moment().add(23,'hours'))","pm.environment.set('timestamp_plus_24h', moment().add(24,'hours'))","pm.environment.set('timestamp_plus_25h', moment().add(25,'hours'))","pm.environment.set('timestamp_plus_26h', moment().add(26,'hours'))","pm.environment.set('timestamp_plus_27h', moment().add(27,'hours'))","pm.environment.set('timestamp_plus_28h', moment().add(28,'hours'))","pm.environment.set('timestamp_plus_29h', moment().add(29,'hours'))","pm.environment.set('timestamp_plus_30h', moment().add(30,'hours'))","pm.environment.set('timestamp_plus_31h', moment().add(31,'hours'))","pm.environment.set('timestamp_plus_32h', moment().add(32,'hours'))","pm.environment.set('timestamp_plus_33h', moment().add(33,'hours'))","pm.environment.set('timestamp_plus_34h', moment().add(34,'hours'))","pm.environment.set('timestamp_plus_35h', moment().add(35,'hours'))","pm.environment.set('timestamp_plus_36h', moment().add(36,'hours'))","pm.environment.set('timestamp_plus_37h', moment().add(37,'hours'))","// Get most recent model run time relative to 3 hours ago -- this should work for EFH requests","pm.environment.set('timestamp_earlier_model_run', moment.unix(Math.floor((moment().unix() - 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","// Get next model run time for time 3 hours ahead -- this will fail since need model run to be at least 3 hours earlier than current time","pm.environment.set('timestamp_invalid_future_model_run', moment.unix(Math.ceil((moment().unix() + 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","","pm.collectionVariables.set(\"endpoint\", \"hiwc\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example HIWC","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.rid).to.be.a(\"number\");","        pm.expect(feature.properties.concentration).to.be.oneOf([1,3]);","        pm.expect(feature.properties.validDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.flightLevel).to.match(/^(FL\\d{3})$/i);","    })","});"]}}],"item":[{"name":"FL330 Texas polygon 3 concentration valid now specific model run","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL330","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minHiwc","value":"3","description":"Include only features whose concentration values are this or greater ; Allowed values are \"1\" (default) or \"3\", representing values for g/m^3 concentration threshold"},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"modelDateTime","value":"{{timestamp_earlier_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"},{"key":"polygon","value":"-100,36.5,-103,36.5,-103,32,-107,32,-103,29,-102,29.8,-99,26,-97,25.8,-97,28,-93.6,29.7,-93.6,31,-94,32,-94,33.8,-100,34.6,-100,36.5","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL330&minHiwc=3&isValidAt={{timestamp_current}}&modelDateTime={{timestamp_earlier_model_run}}&polygon=-100,36.5,-103,36.5,-103,32,-107,32,-103,29,-102,29.8,-99,26,-97,25.8,-97,28,-93.6,29.7,-93.6,31,-94,32,-94,33.8,-100,34.6,-100,36.5&consolidate=true"},"description":"Data...\n- on FL330\n- within polygon defined encompassing Texas\n- with HIWC concentration values at least 3\n- valid time at the current time\n- from model run time specified by variable"}},{"name":"FL340 IAH-SAT-ELP 60nm corridor SRID 3857 valid +2h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl340","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_2h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"corridor","value":"-10613868,3502633,-10961408,3443661,-11842279,3738133,60","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl340&isValidAt={{timestamp_plus_2h}}&corridor=-10613868,3502633,-10961408,3443661,-11842279,3738133,60&srid=3857"},"description":"Data...\n- on FL340\n- within corridor defined with 60nm halfwidth and line connecting Houston, San Antonio, and El Paso defined by SRID 3857 coordinates\n- with valid time 2 hours after the current time"}},{"name":"FL350 Suriname area bbox valid +1-2h no geometry allowPartialModelRun","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl350","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_2h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data"},{"key":"bbox","value":"-60,0,-52,8","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl350&fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_plus_2h}}&allowPartialModelRun=1&bbox=-60,0,-52,8&geometry=0"},"description":"Data...\n- on FL350\n- within bounding box encompassing Suriname\n- with valid time between 1 and 2 hours after the current time\n- geometry removed from response\n- allowing to pull from incompletely ingest model run if that provides the latest data"}},{"name":"FL370 BOG 200km circle inserted -0-3h consolidate","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl370","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_3h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"{{timestamp_current}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"circle","value":"-74.145,4.700,200","description":"<lon>,<lat>,<radius>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl370&insertedAfter={{timestamp_minus_3h}}&insertedThrough={{timestamp_current}}&circle=-74.145,4.700,200&distanceUnits=km&consolidate=true"},"description":"Data...\n- on FL370\n- within circle of radius 200km with center at Bogota airport\n- inserted between 3 hours before and current time\n- with consolidated multipolygons made from the polygons of the same HIWC concentrations value"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests HIWC","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid flightLevel","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl280","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl280&limit=3"},"description":"Uses flight level for which there is not HIWC data"}},{"name":"BAD invalid minHiwc","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl400","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minHiwc","value":"2","description":"Include only features whose concentration values are this or greater ; Allowed values are \"1\" (default) or \"3\", representing values for g/m^3 concentration threshold"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl400&limit=3&minHiwc=2"},"description":"Uses value not among specific allowed values for minHiwc"}},{"name":"BAD unallowed valid time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL350","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_minus_19h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL350&limit=5&isValidAt={{timestamp_minus_19h}}"},"description":"Valid time is outside allowed constraints for HIWC"}},{"name":"BAD invalid model run time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"FL410","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"modelDateTime","value":"{{timestamp_invalid_future_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=FL410&modelDateTime={{timestamp_invalid_future_model_run}}"},"description":"Uses model time in the future but value must be from past"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox HIWC","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any HIWC","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"flightLevel","value":"fl320","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed"},{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minHiwc","value":"3","description":"Include only features whose concentration values are this or greater ; Allowed values are \"1\" (default) or \"3\", representing values for g/m^3 concentration threshold","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"isValidAt","value":"2025-03-27 18:30:00","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"fromDateTime","value":"2025-03-27 21:30:00","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"2025-03-27 23:30:00","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"2025-03-27T15:50:00","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"2025-03-27T16:00:00","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2025-05-20 12:00:00","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data","disabled":true},{"key":"bbox","value":"-100,25,-95,30","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"bbox","value":"-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"polygon","value":"","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-100,27,200","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"130,-12,100,-18,200","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?flightLevel=fl320&isValidAt={{timestamp_current}}&bbox=-100,25,-95,30&consolidate=true"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of HIWC response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `flightLevel`: Flight level, in format `FL###` where `###` indicates hundreds of feet.  Was specified in request.\n- `rid`: Opaque reference identifier related to ingest and not part of data.\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `concentration`: Ice crystal concentration for forecast data object.  Values may be `1` (notable) or `3` (severe), for indicating at least that number of grams per cubic meter.\n\n#### Flight levels available for HIWC\n\n| flight level | approximate mb | available? |\n| ------------ | -------------- | ---------- |\n| FL010 | 980 | no |\n| FL030 | 900 | no |\n| FL050 | 850 | no |\n| FL080 | 750 | no |\n| FL100 | 700 | no |\n| FL120 | 650 | no |\n| FL140 | 600 | no |\n| FL160 | 550 | no |\n| FL180 | 500 | no |\n| FL200 | 475 | no |\n| FL220 | 425 | no |\n| FL240 | 400 | no |\n| FL260 | 375 | no |\n| FL270 | 350 | no |\n| FL280 | 325 | no |\n| FL300 | 300 | yes |\n| FL320 | 275 | yes |\n| FL330 | 260 | yes |\n| FL340 | 250 | yes |\n| FL350 | 230 | yes |\n| FL360 | 225 | yes |\n| FL370 | 215 | yes |\n| FL380 | 210 | yes |\n| FL390 | 200 | yes |\n| FL400 | 190 | yes |\n| FL410 | 180 | yes |\n| FL430 | 160 | no |\n| FL450 | 150 | no |\n| FL530 | 100 | no |"},{"name":"Thunderstorms","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_19h', moment().subtract(19,'hours'))","pm.environment.set('timestamp_minus_18h', moment().subtract(18,'hours'))","pm.environment.set('timestamp_minus_17h', moment().subtract(17,'hours'))","pm.environment.set('timestamp_minus_16h', moment().subtract(16,'hours'))","pm.environment.set('timestamp_minus_15h', moment().subtract(15,'hours'))","pm.environment.set('timestamp_minus_14h', moment().subtract(14,'hours'))","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_minus_5m', moment().subtract(5,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","pm.environment.set('timestamp_plus_6h', moment().add(6,'hours'))","pm.environment.set('timestamp_plus_7h', moment().add(7,'hours'))","pm.environment.set('timestamp_plus_8h', moment().add(8,'hours'))","pm.environment.set('timestamp_plus_9h', moment().add(9,'hours'))","pm.environment.set('timestamp_plus_10h', moment().add(10,'hours'))","pm.environment.set('timestamp_plus_11h', moment().add(11,'hours'))","pm.environment.set('timestamp_plus_12h', moment().add(12,'hours'))","pm.environment.set('timestamp_plus_13h', moment().add(13,'hours'))","pm.environment.set('timestamp_plus_14h', moment().add(14,'hours'))","pm.environment.set('timestamp_plus_15h', moment().add(15,'hours'))","pm.environment.set('timestamp_plus_16h', moment().add(16,'hours'))","pm.environment.set('timestamp_plus_17h', moment().add(17,'hours'))","pm.environment.set('timestamp_plus_18h', moment().add(18,'hours'))","pm.environment.set('timestamp_plus_19h', moment().add(19,'hours'))","pm.environment.set('timestamp_plus_20h', moment().add(20,'hours'))","pm.environment.set('timestamp_plus_21h', moment().add(21,'hours'))","pm.environment.set('timestamp_plus_22h', moment().add(22,'hours'))","pm.environment.set('timestamp_plus_23h', moment().add(23,'hours'))","pm.environment.set('timestamp_plus_24h', moment().add(24,'hours'))","pm.environment.set('timestamp_plus_25h', moment().add(25,'hours'))","pm.environment.set('timestamp_plus_26h', moment().add(26,'hours'))","pm.environment.set('timestamp_plus_27h', moment().add(27,'hours'))","pm.environment.set('timestamp_plus_28h', moment().add(28,'hours'))","pm.environment.set('timestamp_plus_29h', moment().add(29,'hours'))","pm.environment.set('timestamp_plus_30h', moment().add(30,'hours'))","pm.environment.set('timestamp_plus_31h', moment().add(31,'hours'))","pm.environment.set('timestamp_plus_32h', moment().add(32,'hours'))","pm.environment.set('timestamp_plus_33h', moment().add(33,'hours'))","pm.environment.set('timestamp_plus_34h', moment().add(34,'hours'))","pm.environment.set('timestamp_plus_35h', moment().add(35,'hours'))","pm.environment.set('timestamp_plus_36h', moment().add(36,'hours'))","pm.environment.set('timestamp_plus_37h', moment().add(37,'hours'))","// Get most recent model run time relative to 3 hours ago -- this should work for EFH requests","pm.environment.set('timestamp_earlier_model_run', moment.unix(Math.floor((moment().unix() - 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","// Get next model run time for time 3 hours ahead -- this will fail since need model run to be at least 3 hours earlier than current time","pm.environment.set('timestamp_invalid_future_model_run', moment.unix(Math.ceil((moment().unix() + 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","","pm.collectionVariables.set(\"endpoint\", \"thunderstorms\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example thunderstorm","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.verticalVelocity).to.be.a(\"number\");","        pm.expect(feature.properties.top).to.be.a(\"number\");","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","    })","});"]}}],"item":[{"name":"20m/s 40kft MUM-SIN 100km corridor valid+0-1h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"},{"key":"minVerticalVelocity","value":"20","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50"},{"key":"minTopFt","value":"40000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000"},{"key":"corridor","value":"72.87,19.09,104.00,1.35,100","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_1h}}&minVerticalVelocity=20&minTopFt=40000&corridor=72.87,19.09,104.00,1.35,100&distanceUnits=km"},"description":"Data...\n- within corridor defined with 100km halfwidth and line connecting Mumbai and Singapore\n- with valid time between the current time and 1 hour after\n- with vertical velocity values at least 20m/s and top values at least 40000ft"}},{"name":"30m/s 40kft consolidate current allowPartialModelRun","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data"},{"key":"minVerticalVelocity","value":"30","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50"},{"key":"minTopFt","value":"40000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_current}}&allowPartialModelRun=1&minVerticalVelocity=30&minTopFt=40000&consolidate=true"},"description":"Data...\n- valid at the current time\n- allowing to pull from incompletely ingest model run if that provides the latest data\n- with vertical velocity values at least 30m/s and top values at least 40000ft\n- with consolidated multipolygons made from the polygons of the same HIWC concentrations value"}},{"name":"50kft valid now specific model run","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"modelDateTime","value":"{{timestamp_earlier_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"},{"key":"minVerticalVelocity","value":"30","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50","disabled":true},{"key":"minTopFt","value":"50000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_current}}&modelDateTime={{timestamp_earlier_model_run}}&minTopFt=50000"},"description":"Data...\n- from worldwide (no spatial filter)\n- valid at the current time\n- from model run time specified by variable\n- with top values at least 50000ft"}},{"name":"Aruba 75nm circle valid now no geom","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minVerticalVelocity","value":"20","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50","disabled":true},{"key":"minTopFt","value":"40000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000","disabled":true},{"key":"circle","value":"-70,12.5,75","description":"<lon>,<lat>,<radius>"},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_current}}&circle=-70,12.5,75&geometry=0"},"description":"Data...\n- within circle of radius 75nm with center at Aruba\n- valid at the current time\n- with geometry removed"}},{"name":"Bay of Bengal polygon SRID 3857 consolidate +2-4hr","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_2h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_4h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"},{"key":"minVerticalVelocity","value":"30","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50","disabled":true},{"key":"minTopFt","value":"40000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000","disabled":true},{"key":"polygon","value":"10241393,2511525,8905559,1689200,8905559,1118889,9239517,507335,10575351,507335,10575351,1920825,10241393,2511525","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_plus_2h}}&untilDateTime={{timestamp_plus_4h}}&polygon=10241393,2511525,8905559,1689200,8905559,1118889,9239517,507335,10575351,507335,10575351,1920825,10241393,2511525&srid=3857&consolidate=true"},"description":"Data...\n- within polygon encompassing Bay of Bengal defined by SRID 3857 coordinates\n- with valid time between 2 and 4 hours after the current time\n- with consolidated multipolygons made from the polygons of the same HIWC concentrations value"}},{"name":"TropEPac bbox 35kft consolidate valid+4h metric","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_4h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minVerticalVelocity","value":"30","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50","disabled":true},{"key":"minTopFt","value":"35000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000"},{"key":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""},{"key":"bbox","value":"-130,-10,-80,10","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_4h}}&minTopFt=35000&unitSystem=metric&bbox=-130,-10,-80,10&consolidate=true"},"description":"Data...\n- within bounding box encompassing the tropical eastern Pacific Ocean\n- with top values at least 35000ft\n- valid at time 4 hours after the current time\n- with consolidated multipolygons made from the polygons of the same top/verticalVelocity value combinations\n- converted where applicable into metric units"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests thunderstorm","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid SRID coordinates","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"10","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minVerticalVelocity","value":"20","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50","disabled":true},{"key":"minTopFt","value":"40000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000"},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"bbox","value":"-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?minTopFt=40000&bbox=-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753"},"description":"Uses SRID 3857 coordinates but does not have active the parameter indicating using 3857"}},{"name":"BAD invalid vertical velocity","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minVerticalVelocity","value":"100","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=3&isValidAt={{timestamp_current}}&minVerticalVelocity=100"},"description":"Uses value not outside of range for allowed values for minVerticalVelocity"}},{"name":"BAD invalid top","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minTopFt","value":"75000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=3&isValidAt={{timestamp_current}}&minTopFt=75000"},"description":"Uses value not outside of range for allowed values for minTopFt"}},{"name":"BAD unallowed valid time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_37h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&isValidAt={{timestamp_plus_37h}}"},"description":"Valid time is outside allowed constraints for thunderstorms"}},{"name":"BAD invalid valid timeframe","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_minus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_minus_1h}}"},"description":"An \"after\" time must be before a \"through\" time"}},{"name":"BAD invalid insert timeframe","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"{{timestamp_current}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"{{timestamp_minus_5m}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&insertedAfter={{timestamp_current}}&insertedThrough={{timestamp_minus_5m}}"},"description":"An \"after\" time must be before a \"through\" time"}},{"name":"BAD invalid model run time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"modelDateTime","value":"{{timestamp_invalid_future_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?modelDateTime={{timestamp_invalid_future_model_run}}"},"description":"Uses model time in the future but value must be from past"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox thunderstorm","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any thunderstorms","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"2025-03-14 18:00:00","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_3h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"{{timestamp_minus_1h}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2025-05-20 12:00:00","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"allowPartialModelRun","value":"1","description":"Allow to return data from an incompletely ingested model run if that can provide the requested data (boolean, default=false) ; Setting true can result in different requests providing responses from different model runs depending on which has the latest parameters-satisfying data and thus inconsistency across the data","disabled":true},{"key":"minVerticalVelocity","value":"40","description":"Include only thunderstorm features whose vertical velocity is this or greater ; Integer, value in meters per second, limited to between 0 (default) and 50"},{"key":"minTopFt","value":"40000","description":"Include only thunderstorm features whose top height is this or greater ; Integer, value in feet, limited to between 0 (default) and 60000","disabled":true},{"key":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\"","disabled":true},{"key":"bbox","value":"-90,25,-80,35","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"bbox","value":"-18924313.434856508,3248973.789650975,-18479035.471683413,3763310.627144653","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"bbox","value":"130,-20,145,0","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-18924313,3248973,-18479035,3248973,-18479035,3763310,-18924313,3763310","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-119,37,40","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-18701674.453269962,3375646.034919311,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"72.87,19.09,104.00,1.35,100","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-105,40,-118,34,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-18479035,3763310,-18924313,3763310,61","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_current}}&minVerticalVelocity=40"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of thunderstorms response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `top`: Numerical value for forecast height of cloud top.\n- `verticalVelocity`: Numerical value for forecast updraft speed.\n- `unitSystem`: Indicates unit system for measured values.  Default uses mostly (though not all) imperial values, but metric can be selected.  See unit conversion for units for particular fields in those systems.\n\n#### Field units depending on specified `unitSystem`:\n\n| property | default | metric |\n| -------- | ------- | ------ |\n| top | feet | meters |\n| verticalVelocity | meters per second | meters per second |"},{"name":"Ozone","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_19h', moment().subtract(19,'hours'))","pm.environment.set('timestamp_minus_18h', moment().subtract(18,'hours'))","pm.environment.set('timestamp_minus_17h', moment().subtract(17,'hours'))","pm.environment.set('timestamp_minus_16h', moment().subtract(16,'hours'))","pm.environment.set('timestamp_minus_15h', moment().subtract(15,'hours'))","pm.environment.set('timestamp_minus_14h', moment().subtract(14,'hours'))","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_minus_5m', moment().subtract(5,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","pm.environment.set('timestamp_plus_6h', moment().add(6,'hours'))","pm.environment.set('timestamp_plus_7h', moment().add(7,'hours'))","pm.environment.set('timestamp_plus_8h', moment().add(8,'hours'))","pm.environment.set('timestamp_plus_9h', moment().add(9,'hours'))","pm.environment.set('timestamp_plus_10h', moment().add(10,'hours'))","pm.environment.set('timestamp_plus_11h', moment().add(11,'hours'))","pm.environment.set('timestamp_plus_12h', moment().add(12,'hours'))","pm.environment.set('timestamp_plus_13h', moment().add(13,'hours'))","pm.environment.set('timestamp_plus_14h', moment().add(14,'hours'))","pm.environment.set('timestamp_plus_15h', moment().add(15,'hours'))","pm.environment.set('timestamp_plus_16h', moment().add(16,'hours'))","pm.environment.set('timestamp_plus_17h', moment().add(17,'hours'))","pm.environment.set('timestamp_plus_18h', moment().add(18,'hours'))","pm.environment.set('timestamp_plus_19h', moment().add(19,'hours'))","pm.environment.set('timestamp_plus_20h', moment().add(20,'hours'))","pm.environment.set('timestamp_plus_21h', moment().add(21,'hours'))","pm.environment.set('timestamp_plus_22h', moment().add(22,'hours'))","pm.environment.set('timestamp_plus_23h', moment().add(23,'hours'))","pm.environment.set('timestamp_plus_24h', moment().add(24,'hours'))","pm.environment.set('timestamp_plus_25h', moment().add(25,'hours'))","pm.environment.set('timestamp_plus_26h', moment().add(26,'hours'))","pm.environment.set('timestamp_plus_27h', moment().add(27,'hours'))","pm.environment.set('timestamp_plus_28h', moment().add(28,'hours'))","pm.environment.set('timestamp_plus_29h', moment().add(29,'hours'))","pm.environment.set('timestamp_plus_30h', moment().add(30,'hours'))","pm.environment.set('timestamp_plus_31h', moment().add(31,'hours'))","pm.environment.set('timestamp_plus_32h', moment().add(32,'hours'))","pm.environment.set('timestamp_plus_33h', moment().add(33,'hours'))","pm.environment.set('timestamp_plus_34h', moment().add(34,'hours'))","pm.environment.set('timestamp_plus_35h', moment().add(35,'hours'))","pm.environment.set('timestamp_plus_36h', moment().add(36,'hours'))","pm.environment.set('timestamp_plus_37h', moment().add(37,'hours'))","// Get most recent model run time relative to 3 hours ago -- this should work for EFH requests","pm.environment.set('timestamp_earlier_model_run', moment.unix(Math.floor((moment().unix() - 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","// Get next model run time for time 3 hours ahead -- this will fail since need model run to be at least 3 hours earlier than current time","pm.environment.set('timestamp_invalid_future_model_run', moment.unix(Math.ceil((moment().unix() + 10800) / 21600) * 21600).utc().format(\"YYYY-MM-DD HH:mm:ss\"))","","pm.collectionVariables.set(\"endpoint\", \"ozone\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example ozone","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.ogcFeatureId).to.be.a(\"number\");","        pm.expect(feature.properties.category).to.be.oneOf([\"Between 0.10 - 0.25ppm above FL270\",\"Greater than 0.25ppm above FL270\"]);","        pm.expect(feature.properties.categoryCode).to.be.oneOf([1,2]);","        pm.expect(feature.properties.validDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","    })","});"]}}],"item":[{"name":"Chicago 500nm circle intersection specific run","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)"},{"key":"circle","value":"-87.902,41.977,200","description":"<lon>,<lat>,<radius>"},{"key":"modelDateTime","value":"{{timestamp_earlier_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?intersection=true&circle=-87.902,41.977,200&modelDateTime={{timestamp_earlier_model_run}}"},"description":"Gets data for circle defined with 100nm radius of point at Chicago O'Hare Airport from specific model time set by variable expected to provide data"}},{"name":"JFK-CDG 100km corridor","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"corridor","value":"-73.778,40.631,2.565,49.008,100","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?corridor=-73.778,40.631,2.565,49.008,100&distanceUnits=km"},"description":"Gets data for corridor defined with 100km halfwidth and line connecting New York John F Kennedy Airport and Paris Charles de Gaulle Airport"}},{"name":"NAtlantic polygon min code 2","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minOzoneCode","value":"2","description":"Include only ozone features whose categoryCode values are this or greater ; Allowed values are \"1\" (default) for category \"Between 0.10 - 0.25ppm above FL270\" or \"2\" for category \"Greater than 0.25ppm above FL270\""},{"key":"polygon","value":"-80,30,-80,10,-15,10,5,50,-55,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?minOzoneCode=2&polygon=-80,30,-80,10,-15,10,5,50,-55,50"},"description":"Gets data only with ozone category value at least 2 for polygon roughly encompassing North Atlantic Ocean"}},{"name":"SRID 3857 Mediterranean bbox","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"-1113195,3503549,4007502,5621522","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-1113195,3503549,4007502,5621522&srid=3857"},"description":"Gets data for bounding box encompassing Mediterranean Sea as defined with SRID 3857 coordinates"}},{"name":"inserted last 1h limit 5","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_1h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"{{timestamp_current}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&insertedAfter={{timestamp_minus_1h}}&insertedThrough={{timestamp_current}}"},"description":"Gets no more than first 5 response objects inserted over timeframe from 1 hour ago to the present time"}},{"name":"valid +12h Ontario bbox no geometry","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_12h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"bbox","value":"-95.2,41.6,-74.3,56.9","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_12h}}&bbox=-95.2,41.6,-74.3,56.9&geometry=0"},"description":"Gets data for bounding box encompassing Ontario, Canada valid at time 12 hours in future but does not include geometry in response"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests ozone","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid SRID coordinates","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"10","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minOzoneCode","value":"2","description":"Include only ozone features whose categoryCode values are this or greater ; Allowed values are \"1\" (default) for category \"Between 0.10 - 0.25ppm above FL270\" or \"2\" for category \"Greater than 0.25ppm above FL270\"","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"bbox","value":"-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753"},"description":"Uses SRID 3857 coordinates but does not have active the parameter indicating using 3857"}},{"name":"BAD invalid ozone category","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minOzoneCode","value":"3","description":"Include only ozone features whose categoryCode values are this or greater ; Allowed values are \"1\" (default) for category \"Between 0.10 - 0.25ppm above FL270\" or \"2\" for category \"Greater than 0.25ppm above FL270\""},{"key":"isValidAt","value":"{{timestamp_plus_1h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?minOzoneCode=3&isValidAt={{timestamp_plus_1h}}"},"description":"Uses value not among specific allowed values for minOzoneCode"}},{"name":"BAD unallowed valid time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_37h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&isValidAt={{timestamp_plus_37h}}"},"description":"Valid time is outside allowed constraints for ozone data"}},{"name":"BAD invalid valid timeframe","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_minus_1h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_minus_1h}}"},"description":"A \"from\" time must be before an \"until\" time"}},{"name":"BAD invalid insert timeframe","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"{{timestamp_current}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"{{timestamp_minus_5m}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?insertedAfter={{timestamp_current}}&insertedThrough={{timestamp_minus_5m}}"},"description":"An \"after\" time must be before a \"through\" time"}},{"name":"BAD invalid model run time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"modelDateTime","value":"{{timestamp_invalid_future_model_run}}","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?modelDateTime={{timestamp_invalid_future_model_run}}"},"description":"Uses model time in the future but value must be from past"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox ozone","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any ozone","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"10","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minOzoneCode","value":"2","description":"Include only ozone features whose categoryCode values are this or greater ; Allowed values are \"1\" (default) for category \"Between 0.10 - 0.25ppm above FL270\" or \"2\" for category \"Greater than 0.25ppm above FL270\"","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_4h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"isValidAt","value":"2025-03-27 18:30:00","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"fromDateTime","value":"2025-03-27 21:30:00","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"2025-03-27 23:30:00","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"2025-03-27T15:50:00","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"2025-03-27T16:00:00","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2025-05-20 12:00:00","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"bbox","value":"-60,40,-20,60","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"bbox","value":"-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"circle","value":"-100,27,200","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"130,-12,100,-18,200","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_4h}}"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of ozone response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `ogcFeatureId`: Opaque reference identifier related to ingest and not part of data.\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `category`: Numerical value for forecast height of cloud top.\n- `categoryCode`: Numerical value for forecast updraft speed.\n\n#### Cabin ozone categories and corresponding codes\n\n| category | categoryCode |\n| ---------- ------------ |\n| No significant concentration | 0 |\n| Between 0.10ppm - 0.25ppm above FL270 | 1 |\n| Greater than 0.25ppm above FL270 | 2 |"},{"name":"Jet Stream Axis","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_minus_5m', moment().subtract(5,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","pm.environment.set('timestamp_plus_6h', moment().add(6,'hours'))","pm.environment.set('timestamp_plus_7h', moment().add(7,'hours'))","pm.environment.set('timestamp_plus_8h', moment().add(8,'hours'))","pm.environment.set('timestamp_plus_9h', moment().add(9,'hours'))","pm.environment.set('timestamp_plus_10h', moment().add(10,'hours'))","pm.environment.set('timestamp_plus_11h', moment().add(11,'hours'))","pm.environment.set('timestamp_plus_12h', moment().add(12,'hours'))","pm.environment.set('timestamp_plus_13h', moment().add(13,'hours'))","pm.environment.set('timestamp_plus_14h', moment().add(14,'hours'))","pm.environment.set('timestamp_plus_15h', moment().add(15,'hours'))","pm.environment.set('timestamp_plus_16h', moment().add(16,'hours'))","pm.environment.set('timestamp_plus_17h', moment().add(17,'hours'))","pm.environment.set('timestamp_plus_18h', moment().add(18,'hours'))","pm.environment.set('timestamp_plus_19h', moment().add(19,'hours'))","","pm.collectionVariables.set(\"endpoint\", \"jetStreamAxis\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example jetStreamAxis","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"LineString\", \"MultiLineString\"]);","        pm.expect(feature.properties.ogcFeatureId).to.be.a(\"number\");","        pm.expect(feature.properties.speed).to.be.a(\"number\");","        pm.expect(feature.properties.altitude).to.be.a(\"number\");","        pm.expect(feature.properties.validDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.expirationDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.insertedDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.modelDateTime).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(feature.properties.unitSystem).to.be.oneOf([\"default\", \"metric\"]);","    })","});"]}}],"item":[{"name":"continental US bbox >=130kts & <=40kft valid+6-12h intersection consolidate","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_6h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_12h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"},{"key":"minSpeedKts","value":"130","description":"Include only features whose speed is this or greater ; Integer, value is knots"},{"key":"maxAltitudeFt","value":"40000","description":"Include only features whose altitude is this or less ; Integer, value is feet, limited to between 0 and 60000"},{"key":"bbox","value":"-120,25,-55,50","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_plus_6h}}&untilDateTime={{timestamp_plus_12h}}&minSpeedKts=130&maxAltitudeFt=40000&bbox=-120,25,-55,50&intersection=true&consolidate=true"},"description":"Data...\n- within bounding box encompassing continental USA\n- with speed values at least 130kts\n- with altitude values no more than 40000ft\n- valid between 6 and 12 hours after the current time\n- limiting objects to portions within bounding box\n- with consolidated multilinestrings made from the linestrings of the same speed/altitude"}},{"name":"Brazil polygon >=34kft","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"polygon","value":"-60,10,-80,-10,-50,-30,-30,-10,-60,10","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"minAltitudeFt","value":"34000","description":"Include only features whose altitude is this or greater ; Integer, value is feet, limited to between 0 and 60000"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?polygon=-60,10,-80,-10,-50,-30,-30,-10,-60,10&minAltitudeFt=34000"},"description":"Data...\n- within polygon encompassing Brazil\n- from model run time specified by variable"}},{"name":"London 300sm circle valid within 3 hours either side of now no geometry","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_minus_3h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_3h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"},{"key":"circle","value":"-0.1,51.5,300","description":"<lon>,<lat>,<radius>"},{"key":"distanceUnits","value":"sm","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_minus_3h}}&untilDateTime={{timestamp_plus_3h}}&circle=-0.1,51.5,300&distanceUnits=sm&geometry=0"},"description":"Data...\n- within circle of radius 300sm with center at London\n- valid between 3 hours before and 3 hours after now\n- with geometry removed"}},{"name":"CPT-PER 120km corridor SRID 3857 valid+2h- intersection","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_2h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"corridor","value":"2071099,-4025311,12908942,-3755961,120","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\""},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates"},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_plus_2h}}&corridor=2071099,-4025311,12908942,-3755961,120&distanceUnits=km&srid=3857&intersection=true"},"description":"Data...\n- within corridor 120km wide between Cape Town and Perth\n- using SRID 3857 to defined the corridor points\n- with valid time at least 2 hours after the current time so can provide multiple forecasts"}},{"name":"global <=80kts","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"maxSpeedKts","value":"80","description":"Include only features whose speed is this or less ; Integer, value is knots"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?maxSpeedKts=80"},"description":"Data...\n- from worldwide (no spatial filter)\n- speed no more than 80kts\n- inserted between 1 hour and 7 hours ago"}},{"name":"global >=150kts valid+3h consolidate metric","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_3h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minSpeedKts","value":"150","description":"Include only features whose speed is this or greater ; Integer, value is knots"},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"},{"key":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_3h}}&minSpeedKts=150&consolidate=true&unitSystem=metric"},"description":"Data...\n- from worldwide (no spatial filter)\n- valid at 3 hours from current time\n- with speed values at least 150kts\n- with consolidated multilinestrings made from the linestrings of the same speed/altitude\n- output in metric units"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Invalid requests jetStreamAxis","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid SRID coordinates","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"10","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"minSpeedKts","value":"120","description":"Include only features whose speed is this or greater ; Integer, value is knots","disabled":true},{"key":"minAltitudeFt","value":"35000","description":"Include only features whose altitude is this or greater ; Integer, value is feet, limited to between 0 and 60000"},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"bbox","value":"-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?minAltitudeFt=35000&bbox=-11131949.079327356,3217490.9158222154,-10575351.62536099,3503549.8435043753"},"description":"Uses SRID 3857 coordinates but does not have active the parameter indicating using 3857 in request"}},{"name":"BAD invalid corridor size","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"10","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"corridor","value":"-118.417,33.942,-73.780,40.639,600","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?corridor=-118.417,33.942,-73.780,40.639,600"},"description":"Uses halfwidth value exceeding constraint"}},{"name":"BAD invalid speed","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minSpeedKts","value":"1000","description":"Include only features whose speed is this or greater ; Integer, value is knots"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=3&isValidAt={{timestamp_current}}&minSpeedKts=1000"},"description":"Uses value not outside of range for allowed values for minSpeedKts"}},{"name":"BAD invalid altitude","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"},{"key":"minAltitudeFt","value":"300000","description":"Include only features whose altitude is this or greater ; Integer, value is feet, limited to between 0 and 60000"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=3&isValidAt={{timestamp_current}}&minAltitudeFt=300000"},"description":"Uses value not outside of range for allowed values for minAltitudeFt"}},{"name":"BAD unallowed valid time","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"{{timestamp_plus_21h}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&isValidAt={{timestamp_plus_21h}}"},"description":"Valid time is outside allowed constraints for jetStreamAxis"}},{"name":"BAD invalid valid timeframe","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)"},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_plus_12h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_6h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&fromDateTime={{timestamp_plus_12h}}&untilDateTime={{timestamp_plus_6h}}"},"description":"An \"after\" time must be before a \"through\" time"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox jetStreamAxis","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any jetStreamAxis","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"3","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"isValidAt","value":"2025-03-14 18:00:00","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"isValidAt","value":"{{timestamp_current}}","description":"Include only objects that are valid on or before plus expire after this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_6h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"},{"key":"minSpeedKts","value":"110","description":"Include only features whose speed is this or greater ; Integer, value is knots","disabled":true},{"key":"maxSpeedKts","value":"150","description":"Include only features whose speed is this or less ; Integer, value is knots","disabled":true},{"key":"minAltitudeFt","value":"30000","description":"Include only features whose altitude is this or greater ; Integer, value is feet, limited to between 0 and 60000","disabled":true},{"key":"maxAltitudeFt","value":"45000","description":"Include only features whose altitude is this or less ; Integer, value is feet, limited to between 0 and 60000","disabled":true},{"key":"bbox","value":"-90,25,-80,35","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"bbox","value":"-18924313.434856508,3248973.789650975,-18479035.471683413,3763310.627144653","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"bbox","value":"130,-20,145,0","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-18924313,3248973,-18479035,3248973,-18479035,3763310,-18924313,3763310","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-119,37,40","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-18701674.453269962,3375646.034919311,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"72.87,19.09,104.00,1.35,100","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-105,40,-118,34,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"corridor","value":"-18479035,3763310,-18924313,3763310,61","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"km","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)","disabled":true},{"key":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\"","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_6h}}"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of jetStreamAxis response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `validDateTime`: When the forecast data becomes valid, in UTC.\n- `expirationDateTime`: When the forecast data becomes no longer valid, in UTC.  Will be two hours after the valid time.\n- `insertedDateTime`: When the forecast data was saved in our database (and thus potentially available for selection), in UTC.\n- `modelDateTime`: Time, in UTC, of the model run from which forecast data produced.\n- `speed`: Numerical value for forecast jet axis speed.\n- `altitude`: Numerical value for forecast jet axis height.\n- `unitSystem`: Indicates unit system for measured values.  Default uses mostly (though not all) imperial values, but metric can be selected.  See unit conversion for units for particular fields in those systems.\n\n#### Field units depending on specified `unitSystem`:\n\n| property | default | metric |\n| -------- | ------- | ------ |\n| speed | knots | meters per second |\n| altitude | feet | meters |"},{"name":"SWPC NOAA Scales","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_24h', moment().subtract(24,'hours'))","pm.environment.set('timestamp_minus_23h', moment().subtract(23,'hours'))","pm.environment.set('timestamp_minus_22h', moment().subtract(22,'hours'))","pm.environment.set('timestamp_minus_21h', moment().subtract(21,'hours'))","pm.environment.set('timestamp_minus_20h', moment().subtract(20,'hours'))","pm.environment.set('timestamp_minus_19h', moment().subtract(19,'hours'))","pm.environment.set('timestamp_minus_18h', moment().subtract(18,'hours'))","pm.environment.set('timestamp_minus_17h', moment().subtract(17,'hours'))","pm.environment.set('timestamp_minus_16h', moment().subtract(16,'hours'))","pm.environment.set('timestamp_minus_15h', moment().subtract(15,'hours'))","pm.environment.set('timestamp_minus_14h', moment().subtract(14,'hours'))","pm.environment.set('timestamp_minus_13h', moment().subtract(13,'hours'))","pm.environment.set('timestamp_minus_12h', moment().subtract(12,'hours'))","pm.environment.set('timestamp_minus_11h', moment().subtract(11,'hours'))","pm.environment.set('timestamp_minus_10h', moment().subtract(10,'hours'))","pm.environment.set('timestamp_minus_9h', moment().subtract(9,'hours'))","pm.environment.set('timestamp_minus_8h', moment().subtract(8,'hours'))","pm.environment.set('timestamp_minus_7h', moment().subtract(7,'hours'))","pm.environment.set('timestamp_minus_6h', moment().subtract(6,'hours'))","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example SWPC data","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/data\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.swpcNoaaScalesData).to.be.an(\"array\");","});","","pm.test(\"Object evaluation\", function () {","    jsonData.swpcNoaaScalesData.forEach(function(obj){","        pm.expect(obj.datum).to.be.a(\"string\");","        pm.expect(typeof(obj.descriptor) == 'string' || obj.descriptor == null).to.be.true;","        pm.expect(obj.valueType).to.be.oneOf([\"Scale\",\"Prob\",\"MajorProb\",\"MinorProb\"]);","        pm.expect(obj.valueDescription).to.be.a(\"string\");","        pm.expect(obj.eventName).to.be.oneOf([\"Geomagnetic Storms\",\"Solar Radiation Storms\",\"Radio Blackouts\"]);","        pm.expect(obj.eventCode).to.be.oneOf([\"G\",\"S\",\"R\"]);","        pm.expect(obj.periodDescription).to.be.oneOf([\"Latest Observed\",\"Predicted current day\",\"Predicted current day + 1\",\"Predicted current day + 2\",\"24-Hour Observed Maximum\"]);","        pm.expect(obj.periodLabel).to.be.oneOf([\"0\",\"1\",\"2\",\"3\",\"-1\"]);","        pm.expect(obj.insertedTimestamp).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(obj.timestamp).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","    })","});"]}}],"item":[{"name":"Latest data","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets data objects for latest retrieved data"}},{"name":"Latest observed Radio Blackouts","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"swpcNoaaScalesEventCodes","value":"R","description":"Include only results for one or more of 'G' (for Geomagnetic Storms), 'S' (for Solar Radiation Storms), or 'R' (for Radio Blackouts)"},{"key":"swpcNoaaScalesPeriodLabels","value":"0","description":"Include only results for one or more of '0' (for Latest observed), '1' (for Predicted current day), '2' (for Predicted current day + 1), '3' (for Predicted current day + 2), or '-1' (for 24-hour observed maximum)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?swpcNoaaScalesEventCodes=R&swpcNoaaScalesPeriodLabels=0"},"description":"Gets data objects for latest retrieved data for latest observed Radio Blackouts"}},{"name":"Data saved between 8-9 hours ago","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_9h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"{{timestamp_minus_8h}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?insertedAfter={{timestamp_minus_9h}}&insertedThrough={{timestamp_minus_8h}}"},"description":"Gets data objects saved between 8 and 9 hours ago"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON\n- To confirm structure of JSON includes certain expected values in specific format"},{"name":"Example raw SWPC NOAA Scales","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/raw\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.swpcNoaaScalesRaw).to.be.an(\"array\");","});","","pm.test(\"Object evaluation\", function () {","    jsonData.swpcNoaaScalesRaw.forEach(function(obj){","        pm.expect(obj.insertedTimestamp).to.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/);","        pm.expect(obj.raw).to.be.an(\"object\");","    })","});"]}}],"item":[{"name":"Latest raw","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets data object for latest retrieved raw information"}},{"name":"Data saved between 15-18 hours ago","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"{{timestamp_minus_18h}}","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"{{timestamp_minus_15h}}","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?insertedAfter={{timestamp_minus_18h}}&insertedThrough={{timestamp_minus_15h}}"},"description":"Gets raw information saved between 15 and 18 hours ago"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON\n- To confirm structure of JSON includes certain expected values in specific format"},{"name":"SWPC explanation","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/explanation\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.swpcNoaaScalesExplanation).to.be.an(\"object\");","});","","pm.test(\"Object evaluation\", function () {","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.eventName).to.be.a(\"string\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.scale[\"0\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.scale[\"1\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.scale[\"2\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.scale[\"3\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.scale[\"4\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.G.scale[\"5\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.eventName).to.be.a(\"string\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.scale[\"0\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.scale[\"1\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.scale[\"2\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.scale[\"3\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.scale[\"4\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.S.scale[\"5\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.eventName).to.be.a(\"string\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.scale[\"0\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.scale[\"1\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.scale[\"2\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.scale[\"3\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.scale[\"4\"]).to.be.an(\"object\");","    pm.expect(jsonData.swpcNoaaScalesExplanation.eventCode.R.scale[\"5\"]).to.be.an(\"object\");","});"]}}],"item":[{"name":"Explanation","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets explanation of SWPC information"}}],"description":"These requests are expected to succeed.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON\n- To confirm structure of JSON includes certain expected values in specific format"},{"name":"Invalid data requests","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/data\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid swpcNoaaScalesEventCodes","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"swpcNoaaScalesEventCodes","value":"B","description":"Include only results for one or more of 'G' (for Geomagnetic Storms), 'S' (for Solar Radiation Storms), or 'R' (for Radio Blackouts)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?swpcNoaaScalesEventCodes=B"},"description":"Uses value not among specific allowed values for swpcNoaaScalesEventCodes"}},{"name":"BAD invalid swpcNoaaScalesPeriodLabels","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"swpcNoaaScalesPeriodLabels","value":"3,4,5","description":"Include only results for one or more of '0' (for Latest observed), '1' (for Predicted current day), '2' (for Predicted current day + 1), '3' (for Predicted current day + 2), or '-1' (for 24-hour observed maximum)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?swpcNoaaScalesPeriodLabels=3,4,5"},"description":"Uses value not among specific allowed values for swpcNoaaScalesPeriodLabels"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Invalid raw requests","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/raw\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","pm.test(\"Status test 400\", function () {","    pm.response.to.have.status(400);","});"]}}],"item":[{"name":"BAD invalid insert timeframe","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"2025-12-01 18:00:00","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"2025-12-01 19:00:00","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?insertedAfter=2025-12-01 18:00:00&insertedThrough=2025-12-01 19:00:00"},"description":"Uses time values outside the allowed selection period"}}],"description":"These requests are expected to fail because of some problem with a parameter.\n\nA tests is applied on each response to confirm failure:\n- To confirm 400 status code for response"},{"name":"Sandbox SWPC data","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/data\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any data","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"swpcNoaaScalesEventCodes","value":"","description":"Include only results for one or more of 'G' (for Geomagnetic Storms), 'S' (for Solar Radiation Storms), or 'R' (for Radio Blackouts)"},{"key":"swpcNoaaScalesPeriodLabels","value":"","description":"Include only results for one or more of '0' (for Latest observed), '1' (for Predicted current day), '2' (for Predicted current day + 1), '3' (for Predicted current day + 2), or '-1' (for 24-hour observed maximum)"},{"key":"insertedAfter","value":"","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?swpcNoaaScalesEventCodes=&swpcNoaaScalesPeriodLabels=&insertedAfter=&insertedThrough="},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."},{"name":"Sandbox raw SWPC NOAA Scales","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"swpc-noaa-scales/raw\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any data","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"insertedAfter","value":"","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type"},{"key":"insertedThrough","value":"","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?insertedAfter=&insertedThrough="},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in data response providing SWPC information:\n\n- `datum`: Value for corresponding data\n- `descriptor`: Text indicating severity of corresponding event\n- `valueType`: One of `Scale` (for numerical severity), `Prob` (for Solar Radiation Storm probability), `MajorProb` (for R3-R5 Radio Blackout probability), `MinorProb` (for R1-R2 Radio Blackout probability)\n- `valueDescription`: Definition for value type,\n- `eventName`: Type of event (one of `Geomagnetic Storms`, `Solar Radiation Storms`, `Radio Blackouts`)\n- `eventCode`: Short identifier for event (one of `G` for Geomagnetic Storms, `S` for Solar Radiation Storms, `R` for Radio Blackouts)\n- `periodDescription`: Type of time period for corresponding event\n- `periodLabel`: Short identifier for time period\n- `id`: Opaque identifier with no inherent meaning or use for consumer\n- `insertedTimestamp`: Datetime when the corresponding data were saved\n- `timestamp`: Dateime of corresponding data specifying time of latest observed value or beginning of time period\n\n#### Properties in raw response providing SWPC information:\n\n- `id`: Opaque identifier with no inherent meaning or use for consumer\n- `insertedTimestamp`: Datetime when the corresponding raw data were saved\n- `0`/`1`/`2`/`3`/`-1`: Identifier for time period for corresponding data (`0` is latest observed, `1` is predicted current day, `2` is predicted current day plus 1, `3` is predicted current day plus 2, `-1` is past 24-hour observed maximum)\n- `G`/`R`/`S`: Type of event (`G` is Geomagnetic Storms, `S` is Solar Radiation Storms, `R` is Radio Blackouts)\n- `Text`: Descriptor for severity of corresponding event\n- `Scale`: Numerical indicator for severity of corresponding event between 0 (no event) and 5 (highest severity)\n- `Prob`: For Solar Radiation Storms, the probability of S1 event for the corresponding time period\n- `MajorProb`: For Radio Blackouts, the probability of R3-R5 event for the corresponding time period\n- `MinorProb`: For Radio Blackouts, the probability of R1-R2 event for the corresponding time period\n- `DateStamp`: Date (in UTC) for time period\n- `TimeStamp`: Time (in UTC) for either latest observed value or beginning of time period for corresponding information\n\n#### Properties in explanation response that describes SWPC information:\n\n- `eventCode`: One of `G` (for Geomagnetic Storms), `S` (for Solar Radiation Storms), or `R` (for Radio Blackouts)\n- `eventName`: Name corresponding to `eventCode`\n- `scale`: Integer value between 0 (no event) and 5 (highest severity)\n- `category`: Contains key-value pairs for type of effect and degree of the impact\n- `descriptor`: Denotes severity level\n- `hex`: Hexadecimal value for defining color associated with event of corresponding severity\n- `colorName`: Descriptor identifying the color as designated by the `hex` value\n- `physicalMeasure`: Threshold for event of corresponding severity\n- `averageFrequency`: Typical recurrence of event of corresponding severity\n- `r`: Red value for corresponding color in RGB format\n- `g`: Green value for corresponding color in RGB format\n- `b`: Blue value for corresponding color in RGB format"},{"name":"Ash Cloud QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_30m', moment().add(30,'minutes'))","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","","pm.collectionVariables.set(\"endpoint\", \"ashcloudQvas\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example ash cloud QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.validdatetime).to.be.a(\"string\");","        pm.expect(feature.properties.volcanoname).to.be.a(\"string\");","    })","});"]}}],"item":[{"name":"Global recent ash clouds","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets recent ash cloud QVA data globally"}},{"name":"New England polygon","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"polygon","value":"-74.0,40.9,-69.8,41.2,-70.0,43.6,-66.9,44.7,-67.7,47.5,-69.4,47.4,-72.0,45.1,-73.5,45.1","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?polygon=-74.0,40.9,-69.8,41.2,-70.0,43.6,-66.9,44.7,-67.7,47.5,-69.4,47.4,-72.0,45.1,-73.5,45.1"},"description":"Gets data objects overlapping polygon encompassing New England region"}},{"name":"Pacific region bbox","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"120,-60,180,60","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=120,-60,180,60"},"description":"Gets data objects overlapping bounding box roughly encompassing Pacific region"}},{"name":"valid+0h-6h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_5h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_5h}}"},"description":"Gets data valid during period between now and 6 hours in the future"}},{"name":"OPERATIONAL eventtype","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?eventtype=OPERATIONAL"},"description":"Gets only OPERATIONAL event type data"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Sandbox ash cloud QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any ashcloudQvas","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"-180,-90,180,90","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-84,30,80","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"-118.414591,33.942910,144.845704,-37.668717,200","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"sm","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"fromDateTime","value":"2024-10-01T18:00:00.000Z","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"2024-10-01T19:00:00.000Z","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"2024-10-01T18:00:00.000Z","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"2024-10-01T19:00:00.000Z","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)","disabled":true},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)","disabled":true},{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination","disabled":true},{"key":"volcanoid","value":"123456","description":"Filter by volcano identifier (integer numeric ID). Use /v1/activeVolcanoQvas/ to discover available IDs","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of Ash Cloud QVA response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `cloudid`: Unique identifier for the ash cloud polygon.\n- `validdatetime`: Valid time for the ash cloud polygon, in UTC.\n- `volcanoid`: Volcano identifier string.\n- `volcanoname`: Name of the volcano.\n- `iavceinumber`: IAVCEI number for the volcano.\n- `volcanolat`: Latitude of the volcano.\n- `volcanolon`: Longitude of the volcano.\n- `lowerfl`: Lower flight level of the ash cloud.\n- `upperfl`: Upper flight level of the ash cloud.\n- `flightlevelrange`: Flight level range string.\n- `ashconcentrationthreshold`: Ash concentration threshold value.\n- `concentrationuom`: Unit of measure for concentration.\n- `vertexcount`: Number of vertices in the polygon.\n- `areasqkm`: Area of the polygon in square kilometers.\n- `issuetime`: Time the advisory was issued, in UTC.\n- `vaacname`: Name of the Volcanic Ash Advisory Center (VAAC)."},{"name":"Deterministic QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_30m', moment().add(30,'minutes'))","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","","pm.collectionVariables.set(\"endpoint\", \"deterministicQvas\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example deterministic QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.validdatetime).to.be.a(\"string\");","        pm.expect(feature.properties.volcanoname).to.be.a(\"string\");","    })","});"]}}],"item":[{"name":"Global recent deterministic QVAs","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets recent deterministic QVA data globally"}},{"name":"Pacific region bbox","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"120,-60,180,60","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=120,-60,180,60"},"description":"Gets data objects overlapping bounding box roughly encompassing Pacific region"}},{"name":"valid+0h-6h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_5h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_5h}}"},"description":"Gets data valid during period between now and 6 hours in the future"}},{"name":"OPERATIONAL eventtype","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?eventtype=OPERATIONAL"},"description":"Gets only OPERATIONAL event type data"}},{"name":"Consolidated polygons","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?consolidate=true"},"description":"Gets data with like-value polygons merged into MultiPolygon features"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Sandbox deterministic QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any deterministicQvas","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"-180,-90,180,90","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-84,30,80","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"-118.414591,33.942910,144.845704,-37.668717,200","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"sm","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"fromDateTime","value":"2024-10-01T18:00:00.000Z","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"2024-10-01T19:00:00.000Z","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"2024-10-01T18:00:00.000Z","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"2024-10-01T19:00:00.000Z","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2024-10-01T06:00:00.000Z","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)","disabled":true},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)","disabled":true},{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination","disabled":true},{"key":"flightLevel","value":"FL100","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed","disabled":true},{"key":"minConcentration","value":"0.001","description":"Minimum ash concentration value to include","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of Deterministic QVA response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `polygonid`: Unique identifier for the polygon.\n- `runid`: Model run identifier.\n- `validdatetime`: Valid time for the polygon, in UTC.\n- `flightlevel`: Flight level for the ash concentration polygon.\n- `concentration`: Ash concentration value.\n- `volcanoname`: Name of the volcano.\n- `volcanoid`: Volcano identifier string.\n- `vaacname`: Name of the Volcanic Ash Advisory Center (VAAC).\n- `vaacid`: VAAC identifier.\n- `eventtype`: Event type (OPERATIONAL, EXERCISE, TEST).\n- `modelrundatetime`: Model run date/time, in UTC."},{"name":"Probabilistic QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_5h', moment().subtract(5,'hours'))","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_current', moment())","pm.environment.set('timestamp_plus_30m', moment().add(30,'minutes'))","pm.environment.set('timestamp_plus_1h', moment().add(1,'hour'))","pm.environment.set('timestamp_plus_2h', moment().add(2,'hours'))","pm.environment.set('timestamp_plus_3h', moment().add(3,'hours'))","pm.environment.set('timestamp_plus_4h', moment().add(4,'hours'))","pm.environment.set('timestamp_plus_5h', moment().add(5,'hours'))","","pm.collectionVariables.set(\"endpoint\", \"probabilisticQvas\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example probabilistic QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.be.oneOf([\"Polygon\", \"MultiPolygon\"]);","        pm.expect(feature.properties.validdatetime).to.be.a(\"string\");","        pm.expect(feature.properties.volcanoname).to.be.a(\"string\");","    })","});"]}}],"item":[{"name":"Global recent probabilistic QVAs","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets recent probabilistic QVA data globally"}},{"name":"Pacific region bbox","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"120,-60,180,60","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=120,-60,180,60"},"description":"Gets data objects overlapping bounding box roughly encompassing Pacific region"}},{"name":"valid+0h-6h","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"fromDateTime","value":"{{timestamp_current}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type"},{"key":"untilDateTime","value":"{{timestamp_plus_5h}}","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_5h}}"},"description":"Gets data valid during period between now and 6 hours in the future"}},{"name":"OPERATIONAL eventtype","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?eventtype=OPERATIONAL"},"description":"Gets only OPERATIONAL event type data"}},{"name":"Consolidated polygons","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?consolidate=true"},"description":"Gets data with like-value polygons merged into MultiPolygon features"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Sandbox probabilistic QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any probabilisticQvas","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"bbox","value":"-180,-90,180,90","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-84,30,80","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"-118.414591,33.942910,144.845704,-37.668717,200","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>","disabled":true},{"key":"srid","value":"3857","description":"SRID of provided input coordinates for spatial filter ; Allowed values are \"4326\" (default, lon/lat) or \"3857\" ; Does not affect output coordinates","disabled":true},{"key":"distanceUnits","value":"sm","description":"Units for distance of defined circle radius or corridor halfwidth ; Allowed values are \"nm\" (default), \"sm\", \"km\", or \"m\"","disabled":true},{"key":"fromDateTime","value":"2024-10-01T18:00:00.000Z","description":"Include only objects whose valid timeframe includes this time (in UTC) and later ; I.e., exclude objects that expire before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"untilDateTime","value":"2024-10-01T19:00:00.000Z","description":"Include only objects whose valid timeframe includes this time (in UTC) and earlier ; I.e., exclude objects that are not valid before this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedAfter","value":"2024-10-01T18:00:00.000Z","description":"Include only objects that were inserted after this time (in UTC) ; Like if want new data and previous acquired all insertedThrough this time ; Allowed timeframe for values determined by data type","disabled":true},{"key":"insertedThrough","value":"2024-10-01T19:00:00.000Z","description":"Include only objects that were inserted before or at this time (in UTC) ; Allowed timeframe for values determined by data type","disabled":true},{"key":"modelDateTime","value":"2024-10-01T06:00:00.000Z","description":"Include only objects whose data are from this model run time (in UTC) ; Must have time 00:00:00, 06:00:00, 12:00:00, or 18:00:00 ; Accepted time may not provide data ; Must be at least 3 hours ago to possibly have data but cannot be more than 24 hours ago","disabled":true},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response","disabled":true},{"key":"consolidate","value":"true","description":"Merge like-value objects into combined MultiPolygon features in output (boolean, default=false)","disabled":true},{"key":"intersection","value":"true","description":"Limit feature geometries to intersection with spatial filter rather than the actual object shapes (boolean, default=false)","disabled":true},{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination","disabled":true},{"key":"flightLevel","value":"FL100","description":"[required] Flight level in format \"FL###\" ; 3-digit ### represents hundreds of feet, left-padded with zeroes as needed","disabled":true},{"key":"minProbability","value":"0.1","description":"Minimum probability value to include","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Can create requests from this basis by changing/setting any parameters."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of Probabilistic QVA response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `polygonid`: Unique identifier for the polygon.\n- `runid`: Model run identifier.\n- `validdatetime`: Valid time for the polygon, in UTC.\n- `flightlevel`: Flight level for the ash probability polygon.\n- `thresholdvalue`: Threshold value used for the probability calculation.\n- `probability`: Probability value for ash presence.\n- `volcanoname`: Name of the volcano.\n- `volcanoid`: Volcano identifier string.\n- `vaacname`: Name of the Volcanic Ash Advisory Center (VAAC).\n- `vaacid`: VAAC identifier.\n- `eventtype`: Event type (OPERATIONAL, EXERCISE, TEST).\n- `modelrundatetime`: Model run date/time, in UTC."},{"name":"Active Volcano QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"activeVolcanoQvas\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example active volcano QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.eql(\"Point\");","        pm.expect(feature.properties.volcanoid).to.be.a(\"string\");","        pm.expect(feature.properties.volcanoname).to.be.a(\"string\");","        pm.expect(feature.properties.hasiwxxm).to.be.a(\"boolean\");","    })","});"]}}],"item":[{"name":"OPERATIONAL active volcano QVAs (default)","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Gets currently active volcanoes with OPERATIONAL IWXXM ash cloud forecasts"}},{"name":"ALL event types","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"eventtype","value":"ALL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?eventtype=ALL"},"description":"Gets active volcanoes across all event types (OPERATIONAL, TEST, EXERCISE)"}},{"name":"Filter by VAAC designator","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"eventtype","value":"ALL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination"},{"key":"vaacid","value":"EGRR","description":"Filter by VAAC identifier — matches against designator (e.g. EGRR) or name (e.g. LONDON)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?eventtype=ALL&vaacid=EGRR"},"description":"Gets active volcanoes for a specific VAAC — use vaacdesignator (e.g. EGRR) or vaacname (e.g. LONDON)"}}],"description":"These requests are expected to succeed, though not necessarily always return data.\n\nTests are applied on each response aiming to confirm response is good:\n- To confirm 200 status code for response\n- To confirm that response is valid JSON with an array of features\n- To confirm structure of each object includes certain expected values in specific format"},{"name":"Sandbox active volcano QVAs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any activeVolcanoQvas","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"eventtype","value":"OPERATIONAL","description":"Event type filter: OPERATIONAL (default), EXERCISE, TEST, ALL, or comma-separated combination","disabled":true},{"key":"vaacid","value":"EGRR","description":"Filter by VAAC identifier — matches against designator (e.g. EGRR) or name (e.g. LONDON)","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Can create requests from this basis by changing/setting any parameters.\nUse the volcanoid returned here to filter calls to ashcloudQvas, deterministicQvas, and probabilisticQvas."}}],"description":"This is for holding any requests a user may want to create and save.\n\nAt least one generic request with all possible parameters available to use should be provided as a template."}],"description":"#### Properties in feature object of Active Volcano QVAs response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON):\n\n- `volcanoid`: Numeric volcano identifier. Use this value to filter calls to ashcloudQvas, deterministicQvas, and probabilisticQvas.\n- `volcanoname`: Name of the volcano.\n- `iavceinumber`: IAVCEI number for the volcano.\n- `elevation_m`: Elevation of the volcano in meters.\n- `vaacname`: Name of the Volcanic Ash Advisory Center (VAAC).\n- `vaacdesignator`: VAAC designator code (e.g. EGRR for London VAAC).\n- `latestissuetime`: Most recent IWXXM forecast issue time, in UTC.\n- `latestmodelrundatetime`: Most recent NetCDF model run date/time, in UTC.\n- `hasiwxxm`: True if the volcano has active IWXXM ash cloud data (validdatetime >= now).\n- `hasdeterministic`: True if the volcano has a recent deterministic model run.\n- `hasprobabilistic`: True if the volcano has a recent probabilistic model run.\n- `eventtype`: Event type of the most recent IWXXM forecast (OPERATIONAL, EXERCISE, TEST).\n\nGeometry is a GeoJSON Point at the volcano location."}]}