MCPInstall

pipefy-api-fallback

Use this skill when a toolkit operation fails AND the introspection skill could not resolve the problem. This is the last-resort fallback (Tier 3): call the Pipefy GraphQL API directly using curl or httpx, authenticating with the Service Account (OAuth2) or a Personal Access Token (PAT) available as env var. Follow the 3-tier resolution strategy before reaching this point.

Installs
684
Last 24h
+10
Trending rank
#8855
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/pipefy/ai-toolkit --skill pipefy-api-fallback
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads pipefy-api-fallback automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Pipefy API Fallback (Tier 3 — Last Resort)

Read the MCP reference or CLI reference for the surface you are using. Load only the relevant reference.

This skill activates only after Tiers 1 and 2 have failed. Call the Pipefy GraphQL API directly, bypassing the toolkit connection.

If a write reports failure, re-read the target before changing tiers or retrying. The mutation may already have applied; follow Ambiguous write failure.


3-tier resolution strategy (always follow in order)

  1. Try a dedicated operation (create_card, get_phase_cards, get_phase_allowed_move_targets, update_pipe, etc.). For card/phase seeding and inventory, see pipefy-pipes-and-cards — Seed pipe across phases.
  2. Use schema introspection and execute_graphql when a dedicated operation is unavailable or fails unexpectedly. See pipefy-introspection.
  3. Use direct HTTP only when the toolkit connection is unavailable or GraphQL execution fails with an infrastructure error.

Do not jump to Tier 3 after a single failure. Follow the tiers in order. Testing a new mutation belongs in Tier 2.


Authentication

Two options (use whichever is available in the environment). Prefer the Service Account when both exist.

To see which variables are set, list their names only, never their values:

env | cut -d= -f1 | grep '^PIPEFY_'

Do not run env, printenv, or echo on these variables to choose an option: that prints the secret into the conversation before the user agrees.

Before reading any PIPEFY_* variable, tell the user which variable you will read and that its value goes to app.pipefy.com in the Authorization header or the token request, and wait for a yes. Do not read it from a file the user did not name.

Option A — OAuth2 Client Credentials (preferred):

TOKEN=$(curl -s -X POST https://app.pipefy.com/oauth/token \
  -H "Content-Type: application/json" \
  -d "{\"grant_type\":\"client_credentials\",\"client_id\":\"$PIPEFY_SERVICE_ACCOUNT_CLIENT_ID\",\"client_secret\":\"$PIPEFY_SERVICE_ACCOUNT_CLIENT_SECRET\"}" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")

Option B — Personal Access Token (PAT):

TOKEN="$PIPEFY_PAT"   # or $PIPEFY_TOKEN

PATs are deprecated for new integrations but may still exist in the environment.

Token rules

  • The Bearer prefix is mandatory — Pipefy rejects requests without it.
  • Never expose PIPEFY_SERVICE_ACCOUNT_CLIENT_ID, PIPEFY_SERVICE_ACCOUNT_CLIENT_SECRET, PIPEFY_PAT, or PIPEFY_TOKEN in responses to the user or in logs.
  • Service Account tokens are reused while valid; only re-fetch on expiry (401).

Endpoints

PurposeURL
Queries, mutations, and introspectionhttps://app.pipefy.com/graphql
OAuth2 tokenhttps://app.pipefy.com/oauth/token

This one endpoint serves queries, mutations, and introspection of the public schema, and https://api.pipefy.com/graphql answers the same way. It is the endpoint the toolkit uses for the public schema (PIPEFY_BASE_URL plus /graphql). Portal tools and a few others use two more endpoints, /graphql/interfaces and /internal_api; see docs/mcp/tools/portal.md.


Execute a GraphQL query

curl -s -X POST https://app.pipefy.com/graphql \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ me { id name } }"}' | jq .

Execute a GraphQL mutation

curl -s -X POST https://app.pipefy.com/graphql \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation CreateCard($input: CreateCardInput!) { createCard(input: $input) { card { id } } }",
    "variables": {
      "input": {
        "pipe_id": 67890,
        "title": "Fallback Card"
      }
    }
  }' | jq .

Introspection via raw API

When you need to discover schema over direct HTTP, call the same endpoint:

# All queries and mutations
curl -s -X POST https://app.pipefy.com/graphql \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ __schema { queryType { fields { name description } } mutationType { fields { name description } } } }"}'

# Type details
curl -s -X POST https://app.pipefy.com/graphql \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ __type(name: \"CreateCardInput\") { inputFields { name description type { name kind ofType { name kind } } } } }"}'

Error code → cause

GraphQL errors, including syntax errors (GRAPHQL_PARSE_FAILED), return HTTP 200: check the errors array and its extensions.code, not the HTTP status code. An authentication failure returns HTTP 401, and a request body that is not valid JSON returns HTTP 500 with a plain-text page.

CodeLikely causeRecovery
HTTP 401, body {"errors": [{"title": "Unauthorized", ...}]}Authorization header missing or empty, or the token sent without the Bearer prefixFix the header: Authorization: Bearer $TOKEN, with a non-empty token.
HTTP 401, body {"error": "invalid_token", ...}Bearer token present but invalid or expiredRe-fetch the token (Option A).
PERMISSION_DENIEDService Account not a member of this pipe/table; Pipefy also answers this for a pipe or card ID that does not existVerify the ID; add the SA via invite_members or ask the user.
resource_not_foundID does not exist or SA cannot see itVerify ID; check pipe/table membership.
invalid_inputWrong argument name or typeRun introspect_type (Tier 2) to recheck the input shape.
undefinedFieldThe query selects a field the type does not haveRun introspect_type on the type and fix the selection.
INTERNAL_SERVER_ERRORAPI bug or unsupported payloadDo NOT retry the same payload. Try an alternative mutation or workaround.
missingRequiredInputObjectAttributeA required field is missing from the inputCompare the payload against __type(name: …InputType).
Ambiguous write failure (success: false, empty or unclear message)Mutation may already have applied (side effects on the server)Re-read before any retry — see Ambiguous write failure.

Ambiguous write failure (re-read before retry)

Write operations and execute_graphql can report failure even when the mutation already applied. Blind retry duplicates customer data (e.g. many cards created despite success: false).

  1. Do not immediately re-run the same create/mutation.
  2. Re-read first: get_cards / get_phase_cards_count / returned ids / cards_count on the pipe or phase you targeted. Prefer comparing to a count or id set you recorded before the write when available.
  3. Retry only if the re-read clearly shows the write did not land.
  4. If the re-read is inconclusive (no pre-write baseline, pagination truncates results, or counts cannot prove absence), stop — report the ambiguous failure and the re-read evidence to the user. Do not guess-retry.
  5. Hard stop — no client-side idempotency: CreateCardInput has no idempotency_key (only clientMutationId, which is not create-idempotency). Do not invent client-side keys or assume retries are safe. Re-read is the only safe path until the API adds real idempotency.

Known workarounds

Cross-pipe card creation

  • createAutomation with action: create_card + field_map can return INTERNAL_SERVER_ERROR for a cross-pipe target. Do not retry that payload unchanged.
  • For a one-time connected card, createCard with throughConnectors can create the card when a connector field has canCreateNewConnected: true.
  • createCard does not create an automation rule. If the user needs future cards created automatically, report that the one-time call does not meet that requirement.

Pipe listing shorter than pipesCount

  • pipesCount is the org-wide total; organization { pipes { ... } } and search_pipes return only the pipes the calling identity is a member of. A shorter listing, or an empty one, is expected behavior and not an error. Role does not widen it: a super_admin gets the same membership-scoped result. Detail and workarounds: docs/mcp/tools/organization.md.
  • organization { pipes(include_publics: true) } widens the listing with pipes that are public inside the org. It still normally returns fewer than pipesCount.
  • Service accounts hit this most often: an SA starts as a member of nothing.
  • Pipes created via API are automatically visible to the SA.
  • Pipes created in the UI require the SA to be added as an admin.
  • Workaround: get pipe IDs from the user once and query pipe(id: "...") directly.

invite_members accepts unknown emails silently

  • Pipefy mints a new user_id for typo addresses without rejecting the invite. Sanity-check email syntax before calling.

External resources (when raw API also fails)

Search for the exact error message + "Pipefy GraphQL", or the mutation name + "example Pipefy API".


Escalation to the user (absolute last resort)

Only after all 3 tiers and external resources have failed:

  1. State exactly what was tried (dedicated operation, introspection, raw API).
  2. Show the verbatim error response.
  3. Propose a concrete workaround (e.g., "create via the Pipefy UI, then continue via API with the resulting ID").
  4. Stop — do not loop.

Success criteria

  • The operation completes without an HTTP 4xx/5xx error.
  • The response contains a data key and errors is null or absent.

Failure modes

  • HTTP 401: header missing, empty, or without Bearer (body Unauthorized), or the token is invalid or expired (body invalid_token). Fix the header, or re-fetch the OAuth token (Option A).
  • GRAPHQL_PARSE_FAILED at HTTP 200: GraphQL syntax error. Validate the query string and escape quotes properly when embedding via shell.
  • HTTP 500: first check that the request body is valid JSON, because a malformed body also returns 500. If it is, treat it as a Pipefy API outage: check status.pipefy.com and retry later. Do not loop.
  • INTERNAL_SERVER_ERROR in errors array — do NOT retry the same payload; pick a different mutation path.
  • Ambiguous write failure — reported error with empty/unclear message after a create or other write: re-read counts/ids before retrying; never blind-retry creates (Ambiguous write failure).

Security notes

  • Never log or print tokens in plain text.
  • Prefer environment variables over inline credentials.
  • Use PIPEFY_TOKEN / PIPEFY_PAT only for personal/development use; use service-account credentials (PIPEFY_SERVICE_ACCOUNT_CLIENT_ID + PIPEFY_SERVICE_ACCOUNT_CLIENT_SECRET) for service accounts.

See also

  • pipefy-introspection — Tier 2: use execute_graphql and introspection tools before falling back to direct HTTP.

FAQ

What does the pipefy-api-fallback skill do?

Use this skill when a toolkit operation fails AND the introspection skill could not resolve the problem. This is the last-resort fallback (Tier 3): call the Pipefy GraphQL API directly using curl or httpx, authenticating with the Service Account (OAuth2) or a Personal Access Token (PAT) available as env var. Follow the 3-tier resolution strategy before reaching this point.

How do I install pipefy-api-fallback?

Run npx skills add https://github.com/pipefy/ai-toolkit --skill pipefy-api-fallback in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/pipefy-api-fallback/ (personal) or .claude/skills/pipefy-api-fallback/ (project).

Which AI agents can use pipefy-api-fallback?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is pipefy-api-fallback safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains pipefy-api-fallback?

It is published by pipefy in pipefy/ai-toolkit. It has 684 recorded installs.

More from pipefy/ai-toolkit

View all →

pipefy-observability

pipefy/ai-toolkit

Use this skill when the user wants to check AI agent logs, automation execution logs, org-level usage stats, AI credit consumption, or export automation job history.

DevOps & Cloud688 installs

pipefy-automations

pipefy/ai-toolkit

Use this skill when the user wants to create, read, update, or delete traditional automations (if/then rules) or AI automations (prompt-driven). For AI agents (conversational), see pipefy-ai-agents.

AI & Agents687 installs

pipefy-pipes-and-cards

pipefy/ai-toolkit

Use this skill when the user wants to read, create, update, or delete pipes, phases, phase fields, labels, cards, comments, or field conditions. Use the seed-pipe-across-phases workflow when populating empty phases for demos or QA.

Testing & QA685 installs

pipefy-portal-setup

pipefy/ai-toolkit

Use this skill when the user wants to list, create, or configure Pipefy portals (main hub, pages, page elements, sub-portals, publish/unpublish). Uses Interfaces and internalapi. Not for pipes/cards.

Backend & APIs684 installs

pipefy-introspection

pipefy/ai-toolkit

Use this skill when you need to discover GraphQL type shapes, mutation signatures, enum values, or execute arbitrary GraphQL as a fallback. This is the first fallback tier (Tier 2) when dedicated operations fail or don't exist for an operation.

Backend & APIs684 installs

pipefy-process-design

pipefy/ai-toolkit

Use this skill ONLY when the user explicitly asks for help designing or architecting a process ("help me design", "what's the best structure", "how do I organize this flow?"). For direct execution requests ("create a pipe for X", "build a reimbursement process", or any message with a detailed spec), skip this skill and execute directly using the domain skills (pipes-and-cards, automations, etc.).

Popular backend & apis skills

View category →

find-skills

vercel-labs/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

OfficialBackend & APIs4.1M installs

entra-app-registration

microsoft/azure-skills

Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.

OfficialBackend & APIs566.7K installs

This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).

Backend & APIs514.8K installs

embedded-captions

heygen-com/hyperframes

Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.

Backend & APIs453.3K installs

entra-agent-id

microsoft/azure-skills

Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).

OfficialBackend & APIs336.6K installs

neon

neondatabase/agent-skills

Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.

Backend & APIs237.1K installs