Overview of the Tenon Test API Response

Upon submission of your request against the Test API, we will return a JSON formatted response for your client application to consume. This response will include a large amount of detail useful to you in determining the quality of your request and will detail the test results generated based on that request.

This document explains everything in the JSON response.

  • status: HTTP status code from the Test API. Values will be 200, 400, 401, 402, 403, 404, 405, 500, or 522
  • message: Human readable text message that corresponds to the numeric HTTP status above
  • code: A token value that represents the reason for the response.
  • moreInfo: A fully qualified URL at which you can learn more details explaining the reason for the response.
  • documentSize: size, in bytes of the document you gave us to test
  • info: (rarely shown) additional debugging information
  • responseExecTime: How long, in seconds, it took for us to test your document
  • responseTime: Time of your request, localized to GMT
  • sourceHash: an MD5 hash of your document source, useful in uniquely identifying your tested documents
  • urlHttpCode: the HTTP status code that your page sent back
  • resultUrl: (if "store" was set to "1" in your request) a URL at which you can view the test results on the Tenon website
  • request: This object is a complete mirror of the request you sent to us. Any values echoed here which you did not supply in your request will be set to their defaults, as discussed in "Understanding Tenon API Request Parameters"
    • certainty
    • docID
    • importance
    • key
    • level
    • priority
    • responseID
    • projectID
    • uaString
    • url
    • viewport
      • height
      • width
    • fragment
    • store
  • clientScriptErrors:
    • message: The exception message
    • stacktrace: This is a full stack trace of the error
      • file: the file where the error exists
      • line: the line where the error exists
      • function: the function where the error exists
  • globalStats: The global stats object exists to allow you to compare your document against others that have been tested. Global Stats are a calculation of all tested documents. These stats relate only to "density" - that is, per KB of code, what percentage contain accessibility issues.
    • allDensity: Density, as a percentage, of both errors and warnings
    • errorDensity: Density, as a percentage, of errors only
    • warningDensity: Density, as a percentage, of warnings only
    • stdDev: Standard Deviation
  • resultSummary: The resultSummary object provides a high level overview of our test results.
    • density: As mentioned above in 'globalStats' the density is a calculation of the issue density in your tested document
      • allDensity
      • errorDensity
      • warningDensity
    • issues: This is a count of the issues in your document
      • totalErrors
      • totalIssues
      • totalWarnings
    • issuesByLevel: This is a count of the issues in your document, separated out by WCAG Level.
      • A
        • count
        • pct
      • AA
        • count
        • pct
      • AAA
        • count
        • pct
    • tests: this is a count of how many tests Tenon API ran (total), how many passed and how many failed:
      • failing
      • passing
      • total
  • resultSet: The resultSet will contain an array for each issue discovered during testing. Each issue will be presented with the following keys. Each of these are described in full in the document titled "Understanding Issue Reports in Tenon.io API Response"
    • bpID
    • certainty
    • priority
    • errorDescription
    • errorSnippet
    • errorTitle
    • issueID
    • position
      • line
      • column
    • viewPortLocation
      • width
      • height
      • top-left
        • x
        • y
      • bottom-right
        • x
        • y
    • ref
    • resultTitle
    • signature
    • standards
    • tID
    • xpath
  • apiErrors: will list out any errors on the Tenon API itself. We hope that this object is always empty. However, if you do see anything here, we'd appreciate it if you'd pass on the following additional information in this section. It will include:
    • line
    • message
    • sourceId
    • tID
  • remainingApiCalls: lists the number of API calls you have remaining in your account. It lists two types of calls:
    • planCalls: the number of calls remaining this month as part of your subscription
    • boosts: the number of extra API calls available as boosts
  • log: will store debug messages as an array with the reason request returned 400 response

JSON Response Example

Here's an example of the JSON response

    "apiErrors": [],
    "documentSize": 113805,
    "globalStats": {
        "errorDensity": "145",
        "warningDensity": "11",
        "allDensity": "156",
        "stdDev": "375"
    "message": "success",
    "request": {
        "certainty": "0",
        "docID": "85001FBE-65DD-4942-FE94-D3D33A9E2E1F",
        "key": "null",
        "level": "AAA",
        "priority": "0",
        "reportID": "43B4C1A5-B553-5CEA-5AC1-D1CCA9008ABB",
        "responseID": "f27aa22a14a15316f721af629a3a0439",
        "projectID": "DEFAULT_PROJECT",
        "uaString": "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)",
        "url": "http://example.com",
        "viewport": {
            "height": 768,
            "width": 1024
        "fragment": "0",
        "store": "0"
    "responseExecTime": "1.17",
    "responseTime": "2015-02-04T20:55:51.404Z",
    "resultSet": [
            "bpID": 106,
            "certainty": 100,
            "errorDescription": "Link found which contains no text. Because Accessibility APIs use a link's text do determine its accessible name, this link will have no name and will not be announced by assistive technologies.",
            "errorSnippet": "<a class=\"gb_D gb_Ta\" href=\"http://www.example.com/intl/en/options/\" title=\"Apps\" aria-haspopup=\"true\" aria-expanded=\"false\" data-ved=\"0CAkQvSc\" data-eqid=\"0click\"></a>",
            "errorTitle": "Blank link text found",
            "position": {
                "column": 71,
                "line": 24
            "priority": 100,
            "ref": "https://tenon.io/bestpractice.php?bpID=106&tID=57",
            "resultTitle": "Ensure link text (and alternate text for images, when used as links) describes the destination or purpose of the link.",
            "signature": "18c1e927a023f074aa9dce6df3092e51",
            "standards": [
                "Web Content Accessibility Guidelines (WCAG) 2.0, Level A: 2.4.4 Link Purpose (In Context)",
                "Web Content Accessibility Guidelines (WCAG) 2.0, Level AAA: 2.4.9 Link Purpose (Link Only)"
            "tID": 57,
            "xpath": "/html/body/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[2]/div[1]/a[1]"
    "resultSummary": {
        "density": {
            "allDensity": 5,
            "errorDensity": 5,
            "warningDensity": 0
        "issues": {
            "totalErrors": 6,
            "totalIssues": 6,
            "totalWarnings": 0
        "issuesByLevel": {
            "A": {
                "count": 5,
                "pct": 83.33
            "AA": {
                "count": 1,
                "pct": 16.67
            "AAA": {
                "count": 1,
                "pct": 16.67
        "tests": {
            "failing": 6,
            "passing": 50,
            "total": 56
    "sourceHash": "605ce048930a2c07bbac7255b8fe5de8",
    "status": 200,
    "urlHttpCode": 200,
    "clientScriptErrors": [],
    "log": []