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.
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
- Settings → Integrations → Add new
- Pick the Generic HTTP tile
- 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/graphqlorhttps://hook.make.com/abc123 - Authentication — pick
none,bearer,basic, orheaderdepending on the provider's docs - Secret (if not
none) — paste the token / password / header value
- 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
- Drag
flow.http_requestinto any macro - Pick your Generic HTTP connection
- Pick the Send request action
- 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.
/itemsor 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.
| Field | Value |
|---|---|
| Method | POST |
| 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>.
| Field | Value |
|---|---|
| Method | POST |
| 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>.
| Field | Value |
|---|---|
| Method | POST |
| Path | /alert |
| Headers | {"Content-Type":"application/json"} |
| Body | {"severity":"critical","message":"{{ctx.session.name}} overran"} |
Limits and guardrails
| Limit | Value | Why |
|---|---|---|
| Request timeout | 10s default, 30s max | Avoid macro-step hangs |
| Body size cap | 1 MB | Prevents accidental upload of large blobs |
| Response cap | 1 MB | Truncated past that point, marked truncated: true |
| SSRF guard | Private IPs blocked | Can't target localhost, 10.*, 192.168.*, etc. — must be public |
| HTTP 4xx / 5xx | Captured 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.
Related
- 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