Access the Google Tag Manager API with managed OAuth authentication. Manage GTM accounts, containers, workspaces, tags, triggers, variables, environments, and container versions.
Reference
Resource Path Pattern
GTM API v2 uses hierarchical paths:
accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/{resource}/{resourceId}List Accounts
GET /google-tag-manager/tagmanager/v2/accountsResponse:
{
"account": [
{
"path": "accounts/6353461358",
"accountId": "6353461358",
"name": "My Company",
"features": {
"supportUserPermissions": true,
"supportMultipleContainers": true
}
}
]
}Get Account
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}List Containers
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containersResponse:
{
"container": [
{
"path": "accounts/6353461358/containers/251407136",
"accountId": "6353461358",
"containerId": "251407136",
"name": "example.com",
"publicId": "GTM-XXXXXXX",
"usageContext": ["web"],
"tagIds": ["GTM-XXXXXXX"],
"features": {
"supportTags": true,
"supportTriggers": true,
"supportVariables": true,
"supportVersions": true,
"supportEnvironments": true,
"supportWorkspaces": true,
"supportFolders": true,
"supportTemplates": true,
"supportBuiltInVariables": true,
"supportZones": true
}
}
]
}Create Container
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers
Content-Type: application/json
{
"name": "New Container",
"usageContext": ["web"]
}Valid usage contexts: web, android, ios, amp
Delete Container
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}List Workspaces
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspacesResponse:
{
"workspace": [
{
"path": "accounts/6353461358/containers/251407136/workspaces/2",
"accountId": "6353461358",
"containerId": "251407136",
"workspaceId": "2",
"name": "Default Workspace"
}
]
}Create Workspace
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces
Content-Type: application/json
{
"name": "My Feature Workspace",
"description": "Working on new tracking features"
}Get Workspace Status
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/statusCreate Version from Workspace
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}:create_version
Content-Type: application/json
{
"name": "v2.0",
"notes": "Added new tracking tags"
}Delete Workspace
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}List Tags
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/tagsGet Tag
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/tags/{tagId}Create Tag
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/tags
Content-Type: application/json
{
"name": "Custom HTML Tag",
"type": "html",
"parameter": [
{
"type": "template",
"key": "html",
"value": "<script>console.log('hello');</script>"
}
],
"firingTriggerId": ["{triggerId}"]
}Common tag types: html (Custom HTML), ua (Universal Analytics), gaawc (GA4 Config), gaawe (GA4 Event), gclidw (Conversion Linker), img (Custom Image)
Example:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"name": "GA4 Config Tag",
"type": "gaawc",
"parameter": [
{"type": "template", "key": "measurementId", "value": "G-XXXXXXXXXX"}
],
"firingTriggerId": ["2147479553"]
}).encode()
req = urllib.request.Request('https://api.maton.ai/google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/tags', 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))
EOFUpdate Tag
PUT /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/tags/{tagId}
Content-Type: application/json
{
"name": "Updated Tag Name",
"type": "html",
"parameter": [...],
"firingTriggerId": ["{triggerId}"],
"fingerprint": "{current_fingerprint}"
}Include the current fingerprint value to ensure you're updating the latest version.
Delete Tag
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/tags/{tagId}List Triggers
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/triggersCreate Trigger
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/triggers
Content-Type: application/json
{
"name": "All Pages",
"type": "pageview"
}Common trigger types: pageview, domReady, windowLoaded, customEvent, click, linkClick, formSubmit, timer, scrollDepth
Example with filter:
python <<'EOF'
import urllib.request, os, json
data = json.dumps({
"name": "Click on CTA Button",
"type": "click",
"filter": [
{
"type": "equals",
"parameter": [
{"type": "template", "key": "arg0", "value": "{{Click Classes}}"},
{"type": "template", "key": "arg1", "value": "cta-button"}
]
}
]
}).encode()
req = urllib.request.Request('https://api.maton.ai/google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/triggers', 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))
EOFUpdate Trigger
PUT /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/triggers/{triggerId}
Content-Type: application/json
{
"name": "Updated Trigger",
"type": "pageview",
"fingerprint": "{current_fingerprint}"
}Delete Trigger
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/triggers/{triggerId}List Variables
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/variablesCreate Variable
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/variables
Content-Type: application/json
{
"name": "Data Layer Variable",
"type": "v",
"parameter": [
{"type": "integer", "key": "dataLayerVersion", "value": "2"},
{"type": "template", "key": "name", "value": "myDataLayerVar"}
]
}Common variable types: v (Data Layer), j (JavaScript Variable), jsm (Custom JavaScript), c (Constant), k (Cookie), u (URL), f (DOM Element)
Update Variable
PUT /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/variables/{variableId}
Content-Type: application/json
{
"name": "Updated Variable",
"type": "v",
"parameter": [...],
"fingerprint": "{current_fingerprint}"
}Delete Variable
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/variables/{variableId}List Built-In Variables
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/workspaces/{workspaceId}/built_in_variablesResponse:
{
"builtInVariable": [
{
"path": "accounts/6353461358/containers/251407136/workspaces/2/built_in_variables",
"type": "pageUrl",
"name": "Page URL"
},
{
"type": "pageHostname",
"name": "Page Hostname"
},
{
"type": "pagePath",
"name": "Page Path"
},
{
"type": "referrer",
"name": "Referrer"
},
{
"type": "event",
"name": "Event"
}
]
}List Environments
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/environmentsCreate Environment
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/environments
Content-Type: application/json
{
"name": "Staging",
"description": "Staging environment for testing"
}Delete Environment
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/environments/{environmentId}List Version Headers
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/version_headersGet Version
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/versions/{versionId}Get Live Version
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/versions:livePublish Version
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/versions/{versionId}:publishDelete Version
DELETE /google-tag-manager/tagmanager/v2/accounts/{accountId}/containers/{containerId}/versions/{versionId}List User Permissions
GET /google-tag-manager/tagmanager/v2/accounts/{accountId}/user_permissionsResponse:
{
"userPermission": [
{
"path": "accounts/6353461358/user_permissions/05842032124443686272",
"accountId": "6353461358",
"emailAddress": "user@example.com",
"accountAccess": {
"permission": "admin"
},
"containerAccess": [
{
"containerId": "251407136",
"permission": "publish"
}
]
}
]
}Create User Permission
POST /google-tag-manager/tagmanager/v2/accounts/{accountId}/user_permissions
Content-Type: application/json
{
"emailAddress": "newuser@example.com",
"accountAccess": {
"permission": "user"
},
"containerAccess": [
{
"containerId": "{containerId}",
"permission": "read"
}
]
}Permission levels: noAccess, read, edit, approve, publish (container); noAccess, user, admin (account)