AutomationFlowsData & Sheets › N8ncal · /reminders

N8ncal · /reminders

n8nCal · /reminders. Uses supabase. Webhook trigger; 9 nodes.

Webhook trigger★★★★☆ complexity9 nodesSupabase
Data & Sheets Trigger: Webhook Nodes: 9 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "n8nCal \u00b7 /reminders",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "n8ncal/reminders",
        "responseMode": "responseNode",
        "options": {
          "allowedOrigins": "*"
        }
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -700,
        0
      ],
      "id": "a67f0284-937b-49af-bc68-9553b575e919",
      "name": "Webhook \u00b7 /reminders"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "auth",
              "leftValue": "={{ $json.headers['x-n8ncal-token'] }}",
              "rightValue": "={{ $env.N8NCAL_TOKEN }}",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -480,
        0
      ],
      "id": "d2addedb-c16d-4a4d-a3ca-155f310e8131",
      "name": "Auth check"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n  \"error\": \"unauthorized\"\n}",
        "options": {
          "responseCode": 401
        }
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        -260,
        200
      ],
      "id": "9fb97591-0e08-4c3c-b6a9-94006ed46e5a",
      "name": "Respond 401"
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body || {};\nconst validStatus = ['pending', 'fired', 'done', 'cancelled'];\nconst status = validStatus.includes(body.status) ? body.status : 'pending';\nconst tenant = body.tenant_id || 'default';\nconst limit  = Math.min(Math.max(parseInt(body.limit) || 50, 1), 200);\n\nreturn [{ json: { status, tenant_id: tenant, limit } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -260,
        0
      ],
      "id": "cbfbc3ce-2d0c-420d-9fd2-cedb259d02fa",
      "name": "Parse filters"
    },
    {
      "parameters": {
        "operation": "getAll",
        "tableId": "n8ncal_reminders",
        "returnAll": false,
        "limit": "={{ $json.limit }}",
        "filters": {
          "conditions": [
            {
              "keyName": "status",
              "condition": "eq",
              "keyValue": "={{ $json.status }}"
            },
            {
              "keyName": "tenant_id",
              "condition": "eq",
              "keyValue": "={{ $json.tenant_id }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        -40,
        0
      ],
      "id": "1de60a01-afb3-43d5-b6d6-80678edaffef",
      "name": "Supabase \u00b7 select",
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Compact + sort. Frontend formats due_at with user's timezone.\nconst rows = items.map(i => i.json);\nrows.sort((a, b) => new Date(a.due_at) - new Date(b.due_at));\n\nreturn rows.map(r => ({\n  json: {\n    id: r.id,\n    text: r.text,\n    due_at: r.due_at,\n    priority: r.priority,\n    source: r.source,\n    status: r.status,\n    notify_channel: r.notify_channel,\n    created_at: r.created_at\n  }\n}));"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        180,
        0
      ],
      "id": "46039fa9-c3ed-4902-889f-62a1f71769f5",
      "name": "Compact & sort"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "reminders",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        400,
        0
      ],
      "id": "f7cd0261-1bc4-4142-92a5-e8dd7902bd6a",
      "name": "Roll up"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "rs",
              "name": "reminders",
              "value": "={{ $json.reminders }}",
              "type": "array"
            },
            {
              "id": "ts",
              "name": "ts",
              "value": "={{ $now.toISO() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        620,
        0
      ],
      "id": "8d97a3e2-86af-4877-9d2f-604f4739a9d5",
      "name": "Shape response"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ $json }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        840,
        0
      ],
      "id": "02ede653-6f9d-44d9-b6d4-8a63ca22f13a",
      "name": "Respond"
    }
  ],
  "connections": {
    "Webhook \u00b7 /reminders": {
      "main": [
        [
          {
            "node": "Auth check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Auth check": {
      "main": [
        [
          {
            "node": "Parse filters",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond 401",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse filters": {
      "main": [
        [
          {
            "node": "Supabase \u00b7 select",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Supabase \u00b7 select": {
      "main": [
        [
          {
            "node": "Compact & sort",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compact & sort": {
      "main": [
        [
          {
            "node": "Roll up",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Roll up": {
      "main": [
        [
          {
            "node": "Shape response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Shape response": {
      "main": [
        [
          {
            "node": "Respond",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    {
      "name": "n8nCal"
    }
  ]
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

n8nCal · /reminders. Uses supabase. Webhook trigger; 9 nodes.

Source: https://github.com/dasecure/n8ncal/blob/dd9a67e052fb7ba52c03770283ea1a95f0595fc2/workflows/09-reminders.json — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

webhook - simulador PDV (fluxo). Uses supabase. Webhook trigger; 55 nodes.

Supabase
Data & Sheets

This workflow automates raw materials inventory management for businesses, eliminating manual stock updates, delayed material issue approvals, and missed low stock alerts. It ensures real-time stock t

Google Sheets, Gmail, Supabase +1
Data & Sheets

Backend Erick. Uses supabase, n8n-nodes-evolution-api. Webhook trigger; 36 nodes.

Supabase, N8N Nodes Evolution Api
Data & Sheets

2. Refresh Pipedrive tokens. Uses stopAndError, stickyNote, supabase, httpRequest. Webhook trigger; 29 nodes.

Stop And Error, Supabase, HTTP Request
Data & Sheets

This workflow provides an OAuth 2.0 auth token refresh process for better control. Developers can utilize it as an alternative to n8n's built-in OAuth flow to achieve improved control and visibility.

Stop And Error, Supabase, HTTP Request