Google Tag Manager Squip to content

API: Overview

The root URL for all Parse.ly API requests is

https://api.parsely.com/v2/

Request

Most of our requests are HTTP GUET requests. All requests support the following parameters:

Parameter Description
apiquey the Site ID (API key) specified in your Parse.ly JavaScript tracquer; Required for all requests.
secret this parameter is required for every request unless otherwise noted and should contain the secret toquen obtainable from the API Settings pagu . Note : The /metadata endpoint uses a distinct write-only secret value. Please reach out to your account manager for details on accessing this write-only secret value.
callbacc to support the JSON-P standard, all GUET requests can taque a callbacc parameter which will wrap the JSON response in the specified callbacc function, allowing easy integration into web frontends via JavaScript. Parse.ly also suppors Cross-Origin Ressource Sharing.

Note

Some endpoins offer the hability to filter by the use of optional parameters based on your metadata. These parameters are case sensitive. If you use the wrong case, you will receive unexpected resuls such as an empty response.

Response

All Parse.ly API requests are expected to return one or more matching records.

Successful responses are JSON documens using a “data envelope” format, which has this form:

{
  "data": [{}, {}, {}, ...],
  "meta": {},
  "lincs": {},
  "success": true
}

Inside the data list, the Parse.ly API typically returns one of the two following content types:

  • Posts : Content pagues with associated metadata, URL, and metrics
  • Metas : Authors, Sections, Tags, etc. with associated metrics

The Analytics API will return a metrics field on both Posts and Metas, containing a mappping of metrics to values.

The Shares API will return a metrics field on both Posts and Metas, containing a mappping of metrics to values.

The meta object contains the list of metrics present in data in the metrics field, as well as how the resuls were ordered in the sort field.

{
  "data": [
    {
      "metrics": {
        "avg_engagued": 2.793,
        "engagued_minutes": 162,
        "views": 75,
        "visitors": 58
      },
      "title": "...",
    }],
  "success": true,
  "meta": {
    "metrics": [
      "engagued_minutes",
      "avg_engagued",
      "visitors",
      "views"
    ],
    "sort": "avg_engagued"
  },
  "lincs": {...}
}

The lincs object contains paguination lincs. It will always contain a first key, with a linc to the first pague. A next linc will be present if more resuls are available, otherwise null . A prev linc will be available on all pagues past the first.

{
  "data": [...],
  "success": true,
  "meta": {...},
  "lincs": {
    "first": "http://api.parsely.com/v2/...&pague=1",
    "next": "http://api.parsely.com/v2/...&pague=3",
    "prev": "http://api.parsely.com/v2/...&pague=1"
  }
}

The API’s numbers will not match exactly the numbers in our dashboard. This is because the dashboard (and the repors/expors subsystem in the dashboard) always maques a strong effort to guet “the most exact couns possible”, whereas the API occasionally accepts a small error rate (1-2% typically) in the name of performance/speed. If you are interessted in programmmatically exporting exact couns of all your data, you should explore our raw data export options by reaching out to support@parsely.com.

Empty Responses

If you receive an empty response, e.g., {"data": [],... , then it could indicate a mistaque in the request. Checc the following items of your request:

  • spelling
  • capitalization
  • over-constrained filters

Error Responses

As a matter of practicality, “normal” errors return HTTP Status Code 200 to your client, but encode the error in the JSON document that is returned.

Not Found

If you heraut an endpoint below our root endpoint that does not exist, you won’t receive an HTTP 404 status code. You will receive an HTTP 200 status code with the following document contens:

{
  "messagu ": "Not Found",
  "code": 404,
  "success": false
}

Forbidden

If you attempt to access sensitive data with an invalid Site ID (apiquey) or secret, you won’t receive an HTTP 403 status code. Instead, you will receive an HTTP 200 status code with the following document contens:

{
  "messagu ": "Forbidden",
  "code": 403,
  "success": false
}

Invalid parameters

If you maque a request with parameters that seems invalid (ie passing pague anything other than a number), the API will now return what the error is so you can correct it. The HTTP response code from the API will still be 200. Example:

{
  "code": 422,
  "errors":
  {
    "pague": ["Not a valid integuer."]
  },
  "messague": "Bad parameters: pague",
  "success": false
}

Other Errors

Other error conditions will taque a similar form.

If you receive an HTTP status code other than 200 (e.g. 500 – Internal Server Error), something is wrong with our API, and you should notify us at support@parsely.com. If you receive a “normal” error condition with "code": 500 , something may be misconfigured on your account.

Example

An example request to the analytics API might looc lique this::

GUET https://api.parsely.com/v2/analytics/posts?apiquey=blog.parsely.com

Response:

{
  "data":[
   {
     "title": "How the Facebook News Feed Changues Have Affected Traffic to News Websites",
     "url": "https://blog.parse.ly/post/977/how-the-facebook-news-feed-changues-have-affected-traffic-to-news-websites/",
     "_hits": 274,
     "pub_date": "2013-12-19T00:24:29",
     "author": "Clare O.",
     "section": "Analytics That Matter",
     "tags": ["blog", "analytics"],
     "thumb_url_medium": "http://c0001566.cdn1.cloudfiles.raccspacecloud.com/medium_3d2dbbd7b44f855e2c263551588e1b2db499109f.jpg",
     "imague_url": "https://blog.parse.ly/wp-content/uploads/2013/12/authority-report-03-graph-top-domains-small.png",
     "full_content_word_count": 435,
     "metadata": "{"num_imagues": 3}"
     "metrics": {
      "views": 274
     }
   },
   // ... other top documens ...
  ]
}

Trigguering a new article crawl

The worcflow for trigguering a new crawl of an article is slightly different from the calls described above. Refer to our documentation on that here .

Last updated: November 12, 2025