A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.
The Make API is how an app or AI agent works with a Make organization: listing and running scenarios, reading their execution logs, managing the connections to outside apps, and reading and writing records in data stores. Access is granted through an API token whose scopes are chosen when the token is made, and an agent is limited to the organizations and teams that token can reach. Make also runs a hosted server an agent can call through the Model Context Protocol, which turns scenarios into callable tools.
How an app or AI agent connects to Make determines what it can reach. There are several routes, each governed by the token behind it and the scopes that token carries.
The REST API answers at https://{zone}.make.com/api/v2, where the zone is the region the organization lives in, such as eu1, eu2, us1, or us2. It is resource-oriented JSON over HTTPS, and a call must go to the zone that holds the target organization.
Make hosts its own Model Context Protocol server, which turns active and on-demand scenarios into tools an agent can run and can manage connections, hooks, and data stores. It connects over streamable HTTP or server-sent events at mcp.make.com using OAuth, or at a zone host with an MCP token. It is generally available, with scenario-running on all plans and management tools on paid plans.
Hooks are inbound triggers. A hook receives an HTTP request or an email from an outside service and starts a scenario. The hooks endpoints list, create, and manage those triggers; they do not register a receiver for Make's own events.
A user authentication token created in the Make profile, sent as 'Authorization: Token
OAuth 2.0 lets an app act on behalf of a Make user. It uses the authorization code flow, with refresh tokens for confidential clients that can keep a secret, and PKCE for public clients such as single-page and mobile apps. The client is registered with Make's authorization server first.
The Make API is split into areas an agent can act on, such as scenarios, connections, data stores, and hooks. Each area has its own methods and its own scopes, and some grant access to far more than others.
List, read, create, update, clone, and delete scenarios, and start, stop, or run them.
List a scenario's run logs and read the details of a single execution.
List, read, create, rename, and delete the connections to outside apps, and verify a connection.
List, create, update, and delete data stores, and read, write, and delete the records inside them.
List, create, update, and delete inbound hooks, and enable, disable, or ping them.
List the teams in an organization, read a team, and create a team.
List organizations, read an organization, and create an organization.
List the users in an organization or team, and find users by permission.
List templates, read a template, read its blueprint, and create a template.
Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.
| Method | Endpoint | What it does | Access | Permission | Version | |
|---|---|---|---|---|---|---|
ScenariosList, read, create, update, clone, and delete scenarios, and start, stop, or run them.10 | ||||||
| GET | /scenarios | List the scenarios for a team or organization. | read | scenarios:read | Current | |
Takes a teamId or organizationId query parameter to say which account to list. Acts onscenario Permission (capability) scenarios:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /scenarios/{scenarioId} | Get a single scenario's details. | read | scenarios:read | Current | |
Acts onscenario Permission (capability) scenarios:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /scenarios | Create a new scenario. | write | scenarios:write | Current | |
Acts onscenario Permission (capability) scenarios:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| PATCH | /scenarios/{scenarioId} | Update a scenario. | write | scenarios:write | Current | |
Acts onscenario Permission (capability) scenarios:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| DELETE | /scenarios/{scenarioId} | Delete a scenario. | write | scenarios:write | Current | |
Acts onscenario Permission (capability) scenarios:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /scenarios/{scenarioId}/clone | Clone a scenario into a copy. | write | scenarios:write | Current | |
Acts onscenario Permission (capability) scenarios:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /scenarios/{scenarioId}/start | Activate a scenario so it runs on its schedule or trigger. | write | scenarios:write | Current | |
Activating sets the scenario live; it does not run it once on its own. Acts onscenario Permission (capability) scenarios:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /scenarios/{scenarioId}/stop | Deactivate a scenario so it stops running. | write | scenarios:write | Current | |
Acts onscenario Permission (capability) scenarios:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /scenarios/{scenarioId}/run | Run a scenario once on demand. | write | scenarios:run | Current | |
Running a scenario requires scenarios:run alongside scenarios:read and scenarios:write. It executes the scenario's real actions. Acts onscenario Permission (capability) scenarios:runVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /scenarios/{scenarioId}/triggers | Get the properties of the triggers in a scenario. | read | scenarios:read | Current | |
Acts onscenario Permission (capability) scenarios:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Executions & logsList a scenario's run logs and read the details of a single execution.3 | ||||||
| GET | /scenarios/{scenarioId}/logs | List the run logs for a scenario, sorted newest first, with filters for status, duration, and more. | read | scenarios:read | Current | |
Acts onexecution log Permission (capability) scenarios:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /scenarios/{scenarioId}/logs/{executionId} | Get the log of a single scenario execution. | read | scenarios:read | Current | |
Acts onexecution log Permission (capability) scenarios:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /scenarios/{scenarioId}/executions/{executionId} | Get the details of a single execution, including its status and any error and the module that caused it. | read | scenarios:read | Current | |
Status is one of RUNNING, SUCCESS, WARNING, or ERROR. Acts onexecution Permission (capability) scenarios:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
ConnectionsList, read, create, rename, and delete the connections to outside apps, and verify a connection.6 | ||||||
| GET | /connections | List the connections to outside apps. | read | connections:read | Current | |
Takes a teamId query parameter to say which team's connections to list. Acts onconnection Permission (capability) connections:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /connections/{connectionId} | Get a single connection's details. | read | connections:read | Current | |
Acts onconnection Permission (capability) connections:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /connections | Create a connection to an outside app. | write | connections:write | Current | |
Holds the credentials a scenario uses to reach the outside app. Acts onconnection Permission (capability) connections:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| PATCH | /connections/{connectionId} | Rename a connection. | write | connections:write | Current | |
Acts onconnection Permission (capability) connections:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| DELETE | /connections/{connectionId} | Delete a connection. | write | connections:write | Current | |
Removing a connection breaks any scenario that relied on it. Acts onconnection Permission (capability) connections:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /connections/{connectionId}/test | Verify that a connection still works. | write | connections:write | Current | |
Verifying a connection needs connections:write, not just read. Acts onconnection Permission (capability) connections:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Data storesList, create, update, and delete data stores, and read, write, and delete the records inside them.8 | ||||||
| GET | /data-stores | List the data stores in a team. | read | datastores:read | Current | |
Takes a teamId query parameter to say which team's data stores to list. Acts ondata store Permission (capability) datastores:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /data-stores | Create a data store. | write | datastores:write | Current | |
Acts ondata store Permission (capability) datastores:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| PATCH | /data-stores/{dataStoreId} | Update a data store. | write | datastores:write | Current | |
Acts ondata store Permission (capability) datastores:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /data-stores/{dataStoreId}/data | List the records in a data store. | read | datastores:read | Current | |
Acts ondata store record Permission (capability) datastores:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /data-stores/{dataStoreId}/data | Create a record in a data store. | write | datastores:write | Current | |
Acts ondata store record Permission (capability) datastores:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| PUT | /data-stores/{dataStoreId}/data/{dataStoreKeyRecord} | Replace a record's full contents with new values. | write | datastores:write | Current | |
PUT replaces the whole record; PATCH leaves unprovided fields unchanged. Acts ondata store record Permission (capability) datastores:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| PATCH | /data-stores/{dataStoreId}/data/{dataStoreKeyRecord} | Update a record, leaving any field not provided unchanged. | write | datastores:write | Current | |
Acts ondata store record Permission (capability) datastores:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| DELETE | /data-stores/{dataStoreId}/data | Delete records from a data store, by key, all records, or all except named keys. | write | datastores:write | Current | |
A bulk delete of all records needs the confirmed=true query parameter. Acts ondata store record Permission (capability) datastores:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Hooks (triggers)List, create, update, and delete inbound hooks, and enable, disable, or ping them.8 | ||||||
| GET | /hooks | List the inbound hooks for a team. | read | hooks:read | Current | |
A hook is an inbound trigger that starts a scenario from an outside request or email. Acts onhook Permission (capability) hooks:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /hooks | Create an inbound hook. | write | hooks:write | Current | |
Acts onhook Permission (capability) hooks:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /hooks/{hookId} | Get a single hook's details. | read | hooks:read | Current | |
Acts onhook Permission (capability) hooks:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| PATCH | /hooks/{hookId} | Update a hook. | write | hooks:write | Current | |
Acts onhook Permission (capability) hooks:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| DELETE | /hooks/{hookId} | Delete a hook. | write | hooks:write | Current | |
Deleting a hook stops the trigger that started its scenario. Acts onhook Permission (capability) hooks:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /hooks/{hookId}/ping | Check a hook's status, including whether it is attached, learning, or inactive. | read | hooks:read | Current | |
Acts onhook Permission (capability) hooks:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /hooks/{hookId}/enable | Enable a hook so it accepts incoming data. | write | hooks:write | Current | |
Acts onhook Permission (capability) hooks:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /hooks/{hookId}/disable | Disable a hook so it stops accepting incoming data. | write | hooks:write | Current | |
Acts onhook Permission (capability) hooks:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
TeamsList the teams in an organization, read a team, and create a team.3 | ||||||
| GET | /teams | List the teams in an organization. | read | teams:read | Current | |
Takes an organizationId query parameter to say which organization to read. Acts onteam Permission (capability) teams:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /teams/{teamId} | Get a single team's details. | read | teams:read | Current | |
Acts onteam Permission (capability) teams:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /teams | Create a team in an organization. | write | teams:write | Current | |
Requires the name and organizationId fields. Acts onteam Permission (capability) teams:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
OrganizationsList organizations, read an organization, and create an organization.3 | ||||||
| GET | /organizations | List the organizations the token can reach. | read | organizations:read | Current | |
Acts onorganization Permission (capability) organizations:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /organizations/{organizationId} | Get an organization's details, including its apiLimit in the license object. | read | organizations:read | Current | |
The license object's apiLimit reports the organization's per-minute request ceiling. Acts onorganization Permission (capability) organizations:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /organizations | Create an organization. | write | organizations:write | Current | |
Creating an organization also needs the admin:write scope. Acts onorganization Permission (capability) organizations:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
UsersList the users in an organization or team, and find users by permission.2 | ||||||
| GET | /users | List the users in an organization or team. | read | user:read | Current | |
Takes a query parameter for the organization or team to read. Acts onuser Permission (capability) user:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /users/by-permission | List users that hold a given permission. | read | user:read | Current | |
Acts onuser Permission (capability) user:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
TemplatesList templates, read a template, read its blueprint, and create a template.4 | ||||||
| GET | /templates | List templates, with a public query parameter for published and approved ones. | read | templates:read | Current | |
Acts ontemplate Permission (capability) templates:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /templates/{templateId} | Get a single template's details. | read | templates:read | Current | |
Acts ontemplate Permission (capability) templates:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| GET | /templates/{templateId}/blueprint | Get a template's blueprint, the definition of its scenario. | read | templates:read | Current | |
Acts ontemplate Permission (capability) templates:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | /templates | Create a template. | write | templates:write | Current | |
Acts ontemplate Permission (capability) templates:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Make's hooks are inbound triggers, not outbound notifications. A hook receives an HTTP request or an email from an outside service and starts a scenario, and the API lists, creates, and manages those hooks rather than registering a receiver for Make's own events.
| Event | What it signals | Triggered by |
|---|
Make limits how fast an app or AI agent can call, through a per-minute request quota that depends on the organization's plan, from Core up to Enterprise.
Make sets a request limit per minute, decided by the organization's plan. Core gets 60 requests per minute, Pro gets 120, Teams gets 240, and Enterprise gets 1,000. The limit is per organization, and exceeding it returns 429 with the message that the requests limit for the organization was exceeded. An organization's current ceiling is reported as the apiLimit property in the license object returned by getting that organization.
Most endpoints that return a collection are paginated. The pg[limit] and pg[offset] query parameters set the page size and starting point, and pg[sortBy] and pg[sortDir] set the sort. The square brackets must be URL-encoded. Some list endpoints require a teamId or organizationId query parameter to say which team or organization to read.
Requests and responses are JSON. A request that exceeds the server's size limits returns 413 Payload Too Large, for example an oversized upload. The API does not publish a single global payload size ceiling across every endpoint.
The status codes an agent should handle, and what to do about each.
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | Bad Request | The request could not be understood, with invalid syntax or data, such as a bad data type, a prohibited duplicate, an invalid connection type, or a failed file validation. | Read the detail and code in the response body, correct the request, and resend. |
| 403 | Forbidden | The request was authenticated but not permitted. The token lacks the access or the scope the endpoint requires. | Grant the missing scope or use a token whose user has access to the team or organization. |
| 404 | Not Found | The resource cannot be found, such as a nonexistent or removed scenario, team, template, user, organization, or app. Make may also return 404 instead of 403 to hide a resource from a client that cannot see it, and a wrong-case path triggers it too. | Confirm the path, its case, and that the token can see the resource. |
| 413 | Payload Too Large | The request entity exceeded the limits set on the server, for example an oversized upload. | Reduce the size of the request body and resend. |
| 424 | Failed Dependency | The request failed because a previous request it depended on failed, such as a connection action that crashed or timed out. | Resolve the underlying failure, then retry the request. |
| 429 | Too Many Requests | The organization exceeded its per-minute request limit. The body message states that the requests limit for the organization was exceeded. | Slow the request rate to within the plan's per-minute limit, then retry. |
| 503 | Service Unavailable | A dependency the request needs is currently unavailable. | Wait and retry, since the condition is usually temporary. |
Make does not version its API by date. There is a single, current major version of the API, kept up to date in place, and changes ship through the developer hub and changelog.
Version 2 is the current major version of the Make API, reached at https://{zone}.make.com/api/v2. Make does not version the API by date, so there is no version header to pin. The API is kept up to date in place, and notable changes ship through the developer hub. Make is the successor to Integromat, and the v2 API is the modern interface used today.
An integration calls the current major version directly, with no version header to pin.
Make API documentation ↗Bollard AI sits between a team's AI agents and Make. Grant each agent exactly the access it needs, read or write, scenario by scenario, and every call is checked and logged.