curl --request POST \
--url https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"milestone_id": "00000000-0000-0000-0000-000000000002"
}
'import requests
url = "https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones"
payload = { "milestone_id": "00000000-0000-0000-0000-000000000002" }
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({milestone_id: '00000000-0000-0000-0000-000000000002'})
};
fetch('https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones', 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://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones",
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([
'milestone_id' => '00000000-0000-0000-0000-000000000002'
]),
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://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones"
payload := strings.NewReader("{\n \"milestone_id\": \"00000000-0000-0000-0000-000000000002\"\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://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"milestone_id\": \"00000000-0000-0000-0000-000000000002\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones")
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 \"milestone_id\": \"00000000-0000-0000-0000-000000000002\"\n}"
response = http.request(request)
puts response.read_body{}{}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}Link milestone
Accepts a milestone UUID or exact milestone name in milestone_id. Resolution is restricted to the initiative’s organization and authoritative project scope. Requires edit/admin access to every project linked to the initiative and to the milestone project, which must already be linked. Projectless milestones are unsupported. Successful writes persist the canonical milestone UUID. Invalid identifiers return 400, concealed or out-of-scope references return 404, ambiguous references return 409, and resolver failures return 500.
curl --request POST \
--url https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"milestone_id": "00000000-0000-0000-0000-000000000002"
}
'import requests
url = "https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones"
payload = { "milestone_id": "00000000-0000-0000-0000-000000000002" }
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({milestone_id: '00000000-0000-0000-0000-000000000002'})
};
fetch('https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones', 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://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones",
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([
'milestone_id' => '00000000-0000-0000-0000-000000000002'
]),
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://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones"
payload := strings.NewReader("{\n \"milestone_id\": \"00000000-0000-0000-0000-000000000002\"\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://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"milestone_id\": \"00000000-0000-0000-0000-000000000002\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://atollhq.com/api/orgs/{id}/initiatives/{initiativeId}/milestones")
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 \"milestone_id\": \"00000000-0000-0000-0000-000000000002\"\n}"
response = http.request(request)
puts response.read_body{}{}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}{
"error": "Unauthorized",
"code": "unauthorized"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Milestone UUID or exact milestone name. The resolved milestone must be project-bound and in the initiative's authoritative scope.
1"00000000-0000-0000-0000-000000000002"
"Public beta"
Response
Successful response
The response is of type object.

