Write feature states
curl --request PATCH \
--url http://localhost:4000/api/v1/feature-states \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"feature_name": "<string>",
"implementation_name": "<string>",
"product_name": "<string>",
"states": {}
}
'import requests
url = "http://localhost:4000/api/v1/feature-states"
payload = {
"feature_name": "<string>",
"implementation_name": "<string>",
"product_name": "<string>",
"states": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
feature_name: '<string>',
implementation_name: '<string>',
product_name: '<string>',
states: {}
})
};
fetch('http://localhost:4000/api/v1/feature-states', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4000",
CURLOPT_URL => "http://localhost:4000/api/v1/feature-states",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'feature_name' => '<string>',
'implementation_name' => '<string>',
'product_name' => '<string>',
'states' => [
]
]),
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 := "http://localhost:4000/api/v1/feature-states"
payload := strings.NewReader("{\n \"feature_name\": \"<string>\",\n \"implementation_name\": \"<string>\",\n \"product_name\": \"<string>\",\n \"states\": {}\n}")
req, _ := http.NewRequest("PATCH", 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.patch("http://localhost:4000/api/v1/feature-states")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"feature_name\": \"<string>\",\n \"implementation_name\": \"<string>\",\n \"product_name\": \"<string>\",\n \"states\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4000/api/v1/feature-states")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"feature_name\": \"<string>\",\n \"implementation_name\": \"<string>\",\n \"product_name\": \"<string>\",\n \"states\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"feature_name": "<string>",
"implementation_id": "<string>",
"implementation_name": "<string>",
"product_name": "<string>",
"states_written": 123,
"warnings": [
"<string>"
]
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}Actions
Write feature states
Record implementation-specific progress for one feature in one implementation. State writes do not change requirement text or code refs; they only capture how this implementation currently evaluates each requirement, for example assigned, blocked, completed, or accepted. On first write, local state starts from the parent implementation when one exists, then applies the incoming changes. Use this after analysis, coding, review, or QA to record progress without changing branch-derived truth.
PATCH
/
feature-states
Write feature states
curl --request PATCH \
--url http://localhost:4000/api/v1/feature-states \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"feature_name": "<string>",
"implementation_name": "<string>",
"product_name": "<string>",
"states": {}
}
'import requests
url = "http://localhost:4000/api/v1/feature-states"
payload = {
"feature_name": "<string>",
"implementation_name": "<string>",
"product_name": "<string>",
"states": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
feature_name: '<string>',
implementation_name: '<string>',
product_name: '<string>',
states: {}
})
};
fetch('http://localhost:4000/api/v1/feature-states', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4000",
CURLOPT_URL => "http://localhost:4000/api/v1/feature-states",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'feature_name' => '<string>',
'implementation_name' => '<string>',
'product_name' => '<string>',
'states' => [
]
]),
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 := "http://localhost:4000/api/v1/feature-states"
payload := strings.NewReader("{\n \"feature_name\": \"<string>\",\n \"implementation_name\": \"<string>\",\n \"product_name\": \"<string>\",\n \"states\": {}\n}")
req, _ := http.NewRequest("PATCH", 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.patch("http://localhost:4000/api/v1/feature-states")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"feature_name\": \"<string>\",\n \"implementation_name\": \"<string>\",\n \"product_name\": \"<string>\",\n \"states\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4000/api/v1/feature-states")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"feature_name\": \"<string>\",\n \"implementation_name\": \"<string>\",\n \"product_name\": \"<string>\",\n \"states\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"feature_name": "<string>",
"implementation_id": "<string>",
"implementation_name": "<string>",
"product_name": "<string>",
"states_written": 123,
"warnings": [
"<string>"
]
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}{
"errors": {
"detail": "<string>",
"status": "<string>"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Feature states request body
Response
Feature states written
Show child attributes
Show child attributes
⌘I