Notumation
Building Flows

Webhooks

Trigger flows from external services and call external APIs.

Incoming Webhooks

When you select Webhook as your flow’s trigger, Notumation generates two unique URLs for your flow:

  • POST URL — for sending data from external services
  • GET URL — a clickable link you can embed anywhere

Both URLs are displayed in the trigger configuration panel. Copy them and use them in your external services.

POST Webhooks

Send a JSON body to the POST URL to trigger the flow. The payload is available as {{trigger.body}} in all subsequent steps.

Example: a GitHub Actions workflow sends a POST request when a deployment finishes:

{
  "repo": "my-app",
  "status": "success",
  "commit": "abc123"
}

Inside your flow, reference {{trigger.body.repo}}, {{trigger.body.status}}, and {{trigger.body.commit}} to use the data.

The POST URL expects a Content-Type: application/json header. Requests without it will still trigger the flow, but the body will not be parsed into fields.

GET Webhooks

The GET URL triggers the flow when visited — no request body is sent. Use it for:

  • Notion buttons — paste the URL as a bookmark or link in any Notion page
  • Email links — embed as a clickable link in email templates
  • Slack messages — share the link so teammates can trigger flows on demand
  • Browser bookmarks — save it as a bookmark for one-click execution

GET webhooks do not carry data, so {{trigger.body}} will be empty. Use stored variables or hardcoded values in the flow instead.

HTTP Request Action (Outgoing)

The Call API action sends HTTP requests from your flow to any external service.

Configuration

  • Method: GET, POST, PUT, PATCH, or DELETE
  • URL: the endpoint to call (supports template variables, e.g., {{var.SLACK_WEBHOOK_URL}})
  • Headers: key-value pairs (e.g., Authorization: Bearer {{var.API_KEY}})
  • Body: JSON content for POST/PUT/PATCH requests (supports template variables)

Reading the Response

Set the Save result as field to store the response. Access it in later steps:

  • {{savedName.status}} — the HTTP status code (e.g., 200)
  • {{savedName.body}} — the parsed JSON response body
  • {{savedName.body.fieldName}} — a specific field from the response

Timeout and Errors

Each HTTP request has a 30-second timeout. If the external service does not respond in time, the step fails and logs a timeout error. You can add a condition on the next step to check {{savedName.status}} and handle failures gracefully.

Example: Stripe Payment Flow

Here is a complete flow using both incoming and outgoing webhooks:

  1. Trigger: Webhook (POST) — receives a Stripe payment event with {{trigger.body.customer_email}}
  2. Query Database: Search the Customers database where Email equals {{trigger.body.customer_email}}. Save as customer.
  3. Update Page: Set {{customer.page_id}} Payment Status to “Paid”
  4. Call API: POST to {{var.SLACK_WEBHOOK_URL}} with body {"text": "Payment received from {{customer.Name}}"}

This flow connects Stripe, your Notion database, and Slack — all without writing code.