notiflowsDocs
Feed

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 yet
  • seen: Entries that have been seen but not read
  • unread: Alias for unseen + seen (not read)
  • read: Entries that have been marked as read
  • archived: Entries that have been archived

Real-time updates: For real-time feed updates, use our JavaScript SDK which connects via WebSocket.

GET
/channels/{channel_id}/feed/entries

Authorization

ApiKeyAuth UserKeyAuth
x-notiflows-api-key<token>

Your project's public API key. Safe to include in client-side code. Starts with pk_.

In: header

x-notiflows-user-key<token>

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*string

Channel ID (UUID)

Query Parameters

status?string

Filter by status (unseen, seen, unread, read, archived)

archived?boolean

Include archived entries (default: false)

topic?string

Filter by topic name

created_after?string

Filter entries created after (ISO 8601)

created_before?string

Filter entries created before (ISO 8601)

limit?integer

Number of entries per page (default: 20, max: 100)

after?string

Cursor for forward pagination

before?string

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"
  }
}