Transfer a vehicle to another character
curl --request POST \
--url http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer \
--header 'Content-Type: application/json' \
--cookie __Host-argus-session= \
--data '
{
"toCivilianId": "cmg6a1civ000gl508civ00002"
}
'import requests
url = "http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer"
payload = { "toCivilianId": "cmg6a1civ000gl508civ00002" }
headers = {
"cookie": "__Host-argus-session=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {cookie: '__Host-argus-session=', 'Content-Type': 'application/json'},
body: JSON.stringify({toCivilianId: 'cmg6a1civ000gl508civ00002'})
};
fetch('http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer', 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 => "3000",
CURLOPT_URL => "http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer",
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([
'toCivilianId' => 'cmg6a1civ000gl508civ00002'
]),
CURLOPT_COOKIE => "__Host-argus-session=",
CURLOPT_HTTPHEADER => [
"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:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer"
payload := strings.NewReader("{\n \"toCivilianId\": \"cmg6a1civ000gl508civ00002\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "__Host-argus-session=")
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("http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer")
.header("cookie", "__Host-argus-session=")
.header("Content-Type", "application/json")
.body("{\n \"toCivilianId\": \"cmg6a1civ000gl508civ00002\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["cookie"] = '__Host-argus-session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"toCivilianId\": \"cmg6a1civ000gl508civ00002\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "cmg6a4veh000jl508veh00001",
"plate": "LK21ABC",
"make": "BMW",
"model": "3 Series",
"colour": "Black",
"type": "CAR",
"registrationStatus": "REGISTERED",
"insuranceStatus": "INSURED",
"motStatus": "VALID",
"taxStatus": "TAXED",
"createdAt": "2026-10-06T19:30:00.000Z",
"updatedAt": "2026-10-06T19:30:00.000Z",
"keeperSince": "2026-10-06T19:42:10.000Z"
}
}{
"error": {
"code": "INVALID_TRANSFER",
"message": "The vehicle is already kept by this character."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Sign in to continue."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "FORBIDDEN",
"message": "Permission required: civilians.manage_own."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "NOT_FOUND",
"message": "Character not found."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "CIVILIAN_INACTIVE",
"message": "Only an active character can do this."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "The request could not be completed."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}Civilians
Transfer a vehicle to another character
Permission: civilians.manage_own. The caller must own both characters, or hold civilians.manage.
Access: Browser session only.
Ends the current keeper period and starts a new one, so the vehicle keeps its keeper history. The new keeper must be an active character.
POST
/
civilians
/
{id}
/
vehicles
/
{vehicleId}
/
transfer
Transfer a vehicle to another character
curl --request POST \
--url http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer \
--header 'Content-Type: application/json' \
--cookie __Host-argus-session= \
--data '
{
"toCivilianId": "cmg6a1civ000gl508civ00002"
}
'import requests
url = "http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer"
payload = { "toCivilianId": "cmg6a1civ000gl508civ00002" }
headers = {
"cookie": "__Host-argus-session=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {cookie: '__Host-argus-session=', 'Content-Type': 'application/json'},
body: JSON.stringify({toCivilianId: 'cmg6a1civ000gl508civ00002'})
};
fetch('http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer', 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 => "3000",
CURLOPT_URL => "http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer",
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([
'toCivilianId' => 'cmg6a1civ000gl508civ00002'
]),
CURLOPT_COOKIE => "__Host-argus-session=",
CURLOPT_HTTPHEADER => [
"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:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer"
payload := strings.NewReader("{\n \"toCivilianId\": \"cmg6a1civ000gl508civ00002\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "__Host-argus-session=")
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("http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer")
.header("cookie", "__Host-argus-session=")
.header("Content-Type", "application/json")
.body("{\n \"toCivilianId\": \"cmg6a1civ000gl508civ00002\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/civilians/{id}/vehicles/{vehicleId}/transfer")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["cookie"] = '__Host-argus-session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"toCivilianId\": \"cmg6a1civ000gl508civ00002\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "cmg6a4veh000jl508veh00001",
"plate": "LK21ABC",
"make": "BMW",
"model": "3 Series",
"colour": "Black",
"type": "CAR",
"registrationStatus": "REGISTERED",
"insuranceStatus": "INSURED",
"motStatus": "VALID",
"taxStatus": "TAXED",
"createdAt": "2026-10-06T19:30:00.000Z",
"updatedAt": "2026-10-06T19:30:00.000Z",
"keeperSince": "2026-10-06T19:42:10.000Z"
}
}{
"error": {
"code": "INVALID_TRANSFER",
"message": "The vehicle is already kept by this character."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Sign in to continue."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "FORBIDDEN",
"message": "Permission required: civilians.manage_own."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "NOT_FOUND",
"message": "Character not found."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "CIVILIAN_INACTIVE",
"message": "Only an active character can do this."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "The request could not be completed."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}Authorizations
The opaque session cookie set by Discord sign-in. Named argus-session outside production. HttpOnly, so scripts cannot read it; same-origin requests send it automatically. Requests other than GET must also carry an Origin header equal to the application's own origin.
Path Parameters
Civilian ID of the current keeper. Argus record identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$Vehicle ID. Argus record identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$Body
application/json
Argus record identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$Response
Success.
Show child attributes
Show child attributes