@apifreaks/openapi-specs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/index.cjs +44663 -0
- package/dist/index.d.cts +30 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +44631 -0
- package/package.json +81 -0
- package/specs/commodity/commodity-fluctuation.json +301 -0
- package/specs/commodity/commodity-prices.json +317 -0
- package/specs/commodity/commodity-symbols.json +215 -0
- package/specs/commodity/commodity-time-series.json +329 -0
- package/specs/commodity/historical-commodity-prices.json +273 -0
- package/specs/currency/currency-converter.json +261 -0
- package/specs/currency/currency-fluctuation.json +282 -0
- package/specs/currency/currency-historical-data-limit.json +158 -0
- package/specs/currency/currency-rate.json +229 -0
- package/specs/currency/currency-supported.json +234 -0
- package/specs/currency/currency-symbols.json +161 -0
- package/specs/currency/currency-time-series.json +325 -0
- package/specs/currency/geolocalized-currency-conversion.json +287 -0
- package/specs/currency/historical-currency-converter.json +269 -0
- package/specs/currency/historical-currency-rate.json +246 -0
- package/specs/dns/bulk-dns-lookup.json +624 -0
- package/specs/dns/dns-history-lookup.json +579 -0
- package/specs/dns/dns-lookup.json +466 -0
- package/specs/dns/reverse-dns-lookup.json +414 -0
- package/specs/domain/bulk-domain-checker.json +284 -0
- package/specs/domain/domain-search-with-suggestions.json +280 -0
- package/specs/domain/domain-search.json +206 -0
- package/specs/domain/subdomain-lookup.json +343 -0
- package/specs/email-validation/bulk-email-validation.json +534 -0
- package/specs/email-validation/email-checker.json +586 -0
- package/specs/financial/bulk-vat-rates-country.json +341 -0
- package/specs/financial/financial-apis-supported-countries.json +204 -0
- package/specs/financial/iban-validation.json +328 -0
- package/specs/financial/swift-code-finder.json +192 -0
- package/specs/financial/swift-code-lookup.json +220 -0
- package/specs/financial/vat-number-validation.json +283 -0
- package/specs/financial/vat-rates-by-ip.json +275 -0
- package/specs/financial/vat-rates-country.json +288 -0
- package/specs/general/usage-credits.json +218 -0
- package/specs/geocoding/forward-geocoding.json +402 -0
- package/specs/geocoding/reverse-geocoding.json +326 -0
- package/specs/geodb/administrative-units-details.json +250 -0
- package/specs/geodb/administrative-units-levels.json +198 -0
- package/specs/geodb/administrative-units.json +237 -0
- package/specs/geodb/cities.json +288 -0
- package/specs/geodb/countries-details.json +274 -0
- package/specs/geodb/countries.json +276 -0
- package/specs/geodb/flags-supported.json +166 -0
- package/specs/geodb/flags.json +227 -0
- package/specs/geodb/regions.json +109 -0
- package/specs/geodb/subregions.json +217 -0
- package/specs/ip-intelligence/bulk-ip-lookup.json +1162 -0
- package/specs/ip-intelligence/bulk-ip-threat-intelligence.json +417 -0
- package/specs/ip-intelligence/ip-locator.json +941 -0
- package/specs/ip-intelligence/ip-threat-intelligence.json +316 -0
- package/specs/other/astronomy-data.json +803 -0
- package/specs/pdf/delete-pdf-page.json +286 -0
- package/specs/pdf/linearize-pdf.json +277 -0
- package/specs/pdf/merge-pdf.json +285 -0
- package/specs/pdf/pdf-compress.json +304 -0
- package/specs/pdf/pdf-decrypt.json +297 -0
- package/specs/pdf/pdf-encrypt.json +314 -0
- package/specs/pdf/pdf-extract-pages.json +295 -0
- package/specs/pdf/pdf-file-status.json +208 -0
- package/specs/pdf/pdf-file.json +190 -0
- package/specs/pdf/pdf-files.json +126 -0
- package/specs/pdf/pdf-resource-download.json +168 -0
- package/specs/pdf/pdf-resource-upload-binary.json +218 -0
- package/specs/pdf/pdf-resource-upload.json +248 -0
- package/specs/pdf/pdf-restrict.json +343 -0
- package/specs/pdf/pdf-split-pages.json +281 -0
- package/specs/pdf/pdf-task-status.json +252 -0
- package/specs/pdf/pdf-to-image.json +1219 -0
- package/specs/pdf/pdf-unrestrict.json +324 -0
- package/specs/pdf/rotate-pdf-pages.json +305 -0
- package/specs/phone-validation/bulk-phone-number-validation.json +518 -0
- package/specs/phone-validation/phone-number-validation.json +456 -0
- package/specs/scraper/web-scraper.json +674 -0
- package/specs/screenshot/bulk-screenshot.json +949 -0
- package/specs/screenshot/website-screenshot.json +1147 -0
- package/specs/ssl/ssl-certificate-chain-lookup.json +756 -0
- package/specs/ssl/ssl-certificate-lookup.json +634 -0
- package/specs/timezone/timezone-converter.json +362 -0
- package/specs/timezone/timezone-lookup.json +910 -0
- package/specs/user-agent/bulk-user-agent-parser.json +441 -0
- package/specs/user-agent/user-agent-parser.json +346 -0
- package/specs/weather/air-quality.json +779 -0
- package/specs/weather/bulk-live-weather.json +834 -0
- package/specs/weather/flood-forecast.json +693 -0
- package/specs/weather/historical-weather.json +1019 -0
- package/specs/weather/live-weather.json +789 -0
- package/specs/weather/marine-weather.json +940 -0
- package/specs/weather/time-series-weather.json +1056 -0
- package/specs/weather/weather-forecast.json +1202 -0
- package/specs/whois/asn-lookup.json +729 -0
- package/specs/whois/bulk-whois-lookup.json +698 -0
- package/specs/whois/domain-whois-history-lookup.json +500 -0
- package/specs/whois/reverse-whois.json +625 -0
- package/specs/whois/whois-domain-lookup.json +533 -0
- package/specs/whois/whois-ip-lookup.json +1110 -0
- package/specs/zip-code/bulk-zip-code-lookup.json +318 -0
- package/specs/zip-code/zip-code-api.json +299 -0
- package/specs/zip-code/zip-code-distance-match.json +311 -0
- package/specs/zip-code/zip-code-distance.json +307 -0
- package/specs/zip-code/zip-codes-by-city.json +279 -0
- package/specs/zip-code/zip-codes-by-region.json +278 -0
- package/specs/zip-code/zip-codes-radius-search.json +349 -0
|
@@ -0,0 +1,779 @@
|
|
|
1
|
+
{
|
|
2
|
+
"openapi": "3.1.1",
|
|
3
|
+
"info": {
|
|
4
|
+
"title": "Air Quality API - Real-Time AQI & Pollution Monitoring",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"description": "Monitor and predict air quality conditions using European (0-100+) and US (0-500) AQI standards. Returns current air quality readings and hourly forecast data up to 5 days ahead depending on the date range provided. Tracks pollutant concentrations including PM10, PM2.5, carbon monoxide, nitrogen dioxide, sulphur dioxide, ozone, and dust particles, plus UV index and aerosol optical depth measurements. Accepts location by city name, GPS coordinates, or IP address. Start/end dates are optional; without them only current conditions are returned.",
|
|
7
|
+
"contact": {
|
|
8
|
+
"name": "APIFreaks Support",
|
|
9
|
+
"url": "https://apifreaks.com/contact",
|
|
10
|
+
"email": "support@apifreaks.com"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"servers": [
|
|
14
|
+
{
|
|
15
|
+
"url": "https://api.apifreaks.com/v1.0/weather",
|
|
16
|
+
"description": "Air Quality API Server"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"paths": {
|
|
20
|
+
"/air-quality": {
|
|
21
|
+
"get": {
|
|
22
|
+
"tags": ["Weather APIs"],
|
|
23
|
+
"summary": "Air pollution monitoring and quality forecasts",
|
|
24
|
+
"description": "Monitor and predict air quality conditions using European and US AQI standards. Track pollutant concentrations including PM10, PM2.5, carbon monoxide, nitrogen dioxide, sulfur dioxide, ozone, and dust particles. Get current readings plus hourly forecasts up to 5 days ahead, complete with UV index and aerosol measurements for comprehensive air quality assessment.",
|
|
25
|
+
"operationId": "getAirQuality",
|
|
26
|
+
"parameters": [
|
|
27
|
+
{
|
|
28
|
+
"name": "format",
|
|
29
|
+
"in": "query",
|
|
30
|
+
"required": false,
|
|
31
|
+
"description": "Format of the response. Possible values: json.",
|
|
32
|
+
"schema": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"enum": ["json"],
|
|
35
|
+
"default": "json"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "startDate",
|
|
40
|
+
"in": "query",
|
|
41
|
+
"schema": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"format": "date"
|
|
44
|
+
},
|
|
45
|
+
"description": "Starting date for AQI forecast data in YYYY-MM-DD format. Must be supplied together with endDate — passing only one of the two returns a 400 error. Both dates must fall within a rolling window from today through 5 days ahead.",
|
|
46
|
+
"required": false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "endDate",
|
|
50
|
+
"in": "query",
|
|
51
|
+
"schema": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"format": "date"
|
|
54
|
+
},
|
|
55
|
+
"description": "End date for AQI forecast data in YYYY-MM-DD format. Must be supplied together with startDate — passing only one of the two returns a 400 error, and endDate cannot be earlier than startDate. Both dates must fall within a rolling window from today through 5 days ahead.",
|
|
56
|
+
"required": false
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "location",
|
|
60
|
+
"in": "query",
|
|
61
|
+
"schema": {
|
|
62
|
+
"type": "string"
|
|
63
|
+
},
|
|
64
|
+
"description": "City name, place name, or full address.",
|
|
65
|
+
"required": false
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "lat",
|
|
69
|
+
"in": "query",
|
|
70
|
+
"schema": {
|
|
71
|
+
"type": "number"
|
|
72
|
+
},
|
|
73
|
+
"description": "Latitude of the location. Must be supplied together with long — passing only one of the two returns a 400 error.",
|
|
74
|
+
"required": false
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "long",
|
|
78
|
+
"in": "query",
|
|
79
|
+
"schema": {
|
|
80
|
+
"type": "number"
|
|
81
|
+
},
|
|
82
|
+
"description": "Longitude of the location. Must be supplied together with lat — passing only one of the two returns a 400 error.",
|
|
83
|
+
"required": false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "ip",
|
|
87
|
+
"in": "query",
|
|
88
|
+
"schema": {
|
|
89
|
+
"type": "string"
|
|
90
|
+
},
|
|
91
|
+
"description": "IP(v4 or v6) address for location inference.",
|
|
92
|
+
"required": false
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "timezone",
|
|
96
|
+
"in": "query",
|
|
97
|
+
"schema": {
|
|
98
|
+
"type": "string"
|
|
99
|
+
},
|
|
100
|
+
"description": "Timezone for the results.",
|
|
101
|
+
"required": false
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"responses": {
|
|
105
|
+
"200": {
|
|
106
|
+
"description": "Successful response",
|
|
107
|
+
"content": {
|
|
108
|
+
"application/json": {
|
|
109
|
+
"schema": {
|
|
110
|
+
"$ref": "#/components/schemas/AirQualityResponse"
|
|
111
|
+
},
|
|
112
|
+
"examples": {
|
|
113
|
+
"typicalSuccess": {
|
|
114
|
+
"summary": "Current AQI by IP (auto-detected)",
|
|
115
|
+
"value": {
|
|
116
|
+
"location": {
|
|
117
|
+
"continent_code": "AS",
|
|
118
|
+
"continent_name": "Asia",
|
|
119
|
+
"country_code2": "PK",
|
|
120
|
+
"country_code3": "PAK",
|
|
121
|
+
"country_name": "Pakistan",
|
|
122
|
+
"country_name_official": "Islamic Republic of Pakistan",
|
|
123
|
+
"is_eu": false,
|
|
124
|
+
"state_prov": "Punjab",
|
|
125
|
+
"state_code": "PK-PB",
|
|
126
|
+
"district": "Lahore",
|
|
127
|
+
"city": "Lahore",
|
|
128
|
+
"zipcode": "54000",
|
|
129
|
+
"latitude": "31.52037",
|
|
130
|
+
"longitude": "74.35875",
|
|
131
|
+
"locality": "Gulberg",
|
|
132
|
+
"elevation": "",
|
|
133
|
+
"timezone": "Asia/Karachi",
|
|
134
|
+
"timezone_abbreviation": "GMT+5"
|
|
135
|
+
},
|
|
136
|
+
"current": {
|
|
137
|
+
"timestamp": "2026-07-24T16:00",
|
|
138
|
+
"european_aqi": 67,
|
|
139
|
+
"us_aqi": 99,
|
|
140
|
+
"pm10": 27.4,
|
|
141
|
+
"pm2_5": 27.2,
|
|
142
|
+
"carbon_monoxide": 493,
|
|
143
|
+
"nitrogen_dioxide": 6.2,
|
|
144
|
+
"sulphur_dioxide": 8.6,
|
|
145
|
+
"ozone": 169,
|
|
146
|
+
"dust": 0,
|
|
147
|
+
"uv_index": 1.95,
|
|
148
|
+
"aerosol_optical_depth": 0.71,
|
|
149
|
+
"uv_index_clear_sky": 2.25
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"forecastSuccess": {
|
|
154
|
+
"summary": "Forecast AQI by location and date range",
|
|
155
|
+
"value": {
|
|
156
|
+
"location": {
|
|
157
|
+
"location_string": "Paris,France",
|
|
158
|
+
"country_name": "France",
|
|
159
|
+
"state_prov": "Ile-de-France",
|
|
160
|
+
"city": "Paris",
|
|
161
|
+
"locality": "",
|
|
162
|
+
"latitude": "48.85889",
|
|
163
|
+
"longitude": "2.32004",
|
|
164
|
+
"elevation": "0",
|
|
165
|
+
"timezone": "Europe/Paris",
|
|
166
|
+
"timezone_abbreviation": "GMT+2"
|
|
167
|
+
},
|
|
168
|
+
"forecast": {
|
|
169
|
+
"2026-07-25": {
|
|
170
|
+
"hourly": [
|
|
171
|
+
{
|
|
172
|
+
"timestamp": "2026-07-25T00:00",
|
|
173
|
+
"pm10": 14.8,
|
|
174
|
+
"carbon_monoxide": 200,
|
|
175
|
+
"pm2_5": 8.5,
|
|
176
|
+
"carbon_dioxide": 446,
|
|
177
|
+
"nitrogen_dioxide": 17.1,
|
|
178
|
+
"sulphur_dioxide": 1,
|
|
179
|
+
"ozone": 63,
|
|
180
|
+
"dust": 0,
|
|
181
|
+
"uv_index": 0,
|
|
182
|
+
"aerosol_optical_depth": 0.2,
|
|
183
|
+
"uv_index_clear_sky": 0
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"timestamp": "2026-07-25T01:00",
|
|
187
|
+
"pm10": 16.1,
|
|
188
|
+
"carbon_monoxide": 202,
|
|
189
|
+
"pm2_5": 8.4,
|
|
190
|
+
"carbon_dioxide": 449,
|
|
191
|
+
"nitrogen_dioxide": 15.9,
|
|
192
|
+
"sulphur_dioxide": 0.9,
|
|
193
|
+
"ozone": 60,
|
|
194
|
+
"dust": 0,
|
|
195
|
+
"uv_index": 0,
|
|
196
|
+
"aerosol_optical_depth": 0.2,
|
|
197
|
+
"uv_index_clear_sky": 0
|
|
198
|
+
}
|
|
199
|
+
]
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"400": {
|
|
209
|
+
"description": "Bad Request — Invalid or incomplete parameters",
|
|
210
|
+
"content": {
|
|
211
|
+
"application/json": {
|
|
212
|
+
"schema": {
|
|
213
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
214
|
+
},
|
|
215
|
+
"examples": {
|
|
216
|
+
"InvalidCoordinates": {
|
|
217
|
+
"summary": "Coordinates out of range",
|
|
218
|
+
"value": {
|
|
219
|
+
"timestamp": "2026-07-24T11:34:36.550Z",
|
|
220
|
+
"status": 400,
|
|
221
|
+
"message": "Invalid latitude or longitude values. Latitude must be between -90 and 90, and longitude must be between -180 and 180",
|
|
222
|
+
"error": "invalid-params",
|
|
223
|
+
"path": "/v1.0/weather/air-quality"
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
"InvalidIP": {
|
|
227
|
+
"summary": "Malformed IP address",
|
|
228
|
+
"value": {
|
|
229
|
+
"timestamp": "2026-07-24T11:34:37.632Z",
|
|
230
|
+
"status": 400,
|
|
231
|
+
"message": "Invalid IP address",
|
|
232
|
+
"error": "invalid-params",
|
|
233
|
+
"path": "/v1.0/weather/air-quality"
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"InvalidTimezone": {
|
|
237
|
+
"summary": "Invalid timezone",
|
|
238
|
+
"value": {
|
|
239
|
+
"timestamp": "2026-07-24T11:34:38.657Z",
|
|
240
|
+
"status": 400,
|
|
241
|
+
"message": "Check whether your input value is correct; timezone = NotATimezone",
|
|
242
|
+
"error": "error",
|
|
243
|
+
"path": "/v1.0/weather/air-quality"
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
"MissingPairedParam": {
|
|
247
|
+
"summary": "Only one of a required pair supplied",
|
|
248
|
+
"value": {
|
|
249
|
+
"error": "Invalid Param Exception",
|
|
250
|
+
"message": "please pass correct parameters",
|
|
251
|
+
"path": "/v1.0/weather/air-quality",
|
|
252
|
+
"status": 400,
|
|
253
|
+
"timestamp": "2026-07-24T11:34:56.768Z"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"InvalidDateFormat": {
|
|
257
|
+
"summary": "Date not in YYYY-MM-DD format",
|
|
258
|
+
"value": {
|
|
259
|
+
"timestamp": "2026-07-24T11:35:41.151Z",
|
|
260
|
+
"status": 400,
|
|
261
|
+
"message": "startDate must be in yyyy-mm-dd format",
|
|
262
|
+
"error": "invalid-params",
|
|
263
|
+
"path": "/v1.0/weather/air-quality"
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"InvalidDateOrder": {
|
|
267
|
+
"summary": "endDate before startDate",
|
|
268
|
+
"value": {
|
|
269
|
+
"timestamp": "2026-07-24T11:36:03.105Z",
|
|
270
|
+
"status": 400,
|
|
271
|
+
"message": "startDate must be before or equal to endDate",
|
|
272
|
+
"error": "params-exception-error",
|
|
273
|
+
"path": "/v1.0/weather/air-quality"
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"DateRangeOutOfBounds": {
|
|
277
|
+
"summary": "Date range outside allowed window",
|
|
278
|
+
"value": {
|
|
279
|
+
"timestamp": "2026-07-24T11:34:45.616Z",
|
|
280
|
+
"status": 400,
|
|
281
|
+
"message": "Forecast date range must be within 2026-07-24 to 2026-07-29",
|
|
282
|
+
"error": "params-exception-error",
|
|
283
|
+
"path": "/v1.0/weather/air-quality"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"404": {
|
|
291
|
+
"description": "Not Found — Location could not be resolved",
|
|
292
|
+
"content": {
|
|
293
|
+
"application/json": {
|
|
294
|
+
"schema": {
|
|
295
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
296
|
+
},
|
|
297
|
+
"examples": {
|
|
298
|
+
"LocationNotFound": {
|
|
299
|
+
"summary": "Location not found",
|
|
300
|
+
"value": {
|
|
301
|
+
"timestamp": "2026-07-24T11:34:37.139Z",
|
|
302
|
+
"status": 404,
|
|
303
|
+
"message": "Location not found",
|
|
304
|
+
"error": "error",
|
|
305
|
+
"path": "/v1.0/weather/air-quality"
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
"components": {
|
|
317
|
+
"securitySchemes": {
|
|
318
|
+
"ApiKeyAuthHeader": {
|
|
319
|
+
"type": "apiKey",
|
|
320
|
+
"in": "header",
|
|
321
|
+
"name": "X-apiKey",
|
|
322
|
+
"description": "Pass your API key via the X-apiKey request header."
|
|
323
|
+
},
|
|
324
|
+
"ApiKeyAuthQuery": {
|
|
325
|
+
"type": "apiKey",
|
|
326
|
+
"in": "query",
|
|
327
|
+
"name": "apiKey",
|
|
328
|
+
"description": "Pass your API key via the apiKey query parameter."
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
"schemas": {
|
|
332
|
+
"AirQualityResponse": {
|
|
333
|
+
"type": "object",
|
|
334
|
+
"properties": {
|
|
335
|
+
"location": {
|
|
336
|
+
"$ref": "#/components/schemas/WeatherLocation"
|
|
337
|
+
},
|
|
338
|
+
"current": {
|
|
339
|
+
"$ref": "#/components/schemas/AirQuality",
|
|
340
|
+
"description": "Current air quality data, present when the request omits startDate/endDate."
|
|
341
|
+
},
|
|
342
|
+
"forecast": {
|
|
343
|
+
"$ref": "#/components/schemas/AirQualityForecast",
|
|
344
|
+
"description": "Date-keyed forecast data, present when the request includes startDate/endDate."
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
"required": ["location"],
|
|
348
|
+
"description": "Air quality response containing location data plus either current observations or date-keyed forecast data. current and forecast are mutually exclusive — a single request never returns both."
|
|
349
|
+
},
|
|
350
|
+
"LocationByCoordinates": {
|
|
351
|
+
"type": "object",
|
|
352
|
+
"required": [
|
|
353
|
+
"latitude",
|
|
354
|
+
"longitude",
|
|
355
|
+
"country_name",
|
|
356
|
+
"state_prov",
|
|
357
|
+
"city",
|
|
358
|
+
"timezone",
|
|
359
|
+
"timezone_abbreviation"
|
|
360
|
+
],
|
|
361
|
+
"properties": {
|
|
362
|
+
"latitude": {
|
|
363
|
+
"type": "string",
|
|
364
|
+
"description": "Geographic latitude coordinate in decimal degrees, ranging from -90 (South Pole) to +90 (North Pole). Returned as a string, not a number."
|
|
365
|
+
},
|
|
366
|
+
"longitude": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"description": "Geographic longitude coordinate in decimal degrees, ranging from -180 (West) to +180 (East). Returned as a string, not a number."
|
|
369
|
+
},
|
|
370
|
+
"country_name": {
|
|
371
|
+
"type": "string",
|
|
372
|
+
"description": "Full name of the country corresponding to the provided coordinates."
|
|
373
|
+
},
|
|
374
|
+
"state_prov": {
|
|
375
|
+
"type": "string",
|
|
376
|
+
"description": "State, province, or primary administrative division name for the location."
|
|
377
|
+
},
|
|
378
|
+
"city": {
|
|
379
|
+
"type": "string",
|
|
380
|
+
"description": "City or municipal area name associated with the coordinate location."
|
|
381
|
+
},
|
|
382
|
+
"locality": {
|
|
383
|
+
"type": "string",
|
|
384
|
+
"description": "Specific locality, neighborhood, district, or village name within the broader area."
|
|
385
|
+
},
|
|
386
|
+
"elevation": {
|
|
387
|
+
"type": "string",
|
|
388
|
+
"description": "Height above mean sea level in meters for the specified coordinates. Returned as a string, not a number, and can be an empty string when unavailable."
|
|
389
|
+
},
|
|
390
|
+
"timezone": {
|
|
391
|
+
"type": "string",
|
|
392
|
+
"description": "IANA timezone database identifier for the location (e.g., America/New_York, Europe/London)."
|
|
393
|
+
},
|
|
394
|
+
"timezone_abbreviation": {
|
|
395
|
+
"type": "string",
|
|
396
|
+
"description": "Abbreviated timezone representation based on current offset (e.g., EST, GMT, PST)."
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"description": "Location data when the target is specified by GPS coordinates (lat/long)."
|
|
400
|
+
},
|
|
401
|
+
"LocationByIP": {
|
|
402
|
+
"type": "object",
|
|
403
|
+
"required": [
|
|
404
|
+
"continent_code",
|
|
405
|
+
"continent_name",
|
|
406
|
+
"country_code2",
|
|
407
|
+
"country_code3",
|
|
408
|
+
"country_name",
|
|
409
|
+
"country_name_official",
|
|
410
|
+
"state_prov",
|
|
411
|
+
"city",
|
|
412
|
+
"latitude",
|
|
413
|
+
"longitude",
|
|
414
|
+
"timezone",
|
|
415
|
+
"timezone_abbreviation"
|
|
416
|
+
],
|
|
417
|
+
"properties": {
|
|
418
|
+
"continent_code": {
|
|
419
|
+
"type": "string",
|
|
420
|
+
"description": "Two-letter continent code (e.g., NA for North America, EU for Europe, AS for Asia)."
|
|
421
|
+
},
|
|
422
|
+
"continent_name": {
|
|
423
|
+
"type": "string",
|
|
424
|
+
"description": "Full name of the continent where the IP address is registered."
|
|
425
|
+
},
|
|
426
|
+
"country_code2": {
|
|
427
|
+
"type": "string",
|
|
428
|
+
"description": "ISO 3166-1 alpha-2 two-letter country code (e.g., US, GB, FR)."
|
|
429
|
+
},
|
|
430
|
+
"country_code3": {
|
|
431
|
+
"type": "string",
|
|
432
|
+
"description": "ISO 3166-1 alpha-3 three-letter country code (e.g., USA, GBR, FRA)."
|
|
433
|
+
},
|
|
434
|
+
"country_name": {
|
|
435
|
+
"type": "string",
|
|
436
|
+
"description": "Common name of the country associated with the IP address."
|
|
437
|
+
},
|
|
438
|
+
"country_name_official": {
|
|
439
|
+
"type": "string",
|
|
440
|
+
"description": "Official long-form country name as recognized internationally (e.g., United States of America)."
|
|
441
|
+
},
|
|
442
|
+
"is_eu": {
|
|
443
|
+
"type": "boolean",
|
|
444
|
+
"description": "Boolean flag indicating whether the country is a member state of the European Union."
|
|
445
|
+
},
|
|
446
|
+
"state_prov": {
|
|
447
|
+
"type": "string",
|
|
448
|
+
"description": "State, province, or primary administrative division associated with the IP location."
|
|
449
|
+
},
|
|
450
|
+
"state_code": {
|
|
451
|
+
"type": "string",
|
|
452
|
+
"description": "ISO 3166-2 subdivision code for the state or province (e.g., CA for California)."
|
|
453
|
+
},
|
|
454
|
+
"district": {
|
|
455
|
+
"type": "string",
|
|
456
|
+
"description": "District, county, or secondary administrative division within the region."
|
|
457
|
+
},
|
|
458
|
+
"city": {
|
|
459
|
+
"type": "string",
|
|
460
|
+
"description": "City or urban area name where the IP address is geographically registered."
|
|
461
|
+
},
|
|
462
|
+
"zipcode": {
|
|
463
|
+
"type": "string",
|
|
464
|
+
"description": "Postal code or ZIP code for the approximate location of the IP address."
|
|
465
|
+
},
|
|
466
|
+
"latitude": {
|
|
467
|
+
"type": "string",
|
|
468
|
+
"description": "Geographic latitude in decimal degrees for the IP geolocation, ranging from -90 to +90. Returned as a string, not a number."
|
|
469
|
+
},
|
|
470
|
+
"longitude": {
|
|
471
|
+
"type": "string",
|
|
472
|
+
"description": "Geographic longitude in decimal degrees for the IP geolocation, ranging from -180 to +180. Returned as a string, not a number."
|
|
473
|
+
},
|
|
474
|
+
"locality": {
|
|
475
|
+
"type": "string",
|
|
476
|
+
"description": "Specific locality, neighborhood, or small area designation within the city."
|
|
477
|
+
},
|
|
478
|
+
"elevation": {
|
|
479
|
+
"type": "string",
|
|
480
|
+
"description": "Elevation above mean sea level in meters for the IP geolocation. Returned as a string, not a number, and can be an empty string when unavailable."
|
|
481
|
+
},
|
|
482
|
+
"timezone": {
|
|
483
|
+
"type": "string",
|
|
484
|
+
"description": "IANA timezone database identifier for the IP location (e.g., America/Chicago, Asia/Tokyo)."
|
|
485
|
+
},
|
|
486
|
+
"timezone_abbreviation": {
|
|
487
|
+
"type": "string",
|
|
488
|
+
"description": "Current timezone abbreviation based on local offset (e.g., CST, JST, UTC)."
|
|
489
|
+
}
|
|
490
|
+
},
|
|
491
|
+
"description": "Location data when the target is inferred from an IP address."
|
|
492
|
+
},
|
|
493
|
+
"LocationByAddress": {
|
|
494
|
+
"type": "object",
|
|
495
|
+
"required": [
|
|
496
|
+
"location_string",
|
|
497
|
+
"country_name",
|
|
498
|
+
"state_prov",
|
|
499
|
+
"city",
|
|
500
|
+
"latitude",
|
|
501
|
+
"longitude",
|
|
502
|
+
"timezone",
|
|
503
|
+
"timezone_abbreviation"
|
|
504
|
+
],
|
|
505
|
+
"properties": {
|
|
506
|
+
"location_string": {
|
|
507
|
+
"type": "string",
|
|
508
|
+
"description": "Original location query string as submitted, including full address or place name."
|
|
509
|
+
},
|
|
510
|
+
"country_name": {
|
|
511
|
+
"type": "string",
|
|
512
|
+
"description": "Resolved country name derived from the geocoded location query."
|
|
513
|
+
},
|
|
514
|
+
"state_prov": {
|
|
515
|
+
"type": "string",
|
|
516
|
+
"description": "State, province, or primary administrative division identified from the location."
|
|
517
|
+
},
|
|
518
|
+
"city": {
|
|
519
|
+
"type": "string",
|
|
520
|
+
"description": "City or municipal area name extracted from the geocoded location."
|
|
521
|
+
},
|
|
522
|
+
"locality": {
|
|
523
|
+
"type": "string",
|
|
524
|
+
"description": "Specific locality, neighborhood, suburb, or village within the geocoded area."
|
|
525
|
+
},
|
|
526
|
+
"latitude": {
|
|
527
|
+
"type": "string",
|
|
528
|
+
"description": "Geocoded latitude coordinate in decimal degrees, ranging from -90 to +90. Returned as a string, not a number."
|
|
529
|
+
},
|
|
530
|
+
"longitude": {
|
|
531
|
+
"type": "string",
|
|
532
|
+
"description": "Geocoded longitude coordinate in decimal degrees, ranging from -180 to +180. Returned as a string, not a number."
|
|
533
|
+
},
|
|
534
|
+
"elevation": {
|
|
535
|
+
"type": "string",
|
|
536
|
+
"description": "Elevation above mean sea level in meters at the geocoded coordinates. Returned as a string, not a number, and can be an empty string when unavailable."
|
|
537
|
+
},
|
|
538
|
+
"timezone": {
|
|
539
|
+
"type": "string",
|
|
540
|
+
"description": "IANA timezone database identifier for the geocoded location (e.g., America/Los_Angeles)."
|
|
541
|
+
},
|
|
542
|
+
"timezone_abbreviation": {
|
|
543
|
+
"type": "string",
|
|
544
|
+
"description": "Current timezone abbreviation for the location based on local offset (e.g., PDT, CET)."
|
|
545
|
+
}
|
|
546
|
+
},
|
|
547
|
+
"description": "Location data when the target is specified by a city name or address string."
|
|
548
|
+
},
|
|
549
|
+
"AirQuality": {
|
|
550
|
+
"type": "object",
|
|
551
|
+
"required": [
|
|
552
|
+
"timestamp",
|
|
553
|
+
"european_aqi",
|
|
554
|
+
"us_aqi",
|
|
555
|
+
"pm10",
|
|
556
|
+
"pm2_5",
|
|
557
|
+
"carbon_monoxide",
|
|
558
|
+
"nitrogen_dioxide",
|
|
559
|
+
"sulphur_dioxide",
|
|
560
|
+
"ozone",
|
|
561
|
+
"dust",
|
|
562
|
+
"uv_index",
|
|
563
|
+
"aerosol_optical_depth",
|
|
564
|
+
"uv_index_clear_sky"
|
|
565
|
+
],
|
|
566
|
+
"properties": {
|
|
567
|
+
"timestamp": {
|
|
568
|
+
"type": "string",
|
|
569
|
+
"format": "date-time",
|
|
570
|
+
"description": "ISO 8601 formatted timestamp (iso8601)."
|
|
571
|
+
},
|
|
572
|
+
"european_aqi": {
|
|
573
|
+
"type": "integer",
|
|
574
|
+
"description": "Consolidated European Air Quality Index representing the highest value among individual pollutant indices. Ranges: 0-20 (good), 20-40 (fair), 40-60 (moderate), 60-80 (poor), 80-100 (very poor), >100 (extremely poor)."
|
|
575
|
+
},
|
|
576
|
+
"us_aqi": {
|
|
577
|
+
"type": "integer",
|
|
578
|
+
"description": "Consolidated U.S. Air Quality Index representing the highest value among individual pollutant indices. Ranges: 0-50 (good), 51-100 (moderate), 101-150 (unhealthy for sensitive groups), 151-200 (unhealthy), 201-300 (very unhealthy), 301-500 (hazardous)."
|
|
579
|
+
},
|
|
580
|
+
"pm10": {
|
|
581
|
+
"type": "number",
|
|
582
|
+
"format": "float",
|
|
583
|
+
"description": "Particulate matter with diameter less than 10 micrometers (μg/m³) measured at 10 meters above ground."
|
|
584
|
+
},
|
|
585
|
+
"pm2_5": {
|
|
586
|
+
"type": "number",
|
|
587
|
+
"format": "float",
|
|
588
|
+
"description": "Particulate matter with diameter less than 2.5 micrometers (μg/m³) measured at 10 meters above ground."
|
|
589
|
+
},
|
|
590
|
+
"carbon_monoxide": {
|
|
591
|
+
"type": "number",
|
|
592
|
+
"format": "float",
|
|
593
|
+
"description": "Atmospheric carbon monoxide gas concentration (μg/m³) at 10 meters above ground."
|
|
594
|
+
},
|
|
595
|
+
"nitrogen_dioxide": {
|
|
596
|
+
"type": "number",
|
|
597
|
+
"format": "float",
|
|
598
|
+
"description": "Atmospheric nitrogen dioxide gas concentration (μg/m³) at 10 meters above ground."
|
|
599
|
+
},
|
|
600
|
+
"sulphur_dioxide": {
|
|
601
|
+
"type": "number",
|
|
602
|
+
"format": "float",
|
|
603
|
+
"description": "Atmospheric sulphur dioxide gas concentration (μg/m³) at 10 meters above ground."
|
|
604
|
+
},
|
|
605
|
+
"ozone": {
|
|
606
|
+
"type": "number",
|
|
607
|
+
"format": "float",
|
|
608
|
+
"description": "Atmospheric ozone gas concentration (μg/m³) at 10 meters above ground."
|
|
609
|
+
},
|
|
610
|
+
"dust": {
|
|
611
|
+
"type": "number",
|
|
612
|
+
"format": "float",
|
|
613
|
+
"description": "Saharan dust particle concentration (μg/m³) at 10 meters above ground."
|
|
614
|
+
},
|
|
615
|
+
"uv_index": {
|
|
616
|
+
"type": "number",
|
|
617
|
+
"format": "float",
|
|
618
|
+
"description": "Ultraviolet radiation intensity index accounting for cloud coverage."
|
|
619
|
+
},
|
|
620
|
+
"aerosol_optical_depth": {
|
|
621
|
+
"type": "number",
|
|
622
|
+
"format": "float",
|
|
623
|
+
"description": "Aerosol optical depth at 550 nm wavelength indicating atmospheric haze levels."
|
|
624
|
+
},
|
|
625
|
+
"uv_index_clear_sky": {
|
|
626
|
+
"type": "number",
|
|
627
|
+
"format": "float",
|
|
628
|
+
"description": "Ultraviolet radiation intensity index assuming cloud-free conditions."
|
|
629
|
+
}
|
|
630
|
+
},
|
|
631
|
+
"description": "Air quality metrics including European and US AQI indices plus individual pollutant concentrations."
|
|
632
|
+
},
|
|
633
|
+
"AirQualityHourly": {
|
|
634
|
+
"type": "object",
|
|
635
|
+
"properties": {
|
|
636
|
+
"timestamp": {
|
|
637
|
+
"type": "string",
|
|
638
|
+
"format": "date-time",
|
|
639
|
+
"description": "ISO 8601 formatted timestamp"
|
|
640
|
+
},
|
|
641
|
+
"pm10": {
|
|
642
|
+
"type": "number",
|
|
643
|
+
"description": "Concentration of particulate matter ≤10 micrometers (μg/m³)"
|
|
644
|
+
},
|
|
645
|
+
"carbon_monoxide": {
|
|
646
|
+
"type": "number",
|
|
647
|
+
"description": "Concentration of carbon monoxide (μg/m³)"
|
|
648
|
+
},
|
|
649
|
+
"pm2_5": {
|
|
650
|
+
"type": "number",
|
|
651
|
+
"description": "Concentration of particulate matter ≤2.5 micrometers (μg/m³)"
|
|
652
|
+
},
|
|
653
|
+
"carbon_dioxide": {
|
|
654
|
+
"type": "number",
|
|
655
|
+
"description": "Concentration of carbon dioxide (ppm)"
|
|
656
|
+
},
|
|
657
|
+
"nitrogen_dioxide": {
|
|
658
|
+
"type": "number",
|
|
659
|
+
"description": "Concentration of nitrogen dioxide (μg/m³)"
|
|
660
|
+
},
|
|
661
|
+
"sulphur_dioxide": {
|
|
662
|
+
"type": "number",
|
|
663
|
+
"description": "Concentration of sulphur dioxide (μg/m³)"
|
|
664
|
+
},
|
|
665
|
+
"ozone": {
|
|
666
|
+
"type": "number",
|
|
667
|
+
"description": "Concentration of ozone (μg/m³)"
|
|
668
|
+
},
|
|
669
|
+
"dust": {
|
|
670
|
+
"type": "number",
|
|
671
|
+
"description": "Concentration of dust particles (μg/m³)"
|
|
672
|
+
},
|
|
673
|
+
"uv_index": {
|
|
674
|
+
"type": "number",
|
|
675
|
+
"description": "Ultraviolet radiation index"
|
|
676
|
+
},
|
|
677
|
+
"aerosol_optical_depth": {
|
|
678
|
+
"type": "number",
|
|
679
|
+
"description": "Aerosol optical depth"
|
|
680
|
+
},
|
|
681
|
+
"uv_index_clear_sky": {
|
|
682
|
+
"type": "number",
|
|
683
|
+
"description": "Ultraviolet radiation index under clear sky conditions"
|
|
684
|
+
}
|
|
685
|
+
},
|
|
686
|
+
"required": [
|
|
687
|
+
"timestamp",
|
|
688
|
+
"pm10",
|
|
689
|
+
"carbon_monoxide",
|
|
690
|
+
"pm2_5",
|
|
691
|
+
"carbon_dioxide",
|
|
692
|
+
"nitrogen_dioxide",
|
|
693
|
+
"sulphur_dioxide",
|
|
694
|
+
"ozone",
|
|
695
|
+
"dust",
|
|
696
|
+
"uv_index",
|
|
697
|
+
"aerosol_optical_depth",
|
|
698
|
+
"uv_index_clear_sky"
|
|
699
|
+
],
|
|
700
|
+
"description": "Hourly air quality forecast reading with pollutant concentrations and UV index."
|
|
701
|
+
},
|
|
702
|
+
"ErrorResponse": {
|
|
703
|
+
"type": "object",
|
|
704
|
+
"description": "Standard error envelope returned by the API on failed requests.",
|
|
705
|
+
"required": ["message"],
|
|
706
|
+
"properties": {
|
|
707
|
+
"error": {
|
|
708
|
+
"type": "string",
|
|
709
|
+
"description": "Short error category or exception type."
|
|
710
|
+
},
|
|
711
|
+
"message": {
|
|
712
|
+
"type": "string",
|
|
713
|
+
"description": "Human-readable error message describing the failure."
|
|
714
|
+
},
|
|
715
|
+
"path": {
|
|
716
|
+
"type": "string",
|
|
717
|
+
"description": "API endpoint path that produced the error."
|
|
718
|
+
},
|
|
719
|
+
"status": {
|
|
720
|
+
"type": "integer",
|
|
721
|
+
"description": "HTTP status code returned with the error."
|
|
722
|
+
},
|
|
723
|
+
"timestamp": {
|
|
724
|
+
"type": "string",
|
|
725
|
+
"format": "date-time",
|
|
726
|
+
"description": "Timestamp when the error occurred (ISO 8601)."
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
},
|
|
730
|
+
"WeatherLocation": {
|
|
731
|
+
"type": "object",
|
|
732
|
+
"description": "Location information",
|
|
733
|
+
"oneOf": [
|
|
734
|
+
{
|
|
735
|
+
"description": "Location data when the target is specified by GPS coordinates (lat/long).",
|
|
736
|
+
"$ref": "#/components/schemas/LocationByCoordinates"
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
"description": "Location data when the target is inferred from an IP address.",
|
|
740
|
+
"$ref": "#/components/schemas/LocationByIP"
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"description": "Location data when the target is specified by a city name or address string.",
|
|
744
|
+
"$ref": "#/components/schemas/LocationByAddress"
|
|
745
|
+
}
|
|
746
|
+
]
|
|
747
|
+
},
|
|
748
|
+
"AirQualityForecast": {
|
|
749
|
+
"type": "object",
|
|
750
|
+
"description": "Forecast data object keyed by date (YYYY-MM-DD), one key per day in the requested startDate/endDate range. The key names are dynamic dates, not a fixed schema property.",
|
|
751
|
+
"additionalProperties": {
|
|
752
|
+
"$ref": "#/components/schemas/AirQualityForecastDay"
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
"AirQualityForecastDay": {
|
|
756
|
+
"type": "object",
|
|
757
|
+
"description": "Air quality forecast data for a single day, containing hourly readings.",
|
|
758
|
+
"required": ["hourly"],
|
|
759
|
+
"properties": {
|
|
760
|
+
"hourly": {
|
|
761
|
+
"type": "array",
|
|
762
|
+
"description": "Array of hourly air quality readings for this day.",
|
|
763
|
+
"items": {
|
|
764
|
+
"$ref": "#/components/schemas/AirQualityHourly"
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
},
|
|
771
|
+
"security": [
|
|
772
|
+
{
|
|
773
|
+
"ApiKeyAuthHeader": []
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
"ApiKeyAuthQuery": []
|
|
777
|
+
}
|
|
778
|
+
]
|
|
779
|
+
}
|