List feed entries
Retrieve the user's notification feed entries for a specific channel.
Returns a paginated list of feed entries with metadata including unread/unseen counts.
Status filtering:
unseen: Entries that haven't been seen yetseen: Entries that have been seen but not readunread: Alias for unseen + seen (not read)read: Entries that have been marked as readarchived: Entries that have been archived
Real-time updates: For real-time feed updates, use our JavaScript SDK which connects via WebSocket.
Authorization
ApiKeyAuth UserKeyAuth Your project's public API key. Safe to include in client-side code. Starts with pk_.
In: header
JWT token identifying the current user. Must be signed with your Application Signing Key (RS256).
Required claims:
sub: User's external_id (required)exp: Expiration timestamp (recommended)iat: Issued at timestamp (recommended)
Development Mode: Use x-notiflows-user-id header with the user's external_id instead (insecure, testing only).
In: header
Path Parameters
Channel ID (UUID)
Query Parameters
Filter by status (unseen, seen, unread, read, archived)
Include archived entries (default: false)
Filter by topic name
Filter entries created after (ISO 8601)
Filter entries created before (ISO 8601)
Number of entries per page (default: 20, max: 100)
Cursor for forward pagination
Cursor for backward pagination
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.notiflows.com/user/channels/01HQXYZ123456789ABCDEFGHIJ/feed/entries?status=unread&topic=order-updates&created_after=2024-01-01T00%3A00%3A00Z"{
"items": [
{
"actor": {
"avatar": "https://example.com/avatars/admin.jpg",
"external_id": "admin_001",
"first_name": "Admin",
"id": "01HQABC987654321ZYXWVUTSRQ"
},
"archived_at": null,
"clicked_at": null,
"created_at": "2024-01-15T10:30:00Z",
"data": {
"action_url": "https://example.com/orders/12345",
"body": "Your order #12345 has shipped!",
"title": "Order Shipped"
},
"id": "01HQXYZ123456789ABCDEFGHIJ",
"read_at": null,
"seen_at": null,
"sent_at": "2024-01-15T10:30:00Z",
"status": "unseen",
"topic": "order-updates"
}
],
"metadata": {
"total_unread": 12,
"total_unseen": 5
},
"page": {
"after": "eyJpZCI6IjAxSFFYWVoxMjM0NTY3ODlBQkNERUZHSElKIn0=",
"before": null,
"has_more_after": true,
"has_more_before": false,
"limit": 20
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}{
"error": {
"code": "not_found",
"details": {
"allowed_statuses": [
"string"
],
"allowed_transitions": [
"string"
],
"auth": "api_key",
"current_status": "string",
"fields": [
{
"field": "email",
"message": "can't be blank",
"reason": "required"
}
],
"id": "string",
"idempotency_key": "string",
"limit": 0,
"param": "string",
"reason": "string",
"required_scope": "string",
"resource": "string",
"retry_after": 0,
"window": "string"
},
"message": "User not found",
"request_id": "req_abc123",
"status": 404,
"type": "https://docs.notiflows.com/errors/not_found"
}
}