Documentation

Generic HTTP + Tevyr

The fallback template for any REST API that doesn't yet have a dedicated Tevyr integration. Set the method, headers, and body yourself — Tevyr handles the request firing, SSRF protection, response capture, and interpolation. Covers Make.com, n8n, IFTTT, internal services, and anything else that listens for HTTP.

When to use it

If your provider already has a first-class template (Slack, Notion, Discord, OpenAI, etc.), use that — it gives you per-action forms, validated fields, and structured error messages. Reach for Generic HTTP only when no dedicated template fits, or when you need full control over a request shape.

What you can do

Post to any webhook URL

Make.com, n8n, IFTTT, Pipedream, internal alerting endpoints — anything that listens for HTTP POSTs. One template, infinite providers.

PATCH / PUT / DELETE arbitrary REST APIs

Update a Linear issue, close a Jira ticket, mark a CRM contact as 'spoken to'. Full method control means full API access.

GET state from an external system

Pull a value from a 3rd-party API mid-macro and feed it into flow.branch_if. Tevyr captures the response body up to 1 MB.

Bridge to providers with no template yet

If you adopt a tool we haven't built a dedicated template for, Generic HTTP keeps you unblocked. Tell us — recurring requests get promoted to first-class templates.

Prerequisites

  • Tevyr Starter plan or above — Free plan ships 0 integration connections
  • A target URL that's reachable from the public internet
  • Auth credentials if the API needs them (bearer token, basic auth, or a custom header)

One-time setup

1. Add the connection

  1. Settings → Integrations → Add new
  2. Pick the Generic HTTP tile
  3. Fill the form:
    • Name — friendly label (e.g. "Make.com webhook", "Linear API")
    • Base URL — the API's root, e.g. https://api.linear.app/graphql or https://hook.make.com/abc123
    • Authentication — pick none, bearer, basic, or header depending on the provider's docs
    • Secret (if not none) — paste the token / password / header value
  4. Click Save, then Test — Tevyr makes a GET to the base URL with the auth applied and surfaces whatever the server responds

2. Use the connection in a macro

  1. Drag flow.http_request into any macro
  2. Pick your Generic HTTP connection
  3. Pick the Send request action
  4. Configure the request per-step (these fields live on the macro step, not the connection):
    • Method — GET / POST / PUT / PATCH / DELETE
    • Path — appended to the base URL, e.g. /items or leave blank for the root
    • Headers — JSON object, e.g. {"Content-Type": "application/json", "X-Foo": "{{ctx.session.name}}"}
    • Body — raw string; JSON is recommended. Supports {{ctx.*}} interpolation throughout

Recipes

Recipe 1 — Post to a Make.com webhook

Connection base URL: https://hook.make.com/abc123.

FieldValue
MethodPOST
Path(blank)
Headers{"Content-Type": "application/json"}
Body{"event":"session_started","session":"{{ctx.session.name}}"}

Recipe 2 — PATCH a Linear issue on session end

Connection base URL: https://api.linear.app/graphql, auth: bearer <linear-api-key>.

FieldValue
MethodPOST
Path(blank — GraphQL endpoint is the root)
Headers{"Content-Type":"application/json"}
Body{"query":"mutation { issueUpdate(id: \"ABC-123\", input: { stateId: \"done-state-id\" }) { success } }"}

Recipe 3 — Call an internal alerting endpoint with a shared secret header

Connection auth: header, secret value: X-Internal-Secret: <your shared secret>.

FieldValue
MethodPOST
Path/alert
Headers{"Content-Type":"application/json"}
Body{"severity":"critical","message":"{{ctx.session.name}} overran"}

Limits and guardrails

LimitValueWhy
Request timeout10s default, 30s maxAvoid macro-step hangs
Body size cap1 MBPrevents accidental upload of large blobs
Response cap1 MBTruncated past that point, marked truncated: true
SSRF guardPrivate IPs blockedCan't target localhost, 10.*, 192.168.*, etc. — must be public
HTTP 4xx / 5xxCaptured as successful step (status surfaced)Branch on status in flow.branch_if

Troubleshooting

SSRF_BLOCKED validation error

Tevyr blocks requests to private IPs (RFC 1918), localhost, and link-local addresses. Expose the target via a Cloudflare Tunnel, Tailscale Funnel, ngrok, or a public reverse proxy.

401 with bearer auth set

The token is expired or the header format is wrong. The bearer auth type sends Authorization: Bearer <token> — if your provider uses Authorization: Token <token> instead, switch to header auth and set the secret to Authorization: Token <token> literally.

Response captured as truncated: true

You hit the 1 MB response cap. Pick a more specific endpoint that returns less data, or use pagination params if the provider supports them.

Body interpolation comes out as the literal placeholder string

Check the resolved body in the macro fire log (Step inspector → expand the step). If {{ctx.session.name}} came through verbatim, the macro fired without a session context — confirm the trigger is on_session_* rather than a manual fire.

Context variables

URL, header, and body fields all support {{ctx.*}} interpolation — Tevyr resolves them at fire time. See the full context-variable reference in the Macros guide. Common ones: {{ctx.event.title}}, {{ctx.session.title}}, {{ctx.session.speaker_name}}, {{ctx.timer.remaining_seconds}}, {{ctx.now.iso}}.

Triggered by webhook events

Generic HTTP can be fired automatically from any webhook event. When creating a webhook, pick Integration mode and select your Generic HTTP connection — Tevyr fills the body with {{ctx.*}} data from the event.

  • Macros — wrap a Generic HTTP call in retry/branch logic via the macro builder
  • Integrations overview — see if there's a dedicated template before reaching for this one
  • Webhooks — the inverse direction: Tevyr → 3rd-party listeners via Tevyr's built-in webhook engine
  • Zapier guide — Zapier-specific shortcuts that build on the generic HTTP pattern