Change a vehicle's official status
curl --request PATCH \
--url http://localhost:3000/api/pnc/vehicles/{id} \
--header 'Content-Type: application/json' \
--cookie __Host-argus-session= \
--data '
{
"reason": "Policy cancelled"
}
'import requests
url = "http://localhost:3000/api/pnc/vehicles/{id}"
payload = { "reason": "Policy cancelled" }
headers = {
"cookie": "__Host-argus-session=",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {cookie: '__Host-argus-session=', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Policy cancelled'})
};
fetch('http://localhost:3000/api/pnc/vehicles/{id}', 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/pnc/vehicles/{id}",
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([
'reason' => 'Policy cancelled'
]),
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/pnc/vehicles/{id}"
payload := strings.NewReader("{\n \"reason\": \"Policy cancelled\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("http://localhost:3000/api/pnc/vehicles/{id}")
.header("cookie", "__Host-argus-session=")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Policy cancelled\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/pnc/vehicles/{id}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Patch.new(url)
request["cookie"] = '__Host-argus-session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Policy cancelled\"\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": "UNINSURED",
"motStatus": "VALID",
"taxStatus": "TAXED",
"createdAt": "2026-10-06T19:30:00.000Z",
"updatedAt": "2026-10-06T19:42:10.000Z"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Request validation failed.",
"details": [
{
"path": [
"insuranceStatus"
],
"message": "Invalid input"
}
]
},
"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: pnc.vehicles.manage."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "NOT_FOUND",
"message": "Vehicle not found."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "NO_CHANGE",
"message": "The vehicle already has these statuses."
},
"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"
}Lookup
Change a vehicle's official status
Permission: pnc.vehicles.manage. Needs a signed-in user; service credentials are refused with USER_REQUIRED.
Access: Browser session only.
Changes registration, insurance, MOT or tax status. At least one must actually change. Recorded as VEHICLE_STATUS_CHANGED with the reason, and audited as pnc.vehicle.status.changed.
PATCH
/
pnc
/
vehicles
/
{id}
Change a vehicle's official status
curl --request PATCH \
--url http://localhost:3000/api/pnc/vehicles/{id} \
--header 'Content-Type: application/json' \
--cookie __Host-argus-session= \
--data '
{
"reason": "Policy cancelled"
}
'import requests
url = "http://localhost:3000/api/pnc/vehicles/{id}"
payload = { "reason": "Policy cancelled" }
headers = {
"cookie": "__Host-argus-session=",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {cookie: '__Host-argus-session=', 'Content-Type': 'application/json'},
body: JSON.stringify({reason: 'Policy cancelled'})
};
fetch('http://localhost:3000/api/pnc/vehicles/{id}', 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/pnc/vehicles/{id}",
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([
'reason' => 'Policy cancelled'
]),
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/pnc/vehicles/{id}"
payload := strings.NewReader("{\n \"reason\": \"Policy cancelled\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("http://localhost:3000/api/pnc/vehicles/{id}")
.header("cookie", "__Host-argus-session=")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"Policy cancelled\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/api/pnc/vehicles/{id}")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Patch.new(url)
request["cookie"] = '__Host-argus-session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"reason\": \"Policy cancelled\"\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": "UNINSURED",
"motStatus": "VALID",
"taxStatus": "TAXED",
"createdAt": "2026-10-06T19:30:00.000Z",
"updatedAt": "2026-10-06T19:42:10.000Z"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Request validation failed.",
"details": [
{
"path": [
"insuranceStatus"
],
"message": "Invalid input"
}
]
},
"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: pnc.vehicles.manage."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "NOT_FOUND",
"message": "Vehicle not found."
},
"requestId": "3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70"
}{
"error": {
"code": "NO_CHANGE",
"message": "The vehicle already has these statuses."
},
"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
Vehicle ID. Argus record identifier.
Required string length:
1 - 64Pattern:
^[a-zA-Z0-9_-]+$Body
application/json
Required string length:
3 - 500Available options:
REGISTERED, SUSPENDED, SCRAPPED Available options:
INSURED, UNINSURED Available options:
VALID, EXPIRED Available options:
TAXED, UNTAXED, SORN Response
Success.
Show child attributes
Show child attributes