Skip to main content
PATCH
/
api
/
v1
/
notifications
/
{notification_id}
Mark Notification Read
curl --request PATCH \
  --url https://roughy-api-staging.fly.dev/api/v1/notifications/{notification_id} \
  --header 'Authorization: Bearer <token>'
{
  "created_at": "2026-05-02T08:55:11.452000Z",
  "id": "019de7f7-9852-7461-b340-80de9b630697",
  "payload": {
    "credits_granted": 5000,
    "current_period_end": "2026-06-02T00:00:00Z",
    "plan_name": "Starter"
  },
  "type": "subscription_activated"
}

Documentation Index

Fetch the complete documentation index at: https://docs.roughy.ai/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Either your Supabase session JWT (UI flows) or an API key minted via POST /api-keys (programmatic flows). Pass it as Authorization: Bearer <token>. The server inspects the token format and routes to JWT or API-key verification automatically.

Path Parameters

notification_id
string<uuid>
required

Response

Successful Response

Single notification in the list response.

payload is opaque (raw dict) at this surface -- typed payload schemas (like DataExportPayload) are kept for the per-flow response models. The list endpoint serves every type uniformly so the bell-icon UI can render a generic feed without a type-by-type discriminator.

id
string<uuid>
required
type
enum<string>
required

Concrete notification kinds.

Add-only. Per ADR 0006, values may be deprecated (no longer produced) but never removed: notification_preferences.type references them as Postgres enum values, and the static mandatory / default-channel maps in app/services/notification_preferences.py key off these names. Removing one would orphan rows + silently change behaviour for any future type with the same name.

Adding a value: extend this enum AND ship an ALTER TYPE ... ADD VALUE migration in the same PR. Then update app/services/notification_preferences.py to map it to a category

  • assign mandatory/default flags.
Available options:
pipeline_completed,
pipeline_failed,
credits_low,
credits_exhausted,
subscription_activated,
subscription_renewed,
subscription_payment_failed,
security_new_signin,
data_export_ready
payload
Payload · object
required
created_at
string<date-time>
required
read_at
string<date-time> | null
required