Update a tag template
Partial update of one of this location's own templates. The type rule is checked on the stored row after the change, so switching type needs the matching src or code in the same request. When the template is assigned, the edge config is rebuilt and kv_sync reports it; otherwise kv_sync is not_assigned. Agency key (ak_) required.
curl -X PATCH "https://mythic-analytics.gulp.workers.dev/client/v1/config/tag-templates/123e4567-e89b-12d3-a456-426614174000?location_id=example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"name": "John Doe",
"type": "url",
"src": "example_string",
"code": "example_string",
"description": "example_string",
"trigger_rules": {
"version": 1,
"operator": "AND",
"rules": [
{
"type": "url_pattern",
"operator": "contains",
"value": "/checkout"
}
]
}
}'
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/config/tag-templates/123e4567-e89b-12d3-a456-426614174000?location_id=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"name": "John Doe",
"type": "url",
"src": "example_string",
"code": "example_string",
"description": "example_string",
"trigger_rules": {
"version": 1,
"operator": "AND",
"rules": [
{
"type": "url_pattern",
"operator": "contains",
"value": "/checkout"
}
]
}
}
response = requests.patch(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/config/tag-templates/123e4567-e89b-12d3-a456-426614174000?location_id=example_string", {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"name": "John Doe",
"type": "url",
"src": "example_string",
"code": "example_string",
"description": "example_string",
"trigger_rules": {
"version": 1,
"operator": "AND",
"rules": [
{
"type": "url_pattern",
"operator": "contains",
"value": "/checkout"
}
]
}
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"name": "John Doe",
"type": "url",
"src": "example_string",
"code": "example_string",
"description": "example_string",
"trigger_rules": {
"version": 1,
"operator": "AND",
"rules": [
{
"type": "url_pattern",
"operator": "contains",
"value": "/checkout"
}
]
}
}`)
req, err := http.NewRequest("PATCH", "https://mythic-analytics.gulp.workers.dev/client/v1/config/tag-templates/123e4567-e89b-12d3-a456-426614174000?location_id=example_string", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/config/tag-templates/123e4567-e89b-12d3-a456-426614174000?location_id=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"name": "John Doe",
"type": "url",
"src": "example_string",
"code": "example_string",
"description": "example_string",
"trigger_rules": {
"version": 1,
"operator": "AND",
"rules": [
{
"type": "url_pattern",
"operator": "contains",
"value": "/checkout"
}
]
}
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"owner": "mythic",
"managed": true,
"name": "Hotjar",
"type": "url",
"src": "https://static.hotjar.com/c/hotjar-1234567.js?sv=6",
"code": "example_string",
"description": "example_string",
"trigger_rules": {
"version": 1,
"operator": "AND",
"rules": [
{
"type": "url_pattern",
"operator": "contains",
"value": "/checkout"
}
]
},
"created_at": "2024-12-25T10:00:00Z",
"updated_at": "2024-12-25T10:00:00Z"
},
"kv_sync": "synced"
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later",
"code": 429,
"retryAfter": 3600
}
/client/v1/config/tag-templates/{id}Target server for requests. Edit to use your own host.
Agency key (ak_) or location secret key (sk_). Writes require an agency key. Keys are server-side credentials — this surface serves no CORS headers on purpose. Scoped keys (mcp_) are accepted too and need the tags, snippets or transformers family the route belongs to. See Using an mcp_ key over HTTP.
ak_) or location secret key (sk_). Writes require an agency key. Keys are server-side credentials — this surface serves no CORS headers on purpose. Scoped keys (mcp_) are accepted too and need the tags, snippets or transformers family the route belongs to. See Using an mcp_ key over HTTP.Tag template UUID.
Location to scope to. Required for ak_ keys (or send the X-Location-Id header); ignored for sk_.
The media type of the request body
Optional page/condition rules controlling where the tag or snippet fires. Omitted or null means everywhere.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Agency key (ak_) or location secret key (sk_). Writes require an agency key. Keys are server-side credentials — this surface serves no CORS headers on purpose. Scoped keys (mcp_) are accepted too and need the tags, snippets or transformers family the route belongs to. See Using an mcp_ key over HTTP.
Path Parameters
Tag template UUID.
Query Parameters
Location to scope to. Required for ak_ keys (or send the X-Location-Id header); ignored for sk_.
Body
urlinlineOptional page/condition rules controlling where the tag or snippet fires. Omitted or null means everywhere.
{"version":1,"operator":"AND","rules":[{"type":"url_pattern","operator":"contains","value":"/checkout"}]}Responses
synced, failed: \<reason\>, or not_assigned when no assignment uses the template.