Skill: byungkyu/make-api (version 1.0.3)

--- name: make description: | Make (formerly Integromat) API integration with managed authentication. Manage scenarios, organizations, teams, connections, data stores, hooks, and templates. Use this skill when users want to automate workflows, manage scenarios, or integrate apps using Make. All write operations (create, update, start, stop, delete) require explicit user approval before executing. Starting or creating scenarios, hooks, and data stores creates persistent resources that continue operating after the conversation ends. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). compatibility: Requires network access and valid Maton API key metadata: author: maton version: "1.0" clawdbot: emoji: "🔧" homepage: "https://maton.ai" requires: env: - MATON_API_KEY --- # Make Access the Make API with managed authentication. Manage scenarios, organizations, teams, connections, data stores, hooks, and templates. ## Quick Start ```bash # List organizations python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/make/api/v2/organizations') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ## Base URL ``` https://gateway.maton.ai/make/api/v2/ ``` Only the endpoints listed in the API Reference section below are supported. The gateway proxies requests to your Make zone (e.g., `us2.make.com`) and automatically injects your API token. ## Authentication All requests require the Maton API key in the Authorization header: ``` Authorization: Bearer $MATON_API_KEY ``` **Environment Variable:** Set your API key as `MATON_API_KEY`: ```bash export MATON_API_KEY="YOUR_API_KEY" ``` ### Getting Your API Key 1. Sign in or create an account at [maton.ai](https://maton.ai) 2. Go to [maton.ai/settings](https://maton.ai/settings) 3. Copy your API key ## Connection Management Manage your Make connections at `https://ctrl.maton.ai`. ### List Connections ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=make&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ### Create Connection ```bash python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'make'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ### Get Connection ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` **Response:** ```json { "connection": { "connection_id": "{connection_id}", "status": "ACTIVE", "creation_time": "2026-04-07T19:37:17.340922Z", "last_updated_time": "2026-04-07T19:40:00.806379Z", "url": "https://connect.maton.ai/?session_token=REDACTED", "app": "make", "metadata": {} } } ``` ### Delete Connection ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` ### Specifying Connection If you have multiple Make connections, specify which one to use with the `Maton-Connection` header: ```bash python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/make/api/v2/organizations') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '{connection_id}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF ``` If you have multiple connections, always include this header to ensure requests go to the intended account. ## Security & Permissions - Access is scoped to scenarios, organizations, teams, connections, data stores, hooks, and templates within the authenticated Make account. - **All write operations require explicit user approval.** Before executing any create, update, start, stop, or delete call, confirm the target resource ID and intended effect with the user. - **Persistent resources**: Creating or modifying scenarios, hooks, data stores, and connections creates resources that continue operating after the conversation ends. Starting a scenario activates ongoing automation. - **Organizational scope**: Organization and team management operations (create/update/delete organizations, teams) affect shared resources visible to all members. Always confirm before modifying shared resources. ## API Reference ### Users #### Get Current User ```bash GET /make/api/v2/users/me ``` **Response:** ```json { "authUser": { "id": 2958000, "name": "John Doe", "email": "[REDACTED_SECRET]", "language": "en", "timezoneId": 301, "timezone": "America/New_York", "avatar": "https://..." } } ``` #### List Users ```bash GET /make/api/v2/users?organizationId={organizationId} GET /make/api/v2/users?teamId={teamId} ``` #### Update User ```bash PATCH /make/api/v2/users/{userId} Content-Type: application/json { "name": "Updated Name", "language": "en", "timezoneId": 301 } ``` ### Organizations #### List Organizations ```bash GET /make/api/v2/organizations ``` **Response:** ```json { "organizations": [ { "id": 2767268, "name": "My Organization", "timezoneId": 301, "zone": "us2.make.com" } ], "pg": {"sortBy": "name", "limit": 10000, "sortDir": "asc", "offset": 0} } ``` #### Get Organization ```bash GET /make/api/v2/organizations/{organizationId} ``` #### Create Organization ```bash POST /make/api/v2/organizations Content-Type: application/json { "name": "New Organization", "regionId": 2, "timezoneId": 301, "countryId": 202 } ``` #### Update Organization ```bash PATCH /make/api/v2/organizations/{organizationId} Content-Type: application/json { "name": "Updated Name", "timezoneId": 301 } ``` #### Delete Organization ```bash DELETE /make/api/v2/organizations/{organizationId} ``` #### Get Organization Usage ```bash GET /make/api/v2/organizations/{organizationId}/usage ``` ### Teams #### List Teams ```bash GET /make/api/v2/teams?organizationId={organizationId} ``` **Response:** ```json { "teams": [ { "id": 388889, "name": "My Team", "organizationId": 2767268 } ], "pg": {"sortBy": "name", "limit": 10000, "sortDir": "asc", "offset": 0} } ``` #### Get Team ```bash GET /make/api/v2/teams/{teamId} ``` #### Create Team ```bash POST /make/api/v2/teams Content-Type: application/json { "name": "New Team", "organizationId": 2767268 } ``` #### Delete Team ```bash DELETE /make/api/v2/teams/{teamId} ``` #### Get Team Usage ```bash GET /make/api/v2/teams/{teamId}/usage ``` ### Scenarios #### List Scenarios ```bash GET /make/api/v2/scenarios?organizationId={organizationId} GET /make/api/v2/scenarios?teamId={teamId} ``` **Response:** ```json { "scenarios": [ { "id": 4667499, "name": "My Scenario", "teamId": 388889, "isActive": false, "isPaused": false, "scheduling": {"type": "indefinitely", "interval": 900}, "lastEdit": "2026-04-07T19:41:51.801Z" } ], "pg": {"sortBy": "proprietal", "limit": 500, "sortDir": "desc", "offset": 0} } ``` #### Get Scenario ```bash GET /make/api/v2/scenarios/{scenarioId} ``` #### Create Scenario ```bash POST /make/api/v2/scenarios Content-Type: application/json { "teamId": 388889, "name": "New Scenario", "blueprint": "{...}" } ``` #### Update Scenario ```bash PATCH /make/api/v2/scenarios/{scenarioId} Content-Type: application/json { "name": "Updated Scenario Name" } ``` #### Delete Scenario ```bash DELETE /make/api/v2/scenarios/{scenarioId} ``` #### Start Scenario ```bash POST /make/api/v2/scenarios/{scenarioId}/start ``` #### Stop Scenario ```bash POST /make/api/v2/scenarios/{scenarioId}/stop ``` #### Run Scenario ```bash POST /make/api/v2/scenarios/{scenarioId}/run Content-Type: application/json { "data": {"key": "value"} } ``` #### Get Scenario Logs ```bash GET /make/api/v2/scenarios/{scenarioId}/logs GET /make/api/v2/scenarios/{scenarioId}/logs?status=3&pg[limit]=10 ``` Query parameters: - `from` / `to` - Timestamp range in milliseconds - `status` - 1=success, 2=warning, 3=error - `pg[offset]`, `pg[limit]` - Pagination ### Connections (Make App Connections) #### List Connections ```bash GET /make/api/v2/connections?teamId={teamId} ``` **Response:** ```json { "connections": [ { "id": 1353452, "name": "My HubSpot CRM connection", "accountName": "hubspotcrm", "accountLabel": "HubSpot CRM", "teamId": 388889, "accountType": "oauth", "editable": true } ] } ``` #### Get Connection ```bash GET /make/api/v2/connections/{connectionId} ``` #### Create Connection ```bash POST /make/api/v2/connections Content-Type: application/json { "accountName": "slack2", "accountType": "oauth", "teamId": 388889 } ``` #### Update Connection ```bash PATCH /make/api/v2/connections/{connectionId} Content-Type: application/json { "name": "Updated Connection Name" } ``` #### Delete Connection ```bash DELETE /make/api/v2/connections/{connectionId} ``` #### Test Connection ```bash POST /make/api/v2/connections/{connectionId}/test ``` ### Data Stores #### List Data Stores ```bash GET /make/api/v2/data-stores?teamId={teamId} ``` **Response:** ```json { "dataStores": [], "pg": {"sortBy": "name", "limit": 10000, "sortDir": "asc", "offset": 0} } ``` #### Get Data Store ```bash GET /make/api/v2/data-stores/{dataStoreId} ``` #### Create Data Store ```bash POST /make/api/v2/data-stores Content-Type: application/json { "name": "My Data Store", "teamId": 388889, "datastructureId": 12345, "maxSizeMB": 10 } ``` #### Update Data Store ```bash PATCH /make/api/v2/data-stores/{dataStoreId} Content-Type: application/json { "name": "Updated Name", "maxSizeMB": 20 } ``` #### Delete Data Stores ```bash DELETE /make/api/v2/data-stores?teamId={teamId} Content-Type: application/json { "ids": [12345, 67890] } ``` ### Hooks (Webhooks) #### List Hooks ```bash GET /make/api/v2/hooks?teamId={teamId} ``` **Response:** ```json { "hooks": [], "pg": {"sortBy": "name", "limit": 50, "sortDir": "asc", "offset": 0} } ``` #### Get Hook ```bash GET /make/api/v2/hooks/{hookId} ``` #### Create Hook ```bash POST /make/api/v2/hooks Content-Type: application/json { "name": "My Webhook", "teamId": 388889, "typeName": "web", "method": "POST", "headers": {}, "stringify": false } ``` #### Update Hook ```bash PATCH /make/api/v2/hooks/{hookId} Content-Type: application/json { "name": "Updated Hook Name" } ``` #### Delete Hook ```bash DELETE /make/api/v2/hooks/{hookId} ``` #### Enable/Disable Hook ```bash POST /make/api/v2/hooks/{hookId}/enable POST /make/api/v2/hooks/{hookId}/disable ``` #### Ping Hook ```bash GET /make/api/v2/hooks/{hookId}/ping ``` ### Templates #### List Templates ```bash GET /make/api/v2/templates?teamId={teamId} ``` **Response:** ```json { "templates": [], "pg": {"sortBy": "id", "limit": 10, "sortDir": "asc", "offset": 0} } ``` #### Get Template ```bash GET /make/api/v2/templates/{templateId} ``` #### Get Template Blueprint ```bash GET /make/api/v2/templates/{templateId}/blueprint ``` #### Delete Template ```bash DELETE /make/api/v2/templates/{templateId} ``` ### Incomplete Executions (DLQs) #### List Incomplete Executions ```bash GET /make/api/v2/dlqs?scenarioId={scenarioId} ``` **Response:** ```json { "dlqs": [], "pg": {"sortBy": "", "limit": 50, "sortDir": "asc", "offset": 0} } ``` #### Get Incomplete Execution ```bash GET /make/api/v2/dlqs/{dlqId} ``` #### Retry Incomplete Execution ```bash POST /make/api/v2/dlqs/{dlqId}/retry ``` #### Delete Incomplete Executions ```bash DELETE /make/api/v2/dlqs?scenarioId={scenarioId} Content-Type: application/json { "ids": [12345, 67890] } ``` ## Pagination Make uses offset-based pagination with `pg` parameters: ```bash GET /make/api/v2/scenarios?organizationId=123&pg[offset]=0&pg[limit]=50&pg[sortBy]=name&pg[sortDir]=asc ``` **Parameters:** - `pg[offset]` - Number of items to skip (default: 0) - `pg[limit]` - Max items per page (varies by endpoint) - `pg[sortBy]` - Field to sort by - `pg[sortDir]` - Sort direction: `asc` or `desc` **Response includes pagination metadata:** ```json { "scenarios": [...], "pg": { "sortBy": "name", "limit": 500, "sortDir": "asc", "offset": 0, "returnTotalCount": false } } ``` ## Code Examples ### JavaScript ```javascript const response = await fetch( 'https://gateway.maton.ai/make/api/v2/organizations', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const data = await response.json(); console.log(data.organizations); ``` ### Python ```python import os import requests response = requests.get( 'https://gateway.maton.ai/make/api/v2/scenarios', headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}, params={'organizationId': 2767268} ) scenarios = response.json()['scenarios'] ``` ### List Scenarios and Start One ```python import os import requests headers = { 'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}', 'Content-Type': 'application/json' } # List scenarios response = requests.get( 'https://gateway.maton.ai/make/api/v2/scenarios', headers=headers, params={'organizationId': 2767268} ) scenarios = response.json()['scenarios'] # Start first inactive scenario for scenario in scenarios: if not scenario['isActive']: requests.post( f'https://gateway.maton.ai/make/api/v2/scenarios/{scenario["id"]}/start', headers=headers ) print(f"Started scenario: {scenario['name']}") break ``` ## Notes - Make uses zone-specific URLs (e.g., `us1.make.com`, `eu1.make.com`) - the gateway handles routing automatically - Most list endpoints require either `organizationId` or `teamId` parameter - Scenario IDs, team IDs, and organization IDs are integers - Timestamps use ISO 8601 format - Some operations (like getting individual scenarios) may require OAuth instead of API key authentication - IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets to disable glob parsing - IMPORTANT: When piping curl output to `jq`, environment variables may not expand correctly in some shells ## Error Handling | Status | Meaning | |--------|---------| | 400 | Missing Make connection or invalid request | | 401 | Invalid or missing Maton API key | | 403 | Permission denied or forbidden operation | | 404 | Resource not found | | 429 | Rate limited | | 4xx/5xx | Passthrough error from Make API | ## Resources - [Make API Documentation](https://developers.make.com/api-documentation) - [Make API Reference](https://developers.make.com/api-documentation/api-reference) - [Make Help Center](https://www.make.com/en/help) - [Maton Community](https://discord.com/invite/dBfFAcefs2) - [Maton Support](mailto:[REDACTED_SECRET])


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)