# List activities for a client

Returns the client's activities (emails, meetings, notes, chats) ordered by most-recent first. \*\*Pagination.\*\* Offset-based: \`cursor\` is the integer offset of the next page encoded as a decimal string (e.g. \`"20"\`). This differs from \`/clients\`, whose cursor is a base64-encoded UUID — the two endpoints paginate differently and their cursors are not interchangeable. \*\*Filters.\*\* \`type\`, \`source\`, \`from\`, \`to\`, and \`includeArchived\` are all applied server-side. \`from\`/\`to\` bound the activity's \`occurredAt\` (inclusive) and accept an ISO-8601 date (\`2026-01-01\`) or an RFC 3339 datetime. Archived activities are hidden unless \`includeArchived=true\`. Unknown enum values, unparseable dates, or a non-boolean \`includeArchived\` return \`400 invalid_argument\`. List responses omit \`content\` for cost reasons — fetch the single-resource endpoint to get message bodies.

GET

/`clients`/`{clientId}`/`activities`

## Authorization

`bearerAuth`` `

AuthorizationBearer \<token\>

Salfio API tokens start with the literal prefix `sk_live_` followed by 32 base62 characters (≈190 bits of entropy). Tokens are hashed at rest with argon2id and shown to the user only once at creation.

In: `header`

## Path Parameters

clientId\*string

Format`uuid`

## Query Parameters

limit?integer

Default`20`

Range`1 <= value <= 100`

cursor?string

Decimal-string offset of the next page (from a prior response's `meta.cursor`).

type?string

Value in`"email" | "meeting" | "note" | "chat"`

source?string

Value in`"manual" | "gmail" | "outlook" | "fireflies"`

from?string

Only activities whose `occurredAt` is on/after this instant. ISO-8601 date or RFC 3339 datetime.

to?string

Only activities whose `occurredAt` is on/before this instant. ISO-8601 date or RFC 3339 datetime.

includeArchived?boolean

When true, archived activities are included. Defaults to false.

Default`false`

## Response Body

### 

`application/json`

### 

`application/json`

### 

`application/json`

### 

`application/json`

### 

`application/json`

    curl -X GET "https://api.salfio.com/v1/clients/497f6eca-6276-4993-bfeb-53cbbbba6f08/activities"

    {
      "meta": {
        "cursor": "string",
        "hasMore": true
      },
      "data": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",
          "type": "email",
          "source": "manual",
          "subject": "string",
          "content": "string",
          "occurredAt": "2019-08-24T14:15:22Z",
          "participants": [
            "[email protected]"
          ],
          "immutable": true,
          "archivedAt": "2019-08-24T14:15:22Z",
          "createdAt": "2019-08-24T14:15:22Z",
          "updatedAt": "2019-08-24T14:15:22Z"
        }
      ]
    }

    {
      "error": {
        "code": "invalid_argument",
        "message": "limit must be an integer between 1 and 100"
      }
    }

    {
      "error": {
        "code": "unauthorized",
        "message": "Authentication required"
      }
    }

    {
      "error": {
        "code": "not_found",
        "message": "client not found"
      }
    }

    {
      "error": {
        "code": "rate_limited",
        "message": "Rate limit exceeded",
        "details": {
          "retry_after_seconds": 30
        }
      }
    }

## Related pages

- [Administrator Tools](./administrator-tools.md)
- [Agent Tools](./mcp-external-servers.md)
- [Assign a Slack channel to a client over the API](./guides-assign-slack-channel.md)
- [Authenticated health check](./api-reference-gethealth.md)
- [Authentication](./api-authentication.md)
- [Cards](./cards.md)
- [Changelog](./changelog.md)
- [Changelog](../changelog.md)
- [Connect a workspace](./getting-started-connect-workspace.md)
- [Connect an integration](./getting-started-connect-integration.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
