Batch update feed entries
Update multiple feed entries' state in a single request. Useful for "mark all as read" functionality.
Idempotent Semantics:
Same as single entry update - timestamps are only set if currently null:
seen: true→ Setsseen_atif nullread: true→ Setsread_atif nullclicked: true→ Setsclicked_atif nullarchived: true→ Setsarchived_atif nullarchived: false→ Clearsarchived_at
Invalid Operations:
Returns 409 Conflict for:
seen: false,read: false,clicked: false
Partial Success:
All entries in the request are updated atomically. If any entry fails validation, the entire request fails and no entries are updated.
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)
Request Body
application/json
Batch update request with entry IDs and state changes
List of entry IDs to update
1 <= itemsState changes to apply to all specified entries
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://api.notiflows.com/user/channels/01HQXYZ123456789ABCDEFGHIJ/feed/entries" \ -H "Content-Type: application/json" \ -d '{ "entry_ids": [ "01HQXYZ123456789ABCDEFGHIJ", "01HQABC987654321ZYXWVUTSRQ" ], "set": { "read": true } }'[
{
"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"
}
]{
"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"
}
}{
"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"
}
}