Validate Email Documentation

Shared Validate Throttle: 500/Hour

Object: Email

Email Address
There are a lot of features here that are not a part of an official standard. Use Unicode/IDNA and Normalization features with CAUTION!
While an Email Address may be valid, it is up to the recieving Host to determine whether or not they consider it valid or not. Hosts may take into consideration Case Sensitivity!

Email Addresses are currently not avaliable in the URI validator. When a proper mailto validator is created it will be supported!

print
Object: Print

Example

"print": {
	"unicode": "\"😻\"@[127.0.0.1]",
	"idna": "\"xn--238h\"@[127.0.0.1]"
}
local
Object: Local

Example

"local": {
	"labels": [
		{
			"print": {
				"unicode": "hi"
			},
			"encoding": {},
			"correct": true
		}
	],
	"correct": true
}
host
Object: Host

Example

"host": {
	"host": {
		"print": {
			"unicode": "juandefu.ca",
			"unicode-email": "juandefu.ca",
			"idna": "juandefu.ca"
		},
		"hostname": {
			"print": {
				"unicode": "juandefu.ca",
				"idna": "juandefu.ca",
				"percent-encoded": "juandefu.ca"
			},
			"labels": [
				{
					"print": {
						"unicode": "juandefu"
					},
					"encoding": {},
					"delimiter": 1,
					"correct": true
				},
				{
					"print": {
						"unicode": "ca"
					},
					"encoding": {},
					"correct": true
				}
			],
			"correct": true,
			"correct-email": true,
			"tld-real": true,
			"tld-pos": 1
		},
		"correct": true,
		"correct-email": true
	},
	"info": [
		{
			"correct": true
		},
		{
			"correct": true
		}
	],
	"correct": true
}
toolong
Boolean
Is this Email Longer than the Email RFC Allows?

Emails are allowed to be up to 254 characters.

Example

"toolong": false
normalized-toolong
Boolean
Is the Normalized Email Longer than the Email RFC Allows?

Emails are allowed to be up to 254 characters.

Example

"normalized-toolong": false
dangerous
Boolean
Is this Potentially Dangerous?

Example

"dangerous": false
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Email

ASCII AText @ ASCII Hostname Input: "hi@juandefu.ca"
{
	"print": {
		"unicode": "hi@juandefu.ca",
		"idna": "hi@juandefu.ca",
		"parsed-unicode": "hi@juandefu.ca",
		"parsed-idna": "hi@juandefu.ca",
		"normalized-unicode": "hi@juandefu.ca",
		"normalized-idna": "hi@juandefu.ca",
		"parsed-normalized-unicode": "hi@juandefu.ca",
		"parsed-normalized-idna": "hi@juandefu.ca"
	},
	"local": {
		"labels": [
			{
				"print": {
					"unicode": "hi"
				},
				"encoding": {},
				"correct": true
			}
		],
		"correct": true
	},
	"host": {
		"host": {
			"print": {
				"unicode": "juandefu.ca",
				"unicode-email": "juandefu.ca",
				"idna": "juandefu.ca"
			},
			"hostname": {
				"print": {
					"unicode": "juandefu.ca",
					"idna": "juandefu.ca",
					"percent-encoded": "juandefu.ca"
				},
				"labels": [
					{
						"print": {
							"unicode": "juandefu"
						},
						"encoding": {},
						"delimiter": 1,
						"correct": true
					},
					{
						"print": {
							"unicode": "ca"
						},
						"encoding": {},
						"correct": true
					}
				],
				"correct": true,
				"correct-email": true,
				"tld-real": true,
				"tld-pos": 1
			},
			"correct": true,
			"correct-email": true
		},
		"info": [
			{
				"correct": true
			},
			{
				"correct": true
			}
		],
		"correct": true
	},
	"correct": true
}
IDNA QText @ Literal IPv4 Input: ""xn--238h"@[127.0.0.1]"
{
	"print": {
		"unicode": "\"😻\"@[127.0.0.1]",
		"idna": "\"xn--238h\"@[127.0.0.1]",
		"parsed-unicode": "\"😻\"@[127.0.0.1]",
		"parsed-idna": "\"xn--238h\"@[127.0.0.1]",
		"normalized-unicode": "\"😻\"@[127.0.0.1]",
		"normalized-idna": "\"xn--238h\"@[127.0.0.1]",
		"parsed-normalized-unicode": "\"😻\"@[127.0.0.1]",
		"parsed-normalized-idna": "\"xn--238h\"@[127.0.0.1]"
	},
	"local": {
		"labels": [
			{
				"print": {
					"unicode": "\"😻\""
				},
				"encoding": {
					"idna": true,
					"idna-excluded": true
				},
				"quote": {
					"correct": true
				},
				"correct": true
			}
		],
		"correct": true
	},
	"host": {
		"host": {
			"print": {
				"unicode": "127.0.0.1",
				"unicode-email": "[127.0.0.1]",
				"idna": "127.0.0.1"
			},
			"literal": 1,
			"ip": {
				"print": {
					"ipv4": "127.0.0.1",
					"ipv6short": "::ffff:7f00:1",
					"ipv6v4short": "::ffff:127.0.0.1",
					"ipv6long": "0000:0000:0000:0000:0000:ffff:7f00:0001"
				},
				"blocks": [
					{
						"size": 8,
						"base": 10,
						"number": 127,
						"correct": true
					},
					{
						"size": 8,
						"base": 10,
						"correct": true
					},
					{
						"size": 8,
						"base": 10,
						"correct": true
					},
					{
						"size": 8,
						"base": 10,
						"number": 1,
						"correct": true
					}
				],
				"bytes": [
					127,
					0,
					0,
					1
				],
				"version": 4,
				"correct": true
			},
			"correct-email": true
		},
		"info": [
			{
				"correct": true
			}
		],
		"correct": true
	},
	"correct": true
}
ASCII QText ASCII Comment @ ASCII Hostname ASCII Comments Input: ""hey ya'll" (hi)@ (second level) juandefu (this site) . (cctld) ca (canada)"
{
	"print": {
		"unicode": "\"hey ya'll\"@juandefu.ca",
		"idna": "\"hey ya'll\"@juandefu.ca",
		"parsed-unicode": "\"hey ya'll\" (hi)@ (second level) juandefu (this site) . (cctld) ca (canada)",
		"parsed-idna": "\"hey ya'll\" (hi)@ (second level) juandefu (this site) . (cctld) ca (canada)",
		"normalized-unicode": "\"hey ya'll\"@juandefu.ca",
		"normalized-idna": "\"hey ya'll\"@juandefu.ca",
		"parsed-normalized-unicode": "\"hey ya'll\" (hi)@ (second level) juandefu (this site) . (cctld) ca (canada)",
		"parsed-normalized-idna": "\"hey ya'll\" (hi)@ (second level) juandefu (this site) . (cctld) ca (canada)"
	},
	"local": {
		"labels": [
			{
				"print": {
					"unicode": "\"hey ya'll\""
				},
				"encoding": {},
				"comments": {
					"after": [
						{
							"encoding": {},
							"comment": "hi",
							"correct": true
						}
					],
					"correct": true
				},
				"quote": {
					"correct": true
				},
				"ws-after": 1,
				"correct": true
			}
		]
	},
	"host": {
		"host": {
			"print": {
				"unicode": "juandefu.ca",
				"unicode-email": "juandefu.ca",
				"idna": "juandefu.ca"
			},
			"hostname": {
				"print": {
					"unicode": "juandefu.ca",
					"idna": "juandefu.ca",
					"percent-encoded": "juandefu.ca"
				},
				"labels": [
					{
						"print": {
							"unicode": "juandefu"
						},
						"encoding": {},
						"delimiter": 1,
						"correct": true
					},
					{
						"print": {
							"unicode": "ca"
						},
						"encoding": {},
						"correct": true
					}
				],
				"correct": true,
				"correct-email": true,
				"tld-real": true,
				"tld-pos": 1
			},
			"correct": true,
			"correct-email": true
		},
		"info": [
			{
				"comments": {
					"before": [
						{
							"encoding": {},
							"comment": "second level",
							"ws-before": 1,
							"correct": true
						}
					],
					"after": [
						{
							"encoding": {},
							"comment": "this site",
							"ws-after": 1,
							"correct": true
						}
					],
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"correct": true
			},
			{
				"comments": {
					"before": [
						{
							"encoding": {},
							"comment": "cctld",
							"ws-before": 1,
							"correct": true
						}
					],
					"after": [
						{
							"encoding": {},
							"comment": "canada",
							"correct": true
						}
					],
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"correct": true
			}
		]
	}
}
Unicode Comment IDNA AText ASCII Comment @ Non-Literal IPv4 ASCII Comments Input: " (😻) xn--238h (xn--238h) . " 😻 " @ (this) 127 (is) . (very) 0 . 0 (discouraged)  . (this is) 1 (an ip) "
{
	"print": {
		"unicode": "😻.\" 😻 \"@[127.0.0.1]",
		"idna": "xn--238h.\"xn--  -pt82a\"@[127.0.0.1]",
		"parsed-unicode": " (😻) 😻 (xn--238h) . \" 😻 \" @ (this) (very) (this is) [127.0.0.1] (is) (discouraged) (an ip) ",
		"parsed-idna": " (😻) xn--238h (xn--238h) . \"xn--  -pt82a\" @ (this) (very) (this is) [127.0.0.1] (is) (discouraged) (an ip) ",
		"normalized-unicode": "😻.\" 😻 \"@[127.0.0.1]",
		"normalized-idna": "xn--238h.\"xn--  -pt82a\"@[127.0.0.1]",
		"parsed-normalized-unicode": " (😻) 😻 (xn--238h) . \" 😻 \" @ (this) (very) (this is) [127.0.0.1] (is) (discouraged) (an ip) ",
		"parsed-normalized-idna": " (😻) xn--238h (xn--238h) . \"xn--  -pt82a\" @ (this) (very) (this is) [127.0.0.1] (is) (discouraged) (an ip) "
	},
	"local": {
		"labels": [
			{
				"print": {
					"unicode": "😻"
				},
				"encoding": {
					"idna": true,
					"idna-excluded": true
				},
				"comments": {
					"before": [
						{
							"encoding": {
								"unicode": true
							},
							"comment": "😻",
							"ws-before": 1,
							"correct": true
						}
					],
					"after": [
						{
							"encoding": {},
							"comment": "xn--238h",
							"ws-after": 1,
							"correct": true
						}
					],
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"delimiter": 1,
				"correct": true
			},
			{
				"print": {
					"unicode": "\" 😻 \""
				},
				"encoding": {
					"unicode": true,
					"idna-excluded": true
				},
				"quote": {
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"correct": true
			}
		]
	},
	"host": {
		"host": {
			"print": {
				"unicode": "127.0.0.1",
				"unicode-email": "[127.0.0.1]",
				"idna": "127.0.0.1"
			},
			"ip": {
				"print": {
					"ipv4": "127.0.0.1",
					"ipv6short": "::ffff:7f00:1",
					"ipv6v4short": "::ffff:127.0.0.1",
					"ipv6long": "0000:0000:0000:0000:0000:ffff:7f00:0001"
				},
				"blocks": [
					{
						"size": 8,
						"base": 10,
						"number": 127,
						"correct": true
					},
					{
						"size": 8,
						"base": 10,
						"correct": true
					},
					{
						"size": 8,
						"base": 10,
						"correct": true
					},
					{
						"size": 8,
						"base": 10,
						"number": 1,
						"correct": true
					}
				],
				"bytes": [
					127,
					0,
					0,
					1
				],
				"version": 4,
				"correct": true
			},
			"correct": true
		},
		"info": [
			{
				"comments": {
					"before": [
						{
							"encoding": {},
							"comment": "this",
							"ws-before": 1,
							"correct": true
						}
					],
					"after": [
						{
							"encoding": {},
							"comment": "is",
							"ws-after": 1,
							"correct": true
						}
					],
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"correct": true
			},
			{
				"comments": {
					"before": [
						{
							"encoding": {},
							"comment": "very",
							"ws-before": 1,
							"correct": true
						}
					],
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"correct": true
			},
			{
				"comments": {
					"after": [
						{
							"encoding": {},
							"comment": "discouraged",
							"ws-after": 2
						}
					]
				},
				"ws-before": 1,
				"ws-after": 1
			},
			{
				"comments": {
					"before": [
						{
							"encoding": {},
							"comment": "this is",
							"ws-before": 1,
							"correct": true
						}
					],
					"after": [
						{
							"encoding": {},
							"comment": "an ip",
							"ws-after": 1,
							"correct": true
						}
					],
					"correct": true
				},
				"ws-before": 1,
				"ws-after": 1,
				"correct": true
			}
		]
	}
}

Object: Email_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
print
Object: Print_Options
local
Object: Local_Options
host
Object: Host_Options
toolong
Boolean
normalized-toolong
Boolean
dangerous
Boolean
correct
Boolean

Object Examples: Email_Options

Default Options:
{
	"print": {
		"unicode": true,
		"idna": true,
		"parsed-unicode": false,
		"parsed-idna": false,
		"normalized-unicode": false,
		"normalized-idna": false,
		"parsed-normalized-unicode": false,
		"parsed-normalized-idna": false
	},
	"local": {
		"labels": {
			"print": {
				"unicode": true,
				"idna": false,
				"parsed-unicode": false,
				"parsed-idna": false,
				"normalized-unicode": false,
				"normalized-idna": false,
				"parsed-normalized-unicode": false,
				"parsed-normalized-idna": false
			},
			"encoding": {
				"cleaned": true,
				"unicode": true,
				"idna": true,
				"idna-invalid": true,
				"idna-normalized": true,
				"idna-normalize-failed": true,
				"idna-excluded": true
			},
			"comments": {
				"comment": {
					"encoding": {
						"cleaned": true,
						"unicode": true
					},
					"comment": true,
					"qp-necessary": true,
					"qp-unnecessary": true,
					"ws-before": true,
					"ws-folded": true,
					"ws-after": true,
					"correct": true
				},
				"correct": true
			},
			"quote": {
				"qp-necessary": true,
				"qp-unnecessary": true,
				"ws-folded": true,
				"correct": true
			},
			"ws-before": true,
			"ws-after": true,
			"delimiter": true,
			"correct": true
		},
		"dangerous": true,
		"correct": true
	},
	"host": {
		"host": {
			"print": {
				"unicode": true,
				"unicode-email": true,
				"idna": true,
				"idna-email": false,
				"percent-encoded": false
			},
			"literal": true,
			"zoneid": {
				"print": {
					"uri": true,
					"iri": true
				},
				"encoding": {
					"cleaned": true,
					"unicode": true,
					"pe-necessary": true,
					"pe-unnecessary": true,
					"pe-partial": true,
					"pe-invalid": true
				},
				"zoneid": true,
				"correct": true
			},
			"ip": {
				"print": {
					"parsed": false,
					"ipv4": true,
					"ipv4historic": false,
					"ipv6short": true,
					"ipv6v4short": true,
					"ipv6long": true,
					"ipv6v4long": false
				},
				"blocks": {
					"print": null,
					"size": true,
					"base": true,
					"number": true,
					"pads": true,
					"correct": true,
					"position": true
				},
				"bytes": true,
				"version": true,
				"doublecolon-v6": true,
				"doublecolon-v6v4": true,
				"correct": true,
				"private": false,
				"loopback": false,
				"linklocal": false,
				"reserved": false
			},
			"ipvfuture": true,
			"hostname": {
				"print": {
					"unicode": true,
					"idna": true,
					"percent-encoded": true
				},
				"labels": {
					"print": {
						"unicode": true,
						"idna": false,
						"percent-encoded": false
					},
					"encoding": {
						"cleaned": true,
						"unicode": true,
						"pe-necessary": true,
						"pe-unnecessary": true,
						"pe-partial": true,
						"idna": true,
						"idna-invalid": true,
						"idna-normalized": true,
						"idna-normalize-failed": true,
						"idna-excluded": true
					},
					"delimiter": true,
					"correct": true
				},
				"email-toolong": true,
				"dangerous": true,
				"correct": true,
				"correct-email": true,
				"tld": true,
				"tld-invalid": true,
				"tld-real": true,
				"tld-root": true,
				"tld-pos": true
			},
			"dangerous": true,
			"correct": true,
			"correct-email": true
		},
		"info": {
			"comments": {
				"comment": {
					"encoding": {
						"cleaned": true,
						"unicode": true
					},
					"comment": true,
					"qp-necessary": true,
					"qp-unnecessary": true,
					"ws-before": true,
					"ws-folded": true,
					"ws-after": true,
					"correct": true
				},
				"correct": true
			},
			"cleaned": true,
			"ws-before": true,
			"ws-after": true,
			"correct": true
		},
		"correct": true
	},
	"toolong": true,
	"normalized-toolong": true,
	"dangerous": true,
	"correct": true
}

Object: Label

Label
If Quote is nil, Label is AText. If Quote is non-nil, Label is QText.
print
Object: Print

Example

"print": {
	"unicode": "😻"
}
encoding
Object: Label_Encoding

Example

"encoding": {
	"unicode": true,
	"idna-excluded": true
}
comments
Object: Comments

Example

"comments": {
	"before": [
		{
			"encoding": {
				"unicode": true
			},
			"comment": "😻",
			"correct": true
		}
	],
	"after": [
		{
			"encoding": {},
			"comment": "xn--238h",
			"correct": true
		}
	],
	"correct": true
}
quote
Object: Quote
If Quote is nil, Label is AText. If Quote is non-nil, Label is QText.

Example

"quote": null
ws-before
Number
How many Whitespace Characters appeared Before the Object

Example

"ws-before": 0
ws-after
Number
How many Whitespace Characters appeared After the Object

Example

"ws-after": 0
delimiter
Number
UTS #46 Delimiter.
This is the Delimiter that came after the current label!

"A.B"
A has the . Delimiter: 1
B has no Delimiter: 0


Constants

Key Value
0 No Delimiter
1 U+002E ( . ) FULL STOP
2 U+3002 ( 。 ) IDEOGRAPHIC FULL STOP
3 U+FF0E ( . ) FULLWIDTH FULL STOP
4 U+FF61 ( 。 ) HALFWIDTH IDEOGRAPHIC FULL STOP


Example

"delimiter": 1 // .
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Label

ASCII Comment ASCII AText: "(jackson) hi@juandefu.ca"
{
	"print": {
		"unicode": "hi"
	},
	"encoding": {},
	"comments": {
		"before": [
			{
				"encoding": {},
				"comment": "jackson",
				"correct": true
			}
		],
		"correct": true
	},
	"ws-before": 1,
	"correct": true
}
Unicode AText Input: "😻.x@juandefu.ca"
{
	"print": {
		"unicode": "😻"
	},
	"encoding": {
		"unicode": true,
		"idna-excluded": true
	},
	"delimiter": 1,
	"correct": true
}
Unicode Comment IDNA AText ASCII Comment Input: "(😻)😻(xn--238h)。x@juandefu.ca"
{
	"print": {
		"unicode": "😻"
	},
	"encoding": {
		"idna": true,
		"idna-excluded": true
	},
	"comments": {
		"before": [
			{
				"encoding": {
					"unicode": true
				},
				"comment": "😻",
				"correct": true
			}
		],
		"after": [
			{
				"encoding": {},
				"comment": "xn--238h",
				"correct": true
			}
		],
		"correct": true
	},
	"delimiter": 2,
	"correct": true
}
ASCII QText ASCII Comment Input: ""hey ya'll" (hi) .x@juandefu.ca"
{
	"print": {
		"unicode": "\"hey ya'll\""
	},
	"encoding": {},
	"comments": {
		"after": [
			{
				"encoding": {},
				"comment": "hi",
				"ws-after": 1,
				"correct": true
			}
		],
		"correct": true
	},
	"quote": {
		"correct": true
	},
	"ws-after": 1,
	"delimiter": 3,
	"correct": true
}
Unicode QText Input: ""😻"。x@juandefu.ca"
{
	"print": {
		"unicode": "\"😻\""
	},
	"encoding": {
		"unicode": true,
		"idna-excluded": true
	},
	"quote": {
		"correct": true
	},
	"delimiter": 4,
	"correct": true
}

Object: Label_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
print
Object: Print_Options
encoding
Object: Label_Encoding_Options
comments
Object: Comments_Options
quote
Object: Quote_Options
ws-before
Boolean
ws-after
Boolean
delimiter
Boolean
correct
Boolean

Object: Label_Encoding

Label uses this Object for Encoding

cleaned
Boolean
Was the Input Cleaned?
Control Character or other Blacklisted Characters may be removed!

Example

"cleaned": false
unicode
Boolean
Did the Input contain Unicode?

Example

"unicode": true
idna
Boolean
Was the Input IDNA Encoded?

Example

"unicode": true
idna-invalid
Boolean
Was the Input an Invalid IDNA Label?

Example

"idna-invalid": false
idna-normalized
Boolean
Was the Input UTS #46 Normalized?

Example

"idna-normalized": true
idna-normalize-failed
Boolean
Did Input contain a Disallowed or Invalid UTS #46 Character?

Example

"idna-normalize-failed": false
idna-excluded
Boolean
Does the Input contain a UTS #46 Character that is Excluded from use with IDNA 2008?

Example

"idna-excluded": false

Object Examples: Label_Encoding

ASCII Input: "jackson@juandefu.ca"
{}
Unicode Input: "😻@juandefu.ca"
{
	"unicode": true,
	"idna-excluded": true
}

Object: Label_Encoding_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
cleaned
Boolean
unicode
Boolean
idna
Boolean
idna-invalid
Boolean
idna-normalized
Boolean
idna-normalize-failed
Boolean
idna-excluded
Boolean

Object: Quote

If Quote exists in a Label it means that the Label is QText and not AText

qp-necessary
Number
How many Quoted Pairs did the Input contain?

Example

"qp-necessary": 0
qp-unnecessary
Boolean
Did the Input contain any Unnecessary Quoted Pairs?

Example

"qp-unnecessary": false
ws-folded
Number
How many Whitespace Characters were Folded Inside of the Object

Example

"ws-folded": 0
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Quote

ASCII Input: ""Eddard Stark"@juandefu.ca"
{
	"correct": true
}
Quoted Pair Input: ""Eddard \"Ned\" Stark"@juandefu.ca"
{
	"qp-necessary": 2,
	"correct": true
}

Object: Quote_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
qp-necessary
Boolean
qp-unnecessary
Boolean
ws-folded
Boolean
correct
Boolean

Object: Comment

Comment can appear in either the Local or Host Object of an Email. Comments should be ignored when sending emails.

comment-encoding
Object: Comment_Encoding

Example

"comment-encoding": {
	"unicode": true
}
comment
String
Comment is a Unicode string. Comment does not contain the enclosing parentheses.

Example

"comment": "jackson"
qp-necessary
Number
How many Quoted Pairs did the Input contain?

Example

"qp-necessary": 0
qp-unnecessary
Boolean
Did the Input contain any Unnecessary Quoted Pairs?

Example

"qp-unnecessary": false
ws-before
Number
How many Whitespace Characters appeared Before the Object

Example

"ws-before": 0
ws-folded
Number
How many Whitespace Characters were Folded Inside of the Object

Example

"ws-folded": 0
ws-after
Number
How many Whitespace Characters appeared After the Object

Example

"ws-after": 0
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Comment

ASCII Input: "(jackson)hi@juandefu.ca"
{
	"encoding": {},
	"comment": "jackson",
	"correct": true
}
Unicode Input: "(😻)hi@juandefu.ca"
{
	"encoding": {
		"unicode": true
	},
	"comment": "😻",
	"correct": true
}
Quoted Pair Nested Comment Input: "(example\(s\): (a, b, c))hi@juandefu.ca"
{
	"encoding": {},
	"comment": "example\\(s\\): (a, b, c)",
	"qp-necessary": 2,
	"correct": true
}

Object: Comment_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
encoding
Object: Comment_Encoding_Options
comment
Boolean
qp-necessary
Boolean
qp-unnecessary
Boolean
ws-before
Boolean
ws-folded
Boolean
ws-after
Boolean
correct
Boolean

Object: Comment_Encoding

Comment uses this Object for Encoding

cleaned
Boolean
Was the Input Cleaned?
Control Character or other Blacklisted Characters may be removed!

Example

"cleaned": false
unicode
Boolean
Did the Input contain Unicode?

Example

"unicode": true

Object Examples: Comment_Encoding

ASCII Input: "(jackson)hi@juandefu.ca"
{}
Unicode Input: "(😻)hi@juandefu.ca"
{
	"unicode": true
}

Object: Comment_Encoding_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
cleaned
Boolean
unicode
Boolean

Object: Comments

Comments contain Comments Before and After a Label.

before
[]Object: Comment

Example

"before": [
	{
		"encoding": {},
		"comment": "before 1",
		"correct": true
	},
	{
		"encoding": {},
		"comment": "before 2",
		"correct": true
	}
]
after
[]Object: Comment

Example

"after": [
	{
		"encoding": {},
		"comment": "after",
		"correct": true
	}
]
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Comments

Comments Input: "(before 1)(before 2)hi(after)@juandefu.ca"
{
	"before": [
		{
			"encoding": {},
			"comment": "before 1",
			"correct": true
		},
		{
			"encoding": {},
			"comment": "before 2",
			"correct": true
		}
	],
	"after": [
		{
			"encoding": {},
			"comment": "after",
			"correct": true
		}
	],
	"correct": true
}

Object: Comments_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
comment
Object: Comment_Options
correct
Boolean

Object: Local

Local Address

labels
[]Object: Label

Example

"labels": [
	{
		"print": {
			"unicode": "\"hey ya'll\""
		},
		"encoding": {},
		"comments": {
			"after": [
				{
					"encoding": {},
					"comment": "hi",
					"correct": true
				}
			],
			"correct": true
		},
		"quote": {
			"correct": true
		},
		"ws-after": 1,
		"correct": true
	}
]
dangerous
Boolean
Is this Potentially Dangerous?

Example

"dangerous": false
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Local

Unicode Comment IDNA AText ASCII Comment . Unicode QText Input: " (😻) xn--238h (xn--238h) . " 😻 " @juandefu.ca"
{
	"labels": [
		{
			"print": {
				"unicode": "😻"
			},
			"encoding": {
				"idna": true,
				"idna-excluded": true
			},
			"comments": {
				"before": [
					{
						"encoding": {
							"unicode": true
						},
						"comment": "😻",
						"ws-before": 1,
						"correct": true
					}
				],
				"after": [
					{
						"encoding": {},
						"comment": "xn--238h",
						"ws-after": 1,
						"correct": true
					}
				],
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"delimiter": 1,
			"correct": true
		},
		{
			"print": {
				"unicode": "\" 😻 \""
			},
			"encoding": {
				"unicode": true,
				"idna-excluded": true
			},
			"quote": {
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"correct": true
		}
	]
}
ASCII QText ASCII Comment Input: ""hey ya'll" (hi)@juandefu.ca"
{
	"labels": [
		{
			"print": {
				"unicode": "\"hey ya'll\""
			},
			"encoding": {},
			"comments": {
				"after": [
					{
						"encoding": {},
						"comment": "hi",
						"correct": true
					}
				],
				"correct": true
			},
			"quote": {
				"correct": true
			},
			"ws-after": 1,
			"correct": true
		}
	]
}

Object: Local_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
labels
Object: Label_Options
dangerous
Boolean
correct
Boolean

Object: Host

Host wrapper with support for Comments

host
Object: Host

Example

"host": {
	"print": {
		"unicode": "juandefu.ca",
		"unicode-email": "juandefu.ca",
		"idna": "juandefu.ca"
	},
	"hostname": {
		"print": {
			"unicode": "juandefu.ca",
			"idna": "juandefu.ca",
			"percent-encoded": "juandefu.ca"
		},
		"labels": [
			{
				"print": {
					"unicode": "juandefu"
				},
				"encoding": {},
				"delimiter": 1,
				"correct": true
			},
			{
				"print": {
					"unicode": "ca"
				},
				"encoding": {},
				"correct": true
			}
		],
		"correct": true,
		"correct-email": true,
		"tld-real": true,
		"tld-pos": 1
	},
	"correct": true,
	"correct-email": true
}
info
[]Object: Host_Info

Example

"info": [
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "second level",
					"ws-before": 1,
					"correct": true
				}
			],
			"after": [
				{
					"encoding": {},
					"comment": "this site",
					"ws-after": 1,
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	},
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "cctld",
					"ws-before": 1,
					"correct": true
				}
			],
			"after": [
				{
					"encoding": {},
					"comment": "canada",
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	}
]
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Host

ASCII Host Input: "hi@juandefu.ca"
{
	"host": {
		"print": {
			"unicode": "juandefu.ca",
			"unicode-email": "juandefu.ca",
			"idna": "juandefu.ca"
		},
		"hostname": {
			"print": {
				"unicode": "juandefu.ca",
				"idna": "juandefu.ca",
				"percent-encoded": "juandefu.ca"
			},
			"labels": [
				{
					"print": {
						"unicode": "juandefu"
					},
					"encoding": {},
					"delimiter": 1,
					"correct": true
				},
				{
					"print": {
						"unicode": "ca"
					},
					"encoding": {},
					"correct": true
				}
			],
			"correct": true,
			"correct-email": true,
			"tld-real": true,
			"tld-pos": 1
		},
		"correct": true,
		"correct-email": true
	},
	"info": [
		{
			"correct": true
		},
		{
			"correct": true
		}
	],
	"correct": true
}
Literal IPv4 Input: "hi@[127.0.0.1]"
{
	"host": {
		"print": {
			"unicode": "127.0.0.1",
			"unicode-email": "[127.0.0.1]",
			"idna": "127.0.0.1"
		},
		"literal": 1,
		"ip": {
			"print": {
				"ipv4": "127.0.0.1",
				"ipv6short": "::ffff:7f00:1",
				"ipv6v4short": "::ffff:127.0.0.1",
				"ipv6long": "0000:0000:0000:0000:0000:ffff:7f00:0001"
			},
			"blocks": [
				{
					"size": 8,
					"base": 10,
					"number": 127,
					"correct": true
				},
				{
					"size": 8,
					"base": 10,
					"correct": true
				},
				{
					"size": 8,
					"base": 10,
					"correct": true
				},
				{
					"size": 8,
					"base": 10,
					"number": 1,
					"correct": true
				}
			],
			"bytes": [
				127,
				0,
				0,
				1
			],
			"version": 4,
			"correct": true
		},
		"correct-email": true
	},
	"info": [
		{
			"correct": true
		}
	],
	"correct": true
}
ASCII Comments ASCII Host Input: "hi@ (second level) juandefu (this site) . (cctld) ca (canada)"
{
	"host": {
		"print": {
			"unicode": "juandefu.ca",
			"unicode-email": "juandefu.ca",
			"idna": "juandefu.ca"
		},
		"hostname": {
			"print": {
				"unicode": "juandefu.ca",
				"idna": "juandefu.ca",
				"percent-encoded": "juandefu.ca"
			},
			"labels": [
				{
					"print": {
						"unicode": "juandefu"
					},
					"encoding": {},
					"delimiter": 1,
					"correct": true
				},
				{
					"print": {
						"unicode": "ca"
					},
					"encoding": {},
					"correct": true
				}
			],
			"correct": true,
			"correct-email": true,
			"tld-real": true,
			"tld-pos": 1
		},
		"correct": true,
		"correct-email": true
	},
	"info": [
		{
			"comments": {
				"before": [
					{
						"encoding": {},
						"comment": "second level",
						"ws-before": 1,
						"correct": true
					}
				],
				"after": [
					{
						"encoding": {},
						"comment": "this site",
						"ws-after": 1,
						"correct": true
					}
				],
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"correct": true
		},
		{
			"comments": {
				"before": [
					{
						"encoding": {},
						"comment": "cctld",
						"ws-before": 1,
						"correct": true
					}
				],
				"after": [
					{
						"encoding": {},
						"comment": "canada",
						"correct": true
					}
				],
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"correct": true
		}
	]
}
Non-Literal IPv4 ASCII Comments Input: "hi@ (this) 127 (is) . (very) 0 . 0 (discouraged)  . (this is) 1 (an ip) "
{
	"host": {
		"print": {
			"unicode": "127.0.0.1",
			"unicode-email": "[127.0.0.1]",
			"idna": "127.0.0.1"
		},
		"ip": {
			"print": {
				"ipv4": "127.0.0.1",
				"ipv6short": "::ffff:7f00:1",
				"ipv6v4short": "::ffff:127.0.0.1",
				"ipv6long": "0000:0000:0000:0000:0000:ffff:7f00:0001"
			},
			"blocks": [
				{
					"size": 8,
					"base": 10,
					"number": 127,
					"correct": true
				},
				{
					"size": 8,
					"base": 10,
					"correct": true
				},
				{
					"size": 8,
					"base": 10,
					"correct": true
				},
				{
					"size": 8,
					"base": 10,
					"number": 1,
					"correct": true
				}
			],
			"bytes": [
				127,
				0,
				0,
				1
			],
			"version": 4,
			"correct": true
		},
		"correct": true
	},
	"info": [
		{
			"comments": {
				"before": [
					{
						"encoding": {},
						"comment": "this",
						"ws-before": 1,
						"correct": true
					}
				],
				"after": [
					{
						"encoding": {},
						"comment": "is",
						"ws-after": 1,
						"correct": true
					}
				],
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"correct": true
		},
		{
			"comments": {
				"before": [
					{
						"encoding": {},
						"comment": "very",
						"ws-before": 1,
						"correct": true
					}
				],
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"correct": true
		},
		{
			"comments": {
				"after": [
					{
						"encoding": {},
						"comment": "discouraged",
						"ws-after": 2
					}
				]
			},
			"ws-before": 1,
			"ws-after": 1
		},
		{
			"comments": {
				"before": [
					{
						"encoding": {},
						"comment": "this is",
						"ws-before": 1,
						"correct": true
					}
				],
				"after": [
					{
						"encoding": {},
						"comment": "an ip",
						"ws-after": 1,
						"correct": true
					}
				],
				"correct": true
			},
			"ws-before": 1,
			"ws-after": 1,
			"correct": true
		}
	]
}

Object: Host_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
host
Object: Host_Options
info
Object: Host_Info_Options
correct
Boolean

Object: Host_Info

Host Info provides information about Email Host Labels. It's intended to be used to hold Host Comments as Host does not support Comments!

comments
Object: Comments

Example

"comments": {
	"before": [
		{
			"encoding": {},
			"comment": "cctld",
			"ws-before": 1,
			"correct": true
		}
	],
	"after": [
		{
			"encoding": {},
			"comment": "canada",
			"correct": true
		}
	],
	"correct": true
}
cleaned
Boolean
Was the Input Whitespace outside of the Label Cleaned?

Example

"cleaned": false
ws-before
Number
How many Whitespace Characters appeared Before the Object

Example

"ws-before": 0
ws-after
Number
How many Whitespace Characters appeared After the Object

Example

"ws-after": 0
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Host_Info

ASCII Host Input: "hi@juandefu.ca"
[
	{
		"correct": true
	},
	{
		"correct": true
	}
]
Literal IPv4 Input: "hi@[127.0.0.1]"
[
	{
		"correct": true
	}
]
ASCII Comments ASCII Host Input: "hi@ (second level) juandefu (this site) . (cctld) ca (canada)"
[
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "second level",
					"ws-before": 1,
					"correct": true
				}
			],
			"after": [
				{
					"encoding": {},
					"comment": "this site",
					"ws-after": 1,
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	},
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "cctld",
					"ws-before": 1,
					"correct": true
				}
			],
			"after": [
				{
					"encoding": {},
					"comment": "canada",
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	}
]
Non-Literal IPv4 ASCII Comments Input: "hi@ (this) 127 (is) . (very) 0 . 0 (discouraged)  . (this is) 1 (an ip) "
[
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "this",
					"ws-before": 1,
					"correct": true
				}
			],
			"after": [
				{
					"encoding": {},
					"comment": "is",
					"ws-after": 1,
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	},
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "very",
					"ws-before": 1,
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	},
	{
		"comments": {
			"after": [
				{
					"encoding": {},
					"comment": "discouraged",
					"ws-after": 2
				}
			]
		},
		"ws-before": 1,
		"ws-after": 1
	},
	{
		"comments": {
			"before": [
				{
					"encoding": {},
					"comment": "this is",
					"ws-before": 1,
					"correct": true
				}
			],
			"after": [
				{
					"encoding": {},
					"comment": "an ip",
					"ws-after": 1,
					"correct": true
				}
			],
			"correct": true
		},
		"ws-before": 1,
		"ws-after": 1,
		"correct": true
	}
]

Object: Host_Info_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
comments
Object: Comments_Options
cleaned
Boolean
ws-before
Boolean
ws-after
Boolean
correct
Boolean

Object: Print

Email and Label both use this Object for Printing

unicode
String
Unicode Output

Example

"unicode": "output"
"unicode": "😻"
idna
String
IDNA Output
IDNA is not a part of the Email spec, use with caution!

Example

"idna": "output"
"idna": "xn--238h"
parsed-unicode
String
Unicode Output as Parsed, this includes Whitespace and Comments

Example

"parsed-unicode": "output"
"parsed-unicode": "😻"
parsed-idna
String
IDNA Output as Parsed, this includes Whitespace and Comments
IDNA is not a part of the Email spec, use with caution!

Example

"parsed-idna": "output"
"parsed-idna": "xn--238h"
normalized-unicode
String
UTS #46 Normalized Unicode Output
Normalization is not a part of the Email spec, use with caution!

Example

"normalized-unicode": "output"
"normalized-unicode": "😻"
normalized-idna
String
UTS #46 Normalized IDNA Output
Normalization and IDNA is not a part of the Email spec, use with caution!

Example

"normalized-idna": "output"
"normalized-idna": "xn--238h"
parsed-normalized-unicode
String
UTS #46 Normalized Unicode Output as Parsed, this includes Whitespace and Comments
Normalization is not a part of the Email spec, use with caution!

Example

"parsed-normalized-unicode": "output"
"parsed-normalized-unicode": "😻"
parsed-normalized-idna
String
UTS #46 Normalized IDNA Output as Parsed, this includes Whitespace and Comments
Normalization and IDNA is not a part of the Email spec, use with caution!

Example

"parsed-normalized-idna": "output"
"parsed-normalized-idna": "xn--238h"

Object Examples: Print

Unicode Comment IDNA AText ASCII Comment . Unicode QText: " (😻) xn--238h (xn--238h) . " 😻 " @juandefu.ca"
{
	"unicode": "😻.\" 😻 \"@juandefu.ca",
	"idna": "xn--238h.\"xn--  -pt82a\"@juandefu.ca",
	"parsed-unicode": " (😻) 😻 (xn--238h) . \" 😻 \" @juandefu.ca",
	"parsed-idna": " (😻) xn--238h (xn--238h) . \"xn--  -pt82a\" @juandefu.ca",
	"normalized-unicode": "😻.\" 😻 \"@juandefu.ca",
	"normalized-idna": "xn--238h.\"xn--  -pt82a\"@juandefu.ca",
	"parsed-normalized-unicode": " (😻) 😻 (xn--238h) . \" 😻 \" @juandefu.ca",
	"parsed-normalized-idna": " (😻) xn--238h (xn--238h) . \"xn--  -pt82a\" @juandefu.ca"
}
ASCII QText ASCII Comment Input: ""hey ya'll" (hi)@juandefu.ca"
{
	"unicode": "\"hey ya'll\"@juandefu.ca",
	"idna": "\"hey ya'll\"@juandefu.ca",
	"parsed-unicode": "\"hey ya'll\" (hi)@juandefu.ca",
	"parsed-idna": "\"hey ya'll\" (hi)@juandefu.ca",
	"normalized-unicode": "\"hey ya'll\"@juandefu.ca",
	"normalized-idna": "\"hey ya'll\"@juandefu.ca",
	"parsed-normalized-unicode": "\"hey ya'll\" (hi)@juandefu.ca",
	"parsed-normalized-idna": "\"hey ya'll\" (hi)@juandefu.ca"
}

Object: Print_Options

Email and Label both use this Object for Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
unicode
Boolean
idna
Boolean
parsed-unicode
Boolean
parsed-idna
Boolean
normalized-unicode
Boolean
normalized-idna
Boolean
parsed-normalized-unicode
Boolean
parsed-normalized-idna
Boolean

POST /api;v1.0/validate/email

JSON POST endpoint. Supports Validator Options!
Does NOT Support Shorten. Proper mailto Scheme is not complete!

Request

Parameters

raw
String
Raw Input to Validate

Example

"raw": "http://juandefu.ca/"
validator
Number
Optional
Method of Validation to use.
STRICT Validation will not allow Incorrect Spec Validation to occur! It's recommended to use LOOSE!
The Default/Invalid Validator is LOOSE

Constants

Key Value
STRICT 1
LOOSE 2


Example

"validator": 0
options
Object: Email_Options
Optional
Validator Options
Default Options will be used when nil

Response

errors
[]String
This is only returned on Internal Errors! Always check the Response Header Content-Type before parsing!

Example

"errors": [
	"internal server error"
]
validated
Object: Email
Always returned!

If Throttled, returns an Object containing the Attribute "throttle" with a value of the Throttle Expiration Timestamp RFC 3339


GET /api;v1.0/validate/email

GET endpoint that only uses Query String Parameters. Supports JSONP!
Does NOT Support Shorten. Proper mailto Scheme is not complete!

Content must be properly encoded to fit within the Query String Field Variable "raw"!

Request

Parameters

raw
String
Raw Input to Validate

Example

"raw": "http://juandefu.ca/"
validator
Number
Optional
Method of Validation to use.
STRICT Validation will not allow Incorrect Spec Validation to occur! It's recommended to use LOOSE!
The Default/Invalid Validator is LOOSE

Constants

Key Value
STRICT 1
LOOSE 2


Example

validator=2
jsonp
String
Optional
JSONP will be used to pad the JSON payload with a Function.
Must be a-zA-Z and 15 characters or less.
If JSONP is set and is empty or invalid "ZeroOut" will be used!

Example

jsonp=Whoa
Whoa({});
pd
Exists
Optional
Should Input be Percent Decoded before being passed to the Validator?
Most Validators will do their own Percent Decoding of Input.
This should only be used if necessary or if the Validator does not support Percent Decoding.

Response

errors
[]String
This is only returned on Internal Errors! Always check the Response Header Content-Type before parsing!

Example

"errors": [
	"internal server error"
]
validated
Object: Email
Always returned!

If Throttled, returns an Object containing the Attribute "throttle" with a value of the Throttle Expiration Timestamp RFC 3339


GET /api;v1.0/validate/email/after?

GET endpoint that uses Directory Parameters and the whole content of Query String (?) as the Raw Parameter. Supports JSONP!
Does NOT Support Shorten. Proper mailto Scheme is not complete!

This is useful if you are unsure or unable to properly encode a Query String Variable.
This will not support Fragments if # is not encoded! Fragments are client side only!
Variables are appended to the Directory 'after' with the ; Delimiter and before the Query String! Order of parameters is not important.
Example:
Request: /api;v1.0/validate/email/after;jsonp=Whoa;validator=2?hi@juandefu.ca
Parameters: ;jsonp=Whoa;validator=2
Validate: hi@juandefu.ca

Request

Parameters

validator
Number
Optional
Method of Validation to use.
STRICT Validation will not allow Incorrect Spec Validation to occur! It's recommended to use LOOSE!
The Default/Invalid Validator is LOOSE

Constants

Key Value
STRICT 1
LOOSE 2


Example

validator=2
jsonp
String
Optional
JSONP will be used to pad the JSON payload with a Function.
Must be a-zA-Z and 15 characters or less.
If JSONP is set and is empty or invalid "ZeroOut" will be used!

Example

jsonp=Whoa
Whoa({});
pd
Exists
Optional
Should Input be Percent Decoded before being passed to the Validator?
Most Validators will do their own Percent Decoding of Input.
This should only be used if necessary or if the Validator does not support Percent Decoding.

Response

errors
[]String
This is only returned on Internal Errors! Always check the Response Header Content-Type before parsing!

Example

"errors": [
	"internal server error"
]
validated
Object: Email
Always returned!

If Throttled, returns an Object containing the Attribute "throttle" with a value of the Throttle Expiration Timestamp RFC 3339