Validate Query Documentation

Shared Validate Throttle: 500/Hour

Object: Path

Path is a Hierarchical Component that contains an Array of Directories.

print
Object: Print
Print is NOT Normalized! Only Tree Print is Normalized!

Example

"print": {
	"uri": "/this/../is/an/../../absolute/path",
	"iri": "/this/../is/an/../../absolute/path"
}
directories
[]Object: Directory

Example

"directories": [
	{
		"print": {
			"iri": "this"
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": ".."
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": "is"
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": "an"
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": ".."
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": ".."
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": "absolute"
		},
		"delimiter": true,
		"correct": true
	},
	{
		"print": {
			"iri": "path"
		},
		"delimiter": true,
		"correct": true
	}
]
complete-tree
Object: Complete_Tree
Complete Tree is based off of the Complete Content (Segment + KeyValues) of a Directory.
This is the Tree that you want to use!

Example

/this/../is/an/../../absolute/path
"complete-tree": {
	"print": {
		"uri": "/absolute/path",
		"iri": "/absolute/path"
	},
	"branches": [
		2,
		0
	],
	"directories": [
		6,
		7
	],
	"root": {
		"branches": [
			{
				"directories": [
					0,
					1
				]
			},
			{
				"directories": [
					2,
					5
				],
				"branches": [
					{
						"directories": [
							3,
							4
						]
					}
				]
			},
			{
				"directories": [
					6
				],
				"branches": [
					{
						"directories": [
							7
						]
					}
				]
			}
		]
	}
}
complete-lowercase-tree
Object: Complete_Tree
Complete Lowercase Tree is based off of the Lowercased Complete Content (Segment + KeyValues) of a Directory.

Example

/this/../is/an/../../absolute/path
"complete-lowercase-tree": {
	"print": {
		"uri": "/absolute/path",
		"iri": "/absolute/path"
	},
	"branches": [
		2,
		0
	],
	"directories": [
		6,
		7
	],
	"root": {
		"branches": [
			{
				"directories": [
					0,
					1
				]
			},
			{
				"directories": [
					2,
					5
				],
				"branches": [
					{
						"directories": [
							3,
							4
						]
					}
				]
			},
			{
				"directories": [
					6
				],
				"branches": [
					{
						"directories": [
							7
						]
					}
				]
			}
		]
	}
}
segment-tree
Object: Segment_Tree
Segment Tree is based off of the Segment Field of a Directory.
Do NOT use this unless you know what you are doing!

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"segment-tree": {
	"print": {
		"uri": "/;empty;ab;solute/path;dont;use;this",
		"iri": "/;empty;ab;solute/path;dont;use;this"
	},
	"branches": [
		1,
		0
	],
	"directories": [
		-1,
		2
	],
	"keyvalues": [
		[
			0,
			1,
			3
		],
		[
			2
		]
	],
	"root": {
		"branches": [
			{
				"directories": [
					0
				]
			},
			{
				"directories": [
					1
				],
				"keyvalues": [
					0,
					1,
					3
				],
				"branches": [
					{
						"directories": [
							2,
							3,
							6
						],
						"keyvalues": [
							2
						]
					},
					{
						"directories": [
							4,
							5
						],
						"keyvalues": [
							4
						]
					}
				]
			}
		]
	}
}
segment-lowercase-tree
Object: Segment_Tree
Segment Lowercase Tree is based off of the Lowercased Segment Field of a Directory.
Do NOT use this unless you know what you are doing!

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"segment-lowercase-tree": {
	"print": {
		"uri": "/;empty;ab;solute/path;dont;use;this",
		"iri": "/;empty;ab;solute/path;dont;use;this"
	},
	"branches": [
		1,
		0
	],
	"directories": [
		-1,
		2
	],
	"keyvalues": [
		[
			0,
			1,
			3
		],
		[
			2
		]
	],
	"root": {
		"branches": [
			{
				"directories": [
					0
				]
			},
			{
				"directories": [
					1
				],
				"keyvalues": [
					0,
					1,
					3
				],
				"branches": [
					{
						"directories": [
							2,
							3,
							6
						],
						"keyvalues": [
							2
						]
					},
					{
						"directories": [
							4,
							5
						],
						"keyvalues": [
							4
						]
					}
				]
			}
		]
	}
}
relative
Boolean
Is Path Relative?

Example

"relative": true
conflict-scheme
Boolean
This will only be avaliable with Relative Paths!

Will Path Conflict with Scheme?
We need the context of a URI for this to be of use, Conflicts MUST be prefixed with ./

Example

"conflict-scheme": false
conflict-absolute
Boolean
This will only be avaliable with Relative Paths!

Will Path Conflict with Absolute?
This only exists if the first Directory is Empty or Cleaned results in an Empty Directory.
We don't want to confuse a Relative Path for an Absolute Path, Conflicts MUST be prefixed with ./

Example

"conflict-absolute": false
conflict-authority
Boolean
This will only be avaliable with Absolute Paths!

Will Path Conflict with Authority?
We need the context of a URI for this to be of use, Conflicts MUST be prefixed with /.

Example

"conflict-authority": false
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Path

Absolute Input: "/this/../is/an/../../absolute/path"
{
	"print": {
		"uri": "/this/../is/an/../../absolute/path",
		"iri": "/this/../is/an/../../absolute/path"
	},
	"directories": [
		{
			"print": {
				"iri": "this"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "is"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "an"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "absolute"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "path"
			},
			"delimiter": true,
			"correct": true
		}
	],
	"complete-tree": {
		"print": {
			"uri": "/absolute/path",
			"iri": "/absolute/path"
		},
		"branches": [
			2,
			0
		],
		"directories": [
			6,
			7
		],
		"root": {
			"branches": [
				{
					"directories": [
						0,
						1
					]
				},
				{
					"directories": [
						2,
						5
					],
					"branches": [
						{
							"directories": [
								3,
								4
							]
						}
					]
				},
				{
					"directories": [
						6
					],
					"branches": [
						{
							"directories": [
								7
							]
						}
					]
				}
			]
		}
	},
	"correct": true
}
Relative Input: "./this/../is/a/../../relative/path"
{
	"print": {
		"uri": "./this/../is/a/../../relative/path",
		"iri": "./this/../is/a/../../relative/path"
	},
	"directories": [
		{
			"print": {
				"iri": "."
			},
			"correct": true
		},
		{
			"print": {
				"iri": "this"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "is"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "a"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "relative"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "path"
			},
			"delimiter": true,
			"correct": true
		}
	],
	"complete-tree": {
		"print": {
			"uri": "relative/path",
			"iri": "relative/path"
		},
		"branches": [
			2,
			0
		],
		"directories": [
			7,
			8
		],
		"root": {
			"directories": [
				0
			],
			"branches": [
				{
					"directories": [
						1,
						2
					]
				},
				{
					"directories": [
						3,
						6
					],
					"branches": [
						{
							"directories": [
								4,
								5
							]
						}
					]
				},
				{
					"directories": [
						7
					],
					"branches": [
						{
							"directories": [
								8
							]
						}
					]
				}
			]
		}
	},
	"relative": true,
	"correct": true
}
Normalized Relative Input: "relative/but/normalized.html"
{
	"print": {
		"uri": "relative/but/normalized.html",
		"iri": "relative/but/normalized.html"
	},
	"directories": [
		{
			"print": {
				"iri": "relative"
			},
			"correct": true
		},
		{
			"print": {
				"iri": "but"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "normalized.html"
			},
			"delimiter": true,
			"correct": true
		}
	],
	"complete-tree": {
		"print": {
			"uri": "relative/but/normalized.html",
			"iri": "relative/but/normalized.html"
		},
		"branches": [
			0,
			0,
			0
		],
		"directories": [
			0,
			1,
			2
		],
		"root": {
			"branches": [
				{
					"directories": [
						0
					],
					"branches": [
						{
							"directories": [
								1
							],
							"branches": [
								{
									"directories": [
										2
									]
								}
							]
						}
					]
				}
			]
		}
	},
	"relative": true,
	"correct": true
}
Absolute Segment + KeyValues Input: "/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path"
{
	"print": {
		"uri": "/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path",
		"iri": "/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path"
	},
	"directories": [
		{
			"print": {
				"iri": ".;empty"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ";ab"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "path;dont;use;this"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "..;solute"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "for;anything;serious"
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": ".."
			},
			"delimiter": true,
			"correct": true
		},
		{
			"print": {
				"iri": "path"
			},
			"delimiter": true,
			"correct": true
		}
	],
	"complete-tree": {
		"print": {
			"uri": "/.;empty/;ab/path;dont;use;this/..;solute/path",
			"iri": "/.;empty/;ab/path;dont;use;this/..;solute/path"
		},
		"branches": [
			0,
			0,
			0,
			0,
			1
		],
		"directories": [
			0,
			1,
			2,
			3,
			6
		],
		"root": {
			"branches": [
				{
					"directories": [
						0
					],
					"branches": [
						{
							"directories": [
								1
							],
							"branches": [
								{
									"directories": [
										2
									],
									"branches": [
										{
											"directories": [
												3
											],
											"branches": [
												{
													"directories": [
														4,
														5
													]
												},
												{
													"directories": [
														6
													]
												}
											]
										}
									]
								}
							]
						}
					]
				}
			]
		}
	},
	"segment-tree": {
		"print": {
			"iri": "/;empty;ab;solute/path;dont;use;this"
		},
		"branches": [
			1,
			0
		],
		"directories": [
			-1,
			2
		],
		"keyvalues": [
			[
				0,
				1,
				3
			],
			[
				2
			]
		],
		"root": {
			"branches": [
				{
					"directories": [
						0
					]
				},
				{
					"directories": [
						1
					],
					"keyvalues": [
						0,
						1,
						3
					],
					"branches": [
						{
							"directories": [
								2,
								3,
								6
							],
							"keyvalues": [
								2
							]
						},
						{
							"directories": [
								4,
								5
							],
							"keyvalues": [
								4
							]
						}
					]
				}
			]
		}
	},
	"correct": true
}

Object: Path_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
directories
Object: Directory_Options
complete-tree
Object: Complete_Tree_Options
complete-lowercase-tree
Object: Complete_Tree_Options
segment-tree
Object: Segment_Tree_Options
segment-lowercase-tree
Object: Segment_Tree_Options
relative
Boolean
conflict-scheme
Boolean
conflict-absolute
Boolean
conflict-authority
Boolean
correct
Boolean

Object Examples: Path_Options

Default Options:
{
	"print": {
		"uri": true,
		"iri": true
	},
	"directories": {
		"print": {
			"uri": false,
			"iri": true
		},
		"segment": null,
		"keyvalues": null,
		"delimiter": true,
		"correct": true
	},
	"complete-tree": {
		"print": {
			"uri": true,
			"iri": true
		},
		"branches": true,
		"directories": true,
		"root": true,
		"conflict-scheme": true,
		"conflict-absolute": true,
		"conflict-authority": true
	},
	"complete-lowercase-tree": null,
	"segment-tree": null,
	"segment-lowercase-tree": null,
	"relative": true,
	"conflict-scheme": true,
	"conflict-absolute": true,
	"conflict-authority": true,
	"correct": true
}

Object: Print

Path and Directory Print are NOT Normalized! Only Tree Print is Normalized!
Delimiters are NOT avaliable in Directory Print. / can be prepended if necessary!

uri
String
URI Output

Unicode and Unsafe ASCII Characters are Percent Encoded

Example

"uri": "ascii"
"uri": "%25" // ascii % character
"uri": "%F0%9F%98%BB" // 😻
iri
String
IRI Output

Unicode is Unencoded, Unsafe ASCII Characters are Percent Encoded

Example

"iri": "unicode"
"iri": "%25" // ascii % character
"iri": "😻"

Object Examples: Print

Absolute Input: "/this/../is/an/../../absolute/path"
{
	"uri": "/this/../is/an/../../absolute/path",
	"iri": "/this/../is/an/../../absolute/path"
}
Relative Input: "./this/../is/a/../../relative/path"
{
	"uri": "./this/../is/a/../../relative/path",
	"iri": "./this/../is/a/../../relative/path"
}

Object: Print_Options

Path, Directory and Tree 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.
uri
Boolean
iri
Boolean

Object: Directory

Directory is a Non-Hierarchical Component that contains a Segment and an Array of Opaque Key=Values.
Unlike in most File Systems, a Directory in a URI Path can be Empty!
Ignoring the context of a URI Authority "//" would be 2 empty Directories. "/" and "/"
Only Directories of "." and ".." will be used for normalization.

print
Object: Print
Directory Print is NOT Normalized! Only Tree supports Normalization!
Delimiter is not included in the print fields!

Example

"print": {
	"uri": "segment;key=value;another+one",
	"iri": "segment;key=value;another+one"
}
segment
Object: Opaque

Example

"keyvalues": {
	"print": {
		"opaque": [
			"segment"
		]
	},
	"encoding": {},
	"correct": true
}
keyvalues
[]Object: KeyValue
If KeyValues exists, the first KeyValue will always be the ; Delimiter.

Example

"keyvalues": [
	{
		"delimiter": ";",
		"correct": true
	},
	{
		"key": {
			"print": {
				"opaque": [
					"key"
				]
			},
			"encoding": {},
			"correct": true
		},
		"value": {
			"print": {
				"opaque": [
					"value"
				]
			},
			"encoding": {},
			"correct": true
		},
		"delimiter": ";",
		"correct": true
	},
	{
		"key": {
			"print": {
				"opaque": [
					"another",
					"+",
					"one"
				]
			},
			"encoding": {},
			"correct": true
		},
		"correct": true
	}
]
delimiter
Boolean
Delimiter either exists or it doesn't. Delimiter is a SINGLE '/' character if it exists!
Delimiter comes Before Directory

Example

"delimiter": true // / delimiter
"delimiter": false // no delimiter
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Directory

Segment;Key:Value;Key Input: "segment;key=value;another+one"
{
	"print": {
		"uri": "segment;key=value;another+one",
		"iri": "segment;key=value;another+one"
	},
	"segment": {
		"print": {
			"opaque": [
				"segment"
			]
		},
		"encoding": {},
		"correct": true
	},
	"keyvalues": [
		{
			"delimiter": ";",
			"correct": true
		},
		{
			"key": {
				"print": {
					"opaque": [
						"key"
					]
				},
				"encoding": {},
				"correct": true
			},
			"value": {
				"print": {
					"opaque": [
						"value"
					]
				},
				"encoding": {},
				"correct": true
			},
			"delimiter": ";",
			"correct": true
		},
		{
			"key": {
				"print": {
					"opaque": [
						"another",
						"+",
						"one"
					]
				},
				"encoding": {},
				"correct": true
			},
			"correct": true
		}
	],
	"correct": true
}
Segment;Key Input: "user;jackson"
{
	"print": {
		"uri": "user;jackson",
		"iri": "user;jackson"
	},
	"segment": {
		"print": {
			"opaque": [
				"user"
			]
		},
		"encoding": {},
		"correct": true
	},
	"keyvalues": [
		{
			"delimiter": ";",
			"correct": true
		},
		{
			"key": {
				"print": {
					"opaque": [
						"jackson"
					]
				},
				"encoding": {},
				"correct": true
			},
			"correct": true
		}
	],
	"correct": true
}
Segment;Key Delimiter Input: "users;id=33/"
{
	"print": {
		"uri": "users;id=33",
		"iri": "users;id=33"
	},
	"segment": {
		"print": {
			"opaque": [
				"users"
			]
		},
		"encoding": {},
		"correct": true
	},
	"keyvalues": [
		{
			"delimiter": ";",
			"correct": true
		},
		{
			"key": {
				"print": {
					"opaque": [
						"id"
					]
				},
				"encoding": {},
				"correct": true
			},
			"value": {
				"print": {
					"opaque": [
						"33"
					]
				},
				"encoding": {},
				"correct": true
			},
			"correct": true
		}
	],
	"correct": true
}

Object: Directory_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
keyvalues
Object: KeyValue_Options
correct
Boolean

Object: KeyValue

KeyValue contains an Opaque Key and Value seperated by a =, and a Delimiter Field that will seperate this KeyValue from other KeyValues.
Delimiters come AFTER a KeyValue!

key
Object: Opaque

Example

"key": {
	"print": {
		"opaque": [
			"key"
		]
	},
	"encoding": {},
	"correct": true
}
value
Object: Opaque

Example

"value": {
	"print": {
		"opaque": [
			"value"
		]
	},
	"encoding": {},
	"correct": true
}
delimiter
String
URI Output

Unicode and Unsafe ASCII Characters are Percent Encoded

Example

"delimiter": ";" // ; delimiter
"delimiter": ";;" // multiple delimiters
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: KeyValue

Key:Value Input: "key=value"
{
	"key": {
		"print": {
			"opaque": [
				"key"
			]
		},
		"encoding": {},
		"correct": true
	},
	"value": {
		"print": {
			"opaque": [
				"value"
			]
		},
		"encoding": {},
		"correct": true
	},
	"correct": true
}
Key: Input: "key"
{
	"key": {
		"print": {
			"opaque": [
				"key"
			]
		},
		"encoding": {},
		"correct": true
	},
	"correct": true
}
:Value Input: "=value"
{
	"value": {
		"print": {
			"opaque": [
				"value"
			]
		},
		"encoding": {},
		"correct": true
	},
	"correct": true
}
Key:Value Delimiter Input: "key=value;"
{
	"key": {
		"print": {
			"opaque": [
				"key"
			]
		},
		"encoding": {},
		"correct": true
	},
	"value": {
		"print": {
			"opaque": [
				"value"
			]
		},
		"encoding": {},
		"correct": true
	},
	"delimiter": ";",
	"correct": true
}

Object: KeyValue_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
key
Object: Opaque_Options
value
Object: Opaque_Options
delimiter
Boolean
correct
Boolean

Object: Opaque

Opaque Non-Hierarchical Component. It is the Object that represents Key and Value!
print
Object: Opaque_Print

Example

"print": {
	"opaque": [
		"your grade is a+"
	],
	"uri": "your%20grade%20is%20a%2B",
	"iri": "your%20grade%20is%20a%2B"
}
encoding
Object: Encoding

Example

"encoding": {
	"pe-necessary": true
}
correct
Boolean
Was Input Correct to the Spec?

Example

"correct": true

Object Examples: Opaque

Spaces as %20: "your%20grade%20is%20a%2B"
{
	"print": {
		"opaque": [
			"your grade is a+"
		],
		"uri": "your%20grade%20is%20a%2B",
		"iri": "your%20grade%20is%20a%2B"
	},
	"encoding": {
		"pe-necessary": true
	},
	"correct": true
}
+ as the Delimiter for Spaces: "your+grade+is+a%2B"
{
	"print": {
		"opaque": [
			"your",
			"+",
			"grade",
			"+",
			"is",
			"+",
			"a+"
		],
		"uri": "your+grade+is+a%2B",
		"iri": "your+grade+is+a%2B"
	},
	"encoding": {
		"pe-necessary": true
	},
	"correct": true
}

Object: Opaque_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
print
Object: Opaque_Print_Options
encoding
Object: Encoding_Options
correct
Boolean

Object: Opaque_Print

opaque
[]String
An Opaque is a special Array of alternating Data and Delimiters.
Data is held within Even Numbers, 0, 2, 4...
Data characters are Percent Encoded when necessary.
Data can contain Delimiter Characters, however they will be Encoded!
Delimiters are held within Odd Numbers: 1, 3, 5...
Delimiters are NEVER Percent Encoded!
Delimiters can NOT contain Data Characters!

This distinction between the two types will allow our Delimiters and Encoded Delimiter Characters to hold their intended meaning!

Example

"your grade is a+" can be represented as an Opaque in any of the following ways:

This is our Default representation of Spaces:
Spaces as %20
+ Encoded to %2B:
"your%20grade%20is%20a%2B"
"opaque": [
	"your grade is a+"
]

This is common for Query Strings:
+ as the Delimiter for Spaces
+ Encoded to %2B
"your+grade+is+a%2B"
"opaque": [
	"your",
	"+",
	"grade",
	"+",
	"is",
	"+",
	"a+"
]
uri
String
URI Output

Unicode and Unsafe ASCII Characters are Percent Encoded

Example

"uri": "ascii"
"uri": "%25" // ascii % character
"uri": "%F0%9F%98%BB" // 😻
iri
String
IRI Output

Unicode is Unencoded, Unsafe ASCII Characters are Percent Encoded

Example

"iri": "unicode"
"iri": "%25" // ascii % character
"iri": "😻"

Object Examples: Opaque_Print

Spaces as %20: "your%20grade%20is%20a%2B"
{
	"opaque": [
		"your grade is a+"
	],
	"uri": "your%20grade%20is%20a%2B",
	"iri": "your%20grade%20is%20a%2B"
}
+ as the Delimiter for Spaces: "your+grade+is+a%2B"
{
	"opaque": [
		"your",
		"+",
		"grade",
		"+",
		"is",
		"+",
		"a+"
	],
	"uri": "your+grade+is+a%2B",
	"iri": "your+grade+is+a%2B"
}

Object: Opaque_Print_Options

POST APIs only support setting Options. Attributes are displayed when set to true.
GET APIs return the Default set Options.
opaque
Boolean
uri
Boolean
iri
Boolean

Object: 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
pe-necessary
Boolean
Did the Input contain Percent Encoding - was a Character Necessarily Encoded?

Example

"pe-necessary": false
pe-unnecessary
Boolean
Did the Input contain Percent Encoding - was a Character Unnecessarily Encoded?

Example

"pe-unnecessary": false
pe-partial
Boolean
Did the Input contain Percent Encoding - was a Unicode Character Partially Encoded?

Example

"pe-partial": false
pe-invalid
Boolean
Did the Input contain an Invalid Character that should have been Percent Encoded?

Example

"pe-invalid": false

Object Examples: Encoding

Proper Encoding, Spaces as %20: "your%20grade%20is%20a%2B"
{
	"pe-necessary": true
}
Invalid Encoding, Unencoded Spaces: "your grade is a+"
{
	"pe-invalid": true
}
Proper Encoding, + as the Delimiter for Spaces: "your+grade+is+a%2B"
{
	"pe-necessary": true
}

Object: 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
pe-necessary
Boolean
pe-unnecessary
Boolean
pe-partial
Boolean
pe-invalid
Boolean

Object: Complete_Tree

Complete Tree is based off of the Complete Content (Segment + KeyValues) of a Directory

print
Object: Print
Tree Print is Normalized!

Example

"print": {
	"uri": "/absolute/path",
	"iri": "/absolute/path"
}
branches
[]Number
Normalized Branch Path
Each ID is the next Branch to follow for the Absolute Path

Example

/this/../is/an/../../absolute/path
"branches": [
	2,
	0
]
directories
[]Number
Normalized Directories
Each ID is the next Directory in an Absolute Path.
Directories of -1 are placeholders for an empty Directory with a Delimiter

Example

/this/../is/an/../../absolute/path
"directories": [
	6,
	7
]
root
Object: Complete_Branch
Root Complete Tree Branch

Example

/this/../is/an/../../absolute/path
"root": {
	"branches": [
		{
			"directories": [
				0,
				1
			]
		},
		{
			"directories": [
				2,
				5
			],
			"branches": [
				{
					"directories": [
						3,
						4
					]
				}
			]
		},
		{
			"directories": [
				6
			],
			"branches": [
				{
					"directories": [
						7
					]
				}
			]
		}
	]
}
conflict-scheme
Boolean
This will only be avaliable with Relative Paths!

Will Normalized Path Conflict with Scheme?
We need the context of a URI for this to be of use, Conflicts MUST be prefixed with ./

Example

"conflict-scheme": false
conflict-absolute
Boolean
This will only be avaliable with Relative Paths!

Will Normalized Path Conflict with Absolute?
This only exists if the first Directory is Empty or Cleaned results in an Empty Directory.
We don't want to confuse a Relative Path for an Absolute Path, Conflicts MUST be prefixed with ./

Example

"conflict-absolute": false
conflict-authority
Boolean
This will only be avaliable with Absolute Paths!

Will Normalized Path Conflict with Authority?
We need the context of a URI for this to be of use, Conflicts MUST be prefixed with /.

Example

"conflict-authority": false

Object Examples: Complete_Tree

Absolute Input: "/this/../is/an/../../absolute/path"
{
	"print": {
		"uri": "/absolute/path",
		"iri": "/absolute/path"
	},
	"branches": [
		2,
		0
	],
	"directories": [
		6,
		7
	],
	"root": {
		"branches": [
			{
				"directories": [
					0,
					1
				]
			},
			{
				"directories": [
					2,
					5
				],
				"branches": [
					{
						"directories": [
							3,
							4
						]
					}
				]
			},
			{
				"directories": [
					6
				],
				"branches": [
					{
						"directories": [
							7
						]
					}
				]
			}
		]
	}
}
Relative Input: "./this/../is/a/../../relative/path"
{
	"print": {
		"uri": "relative/path",
		"iri": "relative/path"
	},
	"branches": [
		2,
		0
	],
	"directories": [
		7,
		8
	],
	"root": {
		"directories": [
			0
		],
		"branches": [
			{
				"directories": [
					1,
					2
				]
			},
			{
				"directories": [
					3,
					6
				],
				"branches": [
					{
						"directories": [
							4,
							5
						]
					}
				]
			},
			{
				"directories": [
					7
				],
				"branches": [
					{
						"directories": [
							8
						]
					}
				]
			}
		]
	}
}

Object: Complete_Tree_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
branches
Boolean
directories
Boolean
root
Boolean
If set to true all the attributes of Branch are displayed.

conflict-scheme
Boolean
conflict-absolute
Boolean
conflict-authority
Boolean

Object: Complete_Branch

Complete Branch is based off of the Complete Content (Segment + KeyValues) of a Directory.

directories
[]Number
Each ID is a Directory that is either the Current Directory of this Branch or references the Parent Directory Branch.

Example

/this/../is/an/../../absolute/path
"directories": []
branches
[]Object: Complete_Branch
Child Branches

Example

/this/../is/an/../../absolute/path
"branches": [
	{
		"directories": [
			0,
			1
		]
	},
	{
		"directories": [
			2,
			5
		],
		"branches": [
			{
				"directories": [
					3,
					4
				]
			}
		]
	},
	{
		"directories": [
			6
		],
		"branches": [
			{
				"directories": [
					7
				]
			}
		]
	}
]

Object: Segment_Tree

Segment Tree is based off of the Segment of a Directory

print
Object: Print
Tree Print is Normalized!

Example

"print": {
	"uri": "/;empty;ab;solute/path;dont;use;this",
	"iri": "/;empty;ab;solute/path;dont;use;this"
}
branches
[]Number
Normalized Branch Path
Each ID is the next Branch to follow for the Absolute Path

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"branches": [
	1,
	0
]
directories
[]Number
Normalized Directories
Each ID is the next Directory in an Absolute Path.
Directories of -1 are placeholders for an empty Directory with a Delimiter

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"directories": [
	-1,
	2
]
keyvalues
[][]Number
Normalized KeyValues
Each ID is a Directory that contains a KeyValue belonging to its Directory.
If Directory contains no KeyValues, its Value is Empty!

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"keyvalues": [
	[
		0,
		1,
		3
	],
	[
		2
	]
]
root
Object: Segment_Branch
Root Segment Tree Branch

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"root": {
	"branches": [
		{
			"directories": [
				0
			]
		},
		{
			"directories": [
				1
			],
			"keyvalues": [
				0,
				1,
				3
			],
			"branches": [
				{
					"directories": [
						2,
						3,
						6
					],
					"keyvalues": [
						2
					]
				},
				{
					"directories": [
						4,
						5
					],
					"keyvalues": [
						4
					]
				}
			]
		}
	]
}
conflict-scheme
Boolean
This will only be avaliable with Relative Paths!

Will Normalized Path Conflict with Scheme?
We need the context of a URI for this to be of use, Conflicts MUST be prefixed with ./

Example

"conflict-scheme": false
conflict-absolute
Boolean
This will only be avaliable with Relative Paths!

Will Normalized Path Conflict with Absolute?
This only exists if the first Directory is Empty or Cleaned results in an Empty Directory.
We don't want to confuse a Relative Path for an Absolute Path, Conflicts MUST be prefixed with ./

Example

"conflict-absolute": false
conflict-authority
Boolean
This will only be avaliable with Absolute Paths!

Will Normalized Path Conflict with Authority?
We need the context of a URI for this to be of use, Conflicts MUST be prefixed with /.

Example

"conflict-authority": false

Object Examples: Segment_Tree

Absolute Input: "/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path"
{
	"print": {
		"uri": "/;empty;ab;solute/path;dont;use;this",
		"iri": "/;empty;ab;solute/path;dont;use;this"
	},
	"branches": [
		1,
		0
	],
	"directories": [
		-1,
		2
	],
	"keyvalues": [
		[
			0,
			1,
			3
		],
		[
			2
		]
	],
	"root": {
		"branches": [
			{
				"directories": [
					0
				]
			},
			{
				"directories": [
					1
				],
				"keyvalues": [
					0,
					1,
					3
				],
				"branches": [
					{
						"directories": [
							2,
							3,
							6
						],
						"keyvalues": [
							2
						]
					},
					{
						"directories": [
							4,
							5
						],
						"keyvalues": [
							4
						]
					}
				]
			}
		]
	}
}
Relative Input: "relative;path/../dont;use;this/./for;anything;serious"
{
	"print": {
		"uri": "dont;use;this/for;anything;serious",
		"iri": "dont;use;this/for;anything;serious"
	},
	"branches": [
		1,
		1
	],
	"directories": [
		2,
		4
	],
	"keyvalues": [
		[
			2
		],
		[
			4
		]
	],
	"root": {
		"branches": [
			{
				"directories": [
					0,
					1
				],
				"keyvalues": [
					0
				]
			},
			{
				"directories": [
					2
				],
				"keyvalues": [
					2
				],
				"branches": [
					{
						"directories": [
							3
						]
					},
					{
						"directories": [
							4
						],
						"keyvalues": [
							4
						]
					}
				]
			}
		]
	}
}

Object: Segment_Tree_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
branches
Boolean
directories
Boolean
keyvalues
Boolean
root
Boolean
If set to true all the attributes of Branch are displayed.

conflict-scheme
Boolean
conflict-absolute
Boolean
conflict-authority
Boolean

Object: Segment_Branch

Segment Branch is based off of the Segment of a Directory.

directories
[]Number
Each ID is a Directory that is either the Current Directory of this Branch or references the Parent Directory Branch.

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"directories": []
branches
[]Object: Segment_Branch
Child Branches

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"branches": [
	{
		"directories": [
			0
		]
	},
	{
		"directories": [
			1
		],
		"keyvalues": [
			0,
			1,
			3
		],
		"branches": [
			{
				"directories": [
					2,
					3,
					6
				],
				"keyvalues": [
					2
				]
			},
			{
				"directories": [
					4,
					5
				],
				"keyvalues": [
					4
				]
			}
		]
	}
]
keyvalues
[]Number
KeyValues referencing this branch

Example

/.;empty/;ab/path;dont;use;this/..;solute/for;anything;serious/../path
"keyvalues": []

POST /api;v1.0/validate/uri/path

JSON POST endpoint. Supports Validator Options!

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!
LOOSE_ASIS assumes percent encoding DOES NOT EXIST and any percent characters will be encoded!

The Default/Invalid Validator is LOOSE

Constants

Key Value
STRICT 1
LOOSE 2
LOOSE_ASIS 3


Example

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

shorten
Boolean
Optional
Shorten Validated Object
Shortened Object may include other URI Compments needed to create a Valid URI Object
Validated must be Valid and Shorten must not be Throttled!

Example

"shorten": true
shorten-private
Boolean
Optional
If this is set you will only be able to access the Shortened Link with a Private Key!
Private is a very large Random Integer up to 2^64 (18,446,744,073,709,551,615) and should be very hard to brute force!
DO NOT RELY SOLEY ON THIS FOR SECURITY!

Example

"private": true

Response

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

Example

"errors": [
	"internal server error"
]
shortened
Object: Shortened
If Validated is Throttled or an error occurs Shortened will be ignored!

validated
Object: Path
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/uri/path

GET endpoint that only uses Query String Parameters. Supports JSONP!
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!
LOOSE_ASIS assumes percent encoding DOES NOT EXIST and any percent characters will be encoded!

The Default/Invalid Validator is LOOSE

Constants

Key Value
STRICT 1
LOOSE 2
LOOSE_ASIS 3


Example

validator=2
shorten
Exists
Optional
Shorten Validated Object
Shortened Object may include other URI Compments needed to create a Valid URI Object
Validated must be Valid and Shorten must not be Throttled!

shorten-private
Exists
Optional
If this is set you will only be able to access the Shortened Link with a Private Key!
Private is a very large Random Integer up to 2^64 (18,446,744,073,709,551,615) and should be very hard to brute force!
DO NOT RELY SOLEY ON THIS FOR SECURITY!

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"
]
shortened
Object: Shortened
If Validated is Throttled or an error occurs Shortened will be ignored!

validated
Object: Path
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/uri/path/after?

GET endpoint that uses Directory Parameters and the whole content of Query String (?) as the Raw Parameter. Supports JSONP!
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/uri/path/after;jsonp=Whoa;shorten;validator=2?/absolute/path/to
Parameters: ;jsonp=Whoa;shorten;validator=2
Validate: /absolute/path/to

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!
LOOSE_ASIS assumes percent encoding DOES NOT EXIST and any percent characters will be encoded!

The Default/Invalid Validator is LOOSE

Constants

Key Value
STRICT 1
LOOSE 2
LOOSE_ASIS 3


Example

validator=2
shorten
Exists
Optional
Shorten Validated Object
Shortened Object may include other URI Compments needed to create a Valid URI Object
Validated must be Valid and Shorten must not be Throttled!

shorten-private
Exists
Optional
If this is set you will only be able to access the Shortened Link with a Private Key!
Private is a very large Random Integer up to 2^64 (18,446,744,073,709,551,615) and should be very hard to brute force!
DO NOT RELY SOLEY ON THIS FOR SECURITY!

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"
]
shortened
Object: Shortened
If Validated is Throttled or an error occurs Shortened will be ignored!

validated
Object: Path
Always returned!

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