curl --request POST \
--url https://panel.metricanic.com/api/v1/offers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sweeps CC Submit US",
"url": "https://network.example.com/click?offer=123&aff_click_id={click_id}",
"affiliateNetworkId": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"appendClickId": true,
"country": "US"
}
'import requests
url = "https://panel.metricanic.com/api/v1/offers"
payload = {
"name": "Sweeps CC Submit US",
"url": "https://network.example.com/click?offer=123&aff_click_id={click_id}",
"affiliateNetworkId": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"appendClickId": True,
"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: 'Sweeps CC Submit US',
url: 'https://network.example.com/click?offer=123&aff_click_id={click_id}',
affiliateNetworkId: '8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a',
appendClickId: true,
country: 'US'
})
};
fetch('https://panel.metricanic.com/api/v1/offers', 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/offers",
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' => 'Sweeps CC Submit US',
'url' => 'https://network.example.com/click?offer=123&aff_click_id={click_id}',
'affiliateNetworkId' => '8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a',
'appendClickId' => true,
'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/offers"
payload := strings.NewReader("{\n \"name\": \"Sweeps CC Submit US\",\n \"url\": \"https://network.example.com/click?offer=123&aff_click_id={click_id}\",\n \"affiliateNetworkId\": \"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\",\n \"appendClickId\": true,\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/offers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sweeps CC Submit US\",\n \"url\": \"https://network.example.com/click?offer=123&aff_click_id={click_id}\",\n \"affiliateNetworkId\": \"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\",\n \"appendClickId\": true,\n \"country\": \"US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.metricanic.com/api/v1/offers")
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\": \"Sweeps CC Submit US\",\n \"url\": \"https://network.example.com/click?offer=123&aff_click_id={click_id}\",\n \"affiliateNetworkId\": \"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\",\n \"appendClickId\": true,\n \"country\": \"US\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"id": "2e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b"
}
}{
"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>"
}Create offer
Creates an offer and returns its ID. JSON request bodies are limited to 32768 bytes.
curl --request POST \
--url https://panel.metricanic.com/api/v1/offers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Sweeps CC Submit US",
"url": "https://network.example.com/click?offer=123&aff_click_id={click_id}",
"affiliateNetworkId": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"appendClickId": true,
"country": "US"
}
'import requests
url = "https://panel.metricanic.com/api/v1/offers"
payload = {
"name": "Sweeps CC Submit US",
"url": "https://network.example.com/click?offer=123&aff_click_id={click_id}",
"affiliateNetworkId": "8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a",
"appendClickId": True,
"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: 'Sweeps CC Submit US',
url: 'https://network.example.com/click?offer=123&aff_click_id={click_id}',
affiliateNetworkId: '8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a',
appendClickId: true,
country: 'US'
})
};
fetch('https://panel.metricanic.com/api/v1/offers', 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/offers",
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' => 'Sweeps CC Submit US',
'url' => 'https://network.example.com/click?offer=123&aff_click_id={click_id}',
'affiliateNetworkId' => '8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a',
'appendClickId' => true,
'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/offers"
payload := strings.NewReader("{\n \"name\": \"Sweeps CC Submit US\",\n \"url\": \"https://network.example.com/click?offer=123&aff_click_id={click_id}\",\n \"affiliateNetworkId\": \"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\",\n \"appendClickId\": true,\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/offers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sweeps CC Submit US\",\n \"url\": \"https://network.example.com/click?offer=123&aff_click_id={click_id}\",\n \"affiliateNetworkId\": \"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\",\n \"appendClickId\": true,\n \"country\": \"US\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.metricanic.com/api/v1/offers")
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\": \"Sweeps CC Submit US\",\n \"url\": \"https://network.example.com/click?offer=123&aff_click_id={click_id}\",\n \"affiliateNetworkId\": \"8d9e0f1a-2b3c-4d5e-8f6a-7b8c9d0e1f2a\",\n \"appendClickId\": true,\n \"country\": \"US\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"id": "2e3f4a5b-6c7d-4e8f-9a0b-1c2d3e4f5a6b"
}
}{
"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
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.
1 - 2048^\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.
UUIDv4 of the affiliate network, trimmed and lowercased before lookup. Null clears the reference.
When true, include the selected network's clickIdParam query parameter exactly once in url with {click_id} as its value. Supply the complete URL, including this parameter.