Remove a location from a cluster
curl --request DELETE \
--url https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}"
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))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}",
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;
}HttpResponse<String> response = Unirest.delete("https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}")
.header("Authorization", "Bearer <token>")
.asString();{
"clusterId": "clst_20260612_a1b2c3d4",
"tenantUuid": "<string>",
"name": "North Campus",
"locationIds": [
"3632155",
"3632156"
],
"limitKw": 200,
"status": "ACTIVE",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}Clusters
Remove a location from a cluster
Removes one location from a cluster’s locationIds. This is an
atomic alternative to PATCH /clusters/{clusterId} with a shortened
locationIds array, so concurrent removals cannot race each other.
A cluster must always have at least one member location. Removing
the last one fails with 400 CLUSTER_EMPTY. Delete the cluster
instead with DELETE /clusters/{clusterId}.
DELETE
/
clusters
/
{clusterId}
/
locations
/
{locationId}
Remove a location from a cluster
curl --request DELETE \
--url https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}"
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))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}",
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;
}HttpResponse<String> response = Unirest.delete("https://api.ridergy.com/v1/clusters/{clusterId}/locations/{locationId}")
.header("Authorization", "Bearer <token>")
.asString();{
"clusterId": "clst_20260612_a1b2c3d4",
"tenantUuid": "<string>",
"name": "North Campus",
"locationIds": [
"3632155",
"3632156"
],
"limitKw": 200,
"status": "ACTIVE",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}Authorizations
OAuth 2.0 access token obtained via POST /oauth/token with client_credentials grant.
Tenant and scopes are embedded in the JWT. No additional headers needed.
Path Parameters
The cluster's unique identifier, returned when the cluster was created.
The location's unique identifier.
Response
Location removed, updated cluster returned

