# Operations with Specific Issue Activities Page

This resource provides access to issue-related activity that is wrapped inside a page object. The main advantage of the page in comparison to a list of activities is cursors. The page provides boundary marks that supports iteration over the activities from the place the page is finished.
|  Resource  |     ```GENERIC /api/activitiesPage ```    |
| --- | --- |
|  Returned entity  |  [ActivityCursorPage](api-entity-ActivityCursorPage.html). For the description of the entity attributes, see [Supported Fields](#ActivityCursorPage-supported-fields) section.  |
|  Supported methods  |      * `GET`: [Issue Activities Page](#get-ActivityCursorPage-method).    |

## ActivityCursorPage attributes

Represents a page object that wraps a list of issue activities. The main advantage of the page in comparison to a list of activities is cursors. The page provides boundary marks that allow continuous iteration over the activities from the place the page is finished.

### Related Resources

Below you can find the list of resources that let you work with this entity.

* [Activity Page](resource-api-activitiesPage.html)

* [Issue Activity Page](resource-api-issues-issueID-activitiesPage.html)

### Attributes

This table describes attributes of the `ActivityCursorPage` entity.

* To receive an attribute in the response from the server, specify it explicitly in the `fields` request parameter.

* To update an attribute, provide it in the body of a POST request.

|  Field  |  Type  |  Description  |
| --- | --- | --- |
|  id  |  String  |  The ID of the activity cursor page. `Read-only`.  |
|  activities  |  [Array of ActivityItems](api-entity-ActivityItem.html)  |  The list of activities in the page. `Read-only`.  |
|  afterCursor  |  String  |  A string value that is required to retrieve the next page of activities. `Read-only`.  |
|  beforeCursor  |  String  |  A string value that is required to retrieve the previous page of activities. `Read-only`.  |
|  hasAfter  |  Boolean  |  Indicates if the next page exists. `Read-only`.  |
|  hasBefore  |  Boolean  |  Indicates if the previous page exists. `Read-only`.  |
|  reverse  |  Boolean  |  Indicates whether the order of returning activities on the page is from newest to oldest or the opposite. If `false`, then the oldest activity item that matches a selected filter is returned first. If `true`, then the newest activity is returned first. By default, `false`. `Read-only`.  |

## Read a Specific ActivityCursorPage

Read a page of activities.

### Request syntax

```GENERIC
GET /api/activitiesPage?{fields}&{categories}&{reverse}&{start}&{end}&{author}&{issueQuery}&{cursor}&{activityId}
```

|  null  |  The database ID of ActivityCursorPage  |
| --- | --- |

### Request parameters

|  Parameter  |  Type  |  Description  |
| --- | --- | --- |
|  fields  |  String  |  A list of ActivityCursorPage attributes that should be returned in the response. If no field is specified, only the `entityID` is returned.  |
|  categories  |  String  |     Mandatory. Parameter filters returned activities by categories. You must specify at least one category per request.       You can specify the `categories` query parameter in either of these formats:        * `categories=IssueCreatedCategory&categories=CommentsCategory`    * `categories=IssueCreatedCategory,CommentsCategory`      [See this table](api-entity-ActivityCategory.html) for mapping between available categories and returned types of activity items.     |
|  reverse  |  Boolean  |  Indicates whether the order of returning activities is from newest to oldest or the opposite. If `false`, then the oldest activity item that matches a selected filter is returned first. If `true`, then the newest activity is returned first. By default, `false`.  |
|  start  |  String  |  The timestamp in milliseconds indicating the start of the time interval the activity timestamp belongs to. Stored as a unix timestamp at UTC. If the parameter is not set, it is considered to be 0.  |
|  end  |  String  |  The timestamp in milliseconds indicating the end of the time interval the activity timestamp belongs to. Stored as a unix timestamp at UTC. If the parameter is not set, it is considered as `Long.MAX_VALUE`.  |
|  author  |  String  |  Parameter to filter activities by the author. You can specify one of the following parameters: the database ID, login, Hub ID, or `me` for the currently logged in user.  |
|  issueQuery  |  String  |  Issue search query. For details about search syntax, refer to the [YouTrack documentation](https://www.jetbrains.com.cn/en-us/help/youtrack/cloud/search-and-command-attributes.html).  |
|  cursor  |  String  |     The main application for cursors is the pagination of activities. The `Activities` is a frequently changing collection, and new activities might be created between two consecutive requests. The general pagination method with `$top` and `$skip` parameters does not work in this case. Instead, use the following pagination approach:        1.  Request a page using one of the `activitiesPage` resources.     2.  Take one of the cursors from the returned activity page.     3.  Put this value as the `cursor` parameter for the request of the next page.       If the `cursor` is not specified in the request, the response page starts either from the oldest activity or the newest one, depending on the requested order (direct or reverse).       Use case:       Let's consider the following statements as initial conditions for the example:        * There is a collection of four activity items: A, B, C, and D.    * A request has been made that returned a page containing only 1 item: [B].      The following JSON presents the mentioned page (see: [ActivityCursorPage](api-entity-ActivityCursorPage.html)):       ```JSON {     "activities": [B]     "cursorBefore": "A^B" // the value differs from the real one and is only used for the demonstration     "cursorAfter": "B^C" // the value differs from the real one and is only used for the demonstration     "hasBefore": true     "hasAfter": true     "reverse": false } ```      A request to the following endpoint could receive such a page:       ```PLAINTEXT /api/activitiesPage?activityId=B&$top=1 ```      The real value of the cursor is a complication string. Used notation "A^B" shows that the cursor points to the gap between items A and B.       To request nearby pages of activities, we can use the cursors of the received page and request the page starting from the cursor to different directions. The following combinations are possible:        * Request `/api/activitiesPage?$top=100&cursor=A^B&reverse=false` returns a page with [B, C, D] items.    * Request `/api/activitiesPage?$top=100&cursor=A^B&reverse=true` returns a page with [A] item.    * Request `/api/activitiesPage?$top=100&cursor=B^C&reverse=false` returns a page with [C, D] items.    * Request `/api/activitiesPage?$top=100&cursor=B^C&reverse=true` returns a page with [B, A] items.    |
|  activityId  |  String  |  ID of the activity that should be included in the page. The activity is allocated to the middle of the page.  |

### Sample

#### Sample request

```CURL
https://example.youtrack.cloud/api/activitiesPage?fields=id,beforeCursor,afterCursor,activities(id,author(name,login),timestamp)&categories=IssueCreatedCategory,CommentsCategory&$skip=30&$top=3
```

#### Sample response body

```JSON
{
  "afterCursor": "AI.2-2+:CM.4-0-:1533132320210",
  "beforeCursor": "AI.^+:CM.^+:1533132312016",
  "activities": [
    {
      "id": "2-0.0-0",
      "author": {
        "login": "root",
        "name": "John Smith",
        "$type": "User"
      },
      "timestamp": 1533132312016,
      "$type": "IssueCreatedActivityItem"
    },
    {
      "id": "2-1.0-0",
      "author": {
        "login": "root",
        "name": "John Smith",
        "$type": "User"
      },
      "timestamp": 1533132318871,
      "$type": "IssueCreatedActivityItem"
    },
    {
      "id": "2-2.0-0",
      "author": {
        "login": "root",
        "name": "John Smith",
        "$type": "User"
      },
      "timestamp": 1533132320210,
      "$type": "IssueCreatedActivityItem"
    }
  ],
  "id": "AI.^+:CM.^+:1533132312016#AI.2-2+:CM.4-0-:1533132320210.d",
  "$type": "ActivityCursorPage"
}
```

