Reports API
Intro to the Reports API
Tenon's Reports API provides quick access to a large number of important pieces of data, allowing you to understand your accessibility progress. The Reports API is the same data that is displayed on your Dashboard.
We have a Postman Collection available for all of our reports.
Making Requests
- All requests against the Reports API must be made via
GET
. - All requests must include 'key' and 'type' parameters, where 'key' represents your API key and 'type' represents the type of report you want to retrieve
- Additional parameters may be required depending on the type of report. Those additional parameters are listed in the description of each report
- There are a handful of optional parameters that can be used for every report type:
projectID
: Allows you to limit all reports to a specific projectstart
: Allows you to set the earliest date for which you want to retrieve data. It should be formatted as YYYYMMDDend
: Allows you to set the earliest date for which you want to retrieve data. It should be formatted as YYYYMMDDformat
: Allows you to select the output format of the report. If supplied, values must be one of 'json' or 'csv' which, as their naming implies, will provide the report data as JSON or CSV formatting, respectively.
Using filters like projectID
and start
& end
dates go a long way to making many of these reports more useful.
Request Examples
Sending a GET
request for the following URL would retrieve the Summary report:
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=summary
Sending a GET
request for the following URL would retrieve the Summary report:
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=summary&start=20170901&end=20171001
Response Format
All responses from the Reports API adhere to the following format:
request
: An object containing all query parameters sent with the request.status
: Relevant HTTP status code for the request.message
: String of text that corresponds to the statusname
: String to identify the name of this type of reportdescription
: String that describes what the report providesdata
: The actual report data. Note: this may be an object or it may be an array, depending on the type of reporttime
: total time, in seconds, that it took to return the response
Response Format Example
{
"request": {
"key": [YOUR_API_KEY],
"type": "summary",
"apiKey": [YOUR_API_KEY],
"start": "2017-09-01 0:00:00",
"end": "2017-10-01 0:00:00"
},
"status": 200,
"message": "OK",
"name": "Summary Between 2017-09-01 0:00:00 and 2017-10-01 0:00:00 ",
"description": "Returns high-level performance stats on a number of items.",
"data": {
},
"time": 0.056
}
Reports
There are two types of reports: Those which present summary data and those which list detailed data. Those which list detailed data all begin with 'list'. For instance: "List Issue Instances by Test ID" would provide full issue details for all issues relating to a specific Test ID
The following list of reports is organized alphabetically.
- Average Density
- Density Distribution
- Document Size
- Duplicate Issues
- History
- History by docID
- Issues by Certainty
- Issues by Content Category
- Issues by Level
- Issues by Priority
- Issues by Test ID
- Issues by WCAG SC
- Issues per Page
- List Issue Instances by Test ID
- Get Issue Instance by ID
- List issues by Signature
- Log Time
- Logs By Day
- Page History
- Page performance
- Pass vs. Fail
- Requests by Certainty
- Requests by Priority
- Response Codes
- Summary
- Top Errors
- True Response Codes
- Response by ID
- List All Issues
- List Issues by Content Category
- List Issues by Certainty
- List Issues by Priority
- List Duplicate Issues by Test ID
- List Issues by WCAG Success Criterion
- List Requests by Response Status Code
- Requests by Level
- List Issues by WCAG Level
- Resolved Issues by URL
Average Density
Returns density information for each date you have run tests.
Issue density is a better indicator of performance than issue counts and provide a glimpse into how good or bad things really are. You goal is to have the lowest density scores that you can.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=avgDensity
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "avgDensity",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"2017-10-15": {
"avgAllDensity": 110,
"avgErrorDensity": 101,
"avgWarningDensity": 9,
"maxAllDensity": 3657,
"maxErrorDensity": 3657,
"minErrorDensity": 0
}
},
"name": "Average Density",
"description": "Returns density information for each date you have run tests.",
"time": 0.009
}
Density Distribution
Returns the number and percentage of pages in each of the following density ranges: 0, 1-10, 11-20, 21-30, 31-40, 41-50, 51-60, 61-70, 71-80, 81-90, 91-100, 100+
Like the above, this provides insight into your overall performance. Rather than merely relying on averages, this shows you where you are among a set of distinct ranges. As above, you'll want to focus on ensuring lower issue density.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=densityDistribution
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "densityDistribution",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"0": {
"count": 41,
"percent": 5
},
"1-10": {
"count": 146,
"percent": 19
},
"11-20": {
"count": 94,
"percent": 12
},
"21-30": {
"count": 72,
"percent": 10
},
"31-40": {
"count": 59,
"percent": 8
},
"41-50": {
"count": 46,
"percent": 6
},
"51-60": {
"count": 25,
"percent": 3
},
"61-70": {
"count": 31,
"percent": 4
},
"71-80": {
"count": 28,
"percent": 4
},
"81-90": {
"count": 11,
"percent": 1
},
"91-100": {
"count": 17,
"percent": 2
},
"100+": {
"count": 185,
"percent": 25
}
},
"name": "Density Distribution",
"description": "Returns the number and percentage of pages in each of the following density ranges: 0, 1-10, 11-20, 21-30, 31-40, 41-50, 51-60, 61-70, 71-80, 81-90, 91-100, 100+",
"time": 0.015
}
Document Size
Returns the average document size, in kilobytes, for each date you have run tests.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=documentSize
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "documentSize",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "success",
"status": 200,
"data": {
"2017-10-15": 105906
},
"name": "Document Size",
"description": "Returns the average document size, in kilobytes, for each date you have run tests.",
"time": 0.008
}
Duplicate Issues
Returns a list of duplicate issues as well as a count and percentage of times they occur.
Use this report to determine patterns in your sites. Identifying duplicates will allow you to prioritize what to fix first.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=duplicateIssues
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "duplicateIssues",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": [
{
"tID": 57,
"signature": "26636d552eb250e84171f463fee3b23b",
"testVioTitle": "This Link Has No Text Inside It.",
"count": 3608,
"percent": 0
},
{
"tID": 79,
"signature": "b0f656b022c33715c071dd8f6ba6af49",
"testVioTitle": "This Link Has A `title` Attribute That's The Same As The Text Inside The Link.",
"count": 3016,
"percent": 0
},
{
"tID": 31,
"signature": "0509a7f2da61506c8f356d8b589a5ac5",
"testVioTitle": "This Link Uses An Invalid Hypertext Reference.",
"count": 2959,
"percent": 0
},
{
"tID": 9,
"signature": "761ae226d7e60696ca9134e909291793",
"testVioTitle": "This Image Is Missing An `alt` Attribute.",
"count": 2100,
"percent": 0
},
{
"tID": 34,
"signature": "02bd43398b65dcf11bf1db51f6d13474",
"testVioTitle": "This Table Does Not Have Any Headers.",
"count": 1492,
"percent": 0
},
{
"tID": 75,
"signature": "62b6049b4b6cb4fb76e6a69823ae2554",
"testVioTitle": "This `id` Is Being Used More Than Once.",
"count": 1446,
"percent": 0
}
],
"name": "Duplicate issues",
"description": "Returns a list of duplicate issues as well as a count & percentage of times they occur",
"time": 0.242
}
History
This report retrieves a full list of logs for a specific project
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=history&projectID=[PROJECTID_GOES_HERE]
Response
{
"request": {
"key": "[YOUR_API_KEY]",
"type": "history",
"projectID": "[YOUR_PROJECT]",
"apiKey": "[YOUR_API_KEY]",
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"responseID": "5ec8df67470b0ae94bf74103e13a40b8",
"dateAdded": "2018-02-09 02:56:46",
"status": 200,
"message": "success",
"code": "success",
"reqLevel": "AAA",
"reqCertainty": 0,
"reqPriority": 0,
"reqImportance": 0,
"docID": "C04B1E64-6C32-4128-C7D8-284733043476",
"documentSize": 220719,
"sourceHash": "26c414f8afe176ea6b220d879e34cca9",
"errorDensity": 9,
"warningDensity": 2,
"allDensity": 11,
"errors": 19,
"warnings": 4,
"url": "http://www.google.com",
"fragment": 0,
"store": 1,
"projectID": "237E42A1-F744-D1C7-D22D-BC6877D4CE11",
"viewPortWidth": 1024,
"viewPortHeight": 768,
"uaString": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36",
"ref": "",
"startTime": "2018-02-09 02:56:44",
"endTime": "2018-02-09 02:56:46",
"delay": 0,
"issuesByLevelA": 22,
"issuesByLevelAA": 1,
"issuesByLevelAAA": 9,
"testsFailing": 10,
"testsPassing": 64,
"waitFor": "",
"trueHttpCode": 302,
"pageTitle": "Google"
}
],
"name": "History",
"description": "Returns a response summary for each test run within a project",
"time": 0.01
}
}History by docID
Tenon's Test API lets you set a docID
as one of your API request parameters. This value is useful in providing a way to uniquely identify a page - especially during things like functional UI testing or when testing pages that have machine-generated URLs. You can set any arbitrary string as your docID
to help identify what page (or component) was tested. Then, you can use this report type to gather performance data on that page.
Every test for that particular docID
will be returned in this report. This report is very useful for tracking performance of specific pages.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=historyByDocID&docID=[DOCID_GOES_HERE]
Response
{
"request": {
"key": "[YOUR_API_KEY]",
"type": "historyByDocID",
"docID": "[YOUR_DOCID]",
"apiKey": "[YOUR_API_KEY]",
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"responseID": "5ec8df67470b0ae94bf74103e13a40b8",
"dateAdded": "2018-02-09 02:56:46",
"status": 200,
"message": "success",
"code": "success",
"reqLevel": "AAA",
"reqCertainty": 0,
"reqPriority": 0,
"reqImportance": 0,
"docID": "C04B1E64-6C32-4128-C7D8-284733043476",
"documentSize": 220719,
"sourceHash": "26c414f8afe176ea6b220d879e34cca9",
"errorDensity": 9,
"warningDensity": 2,
"allDensity": 11,
"errors": 19,
"warnings": 4,
"url": "http://www.google.com",
"fragment": 0,
"store": 1,
"projectID": "237E42A1-F744-D1C7-D22D-BC6877D4CE11",
"viewPortWidth": 1024,
"viewPortHeight": 768,
"uaString": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36",
"ref": "",
"startTime": "2018-02-09 02:56:44",
"endTime": "2018-02-09 02:56:46",
"delay": 0,
"issuesByLevelA": 22,
"issuesByLevelAA": 1,
"issuesByLevelAAA": 9,
"testsFailing": 10,
"testsPassing": 64,
"trueHttpCode": 302,
"pageTitle": "Google"
}
],
"name": "History by docID",
"description": "Returns a response summary for each test run against a specified URL",
"time": 0.01
}
Issues by Certainty
Returns a distribution of issues organized by Certainty levels (0, 20, 40, 60, 80, 100)
This report is another good indicator of performance, though we expect the overall percentages provided will be quite predictable. Tenon's tests always have a high level of certainty, anyway.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesByCertainty
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesByCertainty",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"0": {
"count": 0,
"percent": 0
},
"20": {
"count": 0,
"percent": 0
},
"40": {
"count": 89,
"percent": 0
},
"60": {
"count": 5585,
"percent": 17
},
"80": {
"count": 2522,
"percent": 8
},
"100": {
"count": 23745,
"percent": 74
}
},
"name": "Issues by Certainty",
"description": "Returns a distribution of issues organized by Certainty levels (0, 20, 40, 60, 80, 100)",
"time": 0.214
}
Issues by Content Category
Returns issue counts and percentages organized by content categories
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesByContentCategory
Response
Note: We do not recommend statically storing the category names, as these names may change over time.
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesByContentCategory",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"catID": 7,
"name": "Images and other non-text content",
"count": 4027,
"percent": 12.61
},
{
"catID": 8,
"name": "Tables",
"count": 2985,
"percent": 9.35
},
{
"catID": 9,
"name": "Cascading Stylesheets (CSS)",
"count": 699,
"percent": 2.19
},
{
"catID": 10,
"name": "Forms",
"count": 2669,
"percent": 8.36
},
{
"catID": 11,
"name": "Navigation",
"count": 11916,
"percent": 37.31
},
{
"catID": 12,
"name": "Frames and i-frames",
"count": 0,
"percent": 0
},
{
"catID": 13,
"name": "Document Structure",
"count": 3274,
"percent": 10.25
},
{
"catID": 14,
"name": "Language, typography, and content",
"count": 1451,
"percent": 4.54
},
{
"catID": 16,
"name": "Dynamic Content",
"count": 1999,
"percent": 6.26
},
{
"catID": 17,
"name": "Multimedia",
"count": 16,
"percent": 0.05
},
{
"catID": 31,
"name": "Keyboard Accessibility & Focus Control",
"count": 1996,
"percent": 6.25
},
{
"catID": 35,
"name": "Custom Controls",
"count": 473,
"percent": 1.48
}
],
"name": "Issues by content category",
"description": "Returns issue counts and percentages organized by content categories",
"time": 0.447
}
Issues by Level
Returns a distribution of issues organized by WCAG Level (A, AA, AAA)
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesByLevel
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesByLevel",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"A": {
"count": 29633,
"percent": 92.77
},
"AA": {
"count": 1184,
"percent": 3.71
},
"AAA": {
"count": 12001,
"percent": 37.57
}
},
"name": "Issues by Level",
"description": "Returns a distribution of issues organized by WCAG Level (A, AA, AAA)",
"time": 0.174
}
Issues by Priority
Returns a distribution of issues organized by Priority levels (0, 20, 40, 60, 80, 100)
This report is another good indicator of performance, though we expect the overall percentages provided will be quite predictable. Tenon's tests always have a high level of Priority, anyway.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesByPriority
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesByPriority",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"0-20": {
"count": 0,
"percent": 0
},
"21-40": {
"count": 0,
"percent": 0
},
"41-60": {
"count": 141,
"percent": 0
},
"61-80": {
"count": 1929,
"percent": 6
},
"81-100": {
"count": 29871,
"percent": 94
}
},
"name": "Issues by Priority",
"description": "Returns a distribution of issues organized by Priority levels (0, 20, 40, 60, 80, 100)",
"time": 0.181
}
Issues by Test ID
Returns a list of all tests that have been failed and a count & percentage of how many times it was failed.
Because this report focuses on raw issue counts across all tests, focus on the most frequently occurring issues. Not only does this allow you to focus on what to fix but may also guide internal training programs as well. Frequent issues of a specific type indicate ignorance around accessibility for that type of code.
Note: We do not recommend statically storing the issue titles, as the titles may change over time.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesByTid
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesByTid",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"tID": 9,
"testVioTitle": "This Image Is Missing An `alt` Attribute.",
"count": 2433,
"percent": 8
},
{
"tID": 13,
"testVioTitle": "This Frame Does Not Have A `title` Attribute.",
"count": 305,
"percent": 1
},
{
"tID": 45,
"testVioTitle": "This Image's `alt` Attribute Might Not Be Suitable.",
"count": 185,
"percent": 1
},
{
"tID": 57,
"testVioTitle": "This Link Has No Text Inside It.",
"count": 4148,
"percent": 13
},
{
"tID": 81,
"testVioTitle": "This Heading Element Is Blank.",
"count": 139,
"percent": 0
}
],
"name": "Issues by Test ID",
"description": "Returns a list of all tests that have been failed and a count & percentage of how many times it was failed.",
"time": 0.476
}
Issues by WCAG SC
Returns a list of all WCAG Success Criterion and, for each, indicates whether Tenon tests for it and if so how often you have failed tests related to that Success Criterion
This can provide an insight into your overall performance against the individual WCAG Success Criterion. Keep in mind, however, that automated accessibility testing tools are not judges and some things cannot be tested for with an automated tool.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesByWcagSc
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesByWcagSc",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [ CHECK STANDARDS
{
"industryStandard": "1.1.1 Non-text Content",
"tested": true,
"total": 5435,
"percent": 17
},
{
"industryStandard": "1.2.1 Audio-only and Video-only (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.2 Captions (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.3 Audio Description or Media Alternative (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.4 Captions (Live)",
"tested": false
},
{
"industryStandard": "1.2.5 Audio Description (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.6 Sign Language (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.7 Extended Audio Description (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.8 Media Alternative (Prerecorded)",
"tested": false
},
{
"industryStandard": "1.2.9 Audio-only (Live)",
"tested": false
},
{
"industryStandard": "1.3.1 Info and Relationships",
"tested": true,
"total": 6125,
"percent": 19
},
{
"industryStandard": "1.3.2 Meaningful Sequence",
"tested": true,
"total": 223,
"percent": 1
},
{
"industryStandard": "1.3.3 Sensory Characteristics",
"tested": false
},
{
"industryStandard": "1.4.1 Use of Color",
"tested": false
},
{
"industryStandard": "1.4.2 Audio Control",
"tested": false
},
{
"industryStandard": "1.4.3 Contrast (Minimum)",
"tested": false
},
{
"industryStandard": "1.4.4 Resize text",
"tested": false
},
{
"industryStandard": "1.4.5 Images of Text",
"tested": true,
"total": 11,
"percent": 0
},
{
"industryStandard": "1.4.6 Contrast (Enhanced)",
"tested": false
},
{
"industryStandard": "1.4.7 Low or No Background Audio",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "1.4.8 Visual Presentation",
"tested": true,
"total": 688,
"percent": 2
},
{
"industryStandard": "1.4.9 Images of Text (No Exception)",
"tested": false
},
{
"industryStandard": "2.1.1 Keyboard",
"tested": true,
"total": 4280,
"percent": 13
},
{
"industryStandard": "2.1.2 No Keyboard Trap",
"tested": true,
"total": 280,
"percent": 1
},
{
"industryStandard": "2.1.3 Keyboard (No Exception)",
"tested": true,
"total": 1996,
"percent": 6
},
{
"industryStandard": "2.2.1 Timing Adjustable",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "2.2.2 Pause, Stop, Hide",
"tested": false
},
{
"industryStandard": "2.2.3 No Timing",
"tested": false
},
{
"industryStandard": "2.2.4 Interruptions",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "2.2.5 Re-authenticating",
"tested": false
},
{
"industryStandard": "2.3.1 Three Flashes or Below Threshold",
"tested": true,
"total": 1,
"percent": 0
},
{
"industryStandard": "2.3.2 Three Flashes",
"tested": true,
"total": 1,
"percent": 0
},
{
"industryStandard": "2.4.1 Bypass Blocks",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "2.4.10 Section Headings",
"tested": true,
"total": 782,
"percent": 2
},
{
"industryStandard": "2.4.2 Page Titled",
"tested": true,
"total": 22,
"percent": 0
},
{
"industryStandard": "2.4.3 Focus Order",
"tested": true,
"total": 343,
"percent": 1
},
{
"industryStandard": "2.4.4 Link Purpose (In Context)",
"tested": true,
"total": 8534,
"percent": 27
},
{
"industryStandard": "2.4.5 Multiple Ways",
"tested": false
},
{
"industryStandard": "2.4.6 Headings and Labels",
"tested": true,
"total": 1173,
"percent": 4
},
{
"industryStandard": "2.4.7 Focus Visible",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "2.4.8 Location",
"tested": false
},
{
"industryStandard": "2.4.9 Link Purpose (Link Only)",
"tested": true,
"total": 8534,
"percent": 27
},
{
"industryStandard": "3.1.1 Language of Page",
"tested": true,
"total": 193,
"percent": 1
},
{
"industryStandard": "3.1.2 Language of Parts",
"tested": false
},
{
"industryStandard": "3.1.3 Unusual Words",
"tested": false
},
{
"industryStandard": "3.1.4 Abbreviations",
"tested": false
},
{
"industryStandard": "3.1.5 Reading Level",
"tested": false
},
{
"industryStandard": "3.1.6 Pronunciation",
"tested": false
},
{
"industryStandard": "3.2.1 On Focus",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "3.2.2 On Input:",
"tested": false
},
{
"industryStandard": "3.2.3 Consistent Navigation",
"tested": false
},
{
"industryStandard": "3.2.4 Consistent Identification",
"tested": false
},
{
"industryStandard": "3.2.5 Change on Request",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "3.3.1 Error Identification",
"tested": false
},
{
"industryStandard": "3.3.2 Labels or Instructions",
"tested": true,
"total": 1388,
"percent": 4
},
{
"industryStandard": "3.3.3 Error Suggestion",
"tested": false
},
{
"industryStandard": "3.3.4 Error Prevention (Legal, Financial, Data)",
"tested": false
},
{
"industryStandard": "3.3.5 Help",
"tested": true,
"total": 0,
"percent": 0
},
{
"industryStandard": "3.3.6 Error Prevention (All)",
"tested": false
},
{
"industryStandard": "4.1.1 Parsing",
"tested": true,
"total": 1736,
"percent": 5
},
{
"industryStandard": "4.1.2 Name, Role, Value",
"tested": true,
"total": 8531,
"percent": 27
}
],
"name": "Issues by WCAG SC",
"description": "Returns a list of all WCAG Success Criterion and, for each, indicates whether Tenon tests for it and if so how often you have failed tests related to that Success Criterion",
"time": 0.35
}
Issues per Page
Returns an average count of issues per page for each date you have run tests.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issuesPerPage
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issuesPerPage",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"2017-10-15": 43
},
"name": "Issues per page",
"description": "Returns an average count of issues per page for each date you have run tests.",
"time": 0.008
}
List Issue Instances by Test ID
Returns a list of issues organized by Test ID
Use this to find a fully detailed list of all issues for the specified Test ID
Example
Request
This report type requires you to supply two additional parameters:
tID
which is the test you want to get results forprojectID
the project you want results from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssueInstances&tID=[tID]&projectID=[PROJECT_ID_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssueInstances",
"tID": [TEST_ID],
"projectID": [PROJECT_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "348300e9a01c16849f9760105018be9a",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[4]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "6081d33c302fe40822ca4b98c4aed6c0",
"errorSnippet": "<a id=\"officemenu_onenote\" title=\"OneNote Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://www.onenote.com/notebooks?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5028.1\"><div><div class=\"oml_img\" id=\"officemenu_onenote_img\"></div>&",
"positionColumn": 27,
"positionLine": 2863,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "348300e9a01c16849f9760105018be9a",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[4]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "6081d33c302fe40822ca4b98c4aed6c0",
"errorSnippet": "<a id=\"officemenu_onenote\" title=\"OneNote Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://www.onenote.com/notebooks?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5028.1\"><div><div class=\"oml_img\" id=\"officemenu_onenote_img\"></div>&",
"positionColumn": 27,
"positionLine": 2863,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "5aa85829ec1610964df615bc3ade61f4",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[2]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "25026e9f59d9defb5c3a0271e93ed7c6",
"errorSnippet": "<a id=\"officemenu_excel\" title=\"Excel Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://office.live.com/start/Excel.aspx?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5026.1\"><div><div class=\"oml_img\" id=\"officemenu_excel_img\"></div>",
"positionColumn": 27,
"positionLine": 2847,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "5aa85829ec1610964df615bc3ade61f4",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[2]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "25026e9f59d9defb5c3a0271e93ed7c6",
"errorSnippet": "<a id=\"officemenu_excel\" title=\"Excel Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://office.live.com/start/Excel.aspx?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5026.1\"><div><div class=\"oml_img\" id=\"officemenu_excel_img\"></div>",
"positionColumn": 27,
"positionLine": 2847,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "5c7d2e3cb5c8fb55160fbda7eccf6e72",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[3]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "71ff65056ce2789e63f221bbb780fe31",
"errorSnippet": "<a id=\"officemenu_powerpoint\" title=\"PowerPoint Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://office.live.com/start/PowerPoint.aspx?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5027.1\"><div><div class=\"oml_img\" id=\"officemenu_powerpoint_",
"positionColumn": 27,
"positionLine": 2855,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "5c7d2e3cb5c8fb55160fbda7eccf6e72",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[3]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "71ff65056ce2789e63f221bbb780fe31",
"errorSnippet": "<a id=\"officemenu_powerpoint\" title=\"PowerPoint Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://office.live.com/start/PowerPoint.aspx?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5027.1\"><div><div class=\"oml_img\" id=\"officemenu_powerpoint_",
"positionColumn": 27,
"positionLine": 2855,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "8c16b80a8e6069e94ec9682e798799ef",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[6]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "b444a6958842c749892834b25e5c811e",
"errorSnippet": "<a id=\"officemenu_onedrive\" title=\"OneDrive\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://onedrive.live.com/?gologin=1&WT.mc_id=O16_BingHP\" h=\"ID=SERP,5030.1\"><div><div class=\"oml_img\" id=\"officemenu_onedrive_img\"></d",
"positionColumn": 27,
"positionLine": 28[TEST_ID],
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "8c16b80a8e6069e94ec9682e798799ef",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[6]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "b444a6958842c749892834b25e5c811e",
"errorSnippet": "<a id=\"officemenu_onedrive\" title=\"OneDrive\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://onedrive.live.com/?gologin=1&WT.mc_id=O16_BingHP\" h=\"ID=SERP,5030.1\"><div><div class=\"oml_img\" id=\"officemenu_onedrive_img\"></d",
"positionColumn": 27,
"positionLine": 28[TEST_ID],
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "8fa125f6cc9aa1c63ec6395704927d8d",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[1]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "6d6e2998ebcd39e4a3d11540a6cc0b27",
"errorSnippet": "<a id=\"officemenu_word\" title=\"Word Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://office.live.com/start/Word.aspx?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5025.1\"><div><div class=\"oml_img\" id=\"officemenu_word_img\"></div><",
"positionColumn": 27,
"positionLine": 2839,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "8fa125f6cc9aa1c63ec6395704927d8d",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[1]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "6d6e2998ebcd39e4a3d11540a6cc0b27",
"errorSnippet": "<a id=\"officemenu_word\" title=\"Word Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://office.live.com/start/Word.aspx?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5025.1\"><div><div class=\"oml_img\" id=\"officemenu_word_img\"></div><",
"positionColumn": 27,
"positionLine": 2839,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "b0f656b022c33715c071dd8f6ba6af49",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[5]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "1a24116891ca6e04232894af5100ea1e",
"errorSnippet": "<a id=\"officemenu_sway\" title=\"Sway\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://www.sway.com?WT.mc_id=O16_BingHP&utm_source=O16Bing&utm_medium=Nav&utm_campaign=HP\" h=\"ID=SERP,5029.1\"><div><div class=\"oml_i",
"positionColumn": 27,
"positionLine": 2871,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "b0f656b022c33715c071dd8f6ba6af49",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[5]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "1a24116891ca6e04232894af5100ea1e",
"errorSnippet": "<a id=\"officemenu_sway\" title=\"Sway\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://www.sway.com?WT.mc_id=O16_BingHP&utm_source=O16Bing&utm_medium=Nav&utm_campaign=HP\" h=\"ID=SERP,5029.1\"><div><div class=\"oml_i",
"positionColumn": 27,
"positionLine": 2871,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "bcdf97a84d40a778d831b3067823537d",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[7]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "b80f530152cdc6ade82bc9aec23c9e4c",
"errorSnippet": "<a id=\"officemenu_calendar\" title=\"Calendar\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://calendar.live.com/?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5031.1\"><div><div class=\"oml_img\" id=\"officemenu_calendar_img\"></div><div clas",
"positionColumn": 27,
"positionLine": 2887,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "bcdf97a84d40a778d831b3067823537d",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[7]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "b80f530152cdc6ade82bc9aec23c9e4c",
"errorSnippet": "<a id=\"officemenu_calendar\" title=\"Calendar\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://calendar.live.com/?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5031.1\"><div><div class=\"oml_img\" id=\"officemenu_calendar_img\"></div><div clas",
"positionColumn": 27,
"positionLine": 2887,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "c2f2bf0fc747c74496ddd67485bd98eb",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[8]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "ed48c659c55d48cb1c27edaa08daad7b",
"errorSnippet": "<a id=\"officemenu_people\" title=\"People\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://outlook.live.com/owa/?path=/people&WT.mc_id=O16_BingHP\" h=\"ID=SERP,5032.1\"><div><div class=\"oml_img\" id=\"officemenu_people_img\"></d",
"positionColumn": 27,
"positionLine": 2895,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": [TEST_ID],
"signature": "c2f2bf0fc747c74496ddd67485bd98eb",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[8]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [PROJECT_ID],
"issueID": "ed48c659c55d48cb1c27edaa08daad7b",
"errorSnippet": "<a id=\"officemenu_people\" title=\"People\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://outlook.live.com/owa/?path=/people&WT.mc_id=O16_BingHP\" h=\"ID=SERP,5032.1\"><div><div class=\"oml_img\" id=\"officemenu_people_img\"></d",
"positionColumn": 27,
"positionLine": 2895,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issue instances by Test ID",
"description": "Returns a list of issues organized by Test ID",
"time": 0.031
}
Get Issue Instance by ID
Returns all of the details for a single, specific issue instance. This returns the same exact information that you find in the individual issue objects in our Test API's `resultSet`, with a few important additions: `responseID`, which is the ID of the test run this issue appeared in, and `duplicates` which is the total number of times this exact issue has appeared in the project
Use this to retrieve the information on a single issue instance
Example
Request
This report type requires you to supply one additional parameter:
tID
which is the specific issue you want the details from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=issueInstanceByID&issueID=[issueID]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "issueInstanceByID",
"issueID": [ISSUE_ID],
"apiKey": [YOUR_API_KEY]
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "This link has a `title` attribute that is the same as the text inside the link",
"testVioDescription": "This link is already labeled by its text. The equivalent `title` leads to unnecessary verbosity for assistive technologies, and offers no benefits to users.",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": 01,
"signature": "348300e9a01c16849f9760105018be9a",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[4]/a[1]",
"certainty": 100,
"priority": 100,
"issueID": "6081d33c302fe40822ca4b98c4aed6c0",
"errorSnippet": "<a id=\"officemenu_onenote\" title=\"OneNote Online\" target=\"_blank\" onclick=\"hpulc4hdr();\" href=\"https://www.onenote.com/notebooks?WT.mc_id=O16_BingHP\" h=\"ID=SERP,5028.1\"><div><div class=\"oml_img\" id=\"officemenu_onenote_img\"></div>&",
"positionColumn": 27,
"positionLine": 2863,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
"duplicates": 5,
},
],
"name": "Issue Instance By ID",
"description": "Returns all of the details for a single, specific issue instance",
"time": 0.031
}
List issues by Signature
Returns a list of issues based on a specified issue signature.
This report allows you to see
Example
Request
This report type requires you to supply two additional parameters:
signature
which is the signature for which you want to retrieve instances.projectID
the project you want results from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssuesBySignature&signature=[SIGNATURE]&projectID=[PROJECT_ID_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssueBySignature",
"signature": [SIGNATURE],
"projectID": [PROJECT_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "Insufficient line height",
"testVioDescription": "This content’s `line-height` is too short. Increasing the `line-height` to 150%, or a space-and-a-half will improve readability for all users, but especially those with dyslexia.",
"bpID": "14",
"bestPracticeName": "Set a `line-height` (leading) that is at least one and a half times the current font size.",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 144,
"signature": "[SIGNATURE]",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[6]/a[1]/div[1]/div[2]",
"certainty": 100,
"priority": 44,
"projectID": "[PROJECT_ID]",
"issueID": "b673707e548193145afa4669912fe9bf",
"errorSnippet": "<div class="itm_desc">OneDrive</div>",
"positionColumn": 31,
"positionLine": 2882,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-18 13:10:34",
"testVioTitle": "Insufficient line height",
"testVioDescription": "This content’s `line-height` is too short. Increasing the `line-height` to 150%, or a space-and-a-half will improve readability for all users, but especially those with dyslexia.",
"bpID": "14",
"bestPracticeName": "Set a `line-height` (leading) that is at least one and a half times the current font size.",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 144,
"signature": "[SIGNATURE]",
"docID": "280DEA9D-25EE-68E4-1DC0-4041A695DAAE",
"responseID": "bc4d7b7072cf7ff60af4e1ba424e1f4d",
"url": "https://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[6]/a[1]/div[1]/div[2]",
"certainty": 100,
"priority": 44,
"projectID": "[PROJECT_ID]",
"issueID": "b673707e548193145afa4669912fe9bf",
"errorSnippet": "<div class="itm_desc">OneDrive</div>",
"positionColumn": 31,
"positionLine": 2882,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issues by Signature",
"description": "Returns a list of issues based on a specified issue signature.",
"time": 0.005
}
Log Time
Returns the average execution time, in seconds, for each date you have run tests.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=logTime
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "logTime",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"2017-10-15": 3.96
},
"name": "Log time",
"description": "Returns the average execution time, in seconds, for each date you have run tests",
"time": 0.007
}
Logs By Day
Returns the number of test runs for each date you have run tests.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=logsByDay
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "logsByDay",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"2017-10-15": 755
},
"name": "Logs by day",
"description": "Returns the number of test runs for each date you have run tests.",
"time": 0.009
}
Page History
Returns a response summary for each test run against a specified URL
You can use this report to track the performance of a specific URL. Each time you test the same URL, its result summary will be listed in this report.
Example
Request
This report type requires you to supply an additional parameter
url
which is the address of the page you want to retrieve the History for.
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=pageHistory&url=http://www.example.com
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "pageHistory",
"url": "http://www.example.com"
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"responseID": "144bf463a3d1a13a4feaf1234ab1f632",
"dateAdded": "2017-10-15 14:14:21",
"status": 200,
"message": "success",
"code": "success",
"reqLevel": "AAA",
"reqCertainty": 0,
"reqPriority": 0,
"reqImportance": 0,
"docID": "6A1F64A8-6647-1456-2DE1-FC9B207E6666",
"documentSize": 27456,
"sourceHash": "f8eec483284143e752106fc77dc08e95",
"errorDensity": 34,
"warningDensity": 0,
"allDensity": 34,
"errors": 9,
"warnings": 0,
"url": "http://www.example.com",
"fragment": 0,
"store": 1,
"projectID": "237E42A1-F744-D1C7-D22D-BC6877D4CE11",
"viewPortWidth": 1024,
"viewPortHeight": 768,
"uaString": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36",
"ref": "",
"startTime": "2017-10-15 14:14:19",
"endTime": "2017-10-15 14:14:21",
"delay": 0,
"issuesByLevelA": 9,
"issuesByLevelAA": 0,
"issuesByLevelAAA": 7,
"testsFailing": 4,
"testsPassing": 70,
"trueHttpCode": 200,
"pageTitle": "Example"
}
],
"name": "Page History",
"description": "Returns a response summary for each test run against a specified URL",
"time": 0.009
}
Page performance
Returns a list of the 10 worst performing pages
As the description shows, these are the worst performing pages. You'll want to prioritize repairing these pages over others.
Important if this data includes a lot of pages with only 3 or 4 issues and a very high error density (like 2000% or more) this means your server is not returning proper HTTP status code for errors. This may also mean you're trying to test local/ dev environments that Tenon cannot access. The most obvious indication that this is happening is when you see "title": "-NO TITLE-"
in the listings that have such high density. Addressing this lack of appropriate HTTP responses will be important, because it will skew average densities and not allow the true poor performing URLs to be listed here.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=pagePerformance
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "pagePerformance",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"responseID": "c059db75c3c7b89ec008bf80f4d8d5f7",
"title": "Example Home Page",
"url": "http://www.example.com",
"totalIssues": 229,
"errorDensity": 257,
"warningDensity": 389,
"responseTime": "2017-10-15 14:30:15"
},
{
"responseID": "f937fa5030bfdbe9b6e108364c027304",
"title": "Example Home Page 2",
"url": "http://www.example2.com",
"totalIssues": 144,
"errorDensity": 150,
"warningDensity": 17,
"responseTime": "2017-11-19 17:12:47"
}
],
"name": "Page Performance",
"description": "Returns a list of the 10 worst performing pages",
"time": 0.006
}
Pass vs. Fail
Returns data on the number & percentage of tests passing vs. tests failing for each date you have run tests.
Use this report to assist in tracking performance over time.
Note: It is very common to have a high percentage of tests passed. This is because Tenon has a lot of tests, many of which might not be relevant based on your site's code.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=passVsFail
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "passVsFail",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"2017-10-15": {
"testsFailing": 4098,
"testsFailingPct": 7,
"testsPassing": 51767,
"testsPassingPct": 93
}
},
"name": "Pass vs. Fail",
"description": "Returns data on the number & percentage of tests passing vs. tests failing for each date you have run tests.",
"time": 0.009
}
Requests by Certainty
Returns a count & percentage listing requests organized by Certainty levels (0, 20, 40, 60, 80, 100)
Tenon's Test API allows you to explicitly set the minimum certainty level you want to see for the issues in your test results. This report type shows you what certainty level(s) you've been using.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=requestsByCertainty
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "requestsByCertainty",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"0": {
"count": 560,
"percent": 100
},
"20": {
"count": 0,
"percent": 0
},
"40": {
"count": 0,
"percent": 0
},
"60": {
"count": 0,
"percent": 0
},
"80": {
"count": 0,
"percent": 0
},
"100": {
"count": 0,
"percent": 0
}
},
"name": "Requests by Certainty",
"description": "Returns a count & percentage listing requests organized by Certainty levels (0, 20, 40, 60, 80, 100)",
"time": 0.01
}
Requests by Priority
Returns a count & percentage listing requests organized by Priority levels (0, 20, 40, 60, 80, 100)
Tenon's Test API allows you to explicitly set the minimum priority level you want to see for the issues in your test results. This report type shows you what priority level(s) you've been using.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=requestsByPriority
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "requestsByPriority",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"0": {
"count": 560,
"percent": 100
},
"20": {
"count": 0,
"percent": 0
},
"40": {
"count": 0,
"percent": 0
},
"60": {
"count": 0,
"percent": 0
},
"80": {
"count": 0,
"percent": 0
},
"100": {
"count": 0,
"percent": 0
}
},
"name": "Requests by Priority",
"description": "Returns a count & percentage listing requests organized by Priority levels (0, 20, 40, 60, 80, 100)",
"time": 0.01
}
Response Codes
Returns a list of each applicable type of Tenon response code and a count & percentage of each
You should aim for 100% '200' responses. Use this type of report to determine if you're frequently submitting invalid requests to the API.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=responseCodes
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "responseCodes",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": {
"200": {
"count": 755,
"percent": 95
},
"400": {
"count": 43,
"percent": 5
}
},
"name": "Response Codes",
"description": "Returns a list of each applicable type of Tenon response code and a count & percentage of each",
"time": 0.012
}
Summary
Returns high-level performance stats on a number of items.
This report provides a useful overview of your performance. Use the start
and end
parameters to create snapshots to compare performance over time.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=summary
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "summary",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"avgDensity": 110,
"avgErrorDensity": 101,
"avgErrorsPerPage": 36,
"avgIssueCertainty": 91,
"avgIssuePriority": 91,
"avgIssuesPerPage": 44,
"avgWarningDensity": 9,
"avgWarningsPerPage": 8,
"maxAllDensity": 3657,
"maxErrorDensity": 3657,
"minErrorDensity": 0,
"pctErrorFree": 4.37,
"totalErrorFree": 33,
"totalPages": 755,
"totalSuccessful": 755,
"totalTestRuns": 755,
"totalUnsuccessful": 0
},
"name": "Summary",
"description": "Returns high-level performance stats on a number of items.",
"time": 0.057
}
Global Stats
Returns page density information from all pages ever tested by Tenon
Issue Density is an important performance metric. Use this information as a way to benchmark your projects against global data
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=global-stats
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "global-stats",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"avgDensity": 456,
"avgErrorDensity": 123,
"avgErrorsPerPage": 345,
"avgIssueCertainty": 100,
"avgIssuePriority": 100,
"avgIssuesPerPage": 123,
"avgWarningDensity": 345,
"avgWarningsPerPage": 234,
"maxAllDensity": 456,
"maxErrorDensity": 234,
"minErrorDensity": 123,
"pctErrorFree": 0,
"totalErrorFree": 0
},
"name": "Global Stats",
"description": "Returns page density information from all pages ever tested by Tenon to use as a possible benchmark",
"time": 0.057
}
Top Errors
Returns a list of the 10 most frequently occurring errors.
This provides a quick glimpse into your most frequent errors. Use this to help prioritize remediation efforts. You should also use this report to help guide internal training for web staff.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=topErrors
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "topErrors",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"tID": 57,
"count": 4148,
"percent": 13,
"testVioTitle": "This Link Has No Text Inside It."
},
{
"tID": 79,
"count": 3381,
"percent": 11,
"testVioTitle": "This Link Has A `title` Attribute That's The Same As The Text Inside The Link."
},
{
"tID": 31,
"count": 3356,
"percent": 11,
"testVioTitle": "This Link Uses An Invalid Hypertext Reference."
},
{
"tID": 9,
"count": 2433,
"percent": 8,
"testVioTitle": "This Image Is Missing An `alt` Attribute."
},
{
"tID": 75,
"count": 1736,
"percent": 5,
"testVioTitle": "This `id` Is Being Used More Than Once."
},
{
"tID": 34,
"count": 1514,
"percent": 5,
"testVioTitle": "This Table Does Not Have Any Headers."
},
{
"tID": 147,
"count": 1232,
"percent": 4,
"testVioTitle": "Implicit Table Header"
},
{
"tID": 122,
"count": 1006,
"percent": 3,
"testVioTitle": "ONMOUSEOVER Handlers Should Have An Equivalent ONFOCUS Handler"
},
{
"tID": 107,
"count": 1000,
"percent": 3,
"testVioTitle": "Event Handler Bound To Non-actionable Element That Lacks Role"
},
{
"tID": 156,
"count": 999,
"percent": 3,
"testVioTitle": "Event Handlers Bound To Non-actionable Element That Lacks Tabindex"
}
],
"name": "Top Errors",
"description": "Returns a list of the 10 most frequently occurring errors.",
"time": 0.449
}
True Response Codes
Returns a list of HTTP status codes for the pages that were tested and the number of times tested pages returned that status
Use this report to help diagnose possible problems with the pages you're testing. For instance, if this report shows a lot of responses that are 400 and above, you should research why.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=trueResponseCodes
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "trueResponseCodes",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"200": 333,
"301": 108,
"302": 35,
"303": 1,
"307": 1,
"400": 8,
"403": 17,
"404": 55,
"500": 1,
"502": 1
},
"name": "True HTTP Response Codes",
"description": "Returns a list of HTTP status codes for the pages that were tested and the number of times tested pages returned that status",
"time": 0.015
}
Response by ID
Returns the stored response for a specific Accessibility Test Run from Tenon's Test API
This is mostly a convenience report, allowing you to retrieve a stored response.
Example
Request
This report type requires you to supply an additional parameter
responseID
which is the specific Test API response you want to retrieve.
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=responseByID&responseID=[RESPONSE_ID_HERE]
Response
The data
object in this report type is a full copy of the Test API response as described in Overview Of The Tenon API Response. (Not shown here due to size)
{
"request": {
"key": [YOUR_API_KEY],
"type": "responseByID",
"responseID": "[YOUR_RESPONSE_ID]",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"message": "OK",
"status": 200,
"data": { },
"name": "Response by ID",
"description": "Returns the stored response for the named responseID",
"time": 0.042
}
List All Issues
Returns a full list of all issues in a specific project.
Example
Request
This report type requires you to supply:
projectID
which is the specific project you want data from.
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listAllIssues&projectID=[PROJECT_ID_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listAllIssues",
"projectID": [YOUR_PROJECT_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-19 08:27:44",
"testVioTitle": "The layout or sizing of this page causes horizontal scrolling.",
"testVioDescription": "This page is too wide, and it causes horizontal scrolling (at the tested viewport size). This probably means that the page is not responsively designed. Horizontal scrolling will cause difficulties for users with low vision, especially if they have their monitor set to a low resolution.",
"bpID": "3",
"bestPracticeName": "Avoid layouts that result in horizontal scroll",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 28,
"signature": "49f747438b000a3b4fba28554cec28fa",
"docID": "92F5C26C-BDBC-BF02-6B6F-ED9C180F27FC",
"responseID": "ece7e704120d0efcaa72c8052aa703d6",
"url": "https://google.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 81,
"projectID": [YOUR_PROJECT_ID],
"issueID": "2acb213501139a5da0a8dc78fef613f2",
"errorSnippet": "<body class="hp vasq" id="gsr" style=""><div class="ctr-p" id="viewport"><div id="doc-info"></div><div id="cst"><style style="">.y,.yp,.yf,.yi,.yl,.ye{}.z1asCe,.qa__svg-icon{display:inline-block;fill:currentColor;heigh",
"positionColumn": 1,
"positionLine": 5022,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-19 08:27:44",
"testVioTitle": "Insufficient line height",
"testVioDescription": "This content’s `line-height` is too short. Increasing the `line-height` to 150%, or a space-and-a-half will improve readability for all users, but especially those with dyslexia.",
"bpID": "14",
"bestPracticeName": "Set a `line-height` (leading) that is at least one and a half times the current font size.",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 144,
"signature": "22d942409714366ee413c9c7a2069326",
"docID": "92F5C26C-BDBC-BF02-6B6F-ED9C180F27FC",
"responseID": "ece7e704120d0efcaa72c8052aa703d6",
"url": "https://google.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "b71da779205fa28a27ab91d770a9ef9e",
"errorSnippet": "<body class="hp vasq" id="gsr" style=""><div class="ctr-p" id="viewport"><div id="doc-info"></div><div id="cst"><style style="">.y,.yp,.yf,.yi,.yl,.ye{}.z1asCe,.qa__svg-icon{display:inline-block;fill:currentColor;heigh",
"positionColumn": 1,
"positionLine": 5022,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issues by Certainty",
"description": "Returns a list of issues having a specified certainty.",
"time": 0.007
}
List Issues by Certainty
Returns a full list of all issues in a specific project based on their 'certainty' score.
Example
Request
This report type requires you to supply two additional parameters:
projectID
which is the specific project you want data fromcertainty
which is the certainty score you want issues for
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssuesByCertainty&projectID=[PROJECT_ID_HERE]&certainty=[DESIRED_CERTAINTY]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssuesByCertainty",
"projectID": [YOUR_PROJECT_ID],
"certainty": [YOUR_DESIRED_CERTAINTY],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-19 08:27:44",
"testVioTitle": "The layout or sizing of this page causes horizontal scrolling.",
"testVioDescription": "This page is too wide, and it causes horizontal scrolling (at the tested viewport size). This probably means that the page is not responsively designed. Horizontal scrolling will cause difficulties for users with low vision, especially if they have their monitor set to a low resolution.",
"bpID": "3",
"bestPracticeName": "Avoid layouts that result in horizontal scroll",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 28,
"signature": "49f747438b000a3b4fba28554cec28fa",
"docID": "92F5C26C-BDBC-BF02-6B6F-ED9C180F27FC",
"responseID": "ece7e704120d0efcaa72c8052aa703d6",
"url": "https://google.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 81,
"projectID": [YOUR_PROJECT_ID],
"issueID": "2acb213501139a5da0a8dc78fef613f2",
"errorSnippet": "<body class="hp vasq" id="gsr" style=""><div class="ctr-p" id="viewport"><div id="doc-info"></div><div id="cst"><style style="">.y,.yp,.yf,.yi,.yl,.ye{}.z1asCe,.qa__svg-icon{display:inline-block;fill:currentColor;heigh",
"positionColumn": 1,
"positionLine": 5022,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-19 08:27:44",
"testVioTitle": "Insufficient line height",
"testVioDescription": "This content’s `line-height` is too short. Increasing the `line-height` to 150%, or a space-and-a-half will improve readability for all users, but especially those with dyslexia.",
"bpID": "14",
"bestPracticeName": "Set a `line-height` (leading) that is at least one and a half times the current font size.",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 144,
"signature": "22d942409714366ee413c9c7a2069326",
"docID": "92F5C26C-BDBC-BF02-6B6F-ED9C180F27FC",
"responseID": "ece7e704120d0efcaa72c8052aa703d6",
"url": "https://google.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "b71da779205fa28a27ab91d770a9ef9e",
"errorSnippet": "<body class="hp vasq" id="gsr" style=""><div class="ctr-p" id="viewport"><div id="doc-info"></div><div id="cst"><style style="">.y,.yp,.yf,.yi,.yl,.ye{}.z1asCe,.qa__svg-icon{display:inline-block;fill:currentColor;heigh",
"positionColumn": 1,
"positionLine": 5022,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issues by Certainty",
"description": "Returns a list of issues having a specified certainty.",
"time": 0.007
}
List Issues by Priority
Returns a full list of all issues in a specific project based on their 'priority' score.
Using a specified 'priority' score allows you to target accessibility issues to repair in a way that has the highest positive impact.
Example
Request
This report type requires you to supply two additional parameters:
projectID
which is the specific project you want data frompriority
which is the priority score you want issues for
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssuesByPriority&projectID=[PROJECT_ID_HERE]&priority=[DESIRED_PRIORITY]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssuesByPriority",
"projectID": [YOUR_PROJECT_ID],
"priority": [YOUR_DESIRED_PRIORITY],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-19 08:27:44",
"testVioTitle": "This item has `tabindex` but might not be actionable",
"testVioDescription": "This element has a `tabindex` attribute on it but the element does not seem to be actionable. ",
"bpID": "68",
"bestPracticeName": "Avoid applying focus to items that aren't interactive",
"categoryName": "Keyboard Accessibility & Focus Control",
"tID": 55,
"signature": "ef3fefb32305a70c635af3d2c6664be8",
"docID": "92F5C26C-BDBC-BF02-6B6F-ED9C180F27FC",
"responseID": "ece7e704120d0efcaa72c8052aa703d6",
"url": "http://www.example.com",
"xpath": "/html/body/div[1]/div[3]/div[1]/div[2]",
"certainty": 60,
"priority": 100,
"projectID": [YOUR_PROJECT_ID],
"issueID": "4614461be07ed757372432145fc2dbde",
"errorSnippet": "<div class="gb_zd" aria-label="Затвори" tabindex="0" style="color:#ffffff">×</div>",
"positionColumn": 7,
"positionLine": 5593,
"standards": [
{
"iID": "28",
"parentID": "4",
"name": "2.1.1 Keyboard",
"description": "All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes, except where the underlying function requires input that depends on the path of the user\'s movement and not just the endpoints. (Level A)
Note 1: This exception relates to the underlying function, not the input technique. For example, if using handwriting to enter text, the input technique (handwriting) requires path-dependent input but the underlying function (text input) does not.
Note 2: This does not forbid and should not discourage providing mouse input or other input methods in addition to keyboard operation.",
"referenceURL": "",
"sID": ""
},
{
"iID": "30",
"parentID": "6",
"name": "2.1.3 Keyboard (No Exception)",
"description": "All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes. (Level AAA)",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-19 08:27:44",
"testVioTitle": "This item has `tabindex` but might not be actionable",
"testVioDescription": "This element has a `tabindex` attribute on it but the element does not seem to be actionable. ",
"bpID": "68",
"bestPracticeName": "Avoid applying focus to items that aren't interactive",
"categoryName": "Keyboard Accessibility & Focus Control",
"tID": 55,
"signature": "f4a22725fe6c601ca71f2a9847de3110",
"docID": "92F5C26C-BDBC-BF02-6B6F-ED9C180F27FC",
"responseID": "ece7e704120d0efcaa72c8052aa703d6",
"url": "http://www.example.com",
"xpath": "/html/body/div[1]/div[4]/div[1]/div[1]/div[1]/div[1]/div[2]",
"certainty": 60,
"priority": 100,
"projectID": [YOUR_PROJECT_ID],
"issueID": "5739afad2167ff05f428fc53732dbe86",
"errorSnippet": "<div class="gb_zd" aria-label="Затвори" tabindex="0" style="color:#ffffff">×</div>",
"positionColumn": 13,
"positionLine": 5690,
"standards": [
{
"iID": "28",
"parentID": "4",
"name": "2.1.1 Keyboard",
"description": "All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes, except where the underlying function requires input that depends on the path of the user\'s movement and not just the endpoints. (Level A)
Note 1: This exception relates to the underlying function, not the input technique. For example, if using handwriting to enter text, the input technique (handwriting) requires path-dependent input but the underlying function (text input) does not.
Note 2: This does not forbid and should not discourage providing mouse input or other input methods in addition to keyboard operation.",
"referenceURL": "",
"sID": ""
},
{
"iID": "30",
"parentID": "6",
"name": "2.1.3 Keyboard (No Exception)",
"description": "All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes. (Level AAA)",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issues by Priority",
"description": "Returns a list of issues having a specified priority.",
"time": 0.016
}
List Duplicate Issues by Test ID
Returns a list of duplicate issues organized by Test ID
Use this to find a fully detailed list of all duplicate issues for the specified Test ID
Note: Depending on how much testing you've done this might return a ton of results and take a long time to generate. This report will be more directly actionable if you provide a projectID
and/ or start
and end
dates
Example
Request
This report type requires you to supply two additional parameters:
tID
which is the test you want to get results for.projectID
the project you want results from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listDuplicateIssuesByTestID&projectID=[PROJECT_ID_HERE]&tID=[TEST_ID_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listDuplicateIssuesByTestID",
"projectID": [YOUR_PROJECT_ID],
"tID": [TEST_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": {
"d3d7468c6f9933517cf10d824a14e895": [
{
"dateAdded": "2018-09-19 22:00:13",
"testVioTitle": "Insufficient line height",
"testVioDescription": "This content’s `line-height` is too short. Increasing the `line-height` to 150%, or a space-and-a-half will improve readability for all users, but especially those with dyslexia.",
"bpID": "14",
"bestPracticeName": "Set a `line-height` (leading) that is at least one and a half times the current font size.",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": [TEST_ID],
"signature": "d3d7468c6f9933517cf10d824a14e895",
"docID": "37480E38-7CD7-3B1F-A223-0637F00F16AA",
"responseID": "0ab29b6e0b3ac47cee7fb9967102361c",
"url": "http://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[6]/a[1]/div[1]/div[2]",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "ca1bbea5c35572fafd71f44a5492caf2",
"errorSnippet": "<div class="itm_desc">OneDrive</div>",
"positionColumn": 31,
"positionLine": 2882,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-19 22:00:13",
"testVioTitle": "Insufficient line height",
"testVioDescription": "This content’s `line-height` is too short. Increasing the `line-height` to 150%, or a space-and-a-half will improve readability for all users, but especially those with dyslexia.",
"bpID": "14",
"bestPracticeName": "Set a `line-height` (leading) that is at least one and a half times the current font size.",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": [TEST_ID],
"signature": "d3d7468c6f9933517cf10d824a14e895",
"docID": "37480E38-7CD7-3B1F-A223-0637F00F16AA",
"responseID": "0ab29b6e0b3ac47cee7fb9967102361c",
"url": "http://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[5]/div[1]/ul[1]/li[7]/div[1]/ul[1]/li[6]/a[1]/div[1]/div[2]",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "ca1bbea5c35572fafd71f44a5492caf2",
"errorSnippet": "<div class="itm_desc">OneDrive</div>",
"positionColumn": 31,
"positionLine": 2882,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
}
]
},
"name": "List duplicate issues by Test ID",
"description": "Returns a list of duplicate issues for a specific Test ID",
"time": 0.122
}
List Issues by WCAG Success Criterion
Returns a full list of all issues that are mapped against a specific WCAG Success Criterion.
This report allows you to target compliance for specific WCAG Success Criterion.
Example
Request
This report type requires you to supply two additional parameters:
sc
which corresponds to the numeric number of the WCAG Success Criterion (i.e. '1.1.1', etc.)projectID
the project you want results from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssuesByWcagSc&sc=[WCAG_SC_HERE]&projectID=[PROJECT_ID_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssuesByWcagSc",
"sc": [WCAG_SC],
"projectID": [YOUR_PROJECT_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-20 09:05:12",
"testVioTitle": "This page has no headings",
"testVioDescription": "This page has no heading elements. Heading elements provide a number of important benefits to users. They can be useful as wayfinding cues for in-page navigation, they can contribute to a summary of the page, and they can provide context to the content below them.",
"bpID": "28",
"bestPracticeName": "Structure content appropriately through headings",
"categoryName": "Document Structure",
"tID": 97,
"signature": "3f7370428396f0d4577893f335dfa452",
"docID": "4FCB7923-8D89-60D2-A3FE-19161E252E34",
"responseID": "2d9f33aecb0accabd72acb24a40e7b96",
"url": "http://www.example.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 100,
"projectID": [YOUR_PROJECT_ID],
"issueID": "d6d037142da526005da701b072da3aa8",
"errorSnippet": "<body class="en en-WW wkit ltr" data-priority="2" onload="_ge('sb_form_q').focus();if(_w.lb)lb();" onfocus="" style=""><script type="text/javascript" style="">//<![CDATA[
_G.AppVer="8_1_2_6208617"; var _H={}; _H.mkt = "en-WW";_H.trueMkt =",
"positionColumn": 1,
"positionLine": 2752,
"standards": [
{
"iID": "17",
"parentID": "4",
"name": "1.3.1 Info and Relationships",
"description": "Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-20 09:05:13",
"testVioTitle": "This form field has no label.",
"testVioDescription": "All form controls must have a label. Without a label, users of assistive technologies will not know what type of input or selection is being requested.",
"bpID": "49",
"bestPracticeName": "Provide an explicit label for each form field",
"categoryName": "Forms",
"tID": 38,
"signature": "583ead6911d37acfbfe04768bb81879c",
"docID": "8E4F6536-5744-1712-A7C8-269B66391C2F",
"responseID": "05d98ee2a27afe6429d6ccb34f8d8b35",
"url": "https://duckduckgo.com",
"xpath": "/html/body/div[1]/div[2]/div[1]/div[1]/div[2]/form[1]/input[1]",
"certainty": 100,
"priority": 100,
"projectID": [YOUR_PROJECT_ID],
"issueID": "ad8d1bf1201f939a83a9c56dbbe0ab0e",
"errorSnippet": "<input id="search_form_input_homepage" class="js-search-input search__input--adv" type="text" autocomplete="off" name="q" tabindex="1" value="" autocapitalize="off" autocorrect="off">",
"positionColumn": 15,
"positionLine": 139,
"standards": [
{
"iID": "7",
"parentID": "4",
"name": "1.1.1 Non-text Content",
"description": "All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below. (Level A)
Controls, Input: If non-text content is a control or accepts user input, then it has a name that describes its purpose. (Refer to Guideline 4.1 for additional requirements for controls and content that accepts user input.)
Time-Based Media: If non-text content is time-based media, then text alternatives at least provide descriptive identification of the non-text content. (Refer to Guideline 1.2 for additional requirements for media.)
Test: If non-text content is a test or exercise that would be invalid if presented in text, then text alternatives at least provide descriptive identification of the non-text content.
Sensory: If non-text content is primarily intended to create a specific sensory experience, then text alternatives at least provide descriptive identification of the non-text content.
CAPTCHA: If the purpose of non-text content is to confirm that content is being accessed by a person rather than a computer, then text alternatives that identify and describe the purpose of the non-text content are provided, and alternative forms of CAPTCHA using output modes for different types of sensory perception are provided to accommodate different disabilities.
Decoration, Formatting, Invisible: If non-text content is pure decoration, is used only for visual formatting, or is not presented to users, then it is implemented in a way that it can be ignored by assistive technology.",
"referenceURL": "",
"sID": ""
},
{
"iID": "17",
"parentID": "4",
"name": "1.3.1 Info and Relationships",
"description": "Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.",
"referenceURL": "",
"sID": ""
},
{
"iID": "60",
"parentID": "4",
"name": "3.3.2 Labels or Instructions",
"description": "Labels or instructions are provided when content requires user input.",
"referenceURL": "",
"sID": ""
},
{
"iID": "66",
"parentID": "4",
"name": "4.1.2 Name, Role, Value",
"description": "For all user interface components (including but not limited to: form elements, links and components generated by scripts), the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
Note: This success criterion is primarily for Web authors who develop or script their own user interface components. For example, standard HTML controls already meet this success criterion when used according to specification.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-20 09:05:13",
"testVioTitle": "This element uses multiple strategies to create labels",
"testVioDescription": "The manner in which the accessible name is calculated for controls uses an algorithm in which only one of these labelling approaches will "win". This means one of these labels will be ignored by assistive technologies.",
"bpID": "49",
"bestPracticeName": "Provide an explicit label for each form field",
"categoryName": "Forms",
"tID": 238,
"signature": "cbce34f982b0a6e497548d81443ef0b9",
"docID": "8E4F6536-5744-1712-A7C8-269B66391C2F",
"responseID": "05d98ee2a27afe6429d6ccb34f8d8b35",
"url": "https://duckduckgo.com",
"xpath": "/html/body/div[1]/div[1]/div[1]/div[1]/span[1]/span[1]",
"certainty": 100,
"priority": 84,
"projectID": [YOUR_PROJECT_ID],
"issueID": "35ef481f8b77acce56d1484c7ca73d67",
"errorSnippet": "<span class="js-hl-button js-popout-trig" data-popout-target=".js-showcase-popout" aria-haspopup="true" aria-label="Check out the list of things that we've also made." role="button" aria-pressed="false"><span id="wedonttrack">Privacy, simplif",
"positionColumn": 0,
"positionLine": 46,
"standards": [
{
"iID": "7",
"parentID": "4",
"name": "1.1.1 Non-text Content",
"description": "All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below. (Level A)
Controls, Input: If non-text content is a control or accepts user input, then it has a name that describes its purpose. (Refer to Guideline 4.1 for additional requirements for controls and content that accepts user input.)
Time-Based Media: If non-text content is time-based media, then text alternatives at least provide descriptive identification of the non-text content. (Refer to Guideline 1.2 for additional requirements for media.)
Test: If non-text content is a test or exercise that would be invalid if presented in text, then text alternatives at least provide descriptive identification of the non-text content.
Sensory: If non-text content is primarily intended to create a specific sensory experience, then text alternatives at least provide descriptive identification of the non-text content.
CAPTCHA: If the purpose of non-text content is to confirm that content is being accessed by a person rather than a computer, then text alternatives that identify and describe the purpose of the non-text content are provided, and alternative forms of CAPTCHA using output modes for different types of sensory perception are provided to accommodate different disabilities.
Decoration, Formatting, Invisible: If non-text content is pure decoration, is used only for visual formatting, or is not presented to users, then it is implemented in a way that it can be ignored by assistive technology.",
"referenceURL": "",
"sID": ""
},
{
"iID": "17",
"parentID": "4",
"name": "1.3.1 Info and Relationships",
"description": "Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.",
"referenceURL": "",
"sID": ""
},
{
"iID": "60",
"parentID": "4",
"name": "3.3.2 Labels or Instructions",
"description": "Labels or instructions are provided when content requires user input.",
"referenceURL": "",
"sID": ""
},
{
"iID": "66",
"parentID": "4",
"name": "4.1.2 Name, Role, Value",
"description": "For all user interface components (including but not limited to: form elements, links and components generated by scripts), the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
Note: This success criterion is primarily for Web authors who develop or script their own user interface components. For example, standard HTML controls already meet this success criterion when used according to specification.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-20 09:05:13",
"testVioTitle": "This element uses multiple strategies to create labels",
"testVioDescription": "The manner in which the accessible name is calculated for controls uses an algorithm in which only one of these labelling approaches will "win". This means one of these labels will be ignored by assistive technologies.",
"bpID": "49",
"bestPracticeName": "Provide an explicit label for each form field",
"categoryName": "Forms",
"tID": 238,
"signature": "8e1c05c69512f6a272e92399007207a1",
"docID": "8E4F6536-5744-1712-A7C8-269B66391C2F",
"responseID": "05d98ee2a27afe6429d6ccb34f8d8b35",
"url": "https://duckduckgo.com",
"xpath": "/html/body/div[1]/div[1]/div[1]/div[1]/span[1]/span[2]/div[1]/div[1]/div[1]/nav[1]/section[1]/ul[1]",
"certainty": 100,
"priority": 84,
"projectID": [YOUR_PROJECT_ID],
"issueID": "a36d9ade25a3fc729944fb2f57e72897",
"errorSnippet": "<ul aria-label="Here are some things that we made that you might like."> <li class="fix showcase__dropdown__list" style=""><a href="/app" class="eighteen js-hl-item" aria-hidden="true" data-type="show"",
"positionColumn": 21,
"positionLine": 52,
"standards": [
{
"iID": "7",
"parentID": "4",
"name": "1.1.1 Non-text Content",
"description": "All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below. (Level A)
Controls, Input: If non-text content is a control or accepts user input, then it has a name that describes its purpose. (Refer to Guideline 4.1 for additional requirements for controls and content that accepts user input.)
Time-Based Media: If non-text content is time-based media, then text alternatives at least provide descriptive identification of the non-text content. (Refer to Guideline 1.2 for additional requirements for media.)
Test: If non-text content is a test or exercise that would be invalid if presented in text, then text alternatives at least provide descriptive identification of the non-text content.
Sensory: If non-text content is primarily intended to create a specific sensory experience, then text alternatives at least provide descriptive identification of the non-text content.
CAPTCHA: If the purpose of non-text content is to confirm that content is being accessed by a person rather than a computer, then text alternatives that identify and describe the purpose of the non-text content are provided, and alternative forms of CAPTCHA using output modes for different types of sensory perception are provided to accommodate different disabilities.
Decoration, Formatting, Invisible: If non-text content is pure decoration, is used only for visual formatting, or is not presented to users, then it is implemented in a way that it can be ignored by assistive technology.",
"referenceURL": "",
"sID": ""
},
{
"iID": "17",
"parentID": "4",
"name": "1.3.1 Info and Relationships",
"description": "Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.",
"referenceURL": "",
"sID": ""
},
{
"iID": "60",
"parentID": "4",
"name": "3.3.2 Labels or Instructions",
"description": "Labels or instructions are provided when content requires user input.",
"referenceURL": "",
"sID": ""
},
{
"iID": "66",
"parentID": "4",
"name": "4.1.2 Name, Role, Value",
"description": "For all user interface components (including but not limited to: form elements, links and components generated by scripts), the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
Note: This success criterion is primarily for Web authors who develop or script their own user interface components. For example, standard HTML controls already meet this success criterion when used according to specification.",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issues by WCAG Success Criterion",
"description": "Returns a list of issues for a specific WCAG Success Criterion",
"time": 0.199
}
List Issues by Content Category
Returns a full list of all issues that are mapped against a specific content category.
This report allows you to target compliance for specific content category.
Example
Request
This report type requires you to supply two additional parameters:
catID
which corresponds to the ID of a specific content category (i.e. '7', which represents 'images'). Hint: RunningissuesByContentCategory
shows a summary of results by Category and lists out the catID for each.projectID
the project you want results from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssuesByContentCategory&catID=[CATEGORY_NAME_HERE]&projectID=[PROJECT_ID_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssuesByContentCategory",
"catID": [CATEGORY_ID],
"projectID": [YOUR_PROJECT_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-20 09:05:12",
"testVioTitle": "This page has no headings",
"testVioDescription": "This page has no heading elements. Heading elements provide a number of important benefits to users. They can be useful as wayfinding cues for in-page navigation, they can contribute to a summary of the page, and they can provide context to the content below them.",
"bpID": "28",
"bestPracticeName": "Structure content appropriately through headings",
"categoryName": "Document Structure",
"tID": 97,
"signature": "3f7370428396f0d4577893f335dfa452",
"docID": "4FCB7923-8D89-60D2-A3FE-19161E252E34",
"responseID": "2d9f33aecb0accabd72acb24a40e7b96",
"url": "http://www.example.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 100,
"projectID": [YOUR_PROJECT_ID],
"issueID": "d6d037142da526005da701b072da3aa8",
"errorSnippet": "<body class="en en-WW wkit ltr" data-priority="2" onload="_ge(’sb_form_q’).focus();if(_w.lb)lb();" onfocus="" style=""><script type="text/javascript" style="">//<![CDATA[
_G.AppVer="8_1_2_6208617"; var _H={}; _H.mkt = "en-WW";_H.trueMkt =",
"positionColumn": 1,
"positionLine": 2752,
"standards": [
{
"iID": "17",
"parentID": "4",
"name": "1.3.1 Info and Relationships",
"description": "Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-20 09:05:13",
"testVioTitle": "Avoid empty `li` elements/ `role=listitem`",
"testVioDescription": "This list item is empty or has no usable text in it. As a result, assistive technologies will incorrectly announce the number of list items and possibly also announce that this one is blank.",
"bpID": "212",
"bestPracticeName": "Avoid empty markup",
"categoryName": "Document Structure",
"tID": 199,
"signature": "37788b361174866c82417c037704d654",
"docID": "8E4F6536-5744-1712-A7C8-269B66391C2F",
"responseID": "05d98ee2a27afe6429d6ccb34f8d8b35",
"url": "http://www.example.com",
"xpath": "/html/body/div[1]/div[4]/ul[1]/ul[1]/li[2]",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "9723990bb243c0bf139ddeb10bf143db",
"errorSnippet": "<li class="nav-menu__item"><ul class="nav-menu__themes"><li class="nav-menu__theme js-side-menu-theme theme-is-selected"><span class="nav-menu__theme-color"><span class="nav-menu__theme-color-top" style="background-color:#0849",
"positionColumn": 3,
"positionLine": 17,
"standards": false
},
{
"dateAdded": "2018-09-20 09:05:13",
"testVioTitle": "Avoid empty `li` elements/ `role=listitem`",
"testVioDescription": "This list item is empty or has no usable text in it. As a result, assistive technologies will incorrectly announce the number of list items and possibly also announce that this one is blank.",
"bpID": "212",
"bestPracticeName": "Avoid empty markup",
"categoryName": "Document Structure",
"tID": 199,
"signature": "091a60cdeb109cbb6eedaabc0dba68fc",
"docID": "8E4F6536-5744-1712-A7C8-269B66391C2F",
"responseID": "05d98ee2a27afe6429d6ccb34f8d8b35",
"url": "http://www.example.com",
"xpath": "/html/body/div[1]/div[4]/ul[1]/ul[1]/li[2]/ul[1]/li[1]",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "3146f86318038109c24a51802a6c4909",
"errorSnippet": "<li class="nav-menu__theme js-side-menu-theme theme-is-selected"><span class="nav-menu__theme-color"><span class="nav-menu__theme-color-top" style="background-color:#084999;"></span><span class="nav-menu__theme-color-bot" styl",
"positionColumn": 3,
"positionLine": 18,
"standards": false
},
{
"dateAdded": "2018-09-20 09:05:13",
"testVioTitle": "Avoid empty `li` elements/ `role=listitem`",
"testVioDescription": "This list item is empty or has no usable text in it. As a result, assistive technologies will incorrectly announce the number of list items and possibly also announce that this one is blank.",
"bpID": "212",
"bestPracticeName": "Avoid empty markup",
"categoryName": "Document Structure",
"tID": 199,
"signature": "aaa94157375beb50174c86a8dcc43166",
"docID": "8E4F6536-5744-1712-A7C8-269B66391C2F",
"responseID": "05d98ee2a27afe6429d6ccb34f8d8b35",
"url": "http://www.example.com",
"xpath": "/html/body/div[1]/div[4]/ul[1]/ul[1]/li[2]/ul[1]/li[2]",
"certainty": 100,
"priority": 44,
"projectID": [YOUR_PROJECT_ID],
"issueID": "ffd1f13f92500a1bb64d968844de4a42",
"errorSnippet": "<li class="nav-menu__theme js-side-menu-theme"><span class="nav-menu__theme-color"><span class="nav-menu__theme-color-top" style="background-color:#333;"></span><span class="nav-menu__theme-color-bot" style="background-color:#",
"positionColumn": 3,
"positionLine": 28,
"standards": false
},
],
"name": "List issues by Content Category",
"description": "Returns a list of issues for a specific content category",
"time": 0.06
}
List Requests by Response Status Code
Returns a full list of API requests made that returned a specific status code.
This report allows you to troubleshoot potential problems with your API requests. For instance, you can look for requests by status code '400' and determine what is causing the problem.
Example
Request
This report type requires you to supply one additional parameter
status
which corresponds to the status code
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listRequestsByResponseStatus&status=[status]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listRequestsByResponseStatus",
"status": "200",
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"url": "http://www.example.com",
"projectID": "237E42A1-F744-D1C7-D22D-BC6877D4CE11",
"delay": "",
"ref": "1",
"importance": "1"
},
{
"url": "http://www.example2.com",
"projectID": "237E42A1-F744-D1C7-D22D-BC6877D4CE11",
"delay": "",
"ref": "1",
"importance": "1"
}
],
"name": "List requests by response status",
"description": "Returns a list of requests made that returned a specific status code",
"time": 0.029
}
List Issues by WCAG Level
Returns a full list of all issues mapped to a specific WCAG Level (A, AA, AAA).
This report allows you to focus on issues based on a specific WCAG conformance level.
Example
Request
This report type requires you to supply two additional parameters:
level
the desired WCAG LevelprojectID
the project you want results from
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=listIssuesByLevel&level=[LEVEL_GOES_HERE]&projectID=[PROJECTID_GOES_HERE]
Response
{
"request": {
"key": [YOUR_API_KEY],
"type": "listIssuesByLevel",
"status": [LEVEL],
"projectID": [YOUR_PROJECT_ID],
"apiKey": [YOUR_API_KEY],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"data": [
{
"dateAdded": "2018-09-20 09:05:12",
"testVioTitle": "The layout or sizing of this page causes horizontal scrolling.",
"testVioDescription": "This page is too wide, and it causes horizontal scrolling (at the tested viewport size). This probably means that the page is not responsively designed. Horizontal scrolling will cause difficulties for users with low vision, especially if they have their monitor set to a low resolution.",
"bpID": "3",
"bestPracticeName": "Avoid layouts that result in horizontal scroll",
"categoryName": "Cascading Stylesheets (CSS)",
"tID": 28,
"signature": "0179695259ac9a25212771251876ff52",
"docID": "4FCB7923-8D89-60D2-A3FE-19161E252E34",
"responseID": "2d9f33aecb0accabd72acb24a40e7b96",
"url": "http://www.example.com",
"xpath": "/html/body",
"certainty": 100,
"priority": 81,
"projectID": [YOUR_PROJECT_ID],
"issueID": "1c4bc2befcfc0b9aa61ee25c0b672698",
"errorSnippet": "<body class="en en-WW wkit ltr" data-priority="2" onload="_ge('sb_form_q').focus();if(_w.lb)lb();" onfocus="" style=""><script type="text/javascript" style="">//<![CDATA[_G.AppVer="8_1_2_6208617"; var _H={}; _H.mkt = "en-WW";_H.trueMkt =",
"positionColumn": 1,
"positionLine": 2752,
"standards": [
{
"iID": "26",
"parentID": "6",
"name": "1.4.8 Visual Presentation",
"description": "For the visual presentation of blocks of text, a mechanism is available to achieve the following: (Level AAA)
Foreground and background colors can be selected by the user.
Width is no more than 80 characters or glyphs (40 if CJK).
Text is not justified (aligned to both the left and the right margins).
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.",
"referenceURL": "",
"sID": ""
}
]
},
{
"dateAdded": "2018-09-20 09:05:12",
"testVioTitle": "This link has no text inside it.",
"testVioDescription": "This link has no text in it. Because accessibility APIs use a link's text to determine its accessible name, this link will not have an accessible name, and it will not be announced correctly by assistive technologies. ",
"bpID": "106",
"bestPracticeName": "Make sure that link text (and the alternate text for any images that are used as links) describes the destination or purpose of the link.",
"categoryName": "Navigation",
"tID": 57,
"signature": "f6e47b2f304b862e9177e70c7a4c72f3",
"docID": "4FCB7923-8D89-60D2-A3FE-19161E252E34",
"responseID": "2d9f33aecb0accabd72acb24a40e7b96",
"url": "http://www.example.com",
"xpath": "/html/body/table[1]/tr[1]/td[1]/div[1]/div[2]/div[2]/a[1]",
"certainty": 100,
"priority": 100,
"projectID": [YOUR_PROJECT_ID],
"issueID": "774ccb01a9489226ca8164f36ceadbac",
"errorSnippet": "<a id="hpinsthk" aria-hidden="true" tabindex="-1" href="javascript:void(0)" h="ID=SERP,5080.1"><span></span></a>",
"positionColumn": 44,
"positionLine": 2808,
"standards": [
{
"iID": "41",
"parentID": "4",
"name": "2.4.4 Link Purpose (In Context)",
"description": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
},
{
"iID": "46",
"parentID": "6",
"name": "2.4.9 Link Purpose (Link Only)",
"description": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
"referenceURL": "",
"sID": ""
}
]
}
],
"name": "List issues by Level",
"description": "Returns a list of issues for a specified WCAG Level",
"time": 0.538
}
Requests by Level
Returns a count & percentage listing requests organized by WCAG Level (A, AA, AAA)
Tenon's Test API allows you to explicitly set the minimum WCAG Level you want to see for the issues in your test results. This report type shows you what WCAG Level(s) you've been using.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=requestsByLevel
Response
{
"request": {
"key": [YOUR_PROJECT_ID],
"type": "requestsByLevel",
"apiKey": [YOUR_PROJECT_ID],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"status": 200,
"data": {
"A": {
"count": 0,
"percent": 0
},
"AA": {
"count": 0,
"percent": 0
},
"AAA": {
"count": 158,
"percent": 100
}
},
"name": "Requests by Level",
"description": "Returns a count & percentage listing requests organized by WCAG Level (A, AA, AAA)",
"time": 0.032
}
Resolved Issues by URL
Returns a report indicating the issues resolved for a particular URL as well as the unresolved issues, based upon the last time that URL was tested.
This report allows you to track improvement of a specific URL.
Example
Request
https://tenon.io/api/reports/index.php?key=[API_KEY_GOES_HERE]&type=requestsByLevel
Response
{
"request": {
"key": [YOUR_PROJECT_ID],
"type": "requestsByLevel",
"apiKey": [YOUR_PROJECT_ID],
"start": null,
"end": null
},
"status": 200,
"message": "OK",
"status": 200,
"data": {
"A": {
"count": 0,
"percent": 0
},
"AA": {
"count": 0,
"percent": 0
},
"AAA": {
"count": 158,
"percent": 100
}
},
"name": "Requests by Level",
"description": "Returns a count & percentage listing requests organized by WCAG Level (A, AA, AAA)",
"time": 0.032
}