curl --request PUT \
--url https://api.valar.space/operations/spacecraft/{id}/lifecycle \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lifecycleStatus": "Archived",
"confirmTaskDeletion": true
}
'import requests
url = "https://api.valar.space/operations/spacecraft/{id}/lifecycle"
payload = {
"lifecycleStatus": "Archived",
"confirmTaskDeletion": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({lifecycleStatus: 'Archived', confirmTaskDeletion: true})
};
fetch('https://api.valar.space/operations/spacecraft/{id}/lifecycle', 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.valar.space/operations/spacecraft/{id}/lifecycle",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'lifecycleStatus' => 'Archived',
'confirmTaskDeletion' => true
]),
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://api.valar.space/operations/spacecraft/{id}/lifecycle"
payload := strings.NewReader("{\n \"lifecycleStatus\": \"Archived\",\n \"confirmTaskDeletion\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.valar.space/operations/spacecraft/{id}/lifecycle")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lifecycleStatus\": \"Archived\",\n \"confirmTaskDeletion\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.valar.space/operations/spacecraft/{id}/lifecycle")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lifecycleStatus\": \"Archived\",\n \"confirmTaskDeletion\": true\n}"
response = http.request(request)
puts response.read_body{
"absorption": 0.4,
"bodyShape": "BOX",
"boxX": 1.5,
"boxY": 1,
"boxZ": 2,
"catalogueNoradId": 123,
"color": "#FF5733",
"cosparId": "2024-001A",
"createdAt": "2023-11-07T05:31:56Z",
"dragArea": 5,
"dragCoefficient": 2.2,
"dryMass": 450,
"externalKey": "PARTNER-SAT-001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"inertiaIxx": 1500,
"inertiaIyy": 1700,
"inertiaIzz": 2100,
"launchMass": 500,
"lifecycleStatus": "Active",
"maneuverCapabilities": {
"allowedWindows": [
{
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
}
],
"availableManeuverPowerWatts": 123,
"blackoutWindows": [
{
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
}
],
"minimumManeuverSeparationSeconds": 123,
"schemaVersion": 123,
"thrusters": [
{
"alignmentError": {
"xRadians": 123,
"yRadians": 123,
"zRadians": 123
},
"allowedDirections": [
"RADIAL_OUT"
],
"combinedSteeringAllowed": true,
"dutyCycleWindowSeconds": 123,
"eclipsePolicy": "SUNLIGHT_ONLY",
"maximumDutyCycle": 123,
"minimumBurnSeconds": 123,
"minimumImpulseNewtonSeconds": 123,
"overheadBurns": [
{
"anchor": "BEFORE_MAIN_BURN",
"direction": "RADIAL_OUT",
"durationSeconds": 123,
"offsetSeconds": 123,
"thrusterId": "<string>"
}
],
"requiredPowerWatts": 123,
"settlingSeconds": 123,
"thrusterId": "<string>"
}
]
},
"name": "Sentinel-1A",
"noradId": 43013,
"notYetCatalogued": true,
"organizationId": "VALAR",
"panels": [
{
"absorption": 0.3,
"derivedNormal": {
"x": 1,
"y": 0,
"z": 0
},
"doubleSided": true,
"lengthM": 2,
"mountAxisCustomX": 0,
"mountAxisCustomY": 0,
"mountAxisCustomZ": 5,
"mountAxisPreset": "PLUS_Z",
"mountPositionX": -1.5,
"mountPositionY": 0,
"mountPositionZ": 0.25,
"name": "Port array",
"panelIndex": 0,
"rotationDeg": 90,
"specularReflection": 0.2,
"widthM": 1
}
],
"prismAxis": "Z",
"prismComplementaryDiameter": 1,
"prismDiameter": 0.866025,
"prismDiameterMeasure": "INSCRIBED",
"prismEdgeM": 0.5,
"prismHeightM": 1,
"prismSides": 6,
"reflectivityCoefficient": 1,
"specularReflection": 0.3,
"srpArea": 5,
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "import.tracking.tdm.parse_failed",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"details": {},
"error": "Bad Request",
"fieldErrors": {},
"message": "Invalid spacecraft ID format",
"params": {},
"path": "/api/v1/stm/credentials",
"status": 400,
"timestamp": "2025-11-14T10:15:30.123Z"
}{
"error": "invalid_token",
"error_description": "An error occurred while attempting to decode the Jwt"
}{
"code": "import.tracking.tdm.parse_failed",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"details": {},
"error": "Bad Request",
"fieldErrors": {},
"message": "Invalid spacecraft ID format",
"params": {},
"path": "/api/v1/stm/credentials",
"status": 400,
"timestamp": "2025-11-14T10:15:30.123Z"
}{
"code": "import.tracking.tdm.parse_failed",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"details": {},
"error": "Bad Request",
"fieldErrors": {},
"message": "Invalid spacecraft ID format",
"params": {},
"path": "/api/v1/stm/credentials",
"status": 400,
"timestamp": "2025-11-14T10:15:30.123Z"
}{
"taskCount": 3
}Update a spacecraft lifecycle status
Updates the lifecycle status (Active or Archived) of a spacecraft resolved strictly by id. Returns 404 if it does not exist.
curl --request PUT \
--url https://api.valar.space/operations/spacecraft/{id}/lifecycle \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lifecycleStatus": "Archived",
"confirmTaskDeletion": true
}
'import requests
url = "https://api.valar.space/operations/spacecraft/{id}/lifecycle"
payload = {
"lifecycleStatus": "Archived",
"confirmTaskDeletion": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({lifecycleStatus: 'Archived', confirmTaskDeletion: true})
};
fetch('https://api.valar.space/operations/spacecraft/{id}/lifecycle', 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.valar.space/operations/spacecraft/{id}/lifecycle",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'lifecycleStatus' => 'Archived',
'confirmTaskDeletion' => true
]),
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://api.valar.space/operations/spacecraft/{id}/lifecycle"
payload := strings.NewReader("{\n \"lifecycleStatus\": \"Archived\",\n \"confirmTaskDeletion\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.valar.space/operations/spacecraft/{id}/lifecycle")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lifecycleStatus\": \"Archived\",\n \"confirmTaskDeletion\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.valar.space/operations/spacecraft/{id}/lifecycle")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lifecycleStatus\": \"Archived\",\n \"confirmTaskDeletion\": true\n}"
response = http.request(request)
puts response.read_body{
"absorption": 0.4,
"bodyShape": "BOX",
"boxX": 1.5,
"boxY": 1,
"boxZ": 2,
"catalogueNoradId": 123,
"color": "#FF5733",
"cosparId": "2024-001A",
"createdAt": "2023-11-07T05:31:56Z",
"dragArea": 5,
"dragCoefficient": 2.2,
"dryMass": 450,
"externalKey": "PARTNER-SAT-001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"inertiaIxx": 1500,
"inertiaIyy": 1700,
"inertiaIzz": 2100,
"launchMass": 500,
"lifecycleStatus": "Active",
"maneuverCapabilities": {
"allowedWindows": [
{
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
}
],
"availableManeuverPowerWatts": 123,
"blackoutWindows": [
{
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
}
],
"minimumManeuverSeparationSeconds": 123,
"schemaVersion": 123,
"thrusters": [
{
"alignmentError": {
"xRadians": 123,
"yRadians": 123,
"zRadians": 123
},
"allowedDirections": [
"RADIAL_OUT"
],
"combinedSteeringAllowed": true,
"dutyCycleWindowSeconds": 123,
"eclipsePolicy": "SUNLIGHT_ONLY",
"maximumDutyCycle": 123,
"minimumBurnSeconds": 123,
"minimumImpulseNewtonSeconds": 123,
"overheadBurns": [
{
"anchor": "BEFORE_MAIN_BURN",
"direction": "RADIAL_OUT",
"durationSeconds": 123,
"offsetSeconds": 123,
"thrusterId": "<string>"
}
],
"requiredPowerWatts": 123,
"settlingSeconds": 123,
"thrusterId": "<string>"
}
]
},
"name": "Sentinel-1A",
"noradId": 43013,
"notYetCatalogued": true,
"organizationId": "VALAR",
"panels": [
{
"absorption": 0.3,
"derivedNormal": {
"x": 1,
"y": 0,
"z": 0
},
"doubleSided": true,
"lengthM": 2,
"mountAxisCustomX": 0,
"mountAxisCustomY": 0,
"mountAxisCustomZ": 5,
"mountAxisPreset": "PLUS_Z",
"mountPositionX": -1.5,
"mountPositionY": 0,
"mountPositionZ": 0.25,
"name": "Port array",
"panelIndex": 0,
"rotationDeg": 90,
"specularReflection": 0.2,
"widthM": 1
}
],
"prismAxis": "Z",
"prismComplementaryDiameter": 1,
"prismDiameter": 0.866025,
"prismDiameterMeasure": "INSCRIBED",
"prismEdgeM": 0.5,
"prismHeightM": 1,
"prismSides": 6,
"reflectivityCoefficient": 1,
"specularReflection": 0.3,
"srpArea": 5,
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "import.tracking.tdm.parse_failed",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"details": {},
"error": "Bad Request",
"fieldErrors": {},
"message": "Invalid spacecraft ID format",
"params": {},
"path": "/api/v1/stm/credentials",
"status": 400,
"timestamp": "2025-11-14T10:15:30.123Z"
}{
"error": "invalid_token",
"error_description": "An error occurred while attempting to decode the Jwt"
}{
"code": "import.tracking.tdm.parse_failed",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"details": {},
"error": "Bad Request",
"fieldErrors": {},
"message": "Invalid spacecraft ID format",
"params": {},
"path": "/api/v1/stm/credentials",
"status": 400,
"timestamp": "2025-11-14T10:15:30.123Z"
}{
"code": "import.tracking.tdm.parse_failed",
"correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"details": {},
"error": "Bad Request",
"fieldErrors": {},
"message": "Invalid spacecraft ID format",
"params": {},
"path": "/api/v1/stm/credentials",
"status": 400,
"timestamp": "2025-11-14T10:15:30.123Z"
}{
"taskCount": 3
}Authorizations
API Key (format: vsp_sk_...)
Path Parameters
Spacecraft identifier
Body
Request payload for updating spacecraft lifecycle status
Lifecycle status (ONLY Active or Archived allowed)
Active, Archived ^(Active|Archived)$"Archived"
Confirms permanent deletion of the craft's scheduled tasks when archiving. Required (true) only to archive a craft that has scheduled tasks; ignored on restore and for a craft with no tasks.
true
Response
Lifecycle status updated successfully
Response containing spacecraft details
Optical absorption coefficient α (dimensionless). Range (0.0, 1.0].
0.4
Body geometry primitive (BOX or REGULAR_PRISM).
BOX, REGULAR_PRISM "BOX"
Spacecraft box/bus X dimension (width) in meters
1.5
Spacecraft box/bus Y dimension (height) in meters
1
Spacecraft box/bus Z dimension (length) in meters
2
Spacecraft color in hex format
"#FF5733"
COSPAR international designator
"2024-001A"
Timestamp when the spacecraft was created
Operator-typed drag cross-sectional area in m² (null for pre-migration spacecraft)
5
Drag coefficient
2.2
Mass without propellant in kg
450
Caller-assigned external reference key (unique within your organization; immutable once set). Null when no key has been assigned.
"PARTNER-SAT-001"
Unique identifier of the spacecraft
"550e8400-e29b-41d4-a716-446655440000"
Principal moment of inertia about the body's primary principal axis (kg·m²). Optional; null when inertia is not configured.
1500
Principal moment of inertia about the body's secondary principal axis (kg·m²). Optional; null when inertia is not configured.
1700
Principal moment of inertia about the body's tertiary principal axis (kg·m²). Optional; null when inertia is not configured.
2100
Total mass at launch in kg
500
Lifecycle status of the spacecraft
"Active"
Reusable declared maneuver capabilities; null means not configured, not unrestricted.
Show child attributes
Show child attributes
Name of the spacecraft
"Sentinel-1A"
NORAD catalog number
43013
Organization ID that owns this spacecraft
"VALAR"
Per-panel rows (0..8). Each entry carries dimensions, attachment face, and orientation angles.
Show child attributes
Show child attributes
Extrusion axis of the regular prism (DKR-1 §3.4). Populated only when bodyShape=REGULAR_PRISM; null otherwise.
X, Y, Z "Z"
Cross-section diameter in the OTHER datum (the complement of prismDiameterMeasure), computed from edge + sides (DKR-1 §3.4). Populated only when bodyShape=REGULAR_PRISM; null otherwise.
1
Cross-section diameter in the operator's chosen datum (prismDiameterMeasure), computed from edge + sides (DKR-1 §3.4). Populated only when bodyShape=REGULAR_PRISM; null otherwise.
0.866025
Which diameter datum the operator used to size the cross-section (DKR-1 §3.4). Populated only when bodyShape=REGULAR_PRISM; null otherwise.
INSCRIBED, CIRCUMSCRIBED "INSCRIBED"
Canonical regular-polygon edge length a in meters (DKR-1 §6) — the persisted source-of-truth cross-section dimension. Populated only when bodyShape=REGULAR_PRISM; null otherwise.
0.5
Regular-prism height L along the extrusion axis in meters. Populated only when bodyShape=REGULAR_PRISM; null otherwise.
1
Number of regular-polygon sides N (DKR-1 §3.4). Populated only when bodyShape=REGULAR_PRISM; null otherwise.
6
Reflectivity coefficient
1
Optical specular-reflection coefficient ρs (dimensionless). Range [0.0, 1.0).
0.3
Operator-typed SRP cross-sectional area in m² (null for pre-migration spacecraft)
5
Timestamp when the spacecraft was last updated
Was this page helpful?