ingestlayer/recipes

AI agent → Slack

Agents — Claude Code, Cursor, your own app — call a pipeline by id like a named function, authenticated with a per-agent bearer token scoped to an explicit pipeline allowlist. The request body is the event; with ?wait=true the agent gets the post-pipeline payload back to use as a tool result.

01source

sourceagentAI agent
matchcompany.lookup

02pipeline · 3 steps

  • 01MUTredact.piistrip secrets from prompts + outputs
  • 02ENRclassifylabel calls by risk
  • 03ENRsummarizetrace → one-line outcome

03destinations · 1

  • toslackSlack
    channel#alerts

how events arrive

  1. 01

    create an agent source

    Add an AI-agent source; ingestlayer issues a bearer token bound to an explicit allowlist of pipeline ids the agent may invoke — nothing else.

  2. 02

    invoke a pipeline

    From the agent, POST the event payload to https://in.ingestlayer.com/v1/agent/invoke/<pipelineId> with the bearer token. The body is the event; anything goes — the downstream actions handle the shape.

  3. 03

    fire-and-forget or wait

    By default the pipeline runs and its destinations fire. Add ?wait=true to also get a poll URL that returns the post-actions payload — the agent reads the enriched, redacted result and uses it as a tool response.

from ai agentdelivered
POST /v1/agent/invoke/pl_enrich_lead?wait=true HTTP/1.1
Host: in.ingestlayer.com
Authorization: Bearer ag_live_8fa2…
Content-Type: application/json

{
  "type":  "company.lookup",
  "email": "ada@acme.com"
}

route it to Slack

Post to any channel in your workspace. Connect once with OAuth, pick the channel per pipeline.

  1. 01

    connect your workspace

    Authorize the ingestlayer Slack app over OAuth from the destinations page. We hold only a channel-scoped bot token, in-region, in the same KMS as your other credentials.

  2. 02

    pick a channel

    Choose any public channel, or invite the bot to a private one. The channel is set per pipeline, so different events can land in different places.

  3. 03

    map the message

    Reference event fields with $event.* in the message template. The default renders a titled block with the event name and its key fields.

in slackdelivered
┌─ #alerts ──────────────────────────────┐
│  ingestlayer  APP                       │
│  user.signed_up                         │
│  email   ada@acme.com                   │
│  plan    pro                            │
│  source  marketing-site                 │
└─────────────────────────────────────────┘

notes

questions

How does an agent send data in?
It calls a pipeline by id like a function: POST the event to /v1/agent/invoke/<pipelineId> with the agent's bearer token. The request body is the event payload.
Can the agent use the processed result?
Yes — invoke with ?wait=true and ingestlayer returns a poll URL holding the post-actions payload (enriched, classified, redacted), so the agent can use it as a tool result. The pipeline's normal destinations still fire.
How do I keep prompt data out of chat?
redact.pii masks sensitive fields per destination, so a warehouse copy can keep the full trace while the Slack message shows only a clean summary.
build this pipelineor read the quickstart →

AI agent, routed elsewhere

other sources, into Slack