Schedule a Mist for destruction (15-day grace)
Schedules the Mist for deletion 15 days out. The state changes to
pending_destroy and scheduled_destroy_at is set. The app’s
repository, database, and deployment stay intact throughout the
grace period, so an accidental delete can be undone without data
loss with POST /api/v202604/mists/{mist_id}/restore.
While the Mist is pending_destroy, you can still read and
restore it, but its env var, domain, deployment, and log
endpoints return 409. When the grace period ends, the
app’s resources are permanently torn down.
Returns 409 if the Mist is already pending_destroy, or is
managed by its member site (a site’s backend).
Requires a company admin token with the mist.destroy permission.
curl --request DELETE \
--url https://api.fluid.app/api/v202604/mists/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/mists/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/mists/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
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/{id}"
req, _ := http.NewRequest("DELETE", 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.delete("https://api.fluid.app/api/v202604/mists/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/mists/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"mist": {
"id": "0192f4c1-7a3e-7d52-9b61-3bed85a41c07",
"slug": "3bed85",
"state": "pending_destroy",
"kind": "next_app",
"name": "Loyalty rewards",
"public_url": "https://dunder-mifflin-3bed85.mist.fluid.app",
"provisioned_at": "2026-04-14T16:22:41Z",
"scheduled_destroy_at": "2026-05-06T10:30:00Z",
"template": "rewards-starter",
"egress_proxy_from_template": false,
"created_at": "2026-04-14T16:21:58Z",
"updated_at": "2026-04-21T10:30:00Z"
},
"status": 202,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-04-21T10:30:00Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}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.
curl --request DELETE \
--url https://api.fluid.app/api/v202604/mists/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202604/mists/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202604/mists/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
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/{id}"
req, _ := http.NewRequest("DELETE", 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.delete("https://api.fluid.app/api/v202604/mists/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202604/mists/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"mist": {
"id": "0192f4c1-7a3e-7d52-9b61-3bed85a41c07",
"slug": "3bed85",
"state": "pending_destroy",
"kind": "next_app",
"name": "Loyalty rewards",
"public_url": "https://dunder-mifflin-3bed85.mist.fluid.app",
"provisioned_at": "2026-04-14T16:22:41Z",
"scheduled_destroy_at": "2026-05-06T10:30:00Z",
"template": "rewards-starter",
"egress_proxy_from_template": false,
"created_at": "2026-04-14T16:21:58Z",
"updated_at": "2026-04-21T10:30:00Z"
},
"status": 202,
"meta": {
"request_id": "6f1c2a9e-4b7d-4e8a-9c3f-2d5b8a1e7f40",
"timestamp": "2026-04-21T10:30:00Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"message": "<string>",
"details": {}
},
"status": 123,
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}