Skip to content

Latest commit

 

History

History
368 lines (292 loc) · 9.93 KB

File metadata and controls

368 lines (292 loc) · 9.93 KB
name make
description Make.com API — scenarios, blueprints, connections, webhooks, data stores, scenario execution, blueprint JSON structure, and Make-to-n8n migration patterns. Auto-triggers on Make.com, Make API, scenario management, and automation migration tasks.
disable-model-invocation false
user-invocable true
argument-hint task description

Make.com API Skill

Complete reference for Make.com API and blueprint management.

As of March 2026. API v2 (current).


1. API Basics

BASE="https://eu1.make.com/api/v2"

# Auth header
-H "Authorization: Token $MAKE_API_KEY"

# All list endpoints support pagination
?pg[limit]=100&pg[offset]=0

# Team filter (required for list endpoints)
?teamId=YOUR_TEAM_ID

MCP: Use D1DX/make-mcp for read and write operations — it handles auth automatically.


2. Scenarios

List Scenarios

curl -s "$BASE/scenarios?teamId=YOUR_TEAM_ID&pg[limit]=100" \
  -H "Authorization: Token $MAKE_API_KEY"

Response fields: id, name, isEnabled, scheduling (type, interval), folderId, lastEdit, usedPackages.

Get Scenario Details

curl -s "$BASE/scenarios/SCENARIO_ID" \
  -H "Authorization: Token $MAKE_API_KEY"

Activate / Deactivate

# Activate
curl -X POST "$BASE/scenarios/SCENARIO_ID/start" \
  -H "Authorization: Token $MAKE_API_KEY"

# Deactivate
curl -X POST "$BASE/scenarios/SCENARIO_ID/stop" \
  -H "Authorization: Token $MAKE_API_KEY"

Create a Scenario

curl -X POST "$BASE/scenarios" \
  -H "Authorization: Token $MAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "teamId": YOUR_TEAM_ID,
    "name": "My New Scenario",
    "blueprint": "{\"name\":\"My Scenario\",\"flow\":[...]}",
    "scheduling": {"type": "indefinitely", "interval": 900}
  }'

Delete a Scenario

curl -X DELETE "$BASE/scenarios/SCENARIO_ID?confirmed=true" \
  -H "Authorization: Token $MAKE_API_KEY"

3. Blueprints

Blueprints are JSON that define the scenario's module graph.

Get Blueprint

curl -s "$BASE/scenarios/SCENARIO_ID/blueprint" \
  -H "Authorization: Token $MAKE_API_KEY" \
  | jq '.response.blueprint'

Push Blueprint

Critical: Blueprint value must be a JSON-encoded string, not raw JSON.

blueprint=$(cat blueprint.json)
curl -X PATCH "$BASE/scenarios/SCENARIO_ID" \
  -H "Authorization: Token $MAKE_API_KEY" \
  -H "Content-Type: application/json" \
  --data "$(jq -n --arg bp "$blueprint" '{"blueprint": $bp}')"

Blueprint JSON Structure

{
  "name": "Scenario Name",
  "flow": [
    {
      "id": 1,
      "module": "gateway:CustomWebHook",
      "version": 1,
      "parameters": {
        "hook": 12345,
        "maxResults": 1
      },
      "mapper": {},
      "metadata": {
        "designer": {"x": 0, "y": 0}
      }
    },
    {
      "id": 2,
      "module": "builtin:BasicRouter",
      "version": 1,
      "routes": [
        {
          "flow": [
            {
              "id": 3,
              "module": "http:ActionSendData",
              "version": 3,
              "parameters": {},
              "mapper": {
                "url": "https://api.example.com",
                "method": "POST",
                "body": "{{1.body}}"
              },
              "filter": {
                "name": "Route 1 Filter",
                "conditions": [[{
                  "a": "{{1.type}}",
                  "b": "webhook",
                  "o": "text:equal"
                }]]
              }
            }
          ]
        }
      ]
    }
  ],
  "metadata": {
    "version": 1,
    "scenario": {"roundtrips": 1, "maxErrors": 3}
  }
}

Key Module Names

Module ID Purpose
gateway:CustomWebHook Webhook trigger
builtin:BasicRouter Router (multiple routes)
builtin:BasicFeeder Iterator (loop over array)
builtin:BasicAggregator Array aggregator
http:ActionSendData HTTP request
json:ParseJSON Parse JSON string
json:TransformToJSON Stringify to JSON
airtable2:ActionSearchRecords Airtable search
airtable2:ActionCreateRecord Airtable create
airtable2:ActionUpdateRecord Airtable update
openai-gpt-3:CreateCompletion OpenAI chat completion
google:ActionSendEmail Gmail send
tools:SetVariable Set variable
tools:SetMultipleVariables Set multiple variables
util:FunctionSleep Sleep/delay

Blueprint Expression Syntax

{{1.body}}              — output of module 1, field "body"
{{2.data.name}}         — nested field access
{{ifempty(1.value; "default")}} — fallback
{{lower(1.currency)}}   — string functions
{{formatDate(1.date; "YYYY-MM-DD")}} — date formatting
{{parseDate(1.date; "DD/MM/YYYY")}}  — date parsing
{{toNumber(1.amount)}}  — type conversion
{{length(1.items)}}     — array length
{{emptystring}}         — empty string constant

Router Filters

{
  "filter": {
    "name": "Has date",
    "conditions": [
      [
        {"a": "{{1.date}}", "o": "exists"},
        {"a": "{{1.type}}", "b": "invoice", "o": "text:equal"}
      ]
    ]
  }
}

Conditions are AND within inner arrays, OR between outer arrays.

Operators: text:equal, text:notEqual, text:contain, text:startsWith, number:equal, number:greater, exists, notExist, array:contain.

Error Handlers

{
  "id": 5,
  "module": "http:ActionSendData",
  "onerror": [
    {
      "id": 6,
      "module": "builtin:Ignore",
      "version": 1
    }
  ]
}

Error handler types: builtin:Ignore, builtin:Resume, builtin:Rollback, builtin:Break, builtin:Commit.


4. Connections

# List all connections
curl -s "$BASE/connections?teamId=YOUR_TEAM_ID" \
  -H "Authorization: Token $MAKE_API_KEY"

# Get specific connection
curl -s "$BASE/connections/CONNECTION_ID" \
  -H "Authorization: Token $MAKE_API_KEY"

# Verify connection works
curl -X POST "$BASE/connections/CONNECTION_ID/test" \
  -H "Authorization: Token $MAKE_API_KEY"

5. Webhooks (Hooks)

# List webhooks
curl -s "$BASE/hooks?teamId=YOUR_TEAM_ID" \
  -H "Authorization: Token $MAKE_API_KEY"

# Get webhook details
curl -s "$BASE/hooks/12345" \
  -H "Authorization: Token $MAKE_API_KEY"

# Create a webhook
curl -X POST "$BASE/hooks" \
  -H "Authorization: Token $MAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"My Webhook","teamId":YOUR_TEAM_ID,"typeName":"gateway:CustomWebHook"}'

# Delete a webhook
curl -X DELETE "$BASE/hooks/12345?confirmed=true" \
  -H "Authorization: Token $MAKE_API_KEY"

Response includes url (production webhook URL to use in external systems).


6. Data Stores

# List data stores
curl -s "$BASE/data-stores?teamId=YOUR_TEAM_ID" \
  -H "Authorization: Token $MAKE_API_KEY"

# Get data store records
curl -s "$BASE/data-stores/12345/data" \
  -H "Authorization: Token $MAKE_API_KEY"

# Add record
curl -X POST "$BASE/data-stores/12345/data" \
  -H "Authorization: Token $MAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":{"key":"value"}}'

7. Execution History

# List executions for a scenario
curl -s "$BASE/scenarios/SCENARIO_ID/logs?pg[limit]=10" \
  -H "Authorization: Token $MAKE_API_KEY"

Status values: success, warning, error.


8. Folders

# List folders
curl -s "$BASE/scenarios-foldertree?teamId=YOUR_TEAM_ID" \
  -H "Authorization: Token $MAKE_API_KEY"

9. Make-to-n8n Migration Mapping

Make Module n8n Equivalent Notes
gateway:CustomWebHook Webhook node Path naming differs
builtin:BasicRouter Switch / If node Switch for >2 routes
builtin:BasicFeeder Split In Batches / Loop Different iteration model
builtin:BasicAggregator Merge node (Append) Or Code node for complex
http:ActionSendData HTTP Request node Direct mapping
json:ParseJSON Not needed (auto) n8n auto-parses JSON
airtable2:* Airtable node Credential re-link required
openai-gpt-3:* OpenAI node Model param mapping
google:ActionSendEmail Gmail node Credential re-link required
tools:SetVariable Set node Direct mapping
util:FunctionSleep Wait node Direct mapping

Expression migration:

Make n8n
{{1.body}} {{ $('Node Name').item.json.body }}
{{ifempty(1.x; "y")}} {{ $json.x || "y" }}
{{lower(1.x)}} {{ $json.x.toLowerCase() }}
{{formatDate(1.d; "YYYY-MM-DD")}} {{ DateTime.fromISO($json.d).toFormat('yyyy-MM-dd') }}
{{length(1.arr)}} {{ $json.arr.length }}

10. Critical Gotchas

  1. Blueprint is a string — when pushing via API, blueprint must be JSON-encoded as a string value, not a raw object. Use the jq -n --arg bp pattern.
  2. Zone prefix required — calls to make.com without the correct zone prefix (e.g. eu1) return 404. Always use the full zoned base URL.
  3. Connection IDs are account-specific — importing a blueprint from one account to another requires relinking all connection IDs.
  4. Pull before edit — always fetch the current blueprint before modifying locally. The live scenario may have been edited in the UI.
  5. Push doesn't activate — pushing a blueprint doesn't activate the scenario. Activate separately with /start.
  6. Router :else: toggle — fallback route requires :else: ON in the Make UI. If it turns off, all requests fall through to the last route silently.
  7. Rate limits — API has rate limits per team. Bulk operations should add delays.
  8. Scenario schedulingindefinitely means "run continuously", once runs once. Webhook-triggered scenarios don't need a scheduling interval.
  9. Blueprint module IDs — IDs are local to the blueprint (1, 2, 3...). References like {{1.body}} use these IDs.
  10. Data store size limit — free plan: 10MB. Check quota before bulk writes.