@apifreaks/openapi-specs 0.3.1 → 0.4.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.
@@ -0,0 +1,253 @@
1
+ openapi: 3.1.1
2
+ info:
3
+ title: Domain Typosquatting API - Find Typo and Look-Alike Domains for Brand Protection and Phishing Discovery
4
+ version: 1.0.0
5
+ description: Search for registered domains that read like typo variants of a brand keyword, or that match a wildcard pattern, across the full TLD set. Each match returns what is available of its registration date, expiry date, last-seen date, and drop status, paginated at 100 domains per page. Built for brand and trademark protection, phishing discovery, scheduled monitoring, and domain reclaim.
6
+ contact:
7
+ name: APIFreaks Support
8
+ url: https://apifreaks.com/contact
9
+ email: support@apifreaks.com
10
+ servers:
11
+ - url: https://api.apifreaks.com/v1.0
12
+ description: Domain Typosquatting API Server
13
+ paths:
14
+ /domain/typosquatting:
15
+ get:
16
+ tags:
17
+ - Domain APIs
18
+ summary: Find registered typo-variant or wildcard-pattern domains for a brand keyword.
19
+ description: The Domain Typosquatting API searches for registered domains that are typo or look-alike variants of a brand keyword, or that match a wildcard pattern. Results include registration lifecycle data and drop status across 1529+ TLDs, paginated at 100 domains per page.
20
+ parameters:
21
+ - name: format
22
+ in: query
23
+ required: false
24
+ schema:
25
+ type: string
26
+ enum:
27
+ - json
28
+ - xml
29
+ default: json
30
+ description: Format of the response.
31
+ - name: keyword
32
+ in: query
33
+ required: false
34
+ schema:
35
+ type: string
36
+ minLength: 3
37
+ maxLength: 63
38
+ description: Brand or label to find typo variants for. 3-63 characters, letters, digits, or hyphens, a single label with no dots. Case-insensitive. Use either keyword or pattern, never both.
39
+ - name: pattern
40
+ in: query
41
+ required: false
42
+ schema:
43
+ type: string
44
+ minLength: 3
45
+ maxLength: 63
46
+ description: Wildcard search string that combines fuzzy matching with * wildcards. 3-63 characters total, * is the only supported wildcard and each one matches zero or more characters, maximum 3 asterisks per request. Use either keyword or pattern, never both.
47
+ - name: pageToken
48
+ in: query
49
+ required: false
50
+ schema:
51
+ type: string
52
+ description: Token from nextPageToken in the previous response. Required to retrieve page 2 and onward. The original keyword or pattern must be passed alongside the token on every page request. Results page at 100 domains per page.
53
+ responses:
54
+ '200':
55
+ description: Success
56
+ content:
57
+ application/json:
58
+ schema:
59
+ $ref: '#/components/schemas/DomainTyposquattingResponse'
60
+ examples:
61
+ keywordSuccess:
62
+ summary: Keyword search (paypal)
63
+ value:
64
+ status: true
65
+ totalRecords: 1284
66
+ currentPage: 1
67
+ hasNextPage: true
68
+ totalPages: 13
69
+ nextPageToken: <opaque_token>
70
+ domains:
71
+ - domainName: p-aypal.com
72
+ createDate: '2025-04-17'
73
+ expiryDate: '2026-04-17'
74
+ lastSeen: '2026-05-29'
75
+ isDropped: true
76
+ - domainName: p-aypal.de
77
+ lastSeen: '2024-07-11'
78
+ isDropped: true
79
+ - domainName: p0aypal.com
80
+ createDate: '2017-12-29'
81
+ expiryDate: '2026-12-29'
82
+ lastSeen: '2026-08-18'
83
+ isDropped: false
84
+ - domainName: p7ypal.com
85
+ isDropped: true
86
+ - domainName: pa-pal.club
87
+ createDate: '2019-10-25'
88
+ expiryDate: '2020-10-25'
89
+ isDropped: false
90
+ patternSuccess:
91
+ summary: Wildcard pattern search (*paypal*)
92
+ value:
93
+ status: true
94
+ totalRecords: 5471
95
+ currentPage: 1
96
+ hasNextPage: true
97
+ totalPages: 55
98
+ nextPageToken: <opaque_token>
99
+ domains:
100
+ - domainName: paypal-support.com
101
+ createDate: '2024-11-02'
102
+ expiryDate: '2026-11-02'
103
+ lastSeen: '2026-08-30'
104
+ isDropped: false
105
+ - domainName: login-paypal.net
106
+ lastSeen: '2025-12-14'
107
+ isDropped: true
108
+ emptyResult:
109
+ summary: No matches found
110
+ value:
111
+ status: true
112
+ totalRecords: 0
113
+ currentPage: 1
114
+ hasNextPage: false
115
+ totalPages: 0
116
+ domains: []
117
+ headers:
118
+ X-AF-Credits-Cost:
119
+ $ref: '#/components/headers/X-AF-Credits-Cost'
120
+ '400':
121
+ description: Bad Request – Invalid parameters
122
+ content:
123
+ application/json:
124
+ schema:
125
+ $ref: '#/components/schemas/ErrorResponse'
126
+ examples:
127
+ shortPattern:
128
+ summary: Pattern has too few non-wildcard characters
129
+ value:
130
+ error: Invalid Pattern Exception
131
+ message: The pattern must contain at least 5 non-wildcard characters and no more than 3 wildcards.
132
+ path: /v1.0/domain/typosquatting
133
+ status: 400
134
+ timestamp: '2026-09-08T12:00:00.000Z'
135
+ bothParams:
136
+ summary: Both keyword and pattern supplied
137
+ value:
138
+ error: Invalid Param Exception
139
+ message: Use either the "keyword" or the "pattern" parameter, never both.
140
+ path: /v1.0/domain/typosquatting
141
+ status: 400
142
+ timestamp: '2026-09-08T12:00:00.000Z'
143
+ missingParam:
144
+ summary: Neither keyword nor pattern supplied
145
+ value:
146
+ error: Invalid Param Exception
147
+ message: Please provide either a "keyword" or a "pattern" parameter.
148
+ path: /v1.0/domain/typosquatting
149
+ status: 400
150
+ timestamp: '2026-09-08T12:00:00.000Z'
151
+ headers:
152
+ X-AF-Credits-Cost:
153
+ $ref: '#/components/headers/X-AF-Credits-Cost'
154
+ operationId: getDomainTyposquatting
155
+ components:
156
+ securitySchemes:
157
+ ApiKeyAuthHeader:
158
+ type: apiKey
159
+ in: header
160
+ name: X-apiKey
161
+ description: Pass your API key via the X-apiKey request header.
162
+ ApiKeyAuthQuery:
163
+ type: apiKey
164
+ in: query
165
+ name: apiKey
166
+ description: Pass your API key via the apiKey query parameter.
167
+ schemas:
168
+ DomainTyposquattingResponse:
169
+ type: object
170
+ required:
171
+ - status
172
+ - totalRecords
173
+ - currentPage
174
+ - hasNextPage
175
+ - totalPages
176
+ - domains
177
+ properties:
178
+ status:
179
+ type: boolean
180
+ description: Indicates if the request was successful.
181
+ totalRecords:
182
+ type: integer
183
+ description: Total number of domains found.
184
+ currentPage:
185
+ type: integer
186
+ description: Page number of the current response. Starts at 1.
187
+ hasNextPage:
188
+ type: boolean
189
+ description: true if at least one additional page is available.
190
+ totalPages:
191
+ type: integer
192
+ description: Total number of pages available.
193
+ nextPageToken:
194
+ type: string
195
+ description: Opaque token to pass as pageToken on the next request. Present only when hasNextPage is true.
196
+ domains:
197
+ type: array
198
+ items:
199
+ $ref: '#/components/schemas/DomainItem'
200
+ description: List of typo-variant or pattern-matched domains on the current page.
201
+ description: Paginated response containing typo-variant or pattern-matched domains.
202
+ DomainItem:
203
+ type: object
204
+ required:
205
+ - domainName
206
+ - isDropped
207
+ properties:
208
+ domainName:
209
+ type: string
210
+ description: Domain name.
211
+ createDate:
212
+ type: string
213
+ description: Domain creation date (YYYY-MM-DD). May be absent for older or less-actively-tracked entries.
214
+ expiryDate:
215
+ type: string
216
+ description: Domain expiration date (YYYY-MM-DD). May be absent for older or less-actively-tracked entries.
217
+ lastSeen:
218
+ type: string
219
+ description: Last time the domain was observed (YYYY-MM-DD). One of the two fields reliably meaningful across a full result set.
220
+ isDropped:
221
+ type: boolean
222
+ description: Indicates whether the domain has dropped out of the registry and become available to register again.
223
+ description: A single typo-variant or pattern-matched domain with registration lifecycle data.
224
+ ErrorResponse:
225
+ type: object
226
+ description: Standard error envelope returned by the API on failed requests.
227
+ required:
228
+ - message
229
+ properties:
230
+ error:
231
+ type: string
232
+ description: Short error category or exception type.
233
+ message:
234
+ type: string
235
+ description: Human-readable error message describing the failure.
236
+ path:
237
+ type: string
238
+ description: API endpoint path that produced the error.
239
+ status:
240
+ type: integer
241
+ description: HTTP status code returned with the error.
242
+ timestamp:
243
+ type: string
244
+ format: date-time
245
+ description: Timestamp when the error occurred (ISO 8601).
246
+ headers:
247
+ X-AF-Credits-Cost:
248
+ description: Specifies the number of credits consumed by the current request.
249
+ schema:
250
+ type: integer
251
+ security:
252
+ - ApiKeyAuthHeader: []
253
+ - ApiKeyAuthQuery: []
@@ -158,8 +158,8 @@ components:
158
158
  ApiKeyAuthHeader:
159
159
  type: apiKey
160
160
  in: header
161
- name: X-apikey
162
- description: Pass your API key via the X-apikey request header.
161
+ name: X-apiKey
162
+ description: Pass your API key via the X-apiKey request header.
163
163
  ApiKeyAuthQuery:
164
164
  type: apiKey
165
165
  in: query
@@ -285,8 +285,8 @@ components:
285
285
  ApiKeyAuthHeader:
286
286
  type: apiKey
287
287
  in: header
288
- name: X-apikey
289
- description: Pass your API key via the X-apikey request header.
288
+ name: X-apiKey
289
+ description: Pass your API key via the X-apiKey request header.
290
290
  ApiKeyAuthQuery:
291
291
  type: apiKey
292
292
  in: query
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apifreaks/openapi-specs",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Public OpenAPI 3.1 specifications for all APIFreaks API products.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,259 @@
1
+ # APIFreaks OpenAPI specifications
2
+
3
+ OpenAPI 3.1 documents for [APIFreaks](https://apifreaks.com) API products. Each file is a complete, standalone spec: paths, parameters, request/response schemas, examples, and authentication.
4
+
5
+ This folder is the source of truth. JSON only. YAML is produced when the npm package is built, not checked in here.
6
+
7
+ To install the specs as a package (`getSpec`, `SpecSlug`, JSON imports), see the [repository README](../README.md).
8
+
9
+ ## Open a spec
10
+
11
+ Pick a file, then open it in any OpenAPI-aware tool.
12
+
13
+ **Swagger Editor:** import this raw GitHub URL (or swap in another path):
14
+
15
+ ```
16
+ https://raw.githubusercontent.com/api-freaks/af-openapi-specs/main/specs/ip-intelligence/ip-locator.json
17
+ ```
18
+
19
+ **Postman / Insomnia:** import the JSON file as an OpenAPI definition.
20
+
21
+ **Code generation:** point `openapi-generator`, `orval`, `openapi-typescript`, or similar at the same URL:
22
+
23
+ ```bash
24
+ npx openapi-typescript https://raw.githubusercontent.com/api-freaks/af-openapi-specs/main/specs/ip-intelligence/ip-locator.json -o ip-locator.ts
25
+ ```
26
+
27
+ The slug is the filename without `.json`. It is the identifier the npm package uses (`getSpec("ip-locator")`).
28
+
29
+ ## Authentication
30
+
31
+ Every spec uses an API key from [apifreaks.com](https://apifreaks.com). Either form is valid:
32
+
33
+ | Location | Name | Example |
34
+ | -------- | ---------- | -------------------- |
35
+ | Header | `X-apiKey` | `X-apiKey: YOUR_KEY` |
36
+ | Query | `apiKey` | `?apiKey=YOUR_KEY` |
37
+
38
+ Successful responses include `X-AF-Credits-Cost`, the credits consumed by that request. Remaining balances: [usage-credits.json](billing/usage-credits.json).
39
+
40
+ ## Servers
41
+
42
+ Each document declares its base URL under `servers`. Most products use `https://api.apifreaks.com/v1.0`.
43
+
44
+ These use `https://api.apifreaks.com/v2.0`: IP geolocation, bulk IP geolocation, timezone lookup, domain WHOIS, bulk WHOIS, and astronomy.
45
+
46
+ Weather products (except astronomy) use `https://api.apifreaks.com/v1.0/weather`.
47
+
48
+ ## Catalog
49
+
50
+ Grouped by folder. Slug is the stable id; the name links to the file.
51
+
52
+ ### IP intelligence
53
+
54
+ | Slug | Spec |
55
+ | ----------------------------- | ------------------------------------------------------------------------------- |
56
+ | `ip-locator` | [IP Geolocation](ip-intelligence/ip-locator.json) |
57
+ | `bulk-ip-lookup` | [Bulk IP Geolocation](ip-intelligence/bulk-ip-lookup.json) |
58
+ | `ip-threat-intelligence` | [IP Threat Intelligence](ip-intelligence/ip-threat-intelligence.json) |
59
+ | `bulk-ip-threat-intelligence` | [Bulk IP Threat Intelligence](ip-intelligence/bulk-ip-threat-intelligence.json) |
60
+
61
+ ### Geocoding
62
+
63
+ | Slug | Spec |
64
+ | ------------------- | ----------------------------------------------------- |
65
+ | `forward-geocoding` | [Forward Geocoding](geocoding/forward-geocoding.json) |
66
+ | `reverse-geocoding` | [Reverse Geocoding](geocoding/reverse-geocoding.json) |
67
+
68
+ ### WHOIS
69
+
70
+ | Slug | Spec |
71
+ | ----------------------------- | ------------------------------------------------------- |
72
+ | `whois-domain-lookup` | [Domain WHOIS](whois/whois-domain-lookup.json) |
73
+ | `whois-ip-lookup` | [IP WHOIS](whois/whois-ip-lookup.json) |
74
+ | `asn-lookup` | [ASN Lookup](whois/asn-lookup.json) |
75
+ | `domain-whois-history-lookup` | [WHOIS History](whois/domain-whois-history-lookup.json) |
76
+ | `reverse-whois` | [Reverse WHOIS](whois/reverse-whois.json) |
77
+ | `bulk-whois-lookup` | [Bulk WHOIS](whois/bulk-whois-lookup.json) |
78
+
79
+ ### DNS
80
+
81
+ | Slug | Spec |
82
+ | -------------------- | ------------------------------------------------- |
83
+ | `dns-lookup` | [DNS Lookup](dns/dns-lookup.json) |
84
+ | `dns-history-lookup` | [DNS History](dns/dns-history-lookup.json) |
85
+ | `reverse-dns-lookup` | [Reverse DNS Lookup](dns/reverse-dns-lookup.json) |
86
+ | `bulk-dns-lookup` | [Bulk DNS Lookup](dns/bulk-dns-lookup.json) |
87
+
88
+ ### Scraper
89
+
90
+ | Slug | Spec |
91
+ | ------------- | --------------------------------------- |
92
+ | `web-scraper` | [Web Scraper](scraper/web-scraper.json) |
93
+
94
+ ### Email validation
95
+
96
+ | Slug | Spec |
97
+ | ----------------------- | -------------------------------------------------------------------- |
98
+ | `email-checker` | [Email Checker](email-validation/email-checker.json) |
99
+ | `bulk-email-validation` | [Bulk Email Validation](email-validation/bulk-email-validation.json) |
100
+
101
+ ### Phone validation
102
+
103
+ | Slug | Spec |
104
+ | ------------------------------ | ---------------------------------------------------------------------------------- |
105
+ | `phone-validation` | [Phone Validation](phone-number-validation/phone-validation.json) |
106
+ | `bulk-phone-number-validation` | [Bulk Phone Validation](phone-number-validation/bulk-phone-number-validation.json) |
107
+
108
+ ### SSL
109
+
110
+ | Slug | Spec |
111
+ | ------------------------------ | --------------------------------------------------------------------- |
112
+ | `ssl-certificate-lookup` | [SSL Certificate Lookup](ssl/ssl-certificate-lookup.json) |
113
+ | `ssl-certificate-chain-lookup` | [SSL Certificate Chain Lookup](ssl/ssl-certificate-chain-lookup.json) |
114
+
115
+ ### Domain
116
+
117
+ | Slug | Spec |
118
+ | -------------------------------- | ---------------------------------------------------------------------------- |
119
+ | `domain-search` | [Domain Availability](domain/domain-search.json) |
120
+ | `domain-search-with-suggestions` | [Domain Search with Suggestions](domain/domain-search-with-suggestions.json) |
121
+ | `subdomain-lookup` | [Subdomain Finder](domain/subdomain-lookup.json) |
122
+ | `bulk-domain-checker` | [Bulk Domain Checker](domain/bulk-domain-checker.json) |
123
+
124
+ ### Screenshot
125
+
126
+ | Slug | Spec |
127
+ | -------------------- | -------------------------------------------------------- |
128
+ | `website-screenshot` | [Website Screenshot](screenshot/website-screenshot.json) |
129
+ | `bulk-screenshot` | [Bulk Screenshot](screenshot/bulk-screenshot.json) |
130
+
131
+ ### PDF
132
+
133
+ | Slug | Spec |
134
+ | ---------------------------- | ------------------------------------------------------------- |
135
+ | `merge-pdf` | [Merge](pdf/merge-pdf.json) |
136
+ | `split-pdf` | [Split](pdf/split-pdf.json) |
137
+ | `pdf-extract-pages` | [Extract Pages](pdf/pdf-extract-pages.json) |
138
+ | `delete-pdf-page` | [Remove Pages](pdf/delete-pdf-page.json) |
139
+ | `pdf-to-image` | [Convert to Image](pdf/pdf-to-image.json) |
140
+ | `pdf-generator` | [Generate from Template](pdf/pdf-generator.json) |
141
+ | `pdf-generator-bulk` | [Bulk Generate from CSV](pdf/pdf-generator-bulk.json) |
142
+ | `pdf-compress` | [Compress](pdf/pdf-compress.json) |
143
+ | `rotate-pdf-pages` | [Rotate](pdf/rotate-pdf-pages.json) |
144
+ | `pdf-encrypt` | [Encrypt](pdf/pdf-encrypt.json) |
145
+ | `pdf-restrict` | [Restrict](pdf/pdf-restrict.json) |
146
+ | `pdf-decrypt` | [Decrypt](pdf/pdf-decrypt.json) |
147
+ | `pdf-unrestrict` | [Unrestrict](pdf/pdf-unrestrict.json) |
148
+ | `linearize-pdf` | [Linearize](pdf/linearize-pdf.json) |
149
+ | `pdf-task-status` | [Task Status](pdf/pdf-task-status.json) |
150
+ | `pdf-file-status` | [File Status](pdf/pdf-file-status.json) |
151
+ | `pdf-files` | [List Files](pdf/pdf-files.json) |
152
+ | `pdf-file` | [Delete File](pdf/pdf-file.json) |
153
+ | `pdf-resource-upload` | [Upload Resource](pdf/pdf-resource-upload.json) |
154
+ | `pdf-resource-upload-binary` | [Upload Binary Resource](pdf/pdf-resource-upload-binary.json) |
155
+ | `pdf-resource-download` | [Download Resource](pdf/pdf-resource-download.json) |
156
+
157
+ ### Currency
158
+
159
+ | Slug | Spec |
160
+ | ---------------------------------- | ---------------------------------------------------------------------------- |
161
+ | `currency-rate` | [Exchange Rates](currency/currency-rate.json) |
162
+ | `historical-currency-rate` | [Historical Exchange Rates](currency/historical-currency-rate.json) |
163
+ | `currency-converter` | [Currency Converter](currency/currency-converter.json) |
164
+ | `historical-currency-converter` | [Historical Currency Converter](currency/historical-currency-converter.json) |
165
+ | `currency-time-series` | [Currency Time Series](currency/currency-time-series.json) |
166
+ | `currency-fluctuation` | [Currency Fluctuation](currency/currency-fluctuation.json) |
167
+ | `geolocalized-currency-conversion` | [IP-to-Currency Conversion](currency/geolocalized-currency-conversion.json) |
168
+ | `currency-supported` | [Supported Currencies](currency/currency-supported.json) |
169
+ | `currency-symbols` | [Currency Symbols](currency/currency-symbols.json) |
170
+ | `currency-historical-data-limit` | [Historical Data Limits](currency/currency-historical-data-limit.json) |
171
+
172
+ ### Commodity
173
+
174
+ | Slug | Spec |
175
+ | ----------------------------- | ------------------------------------------------------------------------- |
176
+ | `commodity-prices` | [Live Commodity Prices](commodity/commodity-prices.json) |
177
+ | `historical-commodity-prices` | [Historical Commodity Prices](commodity/historical-commodity-prices.json) |
178
+ | `commodity-fluctuation` | [Commodity Fluctuation](commodity/commodity-fluctuation.json) |
179
+ | `commodity-time-series` | [Commodity Time Series](commodity/commodity-time-series.json) |
180
+ | `commodity-symbols` | [Commodity Symbols](commodity/commodity-symbols.json) |
181
+
182
+ ### Financial
183
+
184
+ | Slug | Spec |
185
+ | ------------------------------------ | ------------------------------------------------------------------------ |
186
+ | `vat-rates-country` | [VAT Rates by Country](financial/vat-rates-country.json) |
187
+ | `bulk-vat-rates-country` | [Bulk VAT Rates by Country](financial/bulk-vat-rates-country.json) |
188
+ | `vat-rates-by-ip` | [VAT Rates by IP](financial/vat-rates-by-ip.json) |
189
+ | `vat-number-validation` | [VAT Number Validation](financial/vat-number-validation.json) |
190
+ | `iban-validation` | [IBAN Validation](financial/iban-validation.json) |
191
+ | `swift-code-lookup` | [SWIFT/BIC Lookup](financial/swift-code-lookup.json) |
192
+ | `swift-code-finder` | [SWIFT/BIC Finder](financial/swift-code-finder.json) |
193
+ | `financial-apis-supported-countries` | [Supported Countries](financial/financial-apis-supported-countries.json) |
194
+
195
+ ### ZIP code
196
+
197
+ | Slug | Spec |
198
+ | ------------------------- | ----------------------------------------------------------- |
199
+ | `zip-code-api` | [ZIP / Postal Code Lookup](zip-code/zip-code-api.json) |
200
+ | `zip-codes-radius-search` | [ZIP Radius Search](zip-code/zip-codes-radius-search.json) |
201
+ | `zip-code-distance` | [ZIP Distance](zip-code/zip-code-distance.json) |
202
+ | `zip-codes-by-city` | [ZIP Codes by City](zip-code/zip-codes-by-city.json) |
203
+ | `bulk-zip-code-lookup` | [Bulk ZIP Lookup](zip-code/bulk-zip-code-lookup.json) |
204
+ | `zip-code-distance-match` | [ZIP Distance Match](zip-code/zip-code-distance-match.json) |
205
+ | `zip-codes-by-region` | [ZIP Codes by Region](zip-code/zip-codes-by-region.json) |
206
+
207
+ ### Weather
208
+
209
+ | Slug | Spec |
210
+ | --------------------- | ------------------------------------------------------- |
211
+ | `live-weather` | [Live Weather](weather/live-weather.json) |
212
+ | `weather-forecast` | [Weather Forecast](weather/weather-forecast.json) |
213
+ | `historical-weather` | [Historical Weather](weather/historical-weather.json) |
214
+ | `time-series-weather` | [Time Series Weather](weather/time-series-weather.json) |
215
+ | `air-quality` | [Air Quality](weather/air-quality.json) |
216
+ | `marine-weather` | [Marine Weather](weather/marine-weather.json) |
217
+ | `flood-forecast` | [Flood Forecast](weather/flood-forecast.json) |
218
+ | `bulk-live-weather` | [Bulk Live Weather](weather/bulk-live-weather.json) |
219
+ | `astronomy-data` | [Astronomy](weather/astronomy-data.json) |
220
+
221
+ ### Geography
222
+
223
+ | Slug | Spec |
224
+ | ------------------------------ | ----------------------------------------------------------------- |
225
+ | `administrative-units-levels` | [Admin Levels](geography/administrative-units-levels.json) |
226
+ | `administrative-units` | [Administrative Units](geography/administrative-units.json) |
227
+ | `administrative-units-details` | [Admin Unit Details](geography/administrative-units-details.json) |
228
+ | `countries` | [Countries](geography/countries.json) |
229
+ | `countries-details` | [Country Details](geography/countries-details.json) |
230
+ | `cities` | [Cities](geography/cities.json) |
231
+ | `regions` | [Regions](geography/regions.json) |
232
+ | `subregions` | [Subregions](geography/subregions.json) |
233
+ | `flags-supported` | [Supported Flags](geography/flags-supported.json) |
234
+ | `flags` | [Flags](geography/flags.json) |
235
+
236
+ ### Timezone
237
+
238
+ | Slug | Spec |
239
+ | -------------------- | ------------------------------------------------------ |
240
+ | `timezone-lookup` | [Timezone Lookup](timezone/timezone-lookup.json) |
241
+ | `timezone-converter` | [Timezone Converter](timezone/timezone-converter.json) |
242
+
243
+ ### User agent
244
+
245
+ | Slug | Spec |
246
+ | ------------------------ | ---------------------------------------------------------------- |
247
+ | `user-agent-parser` | [User Agent Parser](user-agent/user-agent-parser.json) |
248
+ | `bulk-user-agent-parser` | [Bulk User Agent Parser](user-agent/bulk-user-agent-parser.json) |
249
+
250
+ ### Billing
251
+
252
+ | Slug | Spec |
253
+ | --------------- | ------------------------------------------- |
254
+ | `usage-credits` | [Credits Usage](billing/usage-credits.json) |
255
+
256
+ ## Docs and support
257
+
258
+ - Product docs: [apifreaks.com](https://apifreaks.com)
259
+ - Contact: [apifreaks.com/contact](https://apifreaks.com/contact) · support@apifreaks.com