@apifreaks/openapi-specs 0.3.2 → 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.
- package/dist/index.cjs +25641 -23026
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +25641 -23025
- package/dist/specs/domain/domain-reputation.yaml +898 -0
- package/dist/specs/domain/domain-typosquatting.yaml +253 -0
- package/package.json +1 -1
- package/specs/domain/domain-reputation.json +1115 -0
- package/specs/domain/domain-typosquatting.json +344 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
{
|
|
2
|
+
"openapi": "3.1.1",
|
|
3
|
+
"info": {
|
|
4
|
+
"title": "Domain Typosquatting API - Find Typo and Look-Alike Domains for Brand Protection and Phishing Discovery",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"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.",
|
|
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",
|
|
16
|
+
"description": "Domain Typosquatting API Server"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"paths": {
|
|
20
|
+
"/domain/typosquatting": {
|
|
21
|
+
"get": {
|
|
22
|
+
"tags": ["Domain APIs"],
|
|
23
|
+
"summary": "Find registered typo-variant or wildcard-pattern domains for a brand keyword.",
|
|
24
|
+
"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.",
|
|
25
|
+
"parameters": [
|
|
26
|
+
{
|
|
27
|
+
"name": "format",
|
|
28
|
+
"in": "query",
|
|
29
|
+
"required": false,
|
|
30
|
+
"schema": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"enum": ["json", "xml"],
|
|
33
|
+
"default": "json"
|
|
34
|
+
},
|
|
35
|
+
"description": "Format of the response."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "keyword",
|
|
39
|
+
"in": "query",
|
|
40
|
+
"required": false,
|
|
41
|
+
"schema": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"minLength": 3,
|
|
44
|
+
"maxLength": 63
|
|
45
|
+
},
|
|
46
|
+
"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."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "pattern",
|
|
50
|
+
"in": "query",
|
|
51
|
+
"required": false,
|
|
52
|
+
"schema": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"minLength": 3,
|
|
55
|
+
"maxLength": 63
|
|
56
|
+
},
|
|
57
|
+
"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."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "pageToken",
|
|
61
|
+
"in": "query",
|
|
62
|
+
"required": false,
|
|
63
|
+
"schema": {
|
|
64
|
+
"type": "string"
|
|
65
|
+
},
|
|
66
|
+
"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."
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"responses": {
|
|
70
|
+
"200": {
|
|
71
|
+
"description": "Success",
|
|
72
|
+
"content": {
|
|
73
|
+
"application/json": {
|
|
74
|
+
"schema": {
|
|
75
|
+
"$ref": "#/components/schemas/DomainTyposquattingResponse"
|
|
76
|
+
},
|
|
77
|
+
"examples": {
|
|
78
|
+
"keywordSuccess": {
|
|
79
|
+
"summary": "Keyword search (paypal)",
|
|
80
|
+
"value": {
|
|
81
|
+
"status": true,
|
|
82
|
+
"totalRecords": 1284,
|
|
83
|
+
"currentPage": 1,
|
|
84
|
+
"hasNextPage": true,
|
|
85
|
+
"totalPages": 13,
|
|
86
|
+
"nextPageToken": "<opaque_token>",
|
|
87
|
+
"domains": [
|
|
88
|
+
{
|
|
89
|
+
"domainName": "p-aypal.com",
|
|
90
|
+
"createDate": "2025-04-17",
|
|
91
|
+
"expiryDate": "2026-04-17",
|
|
92
|
+
"lastSeen": "2026-05-29",
|
|
93
|
+
"isDropped": true
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"domainName": "p-aypal.de",
|
|
97
|
+
"lastSeen": "2024-07-11",
|
|
98
|
+
"isDropped": true
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"domainName": "p0aypal.com",
|
|
102
|
+
"createDate": "2017-12-29",
|
|
103
|
+
"expiryDate": "2026-12-29",
|
|
104
|
+
"lastSeen": "2026-08-18",
|
|
105
|
+
"isDropped": false
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"domainName": "p7ypal.com",
|
|
109
|
+
"isDropped": true
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"domainName": "pa-pal.club",
|
|
113
|
+
"createDate": "2019-10-25",
|
|
114
|
+
"expiryDate": "2020-10-25",
|
|
115
|
+
"isDropped": false
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"patternSuccess": {
|
|
121
|
+
"summary": "Wildcard pattern search (*paypal*)",
|
|
122
|
+
"value": {
|
|
123
|
+
"status": true,
|
|
124
|
+
"totalRecords": 5471,
|
|
125
|
+
"currentPage": 1,
|
|
126
|
+
"hasNextPage": true,
|
|
127
|
+
"totalPages": 55,
|
|
128
|
+
"nextPageToken": "<opaque_token>",
|
|
129
|
+
"domains": [
|
|
130
|
+
{
|
|
131
|
+
"domainName": "paypal-support.com",
|
|
132
|
+
"createDate": "2024-11-02",
|
|
133
|
+
"expiryDate": "2026-11-02",
|
|
134
|
+
"lastSeen": "2026-08-30",
|
|
135
|
+
"isDropped": false
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"domainName": "login-paypal.net",
|
|
139
|
+
"lastSeen": "2025-12-14",
|
|
140
|
+
"isDropped": true
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"emptyResult": {
|
|
146
|
+
"summary": "No matches found",
|
|
147
|
+
"value": {
|
|
148
|
+
"status": true,
|
|
149
|
+
"totalRecords": 0,
|
|
150
|
+
"currentPage": 1,
|
|
151
|
+
"hasNextPage": false,
|
|
152
|
+
"totalPages": 0,
|
|
153
|
+
"domains": []
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"headers": {
|
|
160
|
+
"X-AF-Credits-Cost": {
|
|
161
|
+
"$ref": "#/components/headers/X-AF-Credits-Cost"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"400": {
|
|
166
|
+
"description": "Bad Request – Invalid parameters",
|
|
167
|
+
"content": {
|
|
168
|
+
"application/json": {
|
|
169
|
+
"schema": {
|
|
170
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
171
|
+
},
|
|
172
|
+
"examples": {
|
|
173
|
+
"shortPattern": {
|
|
174
|
+
"summary": "Pattern has too few non-wildcard characters",
|
|
175
|
+
"value": {
|
|
176
|
+
"error": "Invalid Pattern Exception",
|
|
177
|
+
"message": "The pattern must contain at least 5 non-wildcard characters and no more than 3 wildcards.",
|
|
178
|
+
"path": "/v1.0/domain/typosquatting",
|
|
179
|
+
"status": 400,
|
|
180
|
+
"timestamp": "2026-09-08T12:00:00.000Z"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"bothParams": {
|
|
184
|
+
"summary": "Both keyword and pattern supplied",
|
|
185
|
+
"value": {
|
|
186
|
+
"error": "Invalid Param Exception",
|
|
187
|
+
"message": "Use either the \"keyword\" or the \"pattern\" parameter, never both.",
|
|
188
|
+
"path": "/v1.0/domain/typosquatting",
|
|
189
|
+
"status": 400,
|
|
190
|
+
"timestamp": "2026-09-08T12:00:00.000Z"
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
"missingParam": {
|
|
194
|
+
"summary": "Neither keyword nor pattern supplied",
|
|
195
|
+
"value": {
|
|
196
|
+
"error": "Invalid Param Exception",
|
|
197
|
+
"message": "Please provide either a \"keyword\" or a \"pattern\" parameter.",
|
|
198
|
+
"path": "/v1.0/domain/typosquatting",
|
|
199
|
+
"status": 400,
|
|
200
|
+
"timestamp": "2026-09-08T12:00:00.000Z"
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"headers": {
|
|
207
|
+
"X-AF-Credits-Cost": {
|
|
208
|
+
"$ref": "#/components/headers/X-AF-Credits-Cost"
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
"operationId": "getDomainTyposquatting"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"components": {
|
|
218
|
+
"securitySchemes": {
|
|
219
|
+
"ApiKeyAuthHeader": {
|
|
220
|
+
"type": "apiKey",
|
|
221
|
+
"in": "header",
|
|
222
|
+
"name": "X-apiKey",
|
|
223
|
+
"description": "Pass your API key via the X-apiKey request header."
|
|
224
|
+
},
|
|
225
|
+
"ApiKeyAuthQuery": {
|
|
226
|
+
"type": "apiKey",
|
|
227
|
+
"in": "query",
|
|
228
|
+
"name": "apiKey",
|
|
229
|
+
"description": "Pass your API key via the apiKey query parameter."
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"schemas": {
|
|
233
|
+
"DomainTyposquattingResponse": {
|
|
234
|
+
"type": "object",
|
|
235
|
+
"required": ["status", "totalRecords", "currentPage", "hasNextPage", "totalPages", "domains"],
|
|
236
|
+
"properties": {
|
|
237
|
+
"status": {
|
|
238
|
+
"type": "boolean",
|
|
239
|
+
"description": "Indicates if the request was successful."
|
|
240
|
+
},
|
|
241
|
+
"totalRecords": {
|
|
242
|
+
"type": "integer",
|
|
243
|
+
"description": "Total number of domains found."
|
|
244
|
+
},
|
|
245
|
+
"currentPage": {
|
|
246
|
+
"type": "integer",
|
|
247
|
+
"description": "Page number of the current response. Starts at 1."
|
|
248
|
+
},
|
|
249
|
+
"hasNextPage": {
|
|
250
|
+
"type": "boolean",
|
|
251
|
+
"description": "true if at least one additional page is available."
|
|
252
|
+
},
|
|
253
|
+
"totalPages": {
|
|
254
|
+
"type": "integer",
|
|
255
|
+
"description": "Total number of pages available."
|
|
256
|
+
},
|
|
257
|
+
"nextPageToken": {
|
|
258
|
+
"type": "string",
|
|
259
|
+
"description": "Opaque token to pass as pageToken on the next request. Present only when hasNextPage is true."
|
|
260
|
+
},
|
|
261
|
+
"domains": {
|
|
262
|
+
"type": "array",
|
|
263
|
+
"items": {
|
|
264
|
+
"$ref": "#/components/schemas/DomainItem"
|
|
265
|
+
},
|
|
266
|
+
"description": "List of typo-variant or pattern-matched domains on the current page."
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
"description": "Paginated response containing typo-variant or pattern-matched domains."
|
|
270
|
+
},
|
|
271
|
+
"DomainItem": {
|
|
272
|
+
"type": "object",
|
|
273
|
+
"required": ["domainName", "isDropped"],
|
|
274
|
+
"properties": {
|
|
275
|
+
"domainName": {
|
|
276
|
+
"type": "string",
|
|
277
|
+
"description": "Domain name."
|
|
278
|
+
},
|
|
279
|
+
"createDate": {
|
|
280
|
+
"type": "string",
|
|
281
|
+
"description": "Domain creation date (YYYY-MM-DD). May be absent for older or less-actively-tracked entries."
|
|
282
|
+
},
|
|
283
|
+
"expiryDate": {
|
|
284
|
+
"type": "string",
|
|
285
|
+
"description": "Domain expiration date (YYYY-MM-DD). May be absent for older or less-actively-tracked entries."
|
|
286
|
+
},
|
|
287
|
+
"lastSeen": {
|
|
288
|
+
"type": "string",
|
|
289
|
+
"description": "Last time the domain was observed (YYYY-MM-DD). One of the two fields reliably meaningful across a full result set."
|
|
290
|
+
},
|
|
291
|
+
"isDropped": {
|
|
292
|
+
"type": "boolean",
|
|
293
|
+
"description": "Indicates whether the domain has dropped out of the registry and become available to register again."
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
"description": "A single typo-variant or pattern-matched domain with registration lifecycle data."
|
|
297
|
+
},
|
|
298
|
+
"ErrorResponse": {
|
|
299
|
+
"type": "object",
|
|
300
|
+
"description": "Standard error envelope returned by the API on failed requests.",
|
|
301
|
+
"required": ["message"],
|
|
302
|
+
"properties": {
|
|
303
|
+
"error": {
|
|
304
|
+
"type": "string",
|
|
305
|
+
"description": "Short error category or exception type."
|
|
306
|
+
},
|
|
307
|
+
"message": {
|
|
308
|
+
"type": "string",
|
|
309
|
+
"description": "Human-readable error message describing the failure."
|
|
310
|
+
},
|
|
311
|
+
"path": {
|
|
312
|
+
"type": "string",
|
|
313
|
+
"description": "API endpoint path that produced the error."
|
|
314
|
+
},
|
|
315
|
+
"status": {
|
|
316
|
+
"type": "integer",
|
|
317
|
+
"description": "HTTP status code returned with the error."
|
|
318
|
+
},
|
|
319
|
+
"timestamp": {
|
|
320
|
+
"type": "string",
|
|
321
|
+
"format": "date-time",
|
|
322
|
+
"description": "Timestamp when the error occurred (ISO 8601)."
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
"headers": {
|
|
328
|
+
"X-AF-Credits-Cost": {
|
|
329
|
+
"description": "Specifies the number of credits consumed by the current request.",
|
|
330
|
+
"schema": {
|
|
331
|
+
"type": "integer"
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"security": [
|
|
337
|
+
{
|
|
338
|
+
"ApiKeyAuthHeader": []
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"ApiKeyAuthQuery": []
|
|
342
|
+
}
|
|
343
|
+
]
|
|
344
|
+
}
|