Did the Convert deliveries actually count?
convert_experiments destinations only. Convert's track endpoint returns HTTP 200 for payloads it silently discards and offers no per-request status, so a destination delivering nothing looks exactly like a healthy one — a clean run of 200s either way. The only evidence is whether the number in Convert's own report moved. This endpoint folds the delivery log and asks Convert's report for the same window.
The evidence is asymmetric. Convert counts a goal from every source — its own pixel goals, the client-side adapter, and this destination — and other sources can only ADD. So a matching number is reported as consistent, never as "verified": your contribution can only be isolated when the goal is used by this destination alone. A shortfall is the real signal, because nothing else can subtract.
The comparison uses distinct visitors sent, not deliveries: Convert counts one conversion per visitor per goal, so comparing raw delivery counts would show a permanent phantom shortfall for any account whose customers convert more than once.
Both sides are scoped to ONE experience. Convert's report is per experience and goal, so the sent side counts only deliveries that named the same experience. expected is therefore usually smaller than sent.distinct_visitors, which stays the window total across every experience — sent.for_experience is what was compared, and sent.by_experience shows the full split. Without a query parameter the experience with the most delivered visitors is chosen; pass experience_id to compare a different one.
Requires a stored reporting credential (PUT /client/v1/destinations/credentials/convert_experiments with credential_name: reporting). Without one this returns 409.
curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/destinations/example_string/verification?days=7&experience_id=example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/destinations/example_string/verification?days=7&experience_id=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/destinations/example_string/verification?days=7&experience_id=example_string", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://mythic-analytics.gulp.workers.dev/client/v1/destinations/example_string/verification?days=7&experience_id=example_string", nil)
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/destinations/example_string/verification?days=7&experience_id=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"action_id": "123e4567-e89b-12d3-a456-426614174000",
"window": {
"days": 42,
"start": "2024-12-25T10:00:00Z",
"end": "2024-12-25T10:00:00Z"
},
"convert": {
"account_id": "example_string",
"project_id": "example_string",
"goal_id": "example_string",
"experience_id": "example_string"
},
"sent": {
"success": 42,
"failed": 42,
"distinct_visitors": 42,
"for_experience": {
"success": 42,
"distinct_visitors": 42
},
"by_experience": {},
"skipped": {
"no_visitor_id": 123,
"no_experiments": 42
},
"truncated": true
},
"counted": 10,
"by_variation": {},
"experiment": {
"status": "example_string",
"name": "John Doe"
},
"expected": 42,
"verdict": "consistent",
"headline": "example_string",
"caveats": [
"example_string"
]
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
{
"error": "Conflict",
"message": "The request conflicts with the current state of the resource",
"code": 409,
"details": "Resource already exists"
}
{
"error": "Service Unavailable",
"message": "The service is temporarily unavailable. Please try again later",
"code": 503
}
/client/v1/destinations/{id}/verificationTarget server for requests. Edit to use your own host.
Client key as bearer token. Use an agency key (Bearer ak_...) for read-write access or a location secret key (Bearer sk_...) for read-only access. Scoped keys (mcp_) are accepted too and need destinations:read or destinations:write. See Using an mcp_ key over HTTP.
Bearer ak_...) for read-write access or a location secret key (Bearer sk_...) for read-only access. Scoped keys (mcp_) are accepted too and need destinations:read or destinations:write. See Using an mcp_ key over HTTP.
Window to check, in days. Default 7. Values outside 1-90 are clamped to that range rather than rejected, so the window in the response is the authority on what was actually compared.
Convert experience to check. Numeric; a non-numeric value is a 400. Defaults to the delivered experience with the most distinct visitors; pass this when the deliveries span several.
An id that is numeric but does not exist in the project returns report_unavailable — Convert cannot report on it — NOT nothing_sent_for_experience. sent.by_experience in any response lists the ids actually delivered to.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Client key as bearer token. Use an agency key (Bearer ak_...) for read-write access or a location secret key (Bearer sk_...) for read-only access. Scoped keys (mcp_) are accepted too and need destinations:read or destinations:write. See Using an mcp_ key over HTTP.
Path Parameters
Query Parameters
Window to check, in days. Default 7. Values outside 1-90 are clamped to that range rather than rejected, so the window in the response is the authority on what was actually compared.
Convert experience to check. Numeric; a non-numeric value is a 400. Defaults to the delivered experience with the most distinct visitors; pass this when the deliveries span several.
An id that is numeric but does not exist in the project returns report_unavailable — Convert cannot report on it — NOT nothing_sent_for_experience. sent.by_experience in any response lists the ids actually delivered to.