Mist apps
Turn on visitor numbers for a Mist app
Turns on Vercel Web Analytics for the Mist’s Vercel project, which is what the traffic read needs before it can return numbers. Page views then count toward the app’s hosting usage.
Calling it again for an app that is already on answers the same
200, so it is safe to repeat. The request has no body.
Only companies with Mist growth tools turned on can call it. For
any other company this endpoint returns 404 and sends nothing to
Vercel.
A failed request names its reason in error.code:
409not_provisionedwhen the Mist has no Vercel project yet.402web_analytics_plan_requiredwhen the Vercel plan does not include Web Analytics.502web_analytics_forbiddenwhen Mist’s Vercel credential may not change the project.502vendor_errorfor any other Vercel failure.
Returns 409 without error.code while the Mist is
pending_destroy.
Requires a company admin token with the mist.create permission.
POST
/
api
/
v202604
/
mists
/
{mist_id}
/
traffic
/
enablement
Turn on visitor numbers for a Mist app
curl --request POST \
--url https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement', 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://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"traffic_enablement": {
"enabled": true
},
"status": 200,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}{
"message": "<string>"
}{
"error": {
"code": "web_analytics_plan_required",
"message": "Web Analytics needs a paid Vercel plan"
},
"status": 402,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}{
"error": "<string>"
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "not_provisioned",
"message": "hosting has no vercel_project_id"
},
"status": 409,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}{
"error": {
"code": "vendor_error",
"message": "vercel answered 500"
},
"status": 502,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}Authorizations
Bearer token authentication. Accepts company admin tokens with
the matching mist.* permission:
mist.viewto list and show Mistsmist.createto create and rename Mists, and to turn on visitor numbersmist.destroyto delete and restore Mistsmist.codefor deployments, logs, and trafficmist.env_varsto read and manage environment variables Droplet installation tokens are refused.
Path Parameters
UUID of the company-owned Mist app.
⌘I
Turn on visitor numbers for a Mist app
curl --request POST \
--url https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement', 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://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/mists/{mist_id}/traffic/enablement")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"traffic_enablement": {
"enabled": true
},
"status": 200,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}{
"message": "<string>"
}{
"error": {
"code": "web_analytics_plan_required",
"message": "Web Analytics needs a paid Vercel plan"
},
"status": 402,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}{
"error": "<string>"
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "not_provisioned",
"message": "hosting has no vercel_project_id"
},
"status": 409,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}{
"error": {
"code": "vendor_error",
"message": "vercel answered 500"
},
"status": 502,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-10-14T15:02:11Z"
}
}