{"info":{"name":"DTN Aviation API SIGMET/AIRMET collection","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json","description":"Significant Meteorological Information ([SIGMET](https://en.wikipedia.org/wiki/SIGMET)) advises of severe conditions that can affect flight operations.\n\nFlight Information Region  ([FIR](https://en.wikipedia.org/wiki/Flight_information_region)) denotes the area in which a SIGMET occurs.\n\nConvective SIGMETs are reported for USA for significant thunderstorm activity.\n\nAirmen's Meteorological Information ([AIRMET](https://en.wikipedia.org/wiki/AIRMET)) advises of moderate conditions that can affect flight operations in USA.  There are three types:\n- Sierra (IFR/visibility)\n- Tango (turbulence)\n- Zulu (icing)\n\nThis SIGMET/AIRMET collection includes requests categorization in:\n- Authorization\n- health-check\n- SIGMETs\n    - Example SIGMET: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox SIGMET: starting point for requests utilizing any possible parameters\n- Possible FIR names\n    - Example possible FIR names: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox possible FIR names: starting point for requests utilizing any possible parameters\n- Convective SIGMET\n    - Example convective SIGMET: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox convective SIGMET: starting point for requests utilizing any possible parameters\n- Sierra (IFR) AIRMET\n    - Example Sierra AIRMET: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox Sierra AIRMET: starting point for requests utilizing any possible parameters\n- Tango (turbulence) AIRMET\n    - Example Tango AIRMET: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox Tango AIRMET: starting point for requests utilizing any possible parameters\n- Zulu (icing) AIRMET\n    - Example Zulu AIRMET: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox Zulu AIRMET: 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":"SIGMETs","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_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.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.collectionVariables.set(\"endpoint\", \"sigmets\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example SIGMET","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.sigmetId).to.be.a(\"number\");","        pm.expect(feature.properties.reportType).to.be.oneOf([\"TS\",\"TURB\",\"ICE\",\"VA\",\"TC\",\"DS\",\"SS\",\"MTW\",\"RDOACT CLD\"]);","        pm.expect(feature.properties.firNameStandard).to.be.a(\"string\");","        pm.expect(feature.properties.rawTxt).to.be.a(\"string\");","        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(typeof(feature.properties.issueOffice) == 'string' || feature.properties.issueOffice == null).to.be.true;","        pm.expect(typeof(feature.properties.severity) == 'string' || feature.properties.severity == null).to.be.true;","        pm.expect(typeof(feature.properties.seriesNumber) == 'string' || feature.properties.seriesNumber == null).to.be.true;","        pm.expect(typeof(feature.properties.topLevel) == 'number' || feature.properties.topLevel == null).to.be.true;","        pm.expect(typeof(feature.properties.bottomLevel) == 'number' || feature.properties.bottomLevel == null).to.be.true;","        pm.expect(typeof(feature.properties.obsFcst) == 'string' || feature.properties.obsFcst == null).to.be.true;","        pm.expect(typeof(feature.properties.movement) == 'string' || feature.properties.movement == null).to.be.true;","        pm.expect(typeof(feature.properties.intensityChange) == 'string' || feature.properties.intensityChange == null).to.be.true;","        pm.expect(typeof(feature.properties.vaTcName) == 'string' || feature.properties.vaTcName == null).to.be.true;","    })","});"]}}],"item":[{"name":"Brazil FIRs valid+30m 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_30m}}","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":"firs","value":"RECIFE FIR,AMAZONICA FIR,BRASILIA FIR,CURTIBA FIR,ATLANTICO FIR/UIR","description":"Include only SIGMETs whose firNameStandard is one of these ; Comma-delimited list of one or more exact FIR names matching internal permitted list"},{"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}}?isValidAt={{timestamp_plus_30m}}&firs=RECIFE FIR,AMAZONICA FIR,BRASILIA FIR,CURTIBA FIR,ATLANTICO FIR/UIR&geometry=false"},"description":"Gets data objects whose FIR is one of specific list covering Brazil that are valid at time 30 minutes from now and removes the geometry from the output"}},{"name":"Doha 160nm circle intersection","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":"51.60,25.28,160","description":"<lon>,<lat>,<radius>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?intersection=true&circle=51.60,25.28,160"},"description":"Gets data objects overlapping circle defined with 160nm radius from center at Doha and limiting geometry of objects to coverage within that area"}},{"name":"TPE-MEL 200km 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":"121.241029,25.083535,144.845704,-37.668717,200","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=121.241029,25.083535,144.845704,-37.668717,200&distanceUnits=km"},"description":"Gets data objects overlapping corridor defined with 200km halfwidth and line connecting Taipei and Melbourne"}},{"name":"NAtlantic polygon TURB/TS","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":"-80,30,-80,10,-15,10,5,50,-55,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"reportTypes","value":"TURB,TS","description":"Include only SIGMETs whose reportType is one of these ; Comma-delimited list of one or more of \"TS\", \"TURB\", \"ICE\", \"VA\", \"TC\", \"DS\", \"SS\", \"MTW\", \"RDOACT CLD\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?polygon=-80,30,-80,10,-15,10,5,50,-55,50&reportTypes=TURB,TS"},"description":"Gets data objects overlapping polygon encompassing North Atlantic Ocean with reportType either TURB or TS"}},{"name":"SBAO/SBAZ 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":"issueOffices","value":"SBAO,SBAZ","description":"Include only SIGMETs whose issueOffice is one of these ; Comma-delimited list of one or more 4-letter identifiers"},{"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}}?issueOffices=SBAO,SBAZ&geometry=0"},"description":"Gets data objects whose issuing office is either SBAO or SBAZ and removes the geometry from the output"}},{"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_x>,<min_y>,<max_x>,<max_y> (non-4326 SRID)"},{"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 objects overlapping bounding box roughly encompassing Mediterranean Sea as defined with SRID 3857 coordinates"}},{"name":"firStartsWith ME valid+1h-2h","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_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":"firStartsWith","value":"ME","description":"Include only SIGMETs whose associated FIR names begin with this ; 2-10 chars, including letters/spaces/dashes/apostrophes"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_plus_2h}}&firStartsWith=ME"},"description":"Gets data objects that are valid any time between 1 and 2 hours after current time and for FIRs whose names begin with \"ME\""}},{"name":"inserted last 10min metric","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":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""},{"key":"insertedAfter","value":"{{timestamp_minus_10m}}","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}}?unitSystem=metric&insertedAfter={{timestamp_minus_10m}}&insertedThrough={{timestamp_current}}"},"description":"Gets data objects inserted in past 10 minutes and output 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","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 firStartsWith","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":"firStartsWith","value":"R*","description":"Include only SIGMETs whose associated FIR names begin with this ; 2-10 chars, including letters/spaces/dashes/apostrophes"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?firStartsWith=R*"},"description":"Uses value not allowed for firStartsWith (must be 2-10 chars including only letters, spaces, dashes, and apostrophes)"}},{"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":"stationIds","value":"KCHS","description":"Include only features whose stationId is one of these ; Comma-delimited list of one or more identifiers each defined by 3-4 letters/numbers"},{"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}}?stationIds=KCHS&insertedAfter={{timestamp_current}}&insertedThrough={{timestamp_minus_5m}}"},"description":"An \"after\" time must be before a \"through\" time"}},{"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_13h}}","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_13h}}"},"description":"Valid (reported) time is outside allowed constraints for SIGMETs"}},{"name":"BAD invalid reportTypes","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":"-90,30,-80,30,-80,40,-85,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"reportTypes","value":"TURB,THUNDERSTORM","description":"Include only SIGMETs whose reportType is one of these ; Comma-delimited list of one or more of \"TS\", \"TURB\", \"ICE\", \"VA\", \"TC\", \"DS\", \"SS\", \"MTW\", \"RDOACT CLD\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?polygon=-90,30,-80,30,-80,40,-85,25&reportTypes=TURB,THUNDERSTORM"},"description":"Uses value not among specific allowed values for reportType (use \"TS\" for thunderstorm)"}},{"name":"BAD invalid time format","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":"2024-07-17 28:00:00 UTC","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}}?isValidAt=2024-07-17 28:00:00 UTC"},"description":"Uses an impossible time value"}},{"name":"BAD invalid unitSystem","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":"unitSystem","value":"special","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?unitSystem=special"},"description":"Uses unrecognized unitSystem value"}},{"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)","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_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}}?fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_minus_1h}}"},"description":"A \"from\" time must be before an \"until\" 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 SIGMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any Sigmets","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":"bbox","value":"-170,28,-166,32","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"bbox","value":"-18924313.434856508,3248973.789650975,-18479035.471683413,3763310.627144653","description":"<min_x>,<min_y>,<max_x>,<max_y> (non-4326 SRID)","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":"<x_1>,<y_1>,...,<x_n>,<y_n> (non-4326 SRID)","disabled":true},{"key":"circle","value":"-168,29,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-18701674.453269962,3375646.034919311,61","description":"<x>,<y>,<radius> (non-4326 SRID)","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":"corridor","value":"-18479035,3763310,-18924313,3763310,61","description":"<x_1>,<y_1>,...,<x_n>,<y_n>,<halfwidth> (non-4326 SRID)","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":"isValidAt","value":"2025-03-25 14: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":"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":"2025-03-24 19: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-24 22:00: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":"{{timestamp_minus_10m}}","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_current}}","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":"reportTypes","value":"TURB","description":"Include only SIGMETs whose reportType is one of these ; Comma-delimited list of one or more of \"TS\", \"TURB\", \"ICE\", \"VA\", \"TC\", \"DS\", \"SS\", \"MTW\", \"RDOACT CLD\"","disabled":true},{"key":"issueOffices","value":"MUHA","description":"Include only SIGMETs whose issueOffice is one of these ; Comma-delimited list of one or more 4-letter identifiers","disabled":true},{"key":"firs","value":"ALGER-FIR","description":"Include only SIGMETs whose firNameStandard is one of these ; Comma-delimited list of one or more exact FIR names matching internal permitted list","disabled":true},{"key":"firStartsWith","value":"ME","description":"Include only SIGMETs whose associated FIR names begin with this ; 2-10 chars, including letters/spaces/dashes/apostrophes","disabled":true},{"key":"isUrgent","value":"true","description":"Include only SIGMETs whose isUrgent is true ; 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},{"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}}?limit=5"},"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 SIGMET response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) (not all fields may have meaningful data):\n\n- `sigmetId`: Opaque reference identifier related to ingest and not part of data.\n- `reportType`: Type of SIGMET report, which is one of `TS` (thunderstorm), `TURB` (turbulence), `ICE` (icing), `VA` (volcanic ash), `TC` (tropical cyclone), `DS` (dust storm), `SS` (sand storm), `MTW` (mountain wave), `RDOACT CLD` (radioactive cloud)\n- `seriesNumber`: Identifier given to SIGMET by issuer, though not necessarily strictly a number (could be, e.g., `23` or `B04` or `A1`).\n- `severity`: Indicator of severity as given in original data.  Usually `NULL` or empty, but sometimes `SEVERE`, and very rarely `MODERATE`.\n- `iceType`: Could provide type of icing for such conditions.\n- `rawTxt`: The original text content provided for the message.\n- `firNameStandard`: Name determined for Flight Information Region for the report [FIR](https://en.wikipedia.org/wiki/Flight_information_region) determined for the SIGMET.\n- `issueOffice`: Station associated with the report generation, relates to FIR.\n- `obsFcst`: Indicator of whether info conveys observation (and if so, maybe for what time), forecast, or both.\n- `movement`: Can express motion of reported phenomenon like that moving (e.g., `ENE 8KT`) or not (`STNR`).\n- `intensityChange`: Can express trend in reported phenomenon like that staying same (`NC`), weakening (`WKN`), or intensifying (`INTSF`)\n- `vaTcName`: Gives, as applicable, the name of the volcano or tropical cyclone related to the reported phenomenon.\n- `validDateTime`: When the report starts (becomes applicable/valid/active), in UTC.  If could not be determined from report is set as time of ingest.\n- `expirationDateTime`: when the report ends (becomes inapplicable/invalid/inactive), in UTC.  If could not be determined from report is set as two hours after time of ingest.\n- `insertedDateTime`: When the report for the SIGMET was ingested, in UTC.  This value is useful chaining requests to get newly available data since a previous request.\n- `isUrgent`: Indicator if provided in report for whether considered \"urgent\".\n- `isCancelled`: Could indicate a SIGMET that has ended.\n- `topLevel`: Top height for the reported phenomenon.\n- `bottomLevel`: Bottom height for the reported phenomenon.\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| movement | \"...KTS\" | \"...M/S\" |\n| topLevel | feet | meters |\n| bottomLevel | feet | meters |"},{"name":"Possible FIR names","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["pm.collectionVariables.set(\"endpoint\", \"possibleFirNames\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example possible FIR names","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.possibleFirNames).to.be.an(\"array\");","});"]}}],"item":[{"name":"all FIR names","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[],"raw":"{{api_url}}/{{version}}/{{endpoint}}"},"description":"Simply get the list of all FIR names"}},{"name":"Brazil FIRs","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":"firs","value":"RECIFE FIR,AMAZONICA FIR,BRASILIA FIR,CURITIBA FIR,ATLANTICO FIR/UIR","description":"Include only SIGMETs whose firNameStandard is one of these ; Comma-delimited list of one or more exact FIR names matching internal permitted list"},{"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}}?firs=RECIFE FIR,AMAZONICA FIR,BRASILIA FIR,CURITIBA FIR,ATLANTICO FIR/UIR&geometry=false"},"description":"Gets list of FIRs matching specified set like to check that all exist"}},{"name":"Doha 160nm circle intersection","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"circle","value":"51.60,25.28,160","description":"<lon>,<lat>,<radius>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?circle=51.60,25.28,160"},"description":"Gets list of FIRs overlapping circle defined with 160nm radius from center at Doha"}},{"name":"TPE-MEL 200km corridor","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"corridor","value":"121.241029,25.083535,144.845704,-37.668717,200","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=121.241029,25.083535,144.845704,-37.668717,200&distanceUnits=km"},"description":"Gets list of FIRs overlapping corridor defined with 200km halfwidth and line connecting Taipei and Melbourne"}},{"name":"NAtlantic polygon","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"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}}?polygon=-80,30,-80,10,-15,10,5,50,-55,50"},"description":"Gets list of FIRs overlapping polygon 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":"bbox","value":"-1113195,3503549,4007502,5621522","description":"<min_x>,<min_y>,<max_x>,<max_y> (non-4326 SRID)"},{"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 list of FIRs overlapping bounding box roughly encompassing Mediterranean Sea as defined with SRID 3857 coordinates"}},{"name":"firStartsWith ME","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"firStartsWith","value":"ME","description":"Include only SIGMETs whose associated FIR names begin with this ; 2-10 chars, including letters/spaces/dashes/apostrophes"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?firStartsWith=ME"},"description":"Gets list of FIRs whose names begin with \"ME\""}}],"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 the FIR names"},{"name":"Invalid requests","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 firStartsWith","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":"firStartsWith","value":"R*","description":"Include only SIGMETs whose associated FIR names begin with this ; 2-10 chars, including letters/spaces/dashes/apostrophes"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?firStartsWith=R*"},"description":"Uses value not allowed for firStartsWith (must be 2-10 chars including only letters, spaces, dashes, and apostrophes)"}},{"name":"BAD invalid 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":"-80,25,-120,50","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-80,25,-120,50"},"description":"Coordinates must be min_lon,min_lat,max_lon,max_lat"}},{"name":"BAD invalid circle","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":"circle","value":"45,-100,75","description":"<lon>,<lat>,<radius>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?circle=45,-100,75"},"description":"Uses (Y,X) order for coordinate, but must provide string like <X>,<Y>,<RADIUS>"}},{"name":"BAD invalid 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":"72.87,19.09,104.00,100","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?corridor=72.87,19.09,104.00,100"},"description":"Must provide string like <X_0>,<Y_0>,<X_1>,<Y_1>...,<X_n>,<Y_n>,<HALFWIDTH>, thus odd number of values in list"}},{"name":"BAD invalid distanceUnits","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":"circle","value":"0,50,150","description":"<lon>,<lat>,<radius>"},{"key":"distanceUnits","value":"mi","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}}?circle=0,50,150&distanceUnits=mi"},"description":"Uses value not allowed for distanceUnits (use \"sm\" for statute miles)"}}],"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 possible FIR names","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"all/any FIR names","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":"-170,28,-166,32","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"bbox","value":"-18924313.434856508,3248973.789650975,-18479035.471683413,3763310.627144653","description":"<min_x>,<min_y>,<max_x>,<max_y> (non-4326 SRID)","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":"<x_1>,<y_1>,...,<x_n>,<y_n> (non-4326 SRID)","disabled":true},{"key":"circle","value":"-168,29,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-18701674.453269962,3375646.034919311,61","description":"<x>,<y>,<radius> (non-4326 SRID)","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":"corridor","value":"-18479035,3763310,-18924313,3763310,61","description":"<x_1>,<y_1>,...,<x_n>,<y_n>,<halfwidth> (non-4326 SRID)","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":"firs","value":"RECIFE FIR,AMAZONICA FIR,BRASILIA FIR,CURTIBA FIR,ATLANTICO FIR/UIR","description":"Include only SIGMETs whose firNameStandard is one of these ; Comma-delimited list of one or more exact FIR names matching internal permitted list","disabled":true},{"key":"firStartsWith","value":"ME","description":"Include only SIGMETs whose associated FIR names begin with this ; 2-10 chars, including letters/spaces/dashes/apostrophes","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":"This endpoint provides Flight Information Region (FIR) names as may be provided in SIGMET responses.  The purpose of this is to provide the possible FIR names that may occur in SIGMET data if one wants that information like to use particular names as a request parameter.  Response contains `possibleFirNames` list that satisfies whatever parameters (if any) were set with the request."},{"name":"Convective SIGMETs","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\", \"convectiveSigmets\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example convective SIGMET","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.rawTxt).to.be.a(\"string\");","        pm.expect(feature.properties.objectTxt).to.be.a(\"string\");","        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.direction).to.be.a(\"number\");","        pm.expect(feature.properties.speed).to.be.a(\"number\");","        pm.expect(feature.properties.topLevel).to.be.a(\"number\");","    })","});"]}}],"item":[{"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":"PIT 150nm circle no geometry intersection","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":"circle","value":"-80.229519,40.491978,150","description":"<lon>,<lat>,<radius>"},{"key":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"},{"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}}?circle=-80.229519,40.491978,150&geometry=0&intersection=true"},"description":"Gets data limited to within circle defined with 150nm radius of point at Pittsburgh Intl Airport"}},{"name":"SEA-BZN-DEN-PHX 50sm 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":"-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"distanceUnits","value":"sm","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=-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50&distanceUnits=sm"},"description":"Gets data objects overlapping corridor defined with 50sm halfwidth and line connecting Seattle, Bozeman, Denver, and Phoenix"}},{"name":"SRID 3857 Pacific coast 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":"-13914936,3503549,-12801741,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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-13914936,3503549,-12801741,6446276&srid=3857"},"description":"Gets data objects overlapping bounding box roughly encompassing US west coast as defined with SRID 3857 coordinates"}},{"name":"minSpeedKts 10","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":"minSpeedKts","value":"10","description":"Include only features whose speed is this or greater ; Integer, value is knots"},{"key":"maxSpeedKts","value":"25","description":"Include only features whose speed is this or less ; Integer, value is knots","disabled":true}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?minSpeedKts=10"},"description":"Gets data only with speed of at least 10kts"}},{"name":"valid+0h-1h","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_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}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_1h}}"},"description":"Gets data valid during period between now and 1 hour in the future"}},{"name":"valid+30m 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_30m}}","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":"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_30m}}&geometry=0"},"description":"Gets data valid at time 30 minutes 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 convective SIGMET","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 speed range","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":"minSpeedKts","value":"30","description":"Include only features whose speed is this or greater ; Integer, value is knots"},{"key":"maxSpeedKts","value":"25","description":"Include only features whose speed is this or less ; Integer, value is knots"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&minSpeedKts=30&maxSpeedKts=25"},"description":"Minimum value cannot exceed maximum value"}},{"name":"BAD invalid unitSystem","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":"unitSystem","value":"special","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?unitSystem=special"},"description":"Uses unrecognized unitSystem value"}},{"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_minus_5h}}","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_minus_5h}}"},"description":"Valid time is outside allowed constraints for convective SIGMETs"}},{"name":"BAD invalid time format","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":"2024-07-17 28:00:00 UTC","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}}?isValidAt=2024-07-17 28:00:00 UTC"},"description":"Uses an impossible time value"}},{"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)","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_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_minus_8h}}","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_minus_6h}}&untilDateTime={{timestamp_minus_8h}}"},"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_plus_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}}?insertedAfter={{timestamp_plus_1h}}&insertedThrough={{timestamp_current}}"},"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 convective SIGMET","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any convectiveSigmets","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":"-110,25,-80,30","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":"circle","value":"-9573476.208221527,3248973.789650975,50","description":"<x>,<y>,<radius> (non-4326 SRID)","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":"minSpeedKts","value":"30","description":"Include only features whose speed is this or greater ; Integer, value is knots","disabled":true},{"key":"maxSpeedKts","value":"25","description":"Include only features whose speed is this or less ; Integer, value is knots","disabled":true},{"key":"isValidAt","value":"2024-07-17 06:00:00 UTC","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_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","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":"2025-01-15T17:55: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-01-15T18:55: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":"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":"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}}"},"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 SIGMET response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) (not all fields may have meaningful data):\n\n- `rawTxt`: The original text content provided for the message, potentially including multiple reports but at least including headers.\n- `objectTxt`: The original text content specific to this object, describes this reported phenomenon.\n- `validDateTime`: When the report starts (becomes applicable/valid/active), in UTC.  If could not be determined from report is set as time of ingest.\n- `expirationDateTime`: when the report ends (becomes inapplicable/invalid/inactive), in UTC.\n- `insertedDateTime`: When the report for the convective SIGMET was ingested, in UTC.  This value is useful chaining requests to get newly available data since a previous request.\n- `direction`: From MOV in reportto describe direction of movement of phenomenon.\n- `speed`: From `MOV` in report to describe speed of movement of phenomenon.\n- `topLevel`: Top height for the reported phenomenon.\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| topLevel | feet | meters |"},{"name":"Sierra AIRMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","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_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.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\", \"sierraAirmets\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example Sierra AIRMET","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.messageType).to.be.oneOf([\"IFR\",\"MTN OBSC\",\"SFC WIND\"]);","        pm.expect(feature.properties.messageTxt).to.be.a(\"string\");","        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(typeof(feature.properties.topLevel) == 'number' || feature.properties.topLevel == null).to.be.true;","        pm.expect(typeof(feature.properties.bottomLevel) == 'number' || feature.properties.bottomLevel == null).to.be.true;","    })","});"]}}],"item":[{"name":"New England polygon IFR/MTN OBSC","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":"messageTypes","value":"IFR,MTN OBSC","description":"Include only Sierra AIRMETs whose messageType is one of these ; Comma-delimited list of one or more of \"IFR\", \"MTN OBSC\", \"SFC WIND\""},{"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}}?messageTypes=IFR,MTN OBSC&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 with messageType either IFR or MTN OBSC"}},{"name":"PIT 150nm circle intersection","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":"circle","value":"-80.229519,40.491978,150","description":"<lon>,<lat>,<radius>"},{"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}}?circle=-80.229519,40.491978,150&intersection=true"},"description":"Gets data objects overlapping circle defined with 150nm radius from center at Pittsburgh and limiting geometry of objects to coverage within that area"}},{"name":"SEA-BZN-DEN-PHX 50sm corridor 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":"corridor","value":"-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"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}}?corridor=-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50&distanceUnits=sm&geometry=0"},"description":"Gets data objects overlapping corridor defined with 50sm halfwidth and line connecting Seattle, Bozeman, Denver, and Phoenix, removing geometry from response"}},{"name":"SRID 3857 Pacific coast 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":"-13914936,3503549,-12801741,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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-13914936,3503549,-12801741,6446276&srid=3857"},"description":"Gets data objects overlapping bounding box roughly encompassing USA Pacific coast region as defined with SRID 3857 coordinates"}},{"name":"inserted last 1h metric","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":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""},{"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}}?unitSystem=metric&insertedAfter={{timestamp_minus_1h}}&insertedThrough={{timestamp_current}}"},"description":"Gets data objects inserted in past 1 hour and output converted where applicable into metric units"}},{"name":"valid+0h-3h","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_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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_3h}}"},"description":"Gets data objects that are valid any time between current time and 3 hours later"}},{"name":"valid+30m 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_30m}}","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":"geometry","value":"false","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_30m}}&geometry=false"},"description":"Gets data objects that are valid at time 30 minutes after current time and removes the geometry from the output"}}],"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","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 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 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_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}}?limit=5&isValidAt={{timestamp_plus_19h}}"},"description":"Valid (reported) time is outside allowed constraints for AIRMETs"}},{"name":"BAD invalid messageTypes","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":"messageTypes","value":"IRF","description":"Include only Sierra AIRMETs whose messageType is one of these ; Comma-delimited list of one or more of \"IFR\", \"MTN OBSC\", \"SFC WIND\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?messageTypes=IRF"},"description":"Uses value not among specific allowed values for messageType (\"IFR\" misspelled)"}},{"name":"BAD invalid time format","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":"2024-07-17 28:00:00 UTC","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}}?isValidAt=2024-07-17 28:00:00 UTC"},"description":"Uses an impossible time value"}},{"name":"BAD invalid unitSystem","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":"unitSystem","value":"special","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?unitSystem=special"},"description":"Uses unrecognized unitSystem value"}},{"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)","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_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}}?fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_minus_1h}}"},"description":"A \"from\" time must be before an \"until\" 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 Sierra AIRMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any Sierra AIRMETs","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":"-85.3,34.8,-84.7,35.2","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-90,40","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-87,37,12","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-13124567.965,4150299.834,200","description":"<x>,<y>,<radius> (non-4326 SRID)","disabled":true},{"key":"corridor","value":"-104.677,39.865,-93.221,44.884,50","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":"isValidAt","value":"2024-07-17 18:00:00 UTC","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_plus_9h}}","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_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","disabled":true},{"key":"insertedAfter","value":"2025-01-15T18:10: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-01-15T18: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":"messageTypes","value":"IFR","description":"Include only Sierra AIRMETs whose messageType is one of these ; Comma-delimited list of one or more of \"IFR\", \"MTN OBSC\", \"SFC WIND\"","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":"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}}"},"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 Sierra AIRMET response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) (not all fields may have meaningful data):\n\n- `messageType`: Describes the particular type of Sierra AIRMET, like `IFR` or `MTN OBSC`.\n- `messageTxt`: Legacy to when AIRMETs were strictly text, now provides basic descriptive message summarizing AIRMET content details not related to location.\n- `validDateTime`: When the report starts (becomes applicable/valid/active), in UTC.  If could not be determined from report is set as time of ingest.\n- `expirationDateTime`: when the report ends (becomes inapplicable/invalid/inactive), in UTC.\n- `insertedDateTime`: When the report for the AIRMET was ingested, in UTC.  This value is useful chaining requests to get newly available data since a previous request.\n- `topLevel`: Top height for the reported phenomenon.\n- `bottomLevel`: Bottom height for the reported phenomenon.\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| topLevel | feet | meters |\n| bottomLevel | feet | meters |"},{"name":"Tango AIRMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","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_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.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\", \"tangoAirmets\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example Tango AIRMET","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.messageTxt).to.be.a(\"string\");","        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(typeof(feature.properties.severity) == 'string' || feature.properties.severity == null).to.be.true;","        pm.expect(typeof(feature.properties.topLevel) == 'number' || feature.properties.topLevel == null).to.be.true;","        pm.expect(typeof(feature.properties.bottomLevel) == 'number' || feature.properties.bottomLevel == null).to.be.true;","    })","});"]}}],"item":[{"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":"severities","value":"MODERATE,SEVERE","description":"Include only AIRMETs whose severity is one of these ; Comma-delimited list of one or more of \"LIGHT\", \"MODERATE\", \"SEVERE\", \"EXTREME\", \"\" (blank for case with severity not specified)"},{"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}}?severities=MODERATE,SEVERE&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 with severity either MODERATE or SEVERE"}},{"name":"PIT 150nm circle intersection","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":"circle","value":"-80.229519,40.491978,150","description":"<lon>,<lat>,<radius>"},{"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}}?circle=-80.229519,40.491978,150&intersection=true"},"description":"Gets data objects overlapping circle defined with 150nm radius from center at Pittsburgh and limiting geometry of objects to coverage within that area"}},{"name":"SEA-BZN-DEN-PHX 50sm corridor 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":"corridor","value":"-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"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}}?corridor=-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50&distanceUnits=sm&geometry=0"},"description":"Gets data objects overlapping corridor defined with 50sm halfwidth and line connecting Seattle, Bozeman, Denver, and Phoenix, removing geometry from response"}},{"name":"SRID 3857 Pacific coast 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":"-13914936,3503549,-12801741,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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-13914936,3503549,-12801741,6446276&srid=3857"},"description":"Gets data objects overlapping bounding box roughly encompassing USA Pacific coast region as defined with SRID 3857 coordinates"}},{"name":"inserted last 1h metric","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":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""},{"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}}?unitSystem=metric&insertedAfter={{timestamp_minus_1h}}&insertedThrough={{timestamp_current}}"},"description":"Gets data objects inserted in past 1 hour and output converted where applicable into metric units"}},{"name":"valid+0h-3h","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_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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_3h}}"},"description":"Gets data objects that are valid any time between current time and 3 hours later"}},{"name":"valid+30m 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_30m}}","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":"geometry","value":"false","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_30m}}&geometry=false"},"description":"Gets data objects that are valid at time 30 minutes after current time and removes the geometry from the output"}}],"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","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 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 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_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}}?limit=5&isValidAt={{timestamp_plus_19h}}"},"description":"Valid (reported) time is outside allowed constraints for AIRMETs"}},{"name":"BAD invalid severities","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":"severities","value":"SIVERE","description":"Include only AIRMETs whose severity is one of these ; Comma-delimited list of one or more of \"LIGHT\", \"MODERATE\", \"SEVERE\", \"EXTREME\", \"\" (blank for case with severity not specified)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?severities=SIVERE"},"description":"Uses value not among specific allowed values for severity (\"SEVERE\" misspelled)"}},{"name":"BAD invalid time format","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":"2024-07-17 28:00:00 UTC","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}}?isValidAt=2024-07-17 28:00:00 UTC"},"description":"Uses an impossible time value"}},{"name":"BAD invalid unitSystem","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":"unitSystem","value":"special","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?unitSystem=special"},"description":"Uses unrecognized unitSystem value"}},{"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)","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_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}}?fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_minus_1h}}"},"description":"A \"from\" time must be before an \"until\" 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 Tango AIRMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any Tango AIRMETs","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":"-85.3,34.8,-84.7,35.2","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-90,40","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-87,37,12","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-13124567.965,4150299.834,200","description":"<x>,<y>,<radius> (non-4326 SRID)","disabled":true},{"key":"corridor","value":"-104.677,39.865,-93.221,44.884,50","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":"isValidAt","value":"2024-07-17 18:00:00 UTC","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_plus_9h}}","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_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","disabled":true},{"key":"insertedAfter","value":"2025-01-15T18:10: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-01-15T18: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":"severities","value":"SEVERE","description":"Include only AIRMETs whose severity is one of these ; Comma-delimited list of one or more of \"LIGHT\", \"MODERATE\", \"SEVERE\", \"EXTREME\", \"\" (blank for case with severity not specified)","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":"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}}"},"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 Tango AIRMET response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) (not all fields may have meaningful data):\n\n- `severity`: Describes the severity of Tango AIRMET, like `MODERATE`.\n- `messageTxt`: Legacy to when AIRMETs were strictly text, now provides basic descriptive message summarizing AIRMET content details not related to location.\n- `validDateTime`: When the report starts (becomes applicable/valid/active), in UTC.  If could not be determined from report is set as time of ingest.\n- `expirationDateTime`: when the report ends (becomes inapplicable/invalid/inactive), in UTC.\n- `insertedDateTime`: When the report for the AIRMET was ingested, in UTC.  This value is useful chaining requests to get newly available data since a previous request.\n- `topLevel`: Top height for the reported phenomenon.\n- `bottomLevel`: Bottom height for the reported phenomenon.\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| topLevel | feet | meters |\n| bottomLevel | feet | meters |"},{"name":"Zulu AIRMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","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_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.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\", \"zuluAirmets\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example Zulu AIRMET","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.messageTxt).to.be.a(\"string\");","        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(typeof(feature.properties.severity) == 'string' || feature.properties.severity == null).to.be.true;","        pm.expect(typeof(feature.properties.topLevel) == 'number' || feature.properties.topLevel == null).to.be.true;","        pm.expect(typeof(feature.properties.bottomLevel) == 'number' || feature.properties.bottomLevel == null).to.be.true;","    })","});"]}}],"item":[{"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":"severities","value":"MODERATE,SEVERE","description":"Include only AIRMETs whose severity is one of these ; Comma-delimited list of one or more of \"LIGHT\", \"MODERATE\", \"SEVERE\", \"EXTREME\", \"\" (blank for case with severity not specified)"},{"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}}?severities=MODERATE,SEVERE&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 with severity either MODERATE or SEVERE"}},{"name":"PIT 150nm circle intersection","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":"circle","value":"-80.229519,40.491978,150","description":"<lon>,<lat>,<radius>"},{"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}}?circle=-80.229519,40.491978,150&intersection=true"},"description":"Gets data objects overlapping circle defined with 150nm radius from center at Pittsburgh and limiting geometry of objects to coverage within that area"}},{"name":"SEA-BZN-DEN-PHX 50sm corridor 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":"corridor","value":"-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"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}}?corridor=-122.30,47.45,-111.15,-45.78,-104.67,39.86,-112.00,33.44,50&distanceUnits=sm&geometry=0"},"description":"Gets data objects overlapping corridor defined with 50sm halfwidth and line connecting Seattle, Bozeman, Denver, and Phoenix, removing geometry from response"}},{"name":"SRID 3857 Pacific coast 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":"-13914936,3503549,-12801741,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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?bbox=-13914936,3503549,-12801741,6446276&srid=3857"},"description":"Gets data objects overlapping bounding box roughly encompassing USA Pacific coast region as defined with SRID 3857 coordinates"}},{"name":"inserted last 1h metric","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":"unitSystem","value":"metric","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""},{"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}}?unitSystem=metric&insertedAfter={{timestamp_minus_1h}}&insertedThrough={{timestamp_current}}"},"description":"Gets data objects inserted in past 1 hour and output converted where applicable into metric units"}},{"name":"valid+0h-3h","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_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"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?fromDateTime={{timestamp_current}}&untilDateTime={{timestamp_plus_3h}}"},"description":"Gets data objects that are valid any time between current time and 3 hours later"}},{"name":"valid+30m 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_30m}}","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":"geometry","value":"false","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?isValidAt={{timestamp_plus_30m}}&geometry=false"},"description":"Gets data objects that are valid at time 30 minutes after current time and removes the geometry from the output"}}],"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","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 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 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_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}}?limit=5&isValidAt={{timestamp_plus_19h}}"},"description":"Valid (reported) time is outside allowed constraints for AIRMETs"}},{"name":"BAD invalid severities","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":"severities","value":"MODARATE,SEVERE","description":"Include only AIRMETs whose severity is one of these ; Comma-delimited list of one or more of \"LIGHT\", \"MODERATE\", \"SEVERE\", \"EXTREME\", \"\" (blank for case with severity not specified)"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?severities=MODARATE,SEVERE"},"description":"Uses value not among specific allowed values for severity (\"MODERATE\" misspelled)"}},{"name":"BAD invalid time format","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":"2024-07-17 28:00:00 UTC","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}}?isValidAt=2024-07-17 28:00:00 UTC"},"description":"Uses an impossible time value"}},{"name":"BAD invalid unitSystem","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":"unitSystem","value":"special","description":"For unit system of output ; Allowed values are \"default\" (default, typically imperial units but not all) or \"metric\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?unitSystem=special"},"description":"Uses unrecognized unitSystem value"}},{"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)","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_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}}?fromDateTime={{timestamp_plus_1h}}&untilDateTime={{timestamp_minus_1h}}"},"description":"A \"from\" time must be before an \"until\" 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 Zulu AIRMETs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any Zulu AIRMETs","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":"-85.3,34.8,-84.7,35.2","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-90,30,-80,30,-80,40,-90,40","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-87,37,12","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"circle","value":"-13124567.965,4150299.834,200","description":"<x>,<y>,<radius> (non-4326 SRID)","disabled":true},{"key":"corridor","value":"-104.677,39.865,-93.221,44.884,50","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":"isValidAt","value":"2024-07-17 18:00:00 UTC","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_plus_9h}}","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_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","disabled":true},{"key":"insertedAfter","value":"2025-01-15T18:10: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-01-15T18: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":"severities","value":"MODERATE,SEVERE","description":"Include only AIRMETs whose severity is one of these ; Comma-delimited list of one or more of \"LIGHT\", \"MODERATE\", \"SEVERE\", \"EXTREME\", \"\" (blank for case with severity not specified)","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":"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}}"},"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 Zulu AIRMET response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) (not all fields may have meaningful data):\n\n- `severity`: Describes the severity of Zulu AIRMET, like `MODERATE`.\n- `messageTxt`: Legacy to when AIRMETs were strictly text, now provides basic descriptive message summarizing AIRMET content details not related to location.\n- `validDateTime`: When the report starts (becomes applicable/valid/active), in UTC.  If could not be determined from report is set as time of ingest.\n- `expirationDateTime`: when the report ends (becomes inapplicable/invalid/inactive), in UTC.\n- `insertedDateTime`: When the report for the AIRMET was ingested, in UTC.  This value is useful chaining requests to get newly available data since a previous request.\n- `topLevel`: Top height for the reported phenomenon.\n- `bottomLevel`: Bottom height for the reported phenomenon.\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| topLevel | feet | meters |\n| bottomLevel | feet | meters |"}]}