{"info":{"name":"DTN Aviation API METAR collection","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json","description":"Meteorological Aerodrome Report ([METAR](https://en.wikipedia.org/wiki/METAR)) data describe current weather conditions at airfields.\n\nThis METAR collection includes requests categorization in:\n- Authorization\n- health-check\n- METARs\n    - Example METAR: should all succeed though perhaps not provide data\n    - Invalid requests: should all fail because of some problem in request parameters\n    - Sandbox METAR: 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":"METARs","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["var moment = require('moment');","pm.environment.set('timestamp_minus_4h', moment().subtract(4,'hours'))","pm.environment.set('timestamp_minus_3h', moment().subtract(3,'hours'))","pm.environment.set('timestamp_minus_2h', moment().subtract(2,'hours'))","pm.environment.set('timestamp_minus_1h', moment().subtract(1,'hour'))","pm.environment.set('timestamp_minus_10m', moment().subtract(10,'minutes'))","pm.environment.set('timestamp_minus_5m', moment().subtract(5,'minutes'))","pm.environment.set('timestamp_minus_2m', moment().subtract(2,'minutes'))","pm.environment.set('timestamp_minus_1m', moment().subtract(1,'minute'))","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.collectionVariables.set(\"endpoint\", \"metars\");"]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"Example METAR","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":["var jsonData = pm.response.json()","","if (pm.response.code == 400) {","    jsonData.errors.forEach(function(error){","        console.log(`parameter '${error.parameter}' value '${error.value}' error: ${error.message}`)","    })","}","","pm.test(\"Status test\", function () {","    pm.response.to.have.status(200);","});","","pm.test(\"JSON expectations\", function () {","    var jsonData = pm.response.json();","    pm.expect(jsonData.type).to.eql(\"FeatureCollection\");","    pm.expect(jsonData.features).to.be.an(\"array\");","});","","pm.test(\"Feature evaluation\", function () {","    jsonData.features.forEach(function(feature){","        pm.expect(feature.type).to.eql(\"Feature\");","        pm.expect(feature.geometry.type).to.eql(\"Point\");","        pm.expect(feature.properties.ogcFeatureId).to.be.a(\"number\");","        pm.expect(feature.properties.stationId).to.be.a(\"string\");","        pm.expect(typeof(feature.properties.stationName) == 'string' || feature.properties.stationName == null).to.be.true;","        pm.expect(typeof(feature.properties.stationPlace) == 'string' || feature.properties.stationPlace == null).to.be.true;","        pm.expect(feature.properties.rawTxt).to.be.a(\"string\");","        pm.expect(feature.properties.flightCategory).to.be.oneOf([\"UNKNOWN\",\"VFR\",\"MVFR\",\"IFR\",\"LIFR\"]);","        pm.expect(feature.properties.flightCode).to.be.oneOf([0,1,2,3,4]);","        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.windSpeed) == 'number' || feature.properties.windSpeed == null).to.be.true;","        pm.expect(typeof(feature.properties.windGust) == 'number' || feature.properties.windGust == null).to.be.true;","        pm.expect(typeof(feature.properties.windDirection) == 'number' || feature.properties.windDirection == null).to.be.true;","        pm.expect(typeof(feature.properties.visibility) == 'number' || feature.properties.visibility == null).to.be.true;","        pm.expect(typeof(feature.properties.temperature) == 'number' || feature.properties.temperature == null).to.be.true;","        pm.expect(typeof(feature.properties.dewpoint) == 'number' || feature.properties.dewpoint == null).to.be.true;","        pm.expect(typeof(feature.properties.humidity) == 'number' || feature.properties.humidity == null).to.be.true;","        pm.expect(typeof(feature.properties.altimeter) == 'number' || feature.properties.altimeter == null).to.be.true;","        pm.expect(typeof(feature.properties.ceilingLow) == 'number' || feature.properties.ceilingLow == null).to.be.true;","        pm.expect(typeof(feature.properties.ceilingMid) == 'number' || feature.properties.ceilingMid == null).to.be.true;","        pm.expect(typeof(feature.properties.ceilingHigh) == 'number' || feature.properties.ceilingHigh == null).to.be.true;","        pm.expect(typeof(feature.properties.cloudLayer1) == 'string' || feature.properties.cloudLayer1 == null).to.be.true;","        pm.expect(typeof(feature.properties.cloudLayer2) == 'string' || feature.properties.cloudLayer2 == null).to.be.true;","        pm.expect(typeof(feature.properties.cloudLayer3) == 'string' || feature.properties.cloudLayer3 == null).to.be.true;","        pm.expect(typeof(feature.properties.cloudLayer4) == 'string' || feature.properties.cloudLayer4 == null).to.be.true;","        pm.expect(typeof(feature.properties.cloudLayer5) == 'string' || feature.properties.cloudLayer5 == null).to.be.true;","        pm.expect(typeof(feature.properties.cloudLayer6) == 'string' || feature.properties.cloudLayer6 == null).to.be.true;","        pm.expect(typeof(feature.properties.wx1) == 'string' || feature.properties.wx1 == null).to.be.true;","        pm.expect(typeof(feature.properties.wx2) == 'string' || feature.properties.wx2 == null).to.be.true;","        pm.expect(typeof(feature.properties.wx3) == 'string' || feature.properties.wx3 == null).to.be.true;","        pm.expect(typeof(feature.properties.wx4) == 'string' || feature.properties.wx4 == null).to.be.true;","        pm.expect(typeof(feature.properties.wmoCode1) == 'string' || feature.properties.wmoCode1 == null).to.be.true;","        pm.expect(typeof(feature.properties.wmoCode2) == 'string' || feature.properties.wmoCode2 == null).to.be.true;","        pm.expect(typeof(feature.properties.wmoCode3) == 'string' || feature.properties.wmoCode3 == null).to.be.true;","        pm.expect(typeof(feature.properties.wmoCode4) == 'string' || feature.properties.wmoCode4 == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1Runway) == 'string' || feature.properties.rvr1Runway == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1Visibility) == 'number' || feature.properties.rvr1Visibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1VisibilityBeyondBound) == 'string' || feature.properties.rvr1VisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1VisibilityTendency) == 'string' || feature.properties.rvr1VisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1MaxVisibility) == 'number' || feature.properties.rvr1MaxVisibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1MaxVisibilityBeyondBound) == 'string' || feature.properties.rvr1MaxVisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr1MaxVisibilityTendency) == 'string' || feature.properties.rvr1MaxVisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2Runway) == 'string' || feature.properties.rvr2Runway == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2Visibility) == 'number' || feature.properties.rvr2Visibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2VisibilityBeyondBound) == 'string' || feature.properties.rvr2VisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2VisibilityTendency) == 'string' || feature.properties.rvr2VisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2MaxVisibility) == 'number' || feature.properties.rvr2MaxVisibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2MaxVisibilityBeyondBound) == 'string' || feature.properties.rvr2MaxVisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr2MaxVisibilityTendency) == 'string' || feature.properties.rvr2MaxVisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3Runway) == 'string' || feature.properties.rvr3Runway == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3Visibility) == 'number' || feature.properties.rvr3Visibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3VisibilityBeyondBound) == 'string' || feature.properties.rvr3VisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3VisibilityTendency) == 'string' || feature.properties.rvr3VisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3MaxVisibility) == 'number' || feature.properties.rvr3MaxVisibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3MaxVisibilityBeyondBound) == 'string' || feature.properties.rvr3MaxVisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr3MaxVisibilityTendency) == 'string' || feature.properties.rvr3MaxVisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4Runway) == 'string' || feature.properties.rvr4Runway == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4Visibility) == 'number' || feature.properties.rvr4Visibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4VisibilityBeyondBound) == 'string' || feature.properties.rvr4VisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4VisibilityTendency) == 'string' || feature.properties.rvr4VisibilityTendency == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4MaxVisibility) == 'number' || feature.properties.rvr4MaxVisibility == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4MaxVisibilityBeyondBound) == 'string' || feature.properties.rvr4MaxVisibilityBeyondBound == null).to.be.true;","        pm.expect(typeof(feature.properties.rvr4MaxVisibilityTendency) == 'string' || feature.properties.rvr4MaxVisibilityTendency == null).to.be.true;","    })","});"]}}],"item":[{"name":"wWA bbox 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":"bbox","value":"-124,46.5,-122,48.5","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?unitSystem=metric&bbox=-124,46.5,-122,48.5"},"description":"Gets data objects within bounding box encompassing western Washington and output converted where applicable into metric units"}},{"name":"Great Lakes polygon MVFR,IFR,LIFR","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":"-92.8,46.6,-87.3,41.4,-81.5,41.2,-75.1,44.0,-82.9,47,-87.6,49.5","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>"},{"key":"flightCategories","value":"MVFR,IFR,LIFR","description":"Include only objects whose flightCategory is one of these ; Comma-delimited list of one or more of \"VFR\", \"MVFR\", \"IFR\", \"LIFR\", \"UNKNOWN\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?polygon=-92.8,46.6,-87.3,41.4,-81.5,41.2,-75.1,44.0,-82.9,47,-87.6,49.5&flightCategories=MVFR,IFR,LIFR"},"description":"Gets data objects within polygon encompassing Great Lakes region with flightCategory value MVFR, IFR, or LIFR"}},{"name":"LGA-HVA-BOS 25nm corridor 2/3/4 codes","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":{"host":["{{api_url}}"],"path":["{{version}}","{{endpoint}}"],"query":[{"key":"limit","value":"5","description":"Maximum number of objects to return (default=1000)","disabled":true},{"key":"offset","value":"","description":"Where to start in paginated response set (default=0, i.e., first object)","disabled":true},{"key":"corridor","value":"-73.875,40.781,-73.882,41.628,-71.005,42.365,25","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"},{"key":"flightCodes","value":"2,3,4","description":"Include only objects whose flightCode is one of these ; Comma-delimited list of one or more of \"1\", \"2\", \"3\", \"4\", \"0\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?corridor=-73.875,40.781,-73.882,41.628,-71.005,42.365,25&flightCodes=2,3,4"},"description":"Gets data objects within corridor defined with 25nm halfwidth and line connecting New York, Hartford, and Boston with flightCode value 2, 3, or 4"}},{"name":"SRID 3857 EVV 100sm 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":"-9743201.03,4585368.62,100","description":"<x>,<y>,<radius> (non-4326 SRID)"},{"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":"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}}?circle=-9743201.03,4585368.62,100&distanceUnits=sm&srid=3857"},"description":"Gets data objects within circle defined with 100sm radius from center at Evansville defined with SRID 3857 coordinates"}},{"name":"SoCal stationIds 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":"stationIds","value":"KLAX,KLGB,KBUR,KSNA,KONT,KSMO","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":"geometry","value":"0","description":"Include geometry in response (boolean, default=true) ; Make falsy to blank out geometry in response"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?stationIds=KLAX,KLGB,KBUR,KSNA,KONT,KSMO&geometry=0"},"description":"Gets data objects for stations from specified list for southern California and removing geometry from response"}},{"name":"inserted last 5min","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_minus_5m}}","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_minus_5m}}&insertedThrough={{timestamp_current}}"},"description":"Gets data objects inserted in past 5 minutes"}}],"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 flightCategories","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":"flightCategories","value":"MVFR,IFR,ILFR","description":"Include only objects whose flightCategory is one of these ; Comma-delimited list of one or more of \"VFR\", \"MVFR\", \"IFR\", \"LIFR\", \"UNKNOWN\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?stationIds=KCHS&flightCategories=MVFR,IFR,ILFR"},"description":"Uses value not among specific allowed values for flightCategory (\"LIFR\" misspelled)"}},{"name":"BAD invalid flightCodes","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":"flightCodes","value":"3,4,5","description":"Include only objects whose flightCode is one of these ; Comma-delimited list of one or more of \"1\", \"2\", \"3\", \"4\", \"0\""}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?stationIds=KCHS&flightCodes=3,4,5"},"description":"Uses value not among specific allowed values for flightCode (\"5\" not valid)"}},{"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 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"}},{"name":"BAD corridor halfwidth exceeds constraint","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":"corridor","value":"-120,30,-80,45,550","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>,<halfwidth>"}],"raw":"{{api_url}}/{{version}}/{{endpoint}}?limit=5&corridor=-120,30,-80,45,550"},"description":"Corridor halfwidth is (assumedly) too large"}}],"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 METAR","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"item":[{"name":"any METAR","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":"-124,46.5,-122,48.5","description":"<min_lon>,<min_lat>,<max_lon>,<max_lat>","disabled":true},{"key":"polygon","value":"-92.8,46.6,-87.3,41.4,-81.5,41.2,-75.1,44.0,-82.9,47,-87.6,49.5","description":"<lon_1>,<lat_1>,...,<lon_n>,<lat_n>","disabled":true},{"key":"circle","value":"-168,29,61","description":"<lon>,<lat>,<radius>","disabled":true},{"key":"corridor","value":"-73.875,40.781,-73.882,41.628,-71.005,42.365,10","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":"m","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":"{{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","disabled":true},{"key":"fromDateTime","value":"2025-02-18 16:45: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-02-18 17:45: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_5m}}","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":"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","disabled":true},{"key":"flightCodes","value":"4","description":"Include only objects whose flightCode is one of these ; Comma-delimited list of one or more of \"1\", \"2\", \"3\", \"4\", \"0\"","disabled":true},{"key":"flightCategories","value":"MVFR,IFR,LIFR","description":"Include only objects whose flightCategory is one of these ; Comma-delimited list of one or more of \"VFR\", \"MVFR\", \"IFR\", \"LIFR\", \"UNKNOWN\"","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}],"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 METAR response [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) (not all fields may have meaningful data):\n\n- `ogcFeatureId`: Opaque reference identifier related to ingest and not part of data.\n- `flightCategory`: Flight category corresponding to the visibility conditions, like `VFR` or `LIFR`.  Can filter request by possible types.\n- `flightCode`: Numerical value corresponding to flightCategory.  Can filter request by possible types.\n- `ceilingLow`*: From original data, tells height of a lowest reported ceiling.  Cloud layer must be `BKN`, `OVC`, or `VV` to qualify as ceiling.\n- `ceilingMid`*: From original data, tells height of a reported ceiling above lowest.  Cloud layer must be `BKN`, `OVC`, or `VV` to qualify as ceiling.\n- `ceilingHigh`*: From original data, tells height of a third reported ceiling.  Cloud layer must be `BKN`, `OVC`, or `VV` to qualify as ceiling.\n- `cloudLayer#`*: Descriptor for cloud layer, with 3-letter indicator of layer oktas and 3-digit indicator of height in hundreds of feet 3-digit indicator of height in hundreds of feet, like `BKN026` or `SCT140`.  May be up to six, indexed by `#`.\n- `visibility`: Numerical value to indicate visibility distance.\n- `stationId`: Standard ICAO identifier of location for report.\n- `stationName`: Name pertaining to stationId.\n- `stationPlace`: Descriptive information pertaining to stationId.\n- `rawTxt`: The original text content for the report.\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`: Arbitrarily set as two hours after `validDateTime` to provide a time for report end (becomes inapplicable/invalid/inactive), in UTC.  In practice there should be data for a station at least every hour such that new report implicitly \"expires\" previous report before this time is reached.\n- `insertedDateTime`: When the report for the METAR was saved in our database, in UTC.  This value is useful chaining requests to get newly available data since a previous request.\n- `temperature`: Numerical value for air temperature at station.\n- `dewpoint`: Numerical value for dewpoint temperature at station.\n- `humidity`: Numerical value for relative humidity percent at station.\n- `altimeter`: Numerical value for altimeter setting reported at station.\n- `windSpeed`: Numerical value for wind speed at station.\n- `windGust`: Numerical value for wind gust at station.\n- `windDirection`: Numerical value for bearing of wind direction at station.  `VRB` wind direction denoted by `-999` value.\n- `wx#`*: Weather code from original report.  Can include individual values such as `-RA`, `BR`, `VC`, `TS`.  May be up to four, indexed by `#`.  Combined codes are separated into individual two-letter objects which may also have leading `+` or `-` intensity indicator.\n- `wmoCode#`*: Weather indicator of WMO table 4678 format from original report.  Effectively these are the unsplit versions of data in `wx#` fields.  E.g., object with `wx1=VC`, `wx2=TS`, and `wx3=RA` from `rawTxt` containing `...VCTS RA...` will have `wmoCode1=VCTS` and `wmoCode2=RA`.  May be up to four, indexed by `#`.\n- `rvr#Runway`*: Runway label for Runway Visual Range (RVR) report.  May be up to four of these, indexed by `#`.  Associated values will share same index number.\n- `rvr#Visibility`*: Numerical value for visibility value for RVR report.  May be up to four of these, indexed by `#`.  Associated values will share same index number.\n- `rvr#VisibilityBeyondBound`*: Indicator that RVR visibility is less than (`M`, think `minus`) or greater than (`P`, think `plus`) the given numerical value.  `M` is used if less than lowest reportable value for runway, and `P` is used if greater than highest reportable value.  May be up to four of these, indexed by `#`.  Associated values will share same index number.\n- `rvr#VisibilityTendency`*: Indicative that RVR visibility is improving (`U`, think value is trending `up`), deteriorating (`D`, think value is trending `down`), or not changing (`N`).  May be up to four of these, indexed by `#`.  Associated values will share same index number.\n- `rvr#MaxVisibility`*: Numerical value for higher visibility value for RVR report than provides range between two numbers.  May be up to four of these, indexed by `#`.  Associated values will share same index number.\n- `rvr#MaxVisibilityBeyondBound`*: Indicator that RVR maximum visibility is less than (`M`, think `minus`) or greater than (`P`, think `plus`) the given numerical value.  `M` is used if less than lowest reportable value for runway, and `P` is used if greater than highest reportable value.  May be up to four of these, indexed by `#`.  Associated values will share same index number.\n- `rvr#MaxVisibilityTendency`*: Indicative that RVR maximum visibility is improving (`U`, think value is trending `up`), deteriorating (`D`, think value is trending `down`), or not changing (`N`).  May be up to four of these, indexed by `#`.  Associated values will share same index number.\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\\# indicates an index number between 1 and 4 (except 1 and 6 for `cloudLayer`) as it is possible to have up to  fields with the associated basis.  E.g., `wx1`, `wx2`, and `wx3` (and other fields) may be present.\n\n\\* indicates a field that is present only if it has a non-null value.  If such a field provides no data, it is not included among the properties of an object in the response.\n\n#### Field units depending on specified `unitSystem`:\n\n| property | default | metric |\n| -------- | ------- | ------ |\n| topLevel | feet | meters |\n| bottomLevel | feet | meters |\n| ceilingLow | feet | meters |\n| ceilingMid | feet | meters |\n| ceilingHigh | feet | meters |\n| visibility | miles | meters |\n| temperature | degC | degC |\n| dewpoint | degC | degC |\n| altimeter | inHg | hPa (same as mbar) |\n| windSpeed | knots | meters per second |\n| windGust | knots | meters per second |\n| rvr#Visibility | feet | meters |\n| rvr#MaxVisibility | feet | meters |\n\n#### Flight category and code definitions\n\n| category | code | visibility | ceiling |\n| -------- | ---- | ---------- | ------- |\n| VFR (Visual Flight Rules) | 1 | > 5 mi | and > 3000 ft AGL |\n| MVFR (Marginal Visual Flight Rules) | 2 | 3-5 mi | and/or between 1000 and 3000 ft AGL |\n| IFR (Instrument Flight Rules) | 3 | 1-3 mi | and/or between 500 and 1000 ft AGL |\n| LIFR (Low Instrument Flight Rules) | 4 | < 1 mi | and/or < 500 ft AGL |"}]}