curl --request GET \
--url https://api.example.com/workspace/status \
--header 'x-user-id: <x-user-id>'import requests
url = "https://api.example.com/workspace/status"
headers = {"x-user-id": "<x-user-id>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-user-id': '<x-user-id>'}};
fetch('https://api.example.com/workspace/status', 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.example.com/workspace/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-user-id: <x-user-id>"
],
]);
$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.example.com/workspace/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-user-id", "<x-user-id>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/workspace/status")
.header("x-user-id", "<x-user-id>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/workspace/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-user-id"] = '<x-user-id>'
response = http.request(request)
puts response.read_body{
"workdir": "<string>",
"cwd": "<string>",
"git": {
"branch": "<string>",
"head": "<string>",
"ahead": 123,
"behind": 123,
"insertions": 0,
"deletions": 0,
"staged": 0,
"unstaged": 0,
"untracked": 0,
"conflicted": 0
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get Workspace Status
Report where a session is pointed, and the git state of that place.
The directory comes from the session’s own cwd rather than a
query parameter: it is the session’s anchor, and resolving a
relative one needs the workspace root the client cannot see.
Git is best-effort. A directory that is not a repository is the
normal case, not an error, and the sandboxed backends differ in how
they report a missing binary or an unreachable container — so every
failure collapses to git: null and the rest of the response is
still served.
curl --request GET \
--url https://api.example.com/workspace/status \
--header 'x-user-id: <x-user-id>'import requests
url = "https://api.example.com/workspace/status"
headers = {"x-user-id": "<x-user-id>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-user-id': '<x-user-id>'}};
fetch('https://api.example.com/workspace/status', 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.example.com/workspace/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-user-id: <x-user-id>"
],
]);
$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.example.com/workspace/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-user-id", "<x-user-id>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/workspace/status")
.header("x-user-id", "<x-user-id>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/workspace/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-user-id"] = '<x-user-id>'
response = http.request(request)
puts response.read_body{
"workdir": "<string>",
"cwd": "<string>",
"git": {
"branch": "<string>",
"head": "<string>",
"ahead": 123,
"behind": 123,
"insertions": 0,
"deletions": 0,
"staged": 0,
"unstaged": 0,
"untracked": 0,
"conflicted": 0
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Headers
Caller's user ID. Temporary header-based identity; will be replaced by JWT auth.
Response
Successful Response
Where a session is pointed, and the git state of that place.
Absolute path of the workspace root. Backend-dependent — a host directory locally, a fixed path inside the sandbox otherwise — so the client cannot derive it.
Absolute path the session is focused on, resolved from :attr:SessionConfig.cwd. Equals :attr:workdir when that is unset.
Git state of :attr:cwd, or null when there is none to report — not a repository, git unavailable, the command timed out, or the backend could not run it. The caller shows no branch either way, so the reasons are logged rather than returned.
Show child attributes
Show child attributes