---
description: REST and GraphQL API documentation on the Activity collection in Directus.
readTime: 4 min read
pageClass: page-reference
---
# Activity
> All events within Directus are tracked and stored in the activities collection. This gives you full accountability
> over everything that happens. [Learn more about Activity](/user-guide/overview/glossary#activity).
## The Activity Object
`action` **string**\
Action that was performed.
`collection` **string**\
Collection identifier in which the item resides.
`comment` **string**\
User comment. This will store the comments that show up in the right sidebar of the item edit page in the Data Studio.
`id` **integer**\
Unique identifier for the object.
`ip` **string**\
The IP address of the user at the time the action took place.
`item` **string**\
Unique identifier for the item the action applied to. This is always a string, even for integer primary keys.
`timestamp` **string**\
When the action happened.
`user` **many-to-one**\
The user who performed this action. Many-to-one to [users](/reference/system/users#the-users-object).
`user_agent` **string**\
User agent string of the browser the user used when the action took place.
`revisions` **one-to-many**\
Any changes that were made in this activity. One-to-many to [revisions](/reference/system/revisions#the-revisions-object).
```json
{
"action": "create",
"collection": "articles",
"comment": null,
"id": 5,
"ip": "139.178.128.0",
"item": "1",
"timestamp": "2021-02-02T12:50:26-05:00",
"user": "2d321940-69f5-445f-be6b-c773fa58a820",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15",
"revisions": [4]
}
```
## List Activity Actions
Returns a list of activity actions.
### Request
`GET /activity`
`SEARCH /activity`
If using SEARCH you can provide a [query object](/reference/query) as the body of your request.
[Learn more about SEARCH ->](/reference/introduction#search-http-method)
`POST /graphql/system`
```graphql
type Query {
activity: [directus_activity]
}
```
```js
import { createDirectus, rest, readActivities } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(readActivities(query_object));
```
#### Query Parameters
Supports all [global query parameters](/reference/query).
### Returns
An array of up to [limit](/reference/query#limit) [activity objects](#the-activity-object). If no items are available,
data will be an empty array.
### Example
`GET /activity`
`SEARCH /activity`
```graphql
query {
activity {
# ...
}
}
```
```js
import { createDirectus, rest, readActivities } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
readActivities({
fields: ['*'],
})
);
```
## Retrieve Activity Action
Returns a single activity action by primary key.
### Request
`GET /activity/:id`
`POST /graphql/system`
```graphql
type Query {
activity_by_id(id: ID!): directus_activity
}
```
```js
import { createDirectus, rest, readActivity } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(readActivity(activity_id, query_object));
```
#### Query Parameters
Supports all [global query parameters](/reference/query).
### Response
Returns an [activity object](#the-activity-object) if a valid identifier was provided.
### Example
`GET /activity/15`
`POST /graphql/system`
```graphql
query {
activity_by_id(id: 15) {
# ...
}
}
```
```js
import { createDirectus, rest, readActivity } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
readActivity('53281', {
fields: ['*'],
})
);
```
## Create a Comment
Creates a new comment on a given item.
### Request
`POST /activity/comment`
```json
{
"collection": collection_name,
"item": item_id,
"comment": comment_content
}
```
`POST /graphql/system`
```graphql
type Mutation {
create_comment(collection: String!, item: ID!, comment: String!): directus_activity
}
```
```js
import { createDirectus, rest, createComment } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(
createComment({
collection: collection_name,
item: item_id,
comment: comment_content,
})
);
```
#### Request Body
`collection` **Required**\
Collection in which the item resides.
`item` **Required**\
Primary Key of the item to comment on.
`comment` **Required**\
The comment content. Supports Markdown.
### Response
Returns the [activity object](#the-activity-object) of the created comment.
### Example
`POST /activity/comment`
```json
{
"collection": "pages",
"item": 3,
"comment": "Hello World"
}
```
`POST /graphql/system`
```graphql
mutation {
create_comment(collection: "pages", item: 3, comment: "Hello World") {
# ...
}
}
```
```js
import { createDirectus, rest, createComment } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
createComment({
collection: 'articles',
item: '18',
comment: 'This is the wrong article to publish!',
})
);
```
## Update a Comment
Updates an existing comment by activity action primary key.
### Response
`PATCH /activity/comment/:id`
```json
{
"comment": comment_content
}
```
`POST /graphql/system`
```graphql
type Mutation {
delete_comment(id: ID): delete_one
}
```
```js
import { createDirectus, rest, updateComment } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(
updateComment(comment_id, {
comment: comment_content,
})
);
```
#### Request Body
`comment` **Required**\
The updated comment content. Supports Markdown.
### Response
Returns the [activity object](#the-activity-object) of the created comment.
### Example
`PATCH /activity/comment/15`
```json
{
"comment": "Hello World!!"
}
```
`POST /graphql/system`
```graphql
mutation {
update_comment(id: 3, comment: "Hello World") {
# ...
}
}
```
```js
import { createDirectus, rest, updateComment } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(
updateComment('53727', {
comment: 'Great work!',
})
);
```
## Delete a Comment
Deletes a comment.
### Request
`DELETE /activity/comment/:id`
`POST /graphql/system`
```graphql
type Mutation {
delete_comment(id: ID): delete_one
}
```
```js
import { createDirectus, rest, deleteComment } from '@directus/sdk';
const client = createDirectus('directus_project_url').with(rest());
const result = await client.request(deleteComment(comment_id));
```
### Example
`DELETE /activity/comment/15`
```graphql
mutation {
delete_comment(id: 3) {
id
}
}
```
```js
import { createDirectus, rest, deleteComment } from '@directus/sdk';
const client = createDirectus('https://directus.example.com').with(rest());
const result = await client.request(deleteComment('53727'));
```