@apifreaks/openapi-specs 0.4.0 → 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.
@@ -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.4.0",
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",
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "Bulk Email Validation API - Validate and Verify Emails in Bulk",
5
5
  "version": "1.0.0",
6
- "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.",
6
+ "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.",
7
7
  "contact": {
8
8
  "name": "APIFreaks Support",
9
9
  "url": "https://apifreaks.com/contact",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "examples": {
57
57
  "bulkEmailsValidated": {
58
- "summary": "Mix of a valid and a syntactically invalid email",
58
+ "summary": "Mix of valid, syntactically invalid, accept_all, null-MX invalid, and unknown (no-MX probe) results",
59
59
  "value": {
60
60
  "emailResponse": [
61
61
  {
@@ -94,6 +94,74 @@
94
94
  "name": "not-an-email",
95
95
  "validDomain": false
96
96
  }
97
+ },
98
+ {
99
+ "success": true,
100
+ "email": "random12345@yahoo.com",
101
+ "validEmail": "accept_all",
102
+ "validSyntax": true,
103
+ "reason": "domain accepts all addresses.",
104
+ "domain": {
105
+ "name": "yahoo.com",
106
+ "disposable": false,
107
+ "spam": false,
108
+ "free": true,
109
+ "validDomain": true,
110
+ "catchAll": true
111
+ },
112
+ "account": {
113
+ "role": false,
114
+ "fullMailBox": false
115
+ },
116
+ "dns": {
117
+ "mxRecord": [
118
+ "mta5.am0.yahoodns.net.",
119
+ "mta6.am0.yahoodns.net.",
120
+ "mta7.am0.yahoodns.net."
121
+ ]
122
+ }
123
+ },
124
+ {
125
+ "success": true,
126
+ "email": "test@example.com",
127
+ "validEmail": "invalid",
128
+ "validSyntax": true,
129
+ "reason": "domain does not accept mail.",
130
+ "domain": {
131
+ "name": "example.com",
132
+ "disposable": true,
133
+ "spam": false,
134
+ "free": false,
135
+ "validDomain": true,
136
+ "catchAll": false
137
+ },
138
+ "account": {
139
+ "role": false
140
+ },
141
+ "dns": {
142
+ "mxRecord": ["."]
143
+ }
144
+ },
145
+ {
146
+ "success": true,
147
+ "email": "test@neverssl.com",
148
+ "validEmail": "unknown",
149
+ "validSyntax": true,
150
+ "reason": "We are unable to determine if email is valid or invalid.",
151
+ "domain": {
152
+ "name": "neverssl.com",
153
+ "disposable": false,
154
+ "spam": false,
155
+ "free": false,
156
+ "validDomain": true,
157
+ "catchAll": false
158
+ },
159
+ "account": {
160
+ "role": false
161
+ },
162
+ "dns": {
163
+ "aRecord": ["34.223.124.45"]
164
+ }
97
165
  }
98
166
  ]
99
167
  }
@@ -298,19 +366,20 @@
298
366
  },
299
367
  "reason": {
300
368
  "type": "string",
301
- "description": "Detailed explanation returned when validEmail is not valid."
369
+ "description": "Detailed explanation returned when validEmail is not valid. Omitted entirely when validEmail is valid."
302
370
  },
303
371
  "validEmail": {
304
372
  "type": "string",
305
373
  "enum": [
306
374
  "valid",
375
+ "accept_all",
307
376
  "invalid",
308
377
  "INVALID_EMAIL",
309
378
  "unknown",
310
379
  "risky",
311
380
  "app_server_blocked"
312
381
  ],
313
- "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)."
382
+ "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."
314
383
  },
315
384
  "validSyntax": {
316
385
  "type": "boolean",
@@ -362,7 +431,7 @@
362
431
  },
363
432
  "catchAll": {
364
433
  "type": "boolean",
365
- "description": "Detection flag for domains configured to accept mail for any recipient address."
434
+ "description": "Detection flag for domains configured to accept mail for any recipient address. true always corresponds to a top-level validEmail of accept_all."
366
435
  }
367
436
  },
368
437
  "description": "Domain validation details for the email address."
@@ -384,24 +453,24 @@
384
453
  },
385
454
  "DnsObject": {
386
455
  "type": "object",
387
- "required": ["mxRecord"],
456
+ "required": [],
388
457
  "properties": {
389
458
  "mxRecord": {
390
459
  "type": "array",
391
460
  "items": {
392
461
  "type": "string"
393
462
  },
394
- "description": "Collection of MX (Mail Exchange) hostname records from DNS queries."
463
+ "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."
395
464
  },
396
465
  "aRecord": {
397
466
  "type": "array",
398
467
  "items": {
399
468
  "type": "string"
400
469
  },
401
- "description": "Collection of A (Address) records for the domain. Not observed in testing may be rarely or never populated."
470
+ "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."
402
471
  }
403
472
  },
404
- "description": "DNS records for the email domain."
473
+ "description": "DNS records for the email domain. Absent entirely when the domain publishes neither an MX nor an A record."
405
474
  },
406
475
  "AddressObject": {
407
476
  "type": "object",
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "Email Checker API - Real-Time Validation, Deliverability & Risk Signals",
5
5
  "version": "1.0.0",
6
- "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.",
6
+ "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.",
7
7
  "contact": {
8
8
  "name": "APIFreaks Support",
9
9
  "url": "https://apifreaks.com/contact",
@@ -96,8 +96,8 @@
96
96
  }
97
97
  }
98
98
  },
99
- "noMxRecord": {
100
- "summary": "Valid syntax, domain has no MX record",
99
+ "nonexistentDomain": {
100
+ "summary": "Valid syntax, domain does not exist (NXDOMAIN)",
101
101
  "value": {
102
102
  "success": true,
103
103
  "email": "test@nonexistentdomainxyz123abc.com",
@@ -117,6 +117,83 @@
117
117
  }
118
118
  }
119
119
  },
120
+ "acceptAll": {
121
+ "summary": "Catch-all domain accepted the recipient — mailbox unconfirmed",
122
+ "value": {
123
+ "success": true,
124
+ "email": "random12345@yahoo.com",
125
+ "validEmail": "accept_all",
126
+ "validSyntax": true,
127
+ "reason": "domain accepts all addresses.",
128
+ "domain": {
129
+ "name": "yahoo.com",
130
+ "disposable": false,
131
+ "spam": false,
132
+ "free": true,
133
+ "validDomain": true,
134
+ "catchAll": true
135
+ },
136
+ "account": {
137
+ "role": false,
138
+ "fullMailBox": false
139
+ },
140
+ "dns": {
141
+ "mxRecord": [
142
+ "mta5.am0.yahoodns.net.",
143
+ "mta6.am0.yahoodns.net.",
144
+ "mta7.am0.yahoodns.net."
145
+ ]
146
+ }
147
+ }
148
+ },
149
+ "nullMxDomain": {
150
+ "summary": "Domain publishes a null MX (single \".\") — accepts no mail at all",
151
+ "value": {
152
+ "success": true,
153
+ "email": "test@example.com",
154
+ "validEmail": "invalid",
155
+ "validSyntax": true,
156
+ "reason": "domain does not accept mail.",
157
+ "domain": {
158
+ "name": "example.com",
159
+ "disposable": true,
160
+ "spam": false,
161
+ "free": false,
162
+ "validDomain": true,
163
+ "catchAll": false
164
+ },
165
+ "account": {
166
+ "role": false
167
+ },
168
+ "dns": {
169
+ "mxRecord": ["."]
170
+ }
171
+ }
172
+ },
173
+ "noMxAddressOnly": {
174
+ "summary": "Domain has no MX record but a working A record — gets a real SMTP probe",
175
+ "value": {
176
+ "success": true,
177
+ "email": "test@neverssl.com",
178
+ "validEmail": "unknown",
179
+ "validSyntax": true,
180
+ "reason": "We are unable to determine if email is valid or invalid.",
181
+ "domain": {
182
+ "name": "neverssl.com",
183
+ "disposable": false,
184
+ "spam": false,
185
+ "free": false,
186
+ "validDomain": true,
187
+ "catchAll": false
188
+ },
189
+ "account": {
190
+ "role": false
191
+ },
192
+ "dns": {
193
+ "aRecord": ["34.223.124.45"]
194
+ }
195
+ }
196
+ },
120
197
  "withIp": {
121
198
  "summary": "With ip — adds geolocation/security enrichment under address",
122
199
  "value": {
@@ -387,12 +464,12 @@
387
464
  },
388
465
  "reason": {
389
466
  "type": "string",
390
- "description": "Detailed explanation returned when validEmail is not valid."
467
+ "description": "Detailed explanation returned when validEmail is not valid. Omitted entirely when validEmail is valid."
391
468
  },
392
469
  "validEmail": {
393
470
  "type": "string",
394
- "enum": ["valid", "invalid", "INVALID_EMAIL", "unknown", "risky", "app_server_blocked"],
395
- "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)."
471
+ "enum": ["valid", "accept_all", "invalid", "INVALID_EMAIL", "unknown", "risky", "app_server_blocked"],
472
+ "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."
396
473
  },
397
474
  "validSyntax": {
398
475
  "type": "boolean",
@@ -444,7 +521,7 @@
444
521
  },
445
522
  "catchAll": {
446
523
  "type": "boolean",
447
- "description": "Detection flag for domains configured to accept mail for any recipient address."
524
+ "description": "Detection flag for domains configured to accept mail for any recipient address. true always corresponds to a top-level validEmail of accept_all."
448
525
  }
449
526
  },
450
527
  "description": "Domain validation details for the email address."
@@ -466,24 +543,24 @@
466
543
  },
467
544
  "DnsObject": {
468
545
  "type": "object",
469
- "required": ["mxRecord"],
546
+ "required": [],
470
547
  "properties": {
471
548
  "mxRecord": {
472
549
  "type": "array",
473
550
  "items": {
474
551
  "type": "string"
475
552
  },
476
- "description": "Collection of MX (Mail Exchange) hostname records from DNS queries."
553
+ "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."
477
554
  },
478
555
  "aRecord": {
479
556
  "type": "array",
480
557
  "items": {
481
558
  "type": "string"
482
559
  },
483
- "description": "Collection of A (Address) records for the domain. Not observed in testing may be rarely or never populated."
560
+ "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."
484
561
  }
485
562
  },
486
- "description": "DNS records for the email domain."
563
+ "description": "DNS records for the email domain. Absent entirely when the domain publishes neither an MX nor an A record."
487
564
  },
488
565
  "AddressObject": {
489
566
  "type": "object",