| 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 |
Complete reference for Make.com API and blueprint management.
As of March 2026. API v2 (current).
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_IDMCP: Use D1DX/make-mcp for read and write operations — it handles auth automatically.
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.
curl -s "$BASE/scenarios/SCENARIO_ID" \
-H "Authorization: Token $MAKE_API_KEY"# 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"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}
}'curl -X DELETE "$BASE/scenarios/SCENARIO_ID?confirmed=true" \
-H "Authorization: Token $MAKE_API_KEY"Blueprints are JSON that define the scenario's module graph.
curl -s "$BASE/scenarios/SCENARIO_ID/blueprint" \
-H "Authorization: Token $MAKE_API_KEY" \
| jq '.response.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}')"{
"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}
}
}| 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 |
{{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
{
"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.
{
"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.
# 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"# 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).
# 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"}}'# 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.
# List folders
curl -s "$BASE/scenarios-foldertree?teamId=YOUR_TEAM_ID" \
-H "Authorization: Token $MAKE_API_KEY"| 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 }} |
- 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 bppattern. - Zone prefix required — calls to
make.comwithout the correct zone prefix (e.g.eu1) return 404. Always use the full zoned base URL. - Connection IDs are account-specific — importing a blueprint from one account to another requires relinking all connection IDs.
- Pull before edit — always fetch the current blueprint before modifying locally. The live scenario may have been edited in the UI.
- Push doesn't activate — pushing a blueprint doesn't activate the scenario. Activate separately with
/start. - 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. - Rate limits — API has rate limits per team. Bulk operations should add delays.
- Scenario scheduling —
indefinitelymeans "run continuously",onceruns once. Webhook-triggered scenarios don't need a scheduling interval. - Blueprint module IDs — IDs are local to the blueprint (1, 2, 3...). References like
{{1.body}}use these IDs. - Data store size limit — free plan: 10MB. Check quota before bulk writes.