From make-skills
Builds reusable Make.com API shells for SaaS data retrieval (email, CRM, tickets) by discovering app modules, resolving connections, setting scenario interfaces, and executing as transport.
npx claudepluginhub integromat/make-skills --plugin make-skillsThis skill uses the workspace's default tool permissions.
Use this skill for one specific workflow family:
Implements Playwright E2E testing patterns: Page Object Model, test organization, configuration, reporters, artifacts, and CI/CD integration for stable suites.
Guides Next.js 16+ Turbopack for faster dev via incremental bundling, FS caching, and HMR; covers webpack comparison, bundle analysis, and production builds.
Discovers and evaluates Laravel packages via LaraPlugins.io MCP. Searches by keyword/feature, filters by health score, Laravel/PHP compatibility; fetches details, metrics, and version history.
Use this skill for one specific workflow family:
This skill is primarily about provisioning and shell construction. Treat business retrieval as a second phase that starts only after the connection is ready and the shell has been validated against current workspace metadata.
The generic shell described here is an API transport wrapper, not business logic. It should behave like a reusable API endpoint for any SaaS app that Make can front, including email, CRM, ticketing, support, marketing, or task systems.
Read the file that matches the current task:
| Task | Reference |
|---|---|
| Discover the app, module, and connection type layers | Discovery and Shells |
| Create, inspect, or resolve a credential request | Connection Requests |
| Choose and execute the post-connection retrieval path | Retrieval Execution |
| Sanitize examples and prepare a public shareable version | Sanitization and Sharing |
| Start from a generic blueprint template | Example shell blueprint |
When a fresh agent gets a request such as "get my unread emails", "pull my open CRM leads", or "fetch my Jira tickets", the default operating sequence is:
GET /api/v2/imt/apps?organizationId=ORG_ID&teamId=TEAM_ID&scoredSearch=true.GET /api/v2/imt/apps/{appName}/{version} and record the exact API-call module slug and both connection type layers.The agent should not jump straight from "user wants SaaS data" to "create a new connection" or "call a direct SDK" without walking this sequence.
Before provisioning or retrieval, explicitly resolve these inputs:
If one of those items is missing and cannot be discovered safely, stop and ask only for that exact missing item.
https://us1.make.com and keep placeholders generic. Do not mention we.make.com in public examples unless the current user explicitly provides or requests that zone. Valid zones can be eu1, eu2, us1, us2, or we, and if the user provides a custom zone or BASE_URL, accept it.scenario-service:ReturnData with ExpectDataAny, the final mapper must return the app module response body as data: {{3.body}}.{{3}} or {{3.data}} just because the full bundle looks tempting. The shell is meant to return the API response body, not the entire Make module bundle.body contains the intended payload or error object — not to redefine the generic shell contract.GET /api/v2/users/me and GET /api/v2/imt/apps/... can succeed on multiple zones, while GET /api/v2/connections?teamId=... or scenario endpoints on the wrong zone can fail with 403 Permission denied./api/v2/connections endpoint, filter with type=... or type[]=.... Do not assume query parameters such as accountName=... are honored just because an MCP tool uses accountName terminology.PUT, PATCH, or DELETE, warn explicitly before execution. Treat those methods as mutating live SaaS operations, not passive retrieval.StartSubscenario.metadata.interface is enough for scenario runs. After creating or updating an on-demand shell, explicitly set the scenario-level interface with /api/v2/scenarios/{scenarioId}/interface and verify it before the first run./api/v2/scenarios/{scenarioId}/run as the standard execution path for this shell family. Pass the business payload under data with keys that match the scenario interface exactly, and prefer responsive: true for validation runs.The shell pattern is generic, but each actual shell is bound to one discovered Make app module.
Do not treat “Google” or “Microsoft” as a single interchangeable connection family. In Make, app families often split by product surface.
Common examples:
| Business surface | Example API-call module | Scenario/module connection parameter type | Common connection listing or request type |
|---|---|---|---|
| Gmail | google-email:makeAnApiCall | account:google-email | google-email or workspace-specific variants such as google-restricted |
| Google Calendar / Sheets / Drive style apps | app-specific Google module discovered from metadata | commonly account:google | commonly google |
| Outlook / Microsoft mail | microsoft-email:makeApiCall | account:azure | azure |
Rules that follow from this:
When in doubt, inspect the exact app metadata and existing connection detail instead of inferring compatibility from the vendor name.
The reusable shell has exactly three modules:
scenario-service:StartSubscenarioscenario-service:ReturnDataExpose these shell inputs through StartSubscenario:
pathmethodheaderbodyUse the discovered middle module as the only app-specific part of the shell.
This shell is a generic API endpoint wrapper.
It receives:
pathmethodheaderbodyIt forwards those values into the app-specific Make API-call module.
Default retrieval should use GET. Treat PUT, PATCH, and DELETE as write/destructive methods and require explicit user confirmation before running them.
It returns exactly one thing:
Therefore the shell contract is:
{
"data": "{{3.body}}"
}
That contract is generic across SaaS providers. It applies whether the middle module fronts Gmail, Outlook, HubSpot, Jira, or another provider-specific Make API-call module.
The shell should not try to return:
{{3}}{{3.data}}The shell is transport only. Business interpretation happens later.
Complete these steps first:
Deliverable at the end of Phase A:
Only after Phase A succeeds:
ReturnData fixed as the generic shell contract and update only downstream normalization if neededDo not treat a successful credential request as proof that the retrieval stage is already solved.
Important:
data: {{3.body}}For on-demand shells, treat interface provisioning as a separate deployment step:
/api/v2/scenarios/{scenarioId}/interface/api/v2/scenarios/{scenarioId}/runUse a run payload shaped like:
{
"data": {
"path": "...",
"method": "GET",
"header": [],
"body": null
},
"responsive": true
}
The key names under data must match the scenario interface exactly. If the interface was never explicitly set, run can reject the call even when the StartSubscenario module itself contains interface metadata.
Keep the generic shell contract stable, but do not assume every provider module tolerates an empty or null body the same way.
Observed-safe pattern:
bodybody mapper entirely when the provider module serializes empty payloads badly on GET or DELETEIf a provider-specific Make API-call module fails only when body is present-but-empty, prefer one of these patterns:
body mapperbody mapperDo not change ReturnData for this. This is a Module 2 request-shape compatibility issue, not a shell-output-contract issue.
When using this skill:
PUT, PATCH, or DELETE, stop and warn before executionReturnData looks wrong, stop calling the flow complete and report the exact failing phasemake-scenario-building for broader scenario architecture beyond this shell patternmake-module-configuring for detailed module configuration, mapping, webhooks, keys, and data storesmake-mcp-reference for Make MCP connection methods, scopes, and timeout behavior