Analytics

4
GET/v1/analyticsGet analytics by scope

Parameters

NameTypeDescriptionRequired
fromstringQuerystring parameter.No
tostringQuerystring parameter.No
granularitystringQuerystring parameter.No

Request Body Fields

NameTypeOptionsRequired
from
stringAnyNo
to
stringAnyNo
granularity
enum
totalmonth
No
curl -X GET "https://api.cirrusreader.com/v1/analytics" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Response Body Fields

NameTypeOptionsRequired
item
objectAnyYes
context
objectAnyYes

Response 200

Analytics were returned successfully.

{
  "item": {
    "period": {
      "from": "string",
      "to": "string"
    },
    "totals": {
      "publicationsRead": 1,
      "totalViews": 1,
      "activeReaders": 1
    },
    "monthly": [
      {
        "publicationsRead": 1,
        "totalViews": 1,
        "activeReaders": 1,
        "month": "string"
      }
    ]
  },
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string",
    "authentication": {
      "requestId": "string",
      "authType": "apiKey",
      "sub": "string",
      "email": "string",
      "groups": "string",
      "keyId": "string",
      "organisationId": "string",
      "errorCode": "string",
      "error": "string",
      "user": {
        "id": "string",
        "sub": "string",
        "firstName": "string",
        "lastName": "string",
        "email": "string",
        "role": "Admin",
        "status": "Active",
        "onboarded": true,
        "userImage": "string",
        "billing": {
          "planId": "starter",
          "status": "incomplete",
          "billingAccessStatus": "enabled",
          "billingGracePeriodEndIso": "2026-04-29T10:00:00.000Z",
          "billingInterval": "month",
          "trialEndIso": "2026-04-29T10:00:00.000Z",
          "currentPeriodEndIso": "2026-04-29T10:00:00.000Z",
          "cancelAtPeriodEnd": true,
          "publicationLimit": 1,
          "monthlyBandwidthLimitBytes": "string",
          "bandwidthPeriodStartIso": "2026-04-29T10:00:00.000Z",
          "bandwidthPeriodEndIso": "2026-04-29T10:00:00.000Z",
          "bandwidthPeriodUsedBytes": "string",
          "bandwidthPeriodCalculatedThroughIso": "2026-04-29T10:00:00.000Z",
          "bandwidthAccessStatus": "enabled"
        }
      },
      "scopeId": "string"
    }
  }
}

Error Responses

Response 400

The request body or parameters failed validation.

{
  "error": "QL_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  },
  "details": [
    {
      "message": "string"
    }
  ]
}

Response 401

The request is missing valid authentication credentials.

{
  "error": "AUTHENTICATION_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 403

The authenticated user is not allowed to access this resource.

{
  "error": "AUTHENTICATION_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 404

The requested API key could not be found.

{
  "error": "EMPTY_RESPONSE",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 405

The request method is not supported.

{
  "error": "UNSUPPORTED_METHOD",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 500

The request body or parameters failed validation.

{
  "error": "DB_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}
GET/v1/analytics/publications/{id}Get analytics for a publication within the authenticated scope.

Parameters

NameTypeDescriptionRequired
idstringPath parameter.Yes
fromstringQuerystring parameter.No
tostringQuerystring parameter.No
granularitystringQuerystring parameter.No

Request Body Fields

NameTypeOptionsRequired
from
stringAnyNo
to
stringAnyNo
granularity
enum
totalmonth
No
curl -X GET "https://api.cirrusreader.com/v1/analytics/publications/ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Response Body Fields

NameTypeOptionsRequired
item
objectAnyYes
context
objectAnyYes

Response 200

Publication analytics were returned successfully.

{
  "item": {
    "publicationId": "string",
    "period": {
      "from": "string",
      "to": "string"
    },
    "totals": {
      "totalReads": 1,
      "averageReadTimeMs": 1,
      "averageCompletion": 1,
      "completionRate": 1
    },
    "monthly": [
      {
        "totalReads": 1,
        "averageReadTimeMs": 1,
        "averageCompletion": 1,
        "completionRate": 1,
        "month": "string"
      }
    ]
  },
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string",
    "authentication": {
      "requestId": "string",
      "authType": "apiKey",
      "sub": "string",
      "email": "string",
      "groups": "string",
      "keyId": "string",
      "organisationId": "string",
      "errorCode": "string",
      "error": "string",
      "user": {
        "id": "string",
        "sub": "string",
        "firstName": "string",
        "lastName": "string",
        "email": "string",
        "role": "Admin",
        "status": "Active",
        "onboarded": true,
        "userImage": "string",
        "billing": {
          "planId": "starter",
          "status": "incomplete",
          "billingAccessStatus": "enabled",
          "billingGracePeriodEndIso": "2026-04-29T10:00:00.000Z",
          "billingInterval": "month",
          "trialEndIso": "2026-04-29T10:00:00.000Z",
          "currentPeriodEndIso": "2026-04-29T10:00:00.000Z",
          "cancelAtPeriodEnd": true,
          "publicationLimit": 1,
          "monthlyBandwidthLimitBytes": "string",
          "bandwidthPeriodStartIso": "2026-04-29T10:00:00.000Z",
          "bandwidthPeriodEndIso": "2026-04-29T10:00:00.000Z",
          "bandwidthPeriodUsedBytes": "string",
          "bandwidthPeriodCalculatedThroughIso": "2026-04-29T10:00:00.000Z",
          "bandwidthAccessStatus": "enabled"
        }
      },
      "scopeId": "string"
    }
  }
}

Error Responses

Response 400

The request body or parameters failed validation.

{
  "error": "QL_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  },
  "details": [
    {
      "message": "string"
    }
  ]
}

Response 401

The request is missing valid authentication credentials.

{
  "error": "AUTHENTICATION_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 403

The authenticated user is not allowed to access this resource.

{
  "error": "AUTHENTICATION_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 404

The requested API key could not be found.

{
  "error": "EMPTY_RESPONSE",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 405

The request method is not supported.

{
  "error": "UNSUPPORTED_METHOD",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 500

The request body or parameters failed validation.

{
  "error": "DB_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}
GET/v1/analytics/publications/{id}/activityGet daily analytics for a publication within the authenticated scope.

Parameters

NameTypeDescriptionRequired
idstringPath parameter.Yes
fromstringQuerystring parameter.Yes
tostringQuerystring parameter.Yes

Request Body Fields

NameTypeOptionsRequired
from
stringAnyYes
to
stringAnyYes
curl -X GET "https://api.cirrusreader.com/v1/analytics/publications/ID/activity?from=FROM&to=TO" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Response Body Fields

NameTypeOptionsRequired
item
objectAnyYes
context
objectAnyYes

Response 200

Publication analytics were returned successfully.

{
  "item": {
    "publicationId": "string",
    "period": {
      "from": "string",
      "to": "string"
    },
    "daily": [
      {
        "day": "string",
        "views": 1
      }
    ]
  },
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string",
    "authentication": {
      "requestId": "string",
      "authType": "apiKey",
      "sub": "string",
      "email": "string",
      "groups": "string",
      "keyId": "string",
      "organisationId": "string",
      "errorCode": "string",
      "error": "string",
      "user": {
        "id": "string",
        "sub": "string",
        "firstName": "string",
        "lastName": "string",
        "email": "string",
        "role": "Admin",
        "status": "Active",
        "onboarded": true,
        "userImage": "string",
        "billing": {
          "planId": "starter",
          "status": "incomplete",
          "billingAccessStatus": "enabled",
          "billingGracePeriodEndIso": "2026-04-29T10:00:00.000Z",
          "billingInterval": "month",
          "trialEndIso": "2026-04-29T10:00:00.000Z",
          "currentPeriodEndIso": "2026-04-29T10:00:00.000Z",
          "cancelAtPeriodEnd": true,
          "publicationLimit": 1,
          "monthlyBandwidthLimitBytes": "string",
          "bandwidthPeriodStartIso": "2026-04-29T10:00:00.000Z",
          "bandwidthPeriodEndIso": "2026-04-29T10:00:00.000Z",
          "bandwidthPeriodUsedBytes": "string",
          "bandwidthPeriodCalculatedThroughIso": "2026-04-29T10:00:00.000Z",
          "bandwidthAccessStatus": "enabled"
        }
      },
      "scopeId": "string"
    }
  }
}

Error Responses

Response 400

The request body or parameters failed validation.

{
  "error": "QL_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  },
  "details": [
    {
      "message": "string"
    }
  ]
}

Response 401

The request is missing valid authentication credentials.

{
  "error": "AUTHENTICATION_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 403

The authenticated user is not allowed to access this resource.

{
  "error": "AUTHENTICATION_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 404

The requested API key could not be found.

{
  "error": "EMPTY_RESPONSE",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 405

The request method is not supported.

{
  "error": "UNSUPPORTED_METHOD",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}

Response 500

The request body or parameters failed validation.

{
  "error": "DB_ERROR",
  "message": "string",
  "context": {
    "path": "string",
    "method": "string",
    "requestId": "string"
  }
}