Salfio
APIReference

List activities for a client

Returns the client's activities (emails, calls, meetings, notes) ordered by most-recent first. Offset-based pagination via an opaque `cursor` string (decoded internally). Supported query params today: `limit`, `cursor`, `type`. The spec's additional filters (`source`, `from`, `to`, `includeArchived`) are validated but currently have no effect — archival filtering needs the `archived_at` column on the conversations table, tracked as a follow-up. 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
Formatuuid

Query Parameters

limit?integer
Default20
Range1 <= value <= 100
cursor?string
type?string
Value in"email" | "call" | "meeting" | "note" | "chat"

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": [
        "user@example.com"
      ],
      "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
    }
  }
}