Note that the constraints specification is not fully decided yet, and as such should be interpreted as a person not as a machine. This will hopefully be tightened up

Please note, if you use a client that does not say "Accept: text/html" or similar, then you will get a response of application/json - suitable for machine parsing.

NB: Details of this need working out.

    "name" : "exception",
    "description" : "Values that represent exceptions - failures and reasons for failure",
    "fieldspec" : {
        "value": {
            "regex" : "$match_json($ARG)",
            "constraints" : null,
            "interpretation" : "Exception specification",
            "note" : "A JSON representation of a exception object"
        "href" : {
            "regex" : "^/([a-zA-Z_][a-zA-Z_0-9]*)(/([a-zA-Z_][a-zA-Z_0-9]*))*$",
            "constraint" : "(length($1)<30 and length($3)<30)",
            "interpretation" : "resourceid",
            "note" : "This should be the canonical URL path for the resource generally speaking - ala /some/resource/5"
        "help" : {
            "regex" : "^\".*\"$",
            "constraint" : null,
            "interpretation" : "string",
            "note": "This is human readable text intended to convey to the user something about this value"
        "type" : {
            "regex" : "^$",
            "constraint" : null,
            "interpretation" : "url description the type and constraints on the value",
            "note" : "Represents a link back to this description"