Skip to main content
skill CX Codex

pipefy-members-email-webhooks — Claude Code skill: members, email

A skill that lets your agent handle Pipefy pipe membership, card inbox email and webhooks without leaving the chat.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add pipefy/ai-toolkit --skill pipefy-members-email-webhooks -a claude-code
Open on GitHub

What pipefy-members-email-webhooks does

The skill covers three areas of Pipefy at once: pipe membership, card inbox email and webhooks. The agent can invite users by email with a role, change a member's role, attach a service account to a pipe and remove members. The service-account part matters for iPaaS setups: an automation running under a service account needs membership in the target pipe, otherwise pipe-scoped calls fail with a permission error while the flow still looks configured. Worth checking membership before you debug anything else.

Sending mail is a two-step operation. The first call sends nothing — it returns the recipients, subject and body plus a confirmation_token. You show that preview to the user, get approval, then repeat the call with confirm=true and the same token. A token covers one message, so a loop over several cards needs a confirmation per email. On the CLI, a send without --yes prints the email and exits with code 2.

Email templates are UI-only. There is no API, MCP or CLI path to create, edit or delete one, so a template has to exist before a flow can send with it — put the manual Pipefy UI step in your plan. Member removal and webhook deletion are destructive and deserve their own approval. One more thing: get_webhooks returns header values unmasked, and those usually hold authorization tokens, so name only the header in a reply.

What it helps with

  • invite several users to a pipe with different roles
  • attach a service account to a pipe for an iPaaS flow
  • send a card inbox email with a preview before it goes out
  • read received and sent mail on a card
  • register or update a pipe webhook

Example prompts for the agent

  • list the members of pipe 67890 and invite [email protected] as member
  • draft a card inbox email from card 12345 to [email protected] and show me the preview
  • show the webhooks on pipe 67890

How to install pipefy-members-email-webhooks

1Skills CLI (Vercel)

npx skills add pipefy/ai-toolkit --skill pipefy-members-email-webhooks -a claude-code

2Manually: put the files in place

~/.claude/skills/pipefy-members-email-webhooks/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/pipefy-members-email-webhooks/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about pipefy-members-email-webhooks

How do I install pipefy-members-email-webhooks in Claude?

Run npx skills add pipefy/ai-toolkit --skill pipefy-members-email-webhooks -a claude-code. The skill lands at ~/.claude/skills/pipefy-members-email-webhooks/SKILL.md.

What does pipefy-members-email-webhooks do?

It manages Pipefy pipe membership, sends and reads card inbox email, and handles webhooks. Every send goes through a preview that needs confirmation.

Can I create an email template with this skill?

No. Creating, editing and deleting templates happens only in the Pipefy UI — the GraphQL schema has no template mutations. A template must exist before a flow can use it.

Source text

SKILL.md · Apache-2.0
---
name: pipefy-members-email-webhooks
description: >
  Use this skill when the user wants to manage pipe membership, send or read
  card inbox emails, use email templates, or manage webhooks.
tags: [pipefy, members, email, webhooks, inbox]
---

# Members, Email & Webhooks

MCP clients: read [references/mcp.md](references/mcp.md). CLI users: read [references/cli.md](references/cli.md). Examples below describe shared operation arguments.

Manage pipe membership, send emails from card inboxes, read inbox replies, and manage webhooks.

---

## Member management

| Operation | Read-only | Purpose |
| ------------ | ----------- | --------- |
| `invite_members` | No | Invite one or more users by email + role. |
| `add_service_account_to_pipe` | No | Attach an existing org **service account** to a pipe by email + role (iPaaS setup). Check membership afterwards. |
| `remove_member_from_pipe` | No | **Destructive; review and approve first.** Check afterwards: org-level permissions can override pipe removal. |
| `set_role` | No | Change a member's pipe role (`member_id` = user id). |

List existing members with `get_pipe_members` from `pipefy-pipes-and-cards`. Id forms: [`docs/mcp/tools/identifiers.md#members-email-webhooks`](https://github.com/pipefy/ai-toolkit/blob/main/docs/mcp/tools/identifiers.md#members-email-webhooks).

### Steps — invite members

1. **Check existing members:**

   Operation: `get_pipe_members(pipe_id=67890)`

2. **Invite new members:**

   Operation: `invite_members(pipe_id=67890, members='[{"email":"[email protected]","role_name":"member"},{"email":"[email protected]","role_name":"admin"}]')`

   > Before inviting **external emails** (domain different from the org's known domains), warn the user that this is an external invitation and confirm before proceeding.

   > Before granting **admin role**, confirm with the user — admin is the highest pipe-level role.

### Steps — add a service account to a pipe (iPaaS setup)

When setting up an iPaaS (Advanced Automations) flow that runs under a **service account**, the account must be a member of the target pipe, or pipe-scoped calls under its identity fail with a permission error even though the flow looks configured.

1. **Get the service account's email.** Either create one with `create_service_account(organization_uuid, name, role)` — which returns the account's email plus its OAuth2 client secret and token endpoint **once** (store them immediately) — or take the email from your organization's service-account settings. A freshly created account has no pipe access until this step. The pipe role defaults to `admin` (a service account running automations usually needs full pipe access); pass a narrower role only when you deliberately want to limit it.

   > One-step alternative: `create_service_account(organization_uuid, name, role, pipe_ids=[...])` provisions the account **and** adds it to the given pipes in one call, returning a `pipe_memberships` summary. Use it when you already know the target pipes.

2. **Attach it** (when not using the `pipe_ids` shortcut above):

   Operation: `add_service_account_to_pipe(pipe_id=67890, [email protected])` (role defaults to `admin`)

   This attaches an existing service account — create one first with `create_service_account` if needed. Delete a throwaway account after approval when done. See [docs/mcp/tools/service-accounts.md](https://github.com/pipefy/ai-toolkit/blob/main/docs/mcp/tools/service-accounts.md).

---

## Email (card inbox)

| Operation | Read-only | Purpose |
| ------------ | ----------- | --------- |
| `get_card_inbox_emails` | Yes | Read emails in a card's inbox. |
| `send_inbox_email` | No | Send an email from a card inbox. Two-step: preview, then confirm. |
| `get_email_templates` | Yes | List templates for a pipe or table (`repo_id` numeric). |
| `send_email_with_template` | No | Send using a template (`email_template_id` from that list). Two-step: preview, then confirm. |

> **Confirm every send.** Both send operations deliver mail outside Pipefy, often to external addresses, and a sent email cannot be recalled. The first call sends nothing: it returns the message under `email` (`to`, `subject`, `body`, `from_`, and `cc` / `bcc` under `extra` when set) with a `confirmation_token`. Show the user the recipients, the subject and the body from that preview; for `send_email_with_template`, also name the template. The preview is the template already resolved for the card, so it shows the real recipients even when the template's `toEmail` is a `{{...}}` placeholder. After the user approves, repeat the same call with `confirm=true` and that `confirmation_token`. The token covers that one message: changing any argument, or a card edit that changes what the template resolves to, returns a fresh preview instead of sending. The template's `ccEmail` / `bccEmail` are not sent: to copy someone, pass `cc` / `bcc` in the send call. One confirmation covers one send: a request covering several cards still needs a confirmation per email, never one approval for a loop. The token stays valid for its TTL, so repeating the confirmed call sends the email again. If step 2 errors or times out, list the card's sent mail with `get_card_inbox_emails(email_type='sent')` before retrying, and never blind-retry a send. On the CLI, a send without `--yes` prints the email and exits 2; add `--yes` only after approval.

> **Templates are UI-only.** Creating, editing and deleting an email template has no API, MCP or CLI path: the GraphQL schema has no template CRUD mutation. The template must already exist before a flow can send with it. When the process needs a new or changed template, put the manual Pipefy UI step in the plan you give the user instead of promising an end-to-end email flow.

### Steps — send a card inbox email

1. **Get the card's inbox emails** (see what has been received):

   Operation: `get_card_inbox_emails(card_id=12345)`

2. **Preview the reply** (sends nothing):

   Operation: `send_inbox_email(card_id=12345, to=["[email protected]"], from_="[email protected]", subject="Your request is in progress", body="Hi, we are processing your request.")`

   `to` is a list of addresses, and `from_` (the sender address) is required. Show the user the returned `email` and wait for their approval.

3. **Send the reply** (only after approval): repeat the same call with `confirm=true` and the `confirmation_token` from step 2.

---

## Webhooks

| Operation | Read-only | Purpose |
| ------------ | ----------- | --------- |
| `get_webhooks` | Yes | List all webhooks for a pipe. |
| `create_webhook` | No | Register a new webhook endpoint. |
| `update_webhook` | No | Change URL, headers, or events. |
| `delete_webhook` | No | **Destructive; review and approve first.** |

> **Header values are secrets.** `get_webhooks` returns each webhook's `headers` unmasked, and they usually hold authorization tokens or API keys. In a reply, name only the header keys (for example `Authorization`, `X-Api-Key`), never their values, even when the user asks for them. A lost token comes back from the system that issued it; to replace it, set a new value with `update_webhook`. `update_webhook` replaces the whole `headers` object, so send every header from `get_webhooks` and change only the lost one, or the others are deleted. An update that leaves `headers` out deletes them all, so a change to only the URL, name or events must resend the headers too.

### Steps — create a webhook

1. **List existing webhooks:**

   Operation: `get_webhooks(pipe_id=67890)`

2. **Create the webhook:**

   Operation: `create_webhook(pipe_id=67890, url="https://your-server.com/pipefy", actions='["card.create","card.done"]')`

---

## Success criteria

- Invited members appear in `get_pipe_members`.
- Sent emails show in the card's inbox thread.
- Created webhooks receive test payloads from Pipefy on the configured events.

## Failure modes

- **`invite_members` fails with "user not found":** verify the email address is correct.
- **`send_inbox_email` fails:** the card must have an inbox enabled in the pipe settings.
- **Webhook never fires:** verify the pipe events match the configured `actions` list; check that the endpoint URL is publicly reachable (not localhost).
- **Deletion:** review the affected webhook or member and obtain approval before removal.

## See also

- `pipefy-pipes-and-cards` — create the pipe and cards before managing membership.
- `pipefy-observability` — monitor email and webhook delivery logs.
- `pipefy-ipaas` — when a flow's service account needs pipe membership.

© pipefy · Apache-2.0 · pipefy/ai-toolkit

Similar skills

All skills for Automation and no-code: n8n, Zapier, Make →

From the same set8

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor