Our Reporting API is used for extracting data and metrics from your Conductor Website Monitoring account. Typical use-cases include connecting several software solutions together to streamline your reporting tasks and integrating Conductor Website Monitoring in your client portal.
{% highlight :title => 'Important' %}
This support article covers the legacy Reporting API v1.0. While the legacy Reporting API v1.0 remains available at this moment, it does not support new endpoints and will likely be sunsetted in the future. Therefore we highly recommend using the Reporting API v2.0.
If you are already using the Reporting API v1.0, we recommend you to migrate to v2.0 using the migration guide below.
{% endhighlight %}
Migration guide
This guide will help you migrate from the legacy Reporting API v1.0 to the Reporting API v2.0.
Response shape
The payload in the response body has been moved one level lower at all endpoints, under the key `data`.
`
{% code %}
{
"data":
}
{% endcode %}
Endpoints mapping
All request variables (e.g. `
| V2.0 endpoint* | *V1.0 endpoint
| --- | ---
| Entitities
| `/v2/entities/segments` | `/v1/websites/
| `/v2/entities/websites` | `/v1/websites`
| Data
| `/v2/data/affected_page` | `/v1/websites/
| `/v2/data/issues` | `/v1/websites/
| `/v2/data/page` | `/v1/websites/
| `/v2/data/pages` | `/v1/websites/
| `/v2/data/statistics` | `/v1/websites/
| Alerts
| `/v2/alerts` | `/v1/websites/
| `/v2/alerts/alert_pages` | `/v1/websites/
Supported parameters
| V2.0 endpoint* | **Required parameters** | *Optional parameters
| --- | --- | ---
| Entitities
| `/v2/entities/segments` | `website_id` | -
| `/v2/entities/websites` | - | -
| Data
| `/v2/data/affected_pages` | `website_id` `issue` `page` `per_page`| -
| `/v2/data/issues` | `website_id` | -
| `/v2/data/page` | `website_id` `url`| -
| `/v2/data/pages` | `website_id` `page` `per_page` `sort` `direction`| `filter[segment]`
| `/v2/data/statistics` | `website_id`| `scope`
| Alerts
| `/v2/alerts` | `website_id`| `scope`
| `/v2/alerts/alert_pages` | `website_id` `alert_id` `page` `per_page`| `scope`
Reporting API Terms of Use
By using the Reporting API you agree to the Terms of Use.
Retrieving your Reporting API token
To use the Reporting API you need to get your Conductor Website Monitoring account's Reporting API token. You'll find it in the Account section, under the Integration tokens tab.
API request headers
When making a request you need to send along the following request headers:
{% code %}
Authorization: token
Content-Type: application/json
{% endcode %}
Note: you need to provide the string "token" followed by a space and your actual API token.
Reporting API URL
Conductor Website Monitoring Reporting API is available on this URL.
{% code %}
https://api.contentkingapp.com/
{% endcode %}
Retrieving a list of websites in your account
Send the following request to get a list of websites in your account:
{% code %}
GET /v1/websites
{% endcode %}
The response will look like this:
{% code :language => 'json' %}
200 OK
[
{
"id": "1-234",
"app_url": "https://app.contentkingapp.com/websites/1-234/dashboard",
"domain": "https://www.contentkingapp.com",
"name": null,
"page_capacity": 1000
},
{
"id": "1-2345",
"app_url": "https://app.contentkingapp.com/websites/1-2345/dashboard",
"domain": "https://www.contentkingapp.de",
"name": "Conductor Website Monitoring - DE",
"page_capacity": 1000
}
]
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"id"` | string
| `"app_url"` | string (absolute URL)
| `"domain"` | string (absolute URL)
| `"name"` | string
| `"page_capacity"` | integer
Retrieving a list of segments for a website
Send the following request to get a list of segments for a specific website in your account:
{% code %}
GET /v1/websites/
{% endcode %}
The response will look like this:
{% code :language => 'json' %}
200 OK
[
{
"id": "1",
"color": "72c035",
"label": "Indexable",
"shortcode": "I"
},
{
"id": "2",
"color": "9ea6af",
"label": "Non-indexable",
"shortcode": null
}
]
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"id"` | string
| `"color"` | string
| `"label"` | string
| `"shortcode"` | string
Retrieving statistics for a website or website's segment
Send the following request to get statistics for a specific website in your account:
{% code %}
GET /v1/websites/
{% endcode %}
Or send the following request to get statistics for a specific segment within the website:
{% code %}
GET /v1/websites/
{% endcode %}
The response will look like this:
{% code :language => 'json' %}
200 OK
{
"health": 969,
"number_of_issues": 15,
"number_of_urls":
{
"missing": 2,
"page": 9,
"redirect": 4,
"server_error": 0,
"unreachable": 0
}
}
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"health"` | integer
| `"number_of_issues"` | integer
| `"label"` | string
| `"number_of_urls"` | array
| `"number_of_urls.page"` | integer
| `"number_of_urls.missing"` | integer
| `"number_of_urls.redirect"` | integer
| `"number_of_urls.server_error"` | integer
| `"number_of_urls.unreachable"` | integer
Specific errors when requesting statistics
{% code :language => 'json' %}
404 Not found
{
"error": "No statistics found for given scope"
}
{% endcode %}
This response means that the statistics for the given scope (website or segment) are not available at this time. They may or may not become available at a later time.
Retrieving list of pages for a website
Send the following request to get list of pages for a specific website:
{% code %}
GET /v1/websites/
GET /v1/websites/
{% endcode %}
Pagination
Query parameters `per_page` and `page` are used for iterating over large result sets.
- `per_page` can be in range from 1 to 500
- `page` can be 1 up to `ceil(total / per_page)`. If `page` is higher than max value the `urls` field will be an empty array
Response
Each API response contains 2 main keys:
- `total` count of urls in result set for given query
- `urls` paginated urls based on query parameters `per_page` and `page`
{% code :language => 'json' %}
200 OK
{
"total": 1,
"urls": [
{
"app_url": "https://app.contentkingapp.com/websites/1-2/pages/3",
"analytics_services": [
"google_analytics"
],
"canonical_type": "internal_self",
"custom_elements": {
"author": "Josie Walters",
"date_published": "12 August 2019"
},
"ga_average_time": 5.788,
"ga_bounce_rate": 48,
"ga_page_value": 0,
"ga_page_views": 248,
"ga_unique_page_views": 214,
"gsc_clicks": 3,
"gsc_ctr": 0.183,
"gsc_impressions": 1635,
"gsc_position": 41.021,
"health": 950,
"meta_description": "Conductor Website Monitoring keeps track of your website 24/7 so that you can catch unexpected changes and issues before search engines and visitors do. Try it today!",
"h1": "H1 page header",
"hreflang_language": "en",
"is_disallowed_in_robots_txt": false,
"is_indexable": true,
"is_indexable_due_to_meta_robots": true,
"is_indexable_due_to_x_robots_tag": null,
"is_in_sitemap": true,
"is_linked": true,
"link_amp": null,
"link_next": null,
"link_prev": null,
"mobile_variant": null,
"number_of_hreflangs": 6,
"number_of_incoming_internal_canonicals": 1,
"number_of_incoming_internal_links": 314,
"number_of_incoming_internal_redirects": 0,
"number_of_outgoing_external_links": 10,
"number_of_outgoing_internal_links": 65,
"open_graph_description": "Get more visitors and increase conversions with Conductor Website Monitoring. Monitor your website and catch problems before search engines and visitors do. Try now!",
"open_graph_image": "https://www.contentkingapp.com/wp-content/uploads/2017/12/%5B600x314%5D%20Facebook%20Open%20Graph%20-%20Conductor Website Monitoring@2x.png",
"open_graph_title": "Content Optimization and Monitoring service Conductor Website Monitoring",
"open_graph_type": "website",
"open_graph_url": "https://www.contentkingapp.com/",
"relevance": 5.97,
"schema_org_number_of_types": 1,
"schema_org_types": [
"Website"
],
"segments": [
"18"
],
"status_code": 200,
"tag_managers": [
"google_tag_manager"
],
"time_document_download": 947,
"title": "Real-time SEO Auditing and Content Change Tracking - Conductor Website Monitoring",
"twitter_card": "summary_large_image",
"twitter_description": "Get more visitors and increase conversions with Conductor Website Monitoring. Catch problems before search engines and visitors do. Try it today!",
"twitter_image": "https://www.contentkingapp.com/wp-content/uploads/2017/12/%5B600x314%5D%20Facebook%20Open%20Graph%20-%20Conductor Website Monitoring@2x.png",
"twitter_site": "@contentking",
"twitter_title": "Content Optimization service Conductor Website Monitoring",
"type": "page",
"url": "https://www.contentkingapp.com/",
"url_depth": 0,
"visual_analytics_services": [
"mouseflow"
]
}
]
}
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"urls"` | array
| `"urls.url"` | string (absolute URL)
| `"urls.url_depth"` | integer
| `"urls.url_path"` | string (relative URL)
| `"urls.type"` | string
| `"urls.status_code"` | integer
| `"urls.is_https"` | boolean
| `"urls.aa_average_time_spent_on_site"` | integer (seconds)
| `"urls.aa_bounce_rate"` | float (percentage)
| `"urls.aa_page_views"` | integer
| `"urls.aa_unique_visitors"` | integer
| `"urls.aa_revenue"` | float
| `"urls.ga_average_time"` | integer (seconds)
| `"urls.ga_bounce_rate"` | float (percentage)
| `"urls.ga_page_views"` | integer
| `"urls.ga_unique_page_views"` | integer
| `"urls.ga_page_value"` | float
| `"urls.ga_v4_active_users"` | integer
| `"urls.ga_v4_average_engagement_time"` | integer (seconds)
| `"urls.ga_v4_engagement_rate"` | float (percentage)
| `"urls.ga_v4_screen_page_views"` | integer
| `"urls.gsc_clicks"` | integer
| `"urls.gsc_impressions"` | integer
| `"urls.gsc_ctr"` | float (percentage)
| `"urls.gsc_position"` | float
| `"urls.gsc_date_range"` | array
| `"urls.gsc_date_range.since"` | date (YYYY-MM-DD)
| `"urls.gsc_date_range.until"` | date (YYYY-MM-DD)
| `"urls.health"` | number
| `"urls.relevance"` | float
| `"urls.is_disallowed_in_robots_txt"` | boolean
| `"urls.is_indexable"` | boolean
| `"urls.is_indexable_due_to_meta_robots"` | boolean
| `"urls.is_indexable_due_to_x_robots_tag"` | boolean
| `"urls.is_in_sitemap"` | boolean
| `"urls.time_document_download"` | number
| `"urls.custom_elements"`| array
| `"urls.custom_elements.custom_element_name"`| string/number/boolean/date (depending on configuration)
| `"urls.schema_org_number_of_types"`| integer
| `"urls.schema_org_types"`| array of strings
| `"urls.segments"`| array of strings (containing Segment IDs, see Retrieving a list of segments)
| `"urls.app_url"` | string (absolute URL)
| `"urls.open_issues"` | array
| `"urls.open_issues.name"` | string (see List of issues)
| `"urls.lighthouse_performance"` | array
| `"urls.lighthouse_performance.value"` | integer
| `"urls.lighthouse_performance.range"` | string
| `"urls.lighthouse_cls"` | array
| `"urls.lighthouse_cls.value"` | float
| `"urls.lighthouse_cls.range"` | string
| `"urls.lighthouse_fcp"` | array
| `"urls.lighthouse_fcp.value"` | integer (miliseconds)
| `"urls.lighthouse_fcp.range"` | string
| `"urls.lighthouse_lcp"` | array
| `"urls.lighthouse_lcp.value"` | integer (miliseconds)
| `"urls.lighthouse_lcp.range"` | string
| `"urls.lighthouse_si"` | array
| `"urls.lighthouse_si.value"` | integer (miliseconds)
| `"urls.lighthouse_si.range"` | string
| `"urls.lighthouse_tbt"` | array
| `"urls.lighthouse_tbt.value"` | integer (miliseconds)
| `"urls.lighthouse_tbt.range"` | string
| `"urls.lighthouse_tti"` | array
| `"urls.lighthouse_tti.value"` | integer (miliseconds)
| `"urls.lighthouse_tti.range"` | string
| `"urls.is_linked"` | boolean
| `"urls.link_amp"` | string (absolute URL)
| `"urls.link_next"` | string (absolute URL)
| `"urls.link_prev"` | string (absolute URL)
| `"urls.mobile_variant"` | string (absolute URL)
| `"urls.canonical_type"` | string
| `"urls.redirect"` | string (absolute URL)
| `"urls.number_of_hreflangs"` | integer
| `"urls.number_of_incoming_internal_canonicals"` | integer
| `"urls.number_of_incoming_internal_links"` | integer
| `"urls.number_of_incoming_internal_redirects"` | integer
| `"urls.number_of_outgoing_internal_links"` | integer
| `"urls.number_of_outgoing_external_links"` | integer
| `"urls.title"` | string
| `"urls.meta_description"` | string
| `"urls.h1"` | string
| `"urls.open_graph_title"` | string
| `"urls.open_graph_description"` | string
| `"urls.open_graph_image"` | string (absolute URL)
| `"urls.open_graph_url"` | string (absolute URL)
| `"urls.open_graph_type"` | string
| `"urls.twitter_card"` | string
| `"urls.twitter_title"` | string
| `"urls.twitter_description"` | string
| `"urls.twitter_image"` | string (absolute URL)
| `"urls.twitter_site"` | string
| `"urls.tag_managers"` | string
| `"urls.analytics_services"` | string
| `"urls.visual_analytics_services"` | string
Retrieving data for a specific page within a website
Send the following request to get data for a specific page within a website in your account:
{% code %}
GET /v1/websites/
{% endcode %}
Response for a page
The response for an existing page (URL returns HTTP status 200) will look like this:
{% code :language => 'json' %}
200 OK
{
"url": "https://www.contentkingapp.com/",
"is_https": true,
"ga_average_time": 10,
"ga_bounce_rate": 5,
"ga_date_range":
{
"since": "2018-05-09",
"until": "2018-08-07"
},
"ga_page_value": 0,
"ga_page_views": 1,
"ga_unique_page_views": 2,
"gsc_clicks": 0,
"gsc_ctr": 0,
"gsc_date_range":
{
"since": "2018-05-09",
"until": "2018-08-07"
},
"gsc_impressions": 4,
"gsc_position": 5,
"health": 935,
"is_disallowed_in_robots_txt": false,
"is_indexable": true,
"is_indexable_due_to_meta_robots": "yes",
"is_indexable_due_to_x_robots_tag": "yes",
"is_in_sitemap": true,
"relevance": 8.72,
"status_code": 200,
"time_document_download": 183,
"type": "page",
"content": [
{
"type": "canonical",
"content": null
},
{
"type": "title",
"content": "Blog"
},
{
"type": "meta_description",
"content": "some meta description"
},
{
"type": "h1",
"content": "Conductor Website Monitoring"
},
{
"type": "h2",
"content": "Pricing"
},
{
"type": "meta_robots",
"content": null
},
{
"type": "open_graph_description",
"content": null
},
{
"type": "open_graph_image",
"content": null
},
{
"type": "open_graph_title",
"content": null
},
{
"type": "open_graph_type",
"content": null
},
{
"type": "open_graph_url",
"content": null
},
{
"type": "twitter_card",
"content": null
},
{
"type": "twitter_site",
"content": null
},
{
"type": "google_analytics",
"content": "UA-XXXXXX-X"
}
],
"custom_elements": {
"author": "Josie Walters",
"date_published": "12 August 2019"
},
"schema_org": [],
"segments": [
"1",
"3"
],
"app_url": "https://app.contentkingapp.com/websites/1-234/pages/3",
"open_issues": [
{
"name": "open_graph/missing"
},
{
"name": "twitter_cards/missing"
},
{
"name": "meta_information/meta_description_incorrect_length"
},
{
"name": "meta_information/title_incorrect_length"
}
]
}
{% endcode %}
Response for a redirect
The response for a redirect (URL returns HTTP status 3xx) will look like this:
{% code :language => 'json' %}
200 OK
{
"url": "https://www.contentkingapp.com/this-redirects",
"is_https": true,
"gsc_clicks": 9,
"gsc_ctr": 5,
"gsc_date_range":
{
"since": "2018-05-09",
"until": "2018-08-07"
},
"gsc_impressions": 1,
"gsc_position": 4,
"is_disallowed_in_robots_txt": false,
"is_indexable": false,
"is_indexable_due_to_meta_robots": "not_applicable",
"is_indexable_due_to_x_robots_tag": "not_applicable",
"is_in_sitemap": true,
"redirect":
{
"location": "https://www.contentkingapp.com/",
"url": "https://www.contentkingapp.com/",
},
"status_code": 302,
"time_document_download": 149,
"type": "redirect",
"segments": [
"1"
],
"app_url": "https://app.contentkingapp.com/websites/1-234/pages/4",
}
{% endcode %}
Response for missing
The response for a missing page (URL returns HTTP status 4xx) will look like this:
{% code :language => 'json' %}
200 OK
{
"url": "https://www.contentkingapp.com/this-does-not-exist",
"is_https": true,
"is_disallowed_in_robots_txt": false,
"is_indexable": false,
"is_indexable_due_to_meta_robots": "not_applicable",
"is_indexable_due_to_x_robots_tag": "not_applicable",
"is_in_sitemap": true,
"status_code": 404,
"time_document_download": 218,
"type": "missing",
"segments": [
"2"
],
"app_url":"https://app.contentkingapp.com/websites/1-234/pages/5",
}
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"url` | string (absolute URL)
| `"is_https"` | boolean
| `"ga_average_time"` | integer (seconds)
| `"ga_bounce_rate"` | float (percentage)
| `"ga_page_views"` | integer
| `"ga_unique_page_views"` | integer
| `"ga_page_value"` | float
| `"ga_date_range"` | array
| `"ga_date_range.since"` | date (YYYY-MM-DD)
| `"ga_date_range.until"` | date (YYYY-MM-DD)
| `"ga_v4_active_users"` | integer
| `"ga_v4_average_engagement_time"` | integer (seconds)
| `"ga_v4_engagement_rate"` | float (percentage)
| `"ga_v4_screen_page_views"` | integer
| `"ga_v4_date_range"` | array
| `"ga_v4_date_range.since"` | date (YYYY-MM-DD)
| `"ga_v4_date_range.until"` | date (YYYY-MM-DD)
| `"gsc_clicks"` | integer
| `"gsc_impressions"` | integer
| `"gsc_ctr"` | float (percentage)
| `"gsc_position"` | float
| `"gsc_date_range"` | array
| `"gsc_date_range.since"` | date (YYYY-MM-DD)
| `"gsc_date_range.until"` | date (YYYY-MM-DD)
| `"health"` | number
| `"relevance"` | float
| `"is_disallowed_in_robots_txt"` | boolean
| `"is_indexable"` | boolean
| `"is_indexable_due_to_meta_robots"` | boolean
| `"is_indexable_due_to_x_robots_tag"` | boolean
| `"is_in_sitemap"` | boolean
| `"status_code"` | integer
| `"time_document_download"` | number
| `"type"` | string
| `"content"` | array
| `"content.type"`| string
| `"content.content"`| string
| `"custom_elements"`| array
| `"custom_elements.custom_element_name"`| string/number/boolean/date (depending on configuration)
| `"schema_org"`| array (containing different Schema properties as defined by schema.org)
| `"segments"`| array of strings (containing Segment IDs, see Retrieving a list of segments)
| `"app_url"` | string (absolute URL)
| `"open_issues"` | array
| `"open_issues.name"` | string (see List of issues)
| `"lighthouse_performance"` | array
| `"lighthouse_performance.value"` | integer
| `"lighthouse_performance.range"` | string
| `"lighthouse_cls"` | array
| `"lighthouse_cls.value"` | float
| `"lighthouse_cls.range"` | string
| `"lighthouse_fcp"` | array
| `"lighthouse_fcp.value"` | integer (miliseconds)
| `"lighthouse_fcp.range"` | string
| `"lighthouse_lcp"` | array
| `"lighthouse_lcp.value"` | integer (miliseconds)
| `"lighthouse_lcp.range"` | string
| `"lighthouse_si"` | array
| `"lighthouse_si.value"` | integer (miliseconds)
| `"lighthouse_si.range"` | string
| `"lighthouse_tbt"` | array
| `"lighthouse_tbt.value"` | integer (miliseconds)
| `"lighthouse_tbt.range"` | string
| `"lighthouse_tti"` | array
| `"lighthouse_tti.value"` | integer (miliseconds)
| `"lighthouse_tti.range"` | string
Specific errors when requesting page data
{% code :language => 'json' %}
404 Not found
{
"error": "Requested URL was not found"
}
{% endcode %}
This response means that the URL passed in the request is not monitored by Conductor Website Monitoring.
{% code :language => 'json' %}
404 Not found
{
"error": "Requested URL cannot be provided via Reporting API"
}
{% endcode %}
This response means that data for the URL passed in the request is not available via the Reporting API.
Retrieving a list of alerts for a website
Send the following request to get a list of alerts for a specific website in your account:
{% code %}
GET /v1/websites/
{% endcode %}
The response will look like this:
{% code :language => 'json' %}
200 OK
[
{
"id": "1",
"app_url": "https://app.contentkingapp.com/websites/1-234/events?event=1",
"date_last_updated": "2018-05-10T12:59:21+02:00",
"date_opened": "2018-05-10T12:59:21+02:00",
"name": "robots_txt_changed",
"scope": "platform",
"type": "warning"
},
{
"id": "2",
"app_url": "https://app.contentkingapp.com/websites/1-234/events?event=2",
"date_last_updated": "2018-07-21T03:21:46+02:00",
"date_opened": "2018-07-16T14:33:43+02:00",
"name": "issue_opened.meta_information/title_missing",
"scope": "pages",
"type": "alert"
}
]
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"id"` | string
| `"app_url"` | string (absolute URL)
| `"date_last_updated"` | datetime (ISO 8601 format)
| `"date_opened"` | datetime (ISO 8601 format)
| `"name"` | string
| `"scope"` | string
| `"type"` | string
Retrieving list of pages for a website alert
Send the following request to get list of pages for a specific website alert:
{% code %}
GET /v1/websites/
{% endcode %}
Pagination
Query parameters `per_page` and `page` are used for iterating over large result sets.
- `per_page` can be in range from 1 to 500
- `page` can be 1 up to `ceil(total / per_page)`. If `page` is higher than max value the `urls` field will be an empty array
Response for a page
Each API response contains 2 main keys:
- `total` count of urls in result set for given query
- `urls` paginated urls based on query parameters `per_page` and `page`
{% code :language => 'json' %}
200 OK
{
"total": 1,
"urls": [
{
"app_url": "https://app.contentkingapp.com/websites/1-2/pages/3",
"relevance": 5.97,
"segments": [
"18"
],
"url": "https://www.contentkingapp.com/"
}
]
}
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"total"` | integer
| `"urls"` | array
| `"urls.app_url"` | string (absolute URL)
| `"urls.relevance"` | float
| `"segments"` | array of strings (containing Segment IDs, see Retrieving a list of segments)
| `"urls.url"` | string (absolute URL)
Retrieving a list of issues for a website
Send the following request to get a list of issues for a specific website in your account:
{% code %}
GET /v1/websites/
{% endcode %}
The response will look like this:
{% code :language => 'json' %}
200 OK
[
{
"name": "content_headings/h1_duplicate",
"points_gained": 24,
"points_to_gain": 0,
"scope": "pages"
},
{
"name": "xml_sitemap/missing",
"points_gained": 10,
"points_to_gain": 0,
"scope": "platform"
}
]
{% endcode %}
Data types overview for this endpoint| Property* | *Data Type
| --- | ---
| `"name"` | string
| `"points_gained"` | integer
| `"points_to_gain"` | integer
| `"scope"` | string
Retrieving list of pages for a website issue
Send the following request to get list of pages for a specific website issue:
{% code %}
GET /v1/websites/
{% endcode %}
Pagination
Query parameters `per_page` and `page` are used for iterating over large result sets.
- `per_page` can be in range from 1 to 500
- `page` can be 1 up to `ceil(total / per_page)`. If `page` is higher than max value the `urls` field will be an empty array
Response for a page
Each API response contains 2 main keys:
- `total` count of urls in result set for given query
- `urls` paginated urls based on query parameters `per_page` and `page`
{% code :language => 'json' %}
200 OK
{
"total": 1,
"urls": [
{
"app_url": "https://app.contentkingapp.com/websites/1-2/pages/3",
"relevance": 5.97,
"segments": [
"18"
],
"url": "https://www.contentkingapp.com/"
}
]
}
{% endcode %}
| Property* | *Data Type
| --- | ---
| `"total"` | integer
| `"urls"` | array
| `"urls.app_url"` | string (absolute URL)
| `"urls.relevance"` | float
| `"segments"` | array of strings (containing Segment IDs, see Retrieving a list of segments)
| `"urls.url"` | string (absolute URL)
List of issues
| Issue | Description |
| --- | --- |
| Analytics |
| `analytics/analytics_missing` | No analytics installed |
| `analytics/visual_analytics_missing` | No visual analytics installed |
| Content Headings |
| `h1/duplicate` | H1 heading is not unique |
| `h1/incorrect_length` | H1 heading has incorrect length |
| `h1/missing` | H1 heading is missing |
| `h1/too_many`| More than one H1 heading |
| Canonical Link |
| `canonical_link/incorrectly_canonicalized` | Canonical link to other page present on non-indexable page |
| `canonical_link/missing` | Canonical link is missing |
| `canonical_link/points_to_unindexable` | Canonical link is pointing to non-indexable page |
| `canonical_link/too_many` | More than one canonical link |
| Images |
| `images/alt_attribute` | Images are missing alt-attribute |
| Links |
| `links/broken` | Page contains broken links |
| `links/redirected` | Page contains links to redirects |
| `links/to_canonicalized` | Page contains links to canonicalized URLs |
| Meta Information |
| `meta_description/duplicate` | Meta description is not unique |
| `meta_description/incorrect_length` | Meta description has incorrect length |
| `meta_description/missing` | Meta description is missing |
| `meta_description/too_many` | There are multiple meta descriptions on the page |
| `title/duplicate` | Page title is not unique |
| `title/incorrect_length` | Page title has incorrect length |
| `title/missing` | Title is missing |
| `title/too_many` | There are multiple titles on pages |
| Open Graph |
| `open_graph/description_incorrect_length` | Open Graph description has incorrect length |
| `open_graph/description_missing` | Open Graph description is missing |
| `open_graph/image_missing` | Open Graph image is missing |
| `open_graph/title_incorrect_length` | Open Graph title has incorrect length |
| `open_graph/title_missing` | Open Graph title is missing |
| `open_graph/url_missing` | Open Graph URL is missing |
| Twitter Cards |
| `twitter_cards/description_incorrect_length` | Twitter Cards description has incorrect length |
| `twitter_cards/description_missing` | Twitter Cards description is missing |
| `twitter_cards/image_missing` | Twitter Cards image is missing |
| `twitter_cards/site_missing` | Twitter Cards site property is missing |
| `twitter_cards/title_incorrect_length` | Twitter Cards title has incorrect length |
| `twitter_cards/title_missing` | Twitter Cards title is missing |
| `twitter_cards/type_invalid` | Twitter Cards type value is not valid |
| `twitter_cards/type_missing` | Twitter Cards type is not present |
| XML Sitemap |
| `xml_sitemap/incorrectly_missing` | Page is not included in XML sitemap |
| `xml_sitemap/incorrectly_present` | Pages incorrectly present in XML sitemap |
| Schema.org |
| `schema_org/errors` | Schema.org implementation has an invalid structure |
| `schema_org/invalid_json` | Schema element with invalid JSON-LD object present |
| Hreflang |
| `hreflang/conflicting_targets` | Hreflang attribute value is pointed to multiple targets |
| `hreflang/invalid_target` | Invalid hreflang target present |
| `hreflang/invalid_value` | Invalid hreflang attribute value present |
| `hreflang/missing_self_reference` | Self-referencing hreflang not present |
| `hreflang/missing_specific_audience` | Hreflang implementation does not contain any hreflang attribute specifying a language and/or region |
| `hreflang/missing_x_default` | Hreflang attribute with x-default value is missing |
| Robot directives |
| `robot_directives/conflicting` | Valid robot directives give conflicting directives to search engines |
| `robot_directives/invalid` | Valid robot directives give conflicting directives to search engines |
| `robot_directives/unsupported` | Valid but unsupported robot directives to a search engine present |
| Conductor Website Monitoring Lighthouse Web Vitals |
| `lighthouse/performance` | Performance score is too low |
| `lighthouse/fcp` | First Contentful Paint takes too long |
| `lighthouse/lcp` | Largest Contentful Paint takes too long |
| `lighthouse/tti` | Time To Interactive takes too long |
| `lighthouse/si` | Speed Index is too high |
| `lighthouse/tbt` | Total Blocking Time is too long |
| `lighthouse/cls` | Cumulative Layout Shift is too large |
Common API errors
Authorization missing
{% code :language => 'json' %}
401 Unauthorized
{
"code": "auth_missing_token",
"message": "Authentication token must be passed in Authorization HTTP header.",
"errors": []
}
{% endcode %}
This response means that the request was received, but that it's lacking an authorization token and can therefore not be processed. Make sure to correctly set the Authorization header.
Authorization failed
{% code :language => 'json' %}
401 Unauthorized
{
"code": "auth_failed",
"message": "Authentication token is expired or invalid.",
"errors": []
}
{% endcode %}
If you get this response it means that the request could not be processed because the supplied API token is invalid or expired.
Reporting API Terms of Use not accepted
{% code :language => 'json' %}
403 Forbidden
{
"code": "terms_of_use_not_accepted",
"message": "Reporting API Terms of Use have not been accepted yet. Please accept Terms of Use in Account Settings.",
"errors": []
}
{% endcode %}
If you get this response it means that you have not accepted Reporting API Terms of Use yet. You need to accept them in Account Settings before you start using Reporting API.
Website not found
{% code :language => 'json' %}
404 Not found
{
"error": "Requested website ID was not found"
}
{% endcode %}
In case you get this response the website ID you specified can't be found in your account.
Authorization malformed
{% code :language => 'json' %}
422 Unprocessable Entity
{
"code": "auth_malformed",
"message": "Authorization HTTP header must conform to format described in docs.",
"errors": []
}
{% endcode %}
This response means that the request was received, but that the authorization wasn't formatted correctly. Make sure to correctly set the Authorization header.
Rate limits
Rate limits define the maximum number of requests which can be made in a given time range.
Conductor Website Monitoring’s Reporting API has the following rate limits:
- 6 requests/second/requester IP address
- When the limit is hit the API returns a `429` status code for 1 minute
The Reporting API uses rate limits to ensure API request traffic can be handled efficiently.