Create landing
curl --request POST \
--url https://panel.metricanic.com/api/v1/landings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Main LP EN",
"url": "https://lp.example.com/en/",
"country": "US"
}
'import requests
url = "https://panel.metricanic.com/api/v1/landings"
payload = {
"name": "Main LP EN",
"url": "https://lp.example.com/en/",
"country": "US"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Main LP EN', url: 'https://lp.example.com/en/', country: 'US'})
};
fetch('https://panel.metricanic.com/api/v1/landings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://panel.metricanic.com/api/v1/landings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Main LP EN',
'url' => 'https://lp.example.com/en/',
'country' => 'US'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://panel.metricanic.com/api/v1/landings"
payload := strings.NewReader("{\n \"name\": \"Main LP EN\",\n \"url\": \"https://lp.example.com/en/\",\n \"country\": \"US\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://panel.metricanic.com/api/v1/landings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Main LP EN\",\n \"url\": \"https://lp.example.com/en/\",\n \"country\": \"US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.metricanic.com/api/v1/landings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Main LP EN\",\n \"url\": \"https://lp.example.com/en/\",\n \"country\": \"US\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"id": "4c5d6e7f-8a9b-4c0d-9e1f-2a3b4c5d6e7f"
}
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}Landings
Create landing
Creates a landing and returns its id.
JSON request bodies are limited to 32768 bytes.
POST
/
api
/
v1
/
landings
Create landing
curl --request POST \
--url https://panel.metricanic.com/api/v1/landings \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Main LP EN",
"url": "https://lp.example.com/en/",
"country": "US"
}
'import requests
url = "https://panel.metricanic.com/api/v1/landings"
payload = {
"name": "Main LP EN",
"url": "https://lp.example.com/en/",
"country": "US"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Main LP EN', url: 'https://lp.example.com/en/', country: 'US'})
};
fetch('https://panel.metricanic.com/api/v1/landings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://panel.metricanic.com/api/v1/landings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Main LP EN',
'url' => 'https://lp.example.com/en/',
'country' => 'US'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://panel.metricanic.com/api/v1/landings"
payload := strings.NewReader("{\n \"name\": \"Main LP EN\",\n \"url\": \"https://lp.example.com/en/\",\n \"country\": \"US\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://panel.metricanic.com/api/v1/landings")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Main LP EN\",\n \"url\": \"https://lp.example.com/en/\",\n \"country\": \"US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.metricanic.com/api/v1/landings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Main LP EN\",\n \"url\": \"https://lp.example.com/en/\",\n \"country\": \"US\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"id": "4c5d6e7f-8a9b-4c0d-9e1f-2a3b4c5d6e7f"
}
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}Authorizations
Workspace-scoped token sent in the Authorization header as Bearer . Access depends on the credential's allowed operations, read or write scope, and workspace subscription. Use an API key issued in the tracker for Public API v1. MCP uses separate OAuth credentials.
Body
application/json
Required string length:
1 - 160Public HTTPS URL template, trimmed before saving. Supports tracker macros such as {click_id} and {token1:hash} through {token15:hash} for short token codes.
Required string length:
1 - 2048Pattern:
^\s*[hH][tT][tT][pP][sS]://Supported ISO 3166-1 alpha-2 country code, case-insensitive and trimmed. ZZ, Global, and an empty string normalize to ZZ (Global). This controls asset compatibility, not visitor filtering.