@apifreaks/openapi-specs 0.3.2 → 0.4.1

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: []
@@ -2,7 +2,7 @@ openapi: 3.1.1
2
2
  info:
3
3
  title: Bulk Email Validation API - Validate and Verify Emails in Bulk
4
4
  version: 1.0.0
5
- description: Validate up to 10 email addresses in a single POST request. Each email is processed independently. Returns an array of validation results with deliverability assessment per email, plus per-item error objects for failed validations. Maximum 10 email addresses per request.
5
+ description: Validate up to 10 email addresses in a single POST request. Each email is processed independently. Returns an array of validation results with deliverability assessment per email (valid/accept_all/invalid/unknown/risky/app_server_blocked), plus per-item error objects for failed validations. Maximum 10 email addresses per request.
6
6
  contact:
7
7
  name: APIFreaks Support
8
8
  url: https://apifreaks.com/contact
@@ -43,7 +43,7 @@ paths:
43
43
  $ref: '#/components/schemas/BulkEmailValidationResponse'
44
44
  examples:
45
45
  bulkEmailsValidated:
46
- summary: Mix of a valid and a syntactically invalid email
46
+ summary: Mix of valid, syntactically invalid, accept_all, null-MX invalid, and unknown (no-MX probe) results
47
47
  value:
48
48
  emailResponse:
49
49
  - success: true
@@ -74,6 +74,60 @@ paths:
74
74
  domain:
75
75
  name: not-an-email
76
76
  validDomain: false
77
+ - success: true
78
+ email: random12345@yahoo.com
79
+ validEmail: accept_all
80
+ validSyntax: true
81
+ reason: domain accepts all addresses.
82
+ domain:
83
+ name: yahoo.com
84
+ disposable: false
85
+ spam: false
86
+ free: true
87
+ validDomain: true
88
+ catchAll: true
89
+ account:
90
+ role: false
91
+ fullMailBox: false
92
+ dns:
93
+ mxRecord:
94
+ - mta5.am0.yahoodns.net.
95
+ - mta6.am0.yahoodns.net.
96
+ - mta7.am0.yahoodns.net.
97
+ - success: true
98
+ email: test@example.com
99
+ validEmail: invalid
100
+ validSyntax: true
101
+ reason: domain does not accept mail.
102
+ domain:
103
+ name: example.com
104
+ disposable: true
105
+ spam: false
106
+ free: false
107
+ validDomain: true
108
+ catchAll: false
109
+ account:
110
+ role: false
111
+ dns:
112
+ mxRecord:
113
+ - .
114
+ - success: true
115
+ email: test@neverssl.com
116
+ validEmail: unknown
117
+ validSyntax: true
118
+ reason: We are unable to determine if email is valid or invalid.
119
+ domain:
120
+ name: neverssl.com
121
+ disposable: false
122
+ spam: false
123
+ free: false
124
+ validDomain: true
125
+ catchAll: false
126
+ account:
127
+ role: false
128
+ dns:
129
+ aRecord:
130
+ - 34.223.124.45
77
131
  headers:
78
132
  X-AF-Credits-Cost:
79
133
  $ref: '#/components/headers/X-AF-Credits-Cost'
@@ -213,17 +267,18 @@ components:
213
267
  description: Optional identifier or label provided in the request for record tracking.
214
268
  reason:
215
269
  type: string
216
- description: Detailed explanation returned when validEmail is not valid.
270
+ description: Detailed explanation returned when validEmail is not valid. Omitted entirely when validEmail is valid.
217
271
  validEmail:
218
272
  type: string
219
273
  enum:
220
274
  - valid
275
+ - accept_all
221
276
  - invalid
222
277
  - INVALID_EMAIL
223
278
  - unknown
224
279
  - risky
225
280
  - app_server_blocked
226
- description: 'Comprehensive deliverability assessment. Casing is inconsistent in the live API: syntactically invalid addresses return INVALID_EMAIL, while semantically invalid (undeliverable) addresses return lowercase invalid. risky is a documented possibility not observed during testing. app_server_blocked is returned when the recipient mail server blocked the live verification attempt (reason explains that retrying later may succeed).'
281
+ description: 'Comprehensive deliverability assessment. valid: recipient confirmed deliverable, reason omitted. accept_all: the domain is catch-all and accepted the recipient, so this specific mailbox is unconfirmed — see domain.catchAll, reason ''domain accepts all addresses.''. invalid: rejected mailbox, syntax failure, or the domain accepts no mail at all (a null MX). unknown: no conclusive answer, most common for domains with no MX record that only get a probe against their address record. risky: mailbox exists but over quota, or the server deferred with a greylist response. app_server_blocked: our verifier IP was blocked by the receiving server. Casing is inconsistent in the live API: syntactically invalid addresses can return the raw enum name INVALID_EMAIL instead of lowercase invalid — this is a known API bug, handle it defensively as equivalent to invalid.'
227
282
  validSyntax:
228
283
  type: boolean
229
284
  description: Validates email address format compliance with RFC 5322 standards.
@@ -263,7 +318,7 @@ components:
263
318
  description: Classification indicating free or consumer-grade email service providers.
264
319
  catchAll:
265
320
  type: boolean
266
- description: Detection flag for domains configured to accept mail for any recipient address.
321
+ description: Detection flag for domains configured to accept mail for any recipient address. true always corresponds to a top-level validEmail of accept_all.
267
322
  description: Domain validation details for the email address.
268
323
  AccountObject:
269
324
  type: object
@@ -279,20 +334,19 @@ components:
279
334
  description: Account-level validation details.
280
335
  DnsObject:
281
336
  type: object
282
- required:
283
- - mxRecord
337
+ required: []
284
338
  properties:
285
339
  mxRecord:
286
340
  type: array
287
341
  items:
288
342
  type: string
289
- description: Collection of MX (Mail Exchange) hostname records from DNS queries.
343
+ description: Every MX hostname at the domain's lowest preference (not just one). ["."] means the domain publishes a null MX and accepts no mail at all. Absent entirely when the domain has no MX record of any kind — check aRecord in that case.
290
344
  aRecord:
291
345
  type: array
292
346
  items:
293
347
  type: string
294
- description: Collection of A (Address) records for the domain. Not observed in testing may be rarely or never populated.
295
- description: DNS records for the email domain.
348
+ description: Collection of A (Address) records for the domain. Present when the domain has no MX record but does resolve to a web server or other host.
349
+ description: DNS records for the email domain. Absent entirely when the domain publishes neither an MX nor an A record.
296
350
  AddressObject:
297
351
  type: object
298
352
  properties:
@@ -2,7 +2,7 @@ openapi: 3.1.1
2
2
  info:
3
3
  title: Email Checker API - Real-Time Validation, Deliverability & Risk Signals
4
4
  version: 1.0.0
5
- description: Validate a single email address and receive comprehensive results including syntax validation, domain verification, account detection, DNS records (MX and A records), and optional IP-based geolocation and security enrichment. Returns deliverability assessment with valid/invalid/unknown/risky/app_server_blocked status.
5
+ description: Validate a single email address and receive comprehensive results including syntax validation, domain verification, account detection, DNS records (MX and A records), and optional IP-based geolocation and security enrichment. Returns deliverability assessment with valid/accept_all/invalid/unknown/risky/app_server_blocked status.
6
6
  contact:
7
7
  name: APIFreaks Support
8
8
  url: https://apifreaks.com/contact
@@ -75,8 +75,8 @@ paths:
75
75
  domain:
76
76
  name: not-an-email
77
77
  validDomain: false
78
- noMxRecord:
79
- summary: Valid syntax, domain has no MX record
78
+ nonexistentDomain:
79
+ summary: Valid syntax, domain does not exist (NXDOMAIN)
80
80
  value:
81
81
  success: true
82
82
  email: test@nonexistentdomainxyz123abc.com
@@ -92,6 +92,69 @@ paths:
92
92
  catchAll: false
93
93
  account:
94
94
  role: false
95
+ acceptAll:
96
+ summary: Catch-all domain accepted the recipient — mailbox unconfirmed
97
+ value:
98
+ success: true
99
+ email: random12345@yahoo.com
100
+ validEmail: accept_all
101
+ validSyntax: true
102
+ reason: domain accepts all addresses.
103
+ domain:
104
+ name: yahoo.com
105
+ disposable: false
106
+ spam: false
107
+ free: true
108
+ validDomain: true
109
+ catchAll: true
110
+ account:
111
+ role: false
112
+ fullMailBox: false
113
+ dns:
114
+ mxRecord:
115
+ - mta5.am0.yahoodns.net.
116
+ - mta6.am0.yahoodns.net.
117
+ - mta7.am0.yahoodns.net.
118
+ nullMxDomain:
119
+ summary: Domain publishes a null MX (single ".") — accepts no mail at all
120
+ value:
121
+ success: true
122
+ email: test@example.com
123
+ validEmail: invalid
124
+ validSyntax: true
125
+ reason: domain does not accept mail.
126
+ domain:
127
+ name: example.com
128
+ disposable: true
129
+ spam: false
130
+ free: false
131
+ validDomain: true
132
+ catchAll: false
133
+ account:
134
+ role: false
135
+ dns:
136
+ mxRecord:
137
+ - .
138
+ noMxAddressOnly:
139
+ summary: Domain has no MX record but a working A record — gets a real SMTP probe
140
+ value:
141
+ success: true
142
+ email: test@neverssl.com
143
+ validEmail: unknown
144
+ validSyntax: true
145
+ reason: We are unable to determine if email is valid or invalid.
146
+ domain:
147
+ name: neverssl.com
148
+ disposable: false
149
+ spam: false
150
+ free: false
151
+ validDomain: true
152
+ catchAll: false
153
+ account:
154
+ role: false
155
+ dns:
156
+ aRecord:
157
+ - 34.223.124.45
95
158
  withIp:
96
159
  summary: With ip — adds geolocation/security enrichment under address
97
160
  value:
@@ -292,17 +355,18 @@ components:
292
355
  description: Optional identifier or label provided in the request for record tracking.
293
356
  reason:
294
357
  type: string
295
- description: Detailed explanation returned when validEmail is not valid.
358
+ description: Detailed explanation returned when validEmail is not valid. Omitted entirely when validEmail is valid.
296
359
  validEmail:
297
360
  type: string
298
361
  enum:
299
362
  - valid
363
+ - accept_all
300
364
  - invalid
301
365
  - INVALID_EMAIL
302
366
  - unknown
303
367
  - risky
304
368
  - app_server_blocked
305
- description: 'Comprehensive deliverability assessment. Casing is inconsistent in the live API: syntactically invalid addresses return INVALID_EMAIL, while semantically invalid (undeliverable) addresses return lowercase invalid. risky is a documented possibility not observed during testing. app_server_blocked is returned when the recipient mail server blocked the live verification attempt (reason explains that retrying later may succeed).'
369
+ description: 'Comprehensive deliverability assessment. valid: recipient confirmed deliverable, reason omitted. accept_all: the domain is catch-all and accepted the recipient, so this specific mailbox is unconfirmed — see domain.catchAll, reason ''domain accepts all addresses.''. invalid: rejected mailbox, syntax failure, or the domain accepts no mail at all (a null MX). unknown: no conclusive answer, most common for domains with no MX record that only get a probe against their address record. risky: mailbox exists but over quota, or the server deferred with a greylist response. app_server_blocked: our verifier IP was blocked by the receiving server. Casing is inconsistent in the live API: syntactically invalid addresses can return the raw enum name INVALID_EMAIL instead of lowercase invalid — this is a known API bug, handle it defensively as equivalent to invalid.'
306
370
  validSyntax:
307
371
  type: boolean
308
372
  description: Validates email address format compliance with RFC 5322 standards.
@@ -342,7 +406,7 @@ components:
342
406
  description: Classification indicating free or consumer-grade email service providers.
343
407
  catchAll:
344
408
  type: boolean
345
- description: Detection flag for domains configured to accept mail for any recipient address.
409
+ description: Detection flag for domains configured to accept mail for any recipient address. true always corresponds to a top-level validEmail of accept_all.
346
410
  description: Domain validation details for the email address.
347
411
  AccountObject:
348
412
  type: object
@@ -358,20 +422,19 @@ components:
358
422
  description: Account-level validation details.
359
423
  DnsObject:
360
424
  type: object
361
- required:
362
- - mxRecord
425
+ required: []
363
426
  properties:
364
427
  mxRecord:
365
428
  type: array
366
429
  items:
367
430
  type: string
368
- description: Collection of MX (Mail Exchange) hostname records from DNS queries.
431
+ description: Every MX hostname at the domain's lowest preference (not just one). ["."] means the domain publishes a null MX and accepts no mail at all. Absent entirely when the domain has no MX record of any kind — check aRecord in that case.
369
432
  aRecord:
370
433
  type: array
371
434
  items:
372
435
  type: string
373
- description: Collection of A (Address) records for the domain. Not observed in testing may be rarely or never populated.
374
- description: DNS records for the email domain.
436
+ description: Collection of A (Address) records for the domain. Present when the domain has no MX record but does resolve to a web server or other host.
437
+ description: DNS records for the email domain. Absent entirely when the domain publishes neither an MX nor an A record.
375
438
  AddressObject:
376
439
  type: object
377
440
  properties:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apifreaks/openapi-specs",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
4
  "description": "Public OpenAPI 3.1 specifications for all APIFreaks API products.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",