Feed Api
Feed Api protocol schemas
Feed / Chatter API Protocol
Defines the HTTP interface for the unified activity timeline (Feed).
Covers Feed CRUD, Emoji Reactions, Pin/Star, Search, Changelog,
and Record Subscription endpoints.
Base path: /api/data/{object}/{recordId}/feed
@example Endpoints
GET /api/data/{object}/{recordId}/feed — List feed items
POST /api/data/{object}/{recordId}/feed — Create feed item
PUT /api/data/{object}/{recordId}/feed/{feedId} — Update feed item
DELETE /api/data/{object}/{recordId}/feed/{feedId} — Delete feed item
POST /api/data/{object}/{recordId}/feed/{feedId}/reactions — Add reaction
DELETE /api/data/{object}/{recordId}/feed/{feedId}/reactions/{emoji} — Remove reaction
POST /api/data/{object}/{recordId}/feed/{feedId}/pin — Pin feed item
DELETE /api/data/{object}/{recordId}/feed/{feedId}/pin — Unpin feed item
POST /api/data/{object}/{recordId}/feed/{feedId}/star — Star feed item
DELETE /api/data/{object}/{recordId}/feed/{feedId}/star — Unstar feed item
GET /api/data/{object}/{recordId}/feed/search — Search feed items
GET /api/data/{object}/{recordId}/changelog — Get field-level changelog
POST /api/data/{object}/{recordId}/subscribe — Subscribe
DELETE /api/data/{object}/{recordId}/subscribe — Unsubscribe
Source: packages/spec/src/api/feed-api.zod.ts
import { AddReactionRequest, AddReactionResponse, ChangelogEntry, CreateFeedItemRequest, CreateFeedItemResponse, DeleteFeedItemRequest, DeleteFeedItemResponse, FeedApiErrorCode, FeedItemPathParams, FeedListFilterType, FeedPathParams, FeedUnsubscribeRequest, GetChangelogRequest, GetChangelogResponse, GetFeedRequest, GetFeedResponse, PinFeedItemRequest, PinFeedItemResponse, RemoveReactionRequest, RemoveReactionResponse, SearchFeedRequest, SearchFeedResponse, StarFeedItemRequest, StarFeedItemResponse, SubscribeRequest, SubscribeResponse, UnpinFeedItemRequest, UnpinFeedItemResponse, UnstarFeedItemRequest, UnstarFeedItemResponse, UnsubscribeResponse, UpdateFeedItemRequest, UpdateFeedItemResponse } from '@objectstack/spec/api';
import type { AddReactionRequest, AddReactionResponse, ChangelogEntry, CreateFeedItemRequest, CreateFeedItemResponse, DeleteFeedItemRequest, DeleteFeedItemResponse, FeedApiErrorCode, FeedItemPathParams, FeedListFilterType, FeedPathParams, FeedUnsubscribeRequest, GetChangelogRequest, GetChangelogResponse, GetFeedRequest, GetFeedResponse, PinFeedItemRequest, PinFeedItemResponse, RemoveReactionRequest, RemoveReactionResponse, SearchFeedRequest, SearchFeedResponse, StarFeedItemRequest, StarFeedItemResponse, SubscribeRequest, SubscribeResponse, UnpinFeedItemRequest, UnpinFeedItemResponse, UnstarFeedItemRequest, UnstarFeedItemResponse, UnsubscribeResponse, UpdateFeedItemRequest, UpdateFeedItemResponse } from '@objectstack/spec/api';
// Validate data
const result = AddReactionRequest.parse(data);
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| emoji | string | ✅ | Emoji character or shortcode (e.g., "👍", ":thumbsup:") |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| id | string | ✅ | Changelog entry ID |
| object | string | ✅ | Object name |
| recordId | string | ✅ | Record ID |
| actor | Object | ✅ | Who made the change |
| changes | Object[] | ✅ | Field-level changes |
| timestamp | string | ✅ | When the change occurred |
| source | string | optional | Change source (e.g., "API", "UI", "automation") |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| type | Enum<'comment' | 'field_change' | 'task' | 'event' | 'email' | 'call' | 'note' | 'file' | 'record_create' | 'record_delete' | 'approval' | 'sharing' | 'system'> | ✅ | Type of feed item to create |
| body | string | optional | Rich text body (Markdown supported) |
| mentions | Object[] | optional | Mentioned users, teams, or records |
| parentId | string | optional | Parent feed item ID for threaded replies |
| visibility | Enum<'public' | 'internal' | 'private'> | ✅ | Visibility: public, internal, or private |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | The created feed item |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
feed_item_not_found
feed_permission_denied
feed_item_not_editable
feed_invalid_parent
reaction_already_exists
reaction_not_found
subscription_already_exists
subscription_not_found
invalid_feed_type
feed_already_pinned
feed_not_pinned
feed_already_starred
feed_not_starred
feed_search_query_too_short
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
all
comments_only
changes_only
tasks_only
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| field | string | optional | Filter changelog to a specific field name |
| actorId | string | optional | Filter changelog by actor user ID |
| dateFrom | string | optional | Filter changes after this timestamp |
| dateTo | string | optional | Filter changes before this timestamp |
| limit | integer | ✅ | Maximum number of changelog entries to return |
| cursor | string | optional | Cursor for pagination |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| type | Enum<'all' | 'comments_only' | 'changes_only' | 'tasks_only'> | ✅ | Filter by feed item category |
| limit | integer | ✅ | Maximum number of items to return |
| cursor | string | optional | Cursor for pagination (opaque string from previous response) |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| emoji | string | ✅ | Emoji character or shortcode to remove |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| query | string | ✅ | Full-text search query against feed body content |
| type | Enum<'all' | 'comments_only' | 'changes_only' | 'tasks_only'> | optional | Filter by feed item category |
| actorId | string | optional | Filter by actor user ID |
| dateFrom | string | optional | Filter feed items created after this timestamp |
| dateTo | string | optional | Filter feed items created before this timestamp |
| hasAttachments | boolean | optional | Filter for items with file attachments |
| pinnedOnly | boolean | optional | Return only pinned items |
| starredOnly | boolean | optional | Return only starred items |
| limit | integer | ✅ | Maximum number of items to return |
| cursor | string | optional | Cursor for pagination |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| events | Enum<'comment' | 'mention' | 'field_change' | 'task' | 'approval' | 'all'>[] | ✅ | Event types to subscribe to |
| channels | Enum<'in_app' | 'email' | 'push' | 'slack'>[] | ✅ | Notification delivery channels |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | The created or updated subscription |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | |
| Property | Type | Required | Description |
|---|
| object | string | ✅ | Object name (e.g., "account") |
| recordId | string | ✅ | Record ID |
| feedId | string | ✅ | Feed item ID |
| body | string | optional | Updated rich text body |
| mentions | Object[] | optional | Updated mentions |
| visibility | Enum<'public' | 'internal' | 'private'> | optional | Updated visibility |
| Property | Type | Required | Description |
|---|
| success | boolean | ✅ | Operation success status |
| error | Object | optional | Error details if success is false |
| meta | Object | optional | Response metadata |
| data | Object | ✅ | The updated feed item |