Skip to main content
POST
/
v1
/
admin
/
notifications
/
send
Admin Notifications
curl --request POST \
  --url https://api.glider.fi/v1/admin/notifications/send \
  --header 'X-API-KEY: <api-key>'
These endpoints let internal tools request Novu workflow sends without owning audience logic. Retool passes a workflowId, a bounded JSON payload, and a target; platform-api resolves canonical Glider user IDs and reconciles Novu topics before delivery. Manual Novu-managed topics are allowlisted by the API but their membership is maintained outside platform-api.

Auth

All routes are protected by a scoped notifications admin token:
  • Authorization: Bearer <RETOOL_NOTIFICATIONS_ADMIN_TOKEN>
  • Content-Type: application/json for POST routes
ADMIN_AUTH_SECRET_TOKEN is also accepted for internal engineer/admin usage, but Retool should use the scoped notifications token.

List Topics

GET /v1/admin/notifications/topics Returns the approved system topic catalog for Retool dropdowns:
{
  "topics": [
    {
      "key": "glider:users:depositors:funded",
      "label": "Current funded depositors",
      "description": "Users who have deposited and currently have a positive portfolio position.",
      "exclusive": true
    },
    {
      "key": "custom:users:power-users",
      "label": "Power users",
      "description": "Manual Novu-managed list of power users. Membership is maintained outside the API.",
      "exclusive": false
    }
  ]
}

Send Notification

POST /v1/admin/notifications/send
{
  "workflowId": "platform_announcement",
  "payload": {
    "title": "New feature",
    "body": "Try it today"
  },
  "idempotencyKey": "campaign-2026-04-25",
  "target": {
    "type": "topic",
    "topicKey": "glider:users:depositors:funded"
  }
}
Targets:
  • { "type": "userIds", "userIds": ["usr_123"] }
  • { "type": "topic", "topicKey": "glider:users:depositors:funded" }
  • { "type": "topic", "topicKey": "custom:users:power-users" }
For DB-resolved glider:users:* topic sends, platform-api resolves the current DB audience, ensures those canonical user IDs exist as Novu subscribers, updates topic membership, and only then triggers the Novu workflow to the topic. For manual custom:* topic sends, platform-api skips membership reconciliation and only triggers the Novu workflow to the existing topic subscribers.

Reconcile Topic

POST /v1/admin/notifications/topics/:topicKey/reconcile
{
  "dryRun": true
}
Rebuilds or previews a system topic from Glider DB. dryRun: true resolves and diffs membership without mutating Novu subscriptions or triggering a workflow. Manual topics are accepted by this endpoint but do not reconcile membership.