Update feed entry state
Update a single feed entry's state. Use this to mark notifications as seen, read, clicked, or archived.
Idempotent Semantics:
State changes are idempotent - calling the same update multiple times has no additional effect:
seen: true→ Setsseen_attimestamp if currently null (preserves original timestamp if already set)read: true→ Setsread_attimestamp if currently nullclicked: true→ Setsclicked_attimestamp if currently nullarchived: true→ Setsarchived_attimestamp if currently nullarchived: false→ Clearsarchived_at(unarchives the entry)
Invalid Operations:
These will return 409 Conflict:
seen: false- Cannot unmark as seenread: false- Cannot unmark as readclicked: false- Cannot unmark as clicked
Only archived can be set to false to unarchive an entry.
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)
Entry ID (UUID)
Request Body
application/json
State changes to apply
TypeScript Definitions
Use the request body type in TypeScript.
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/v1/channels/01HQXYZ123456789ABCDEFGHIJ/feed/entries/01HQXYZ123456789ABCDEFGHIJ" \ -H "Content-Type: application/json" \ -d '{ "read": true }'{
"actor": {
"avatar": "https://example.com/avatars/admin.jpg",
"email": "admin@example.com",
"external_id": "admin_001",
"first_name": "Admin",
"id": "01HQABC987654321ZYXWVUTSRQ",
"last_name": "User"
},
"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",
"notiflow_handle": "order-updates",
"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://notiflows.com/docs/api/errors#not_found-404"
}
}{
"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://notiflows.com/docs/api/errors#not_found-404"
}
}{
"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://notiflows.com/docs/api/errors#not_found-404"
}
}{
"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://notiflows.com/docs/api/errors#not_found-404"
}
}{
"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://notiflows.com/docs/api/errors#not_found-404"
}
}{
"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://notiflows.com/docs/api/errors#not_found-404"
}
}{
"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://notiflows.com/docs/api/errors#not_found-404"
}
}