Pins

Pin management

List all pins

get
Query parameters
zoneIdintegerOptional
Responses
200

List of pins

application/json
get
/pins
GET /api/pins HTTP/1.1
Host: 
Accept: */*
[
  {
    "id": 1,
    "title": "text",
    "latitude": 1,
    "longitude": 1,
    "geoPose": {},
    "contentType": "APK",
    "contentUrl": "text",
    "localizationData": {
      "trackingMode": "WORLD",
      "worldmapURL": "https://example.com"
    },
    "zoneId": 1,
    "gcpId": 1,
    "createdAt": "2025-10-30T17:41:36.757Z",
    "updatedAt": "2025-10-30T17:41:36.757Z"
  }
]

Create a global pin (outside any zone)

post

Creates a pin that is not associated with any specific zone. This allows pinning objects anywhere on the map without being restricted to defined zones.

Body
titlestringRequired

Title of the pin

contentUrlstring · uriRequired

URL of the content associated with the pin

contentTypestring · enumRequired

Type of content associated with the pin

Possible values:
latitudenumber | nullableOptional

Latitude coordinate (optional, can be derived from geoPose)

longitudenumber | nullableOptional

Longitude coordinate (optional, can be derived from geoPose)

Responses
201

Global pin created successfully

application/json
post
/pins
POST /api/pins HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 185

{
  "title": "text",
  "contentUrl": "https://example.com",
  "contentType": "IMAGE",
  "geoPose": {
    "position": {
      "lat": 1,
      "lon": 1,
      "h": 0
    },
    "angles": {
      "yaw": 0,
      "pitch": 0,
      "roll": 0
    }
  },
  "latitude": 1,
  "longitude": 1
}
{
  "id": 1,
  "title": "text",
  "latitude": 1,
  "longitude": 1,
  "geoPose": {},
  "contentType": "APK",
  "contentUrl": "text",
  "localizationData": {
    "trackingMode": "WORLD",
    "worldmapURL": "https://example.com"
  },
  "zoneId": 1,
  "gcpId": 1,
  "createdAt": "2025-10-30T17:41:36.757Z",
  "updatedAt": "2025-10-30T17:41:36.757Z"
}

Delete a global pin

delete

Deletes a global pin by ID and removes any associated uploaded files. This operation cascades to clean up related file records.

Query parameters
idstringRequired

The ID of the pin to delete

Responses
200

Pin deleted successfully

application/json
delete
/pins
DELETE /api/pins?id=text HTTP/1.1
Host: 
Accept: */*
{
  "message": "Pin deleted successfully",
  "deletedPinId": 1,
  "deletedFilesCount": 1
}

Update a pin

put
Path parameters
idintegerRequired
Body
titlestringRequired
contentUrlstring · uriRequired
contentTypestring · enumRequiredPossible values:
gcpDatastring | nullableOptional
Responses
200

Pin updated

application/json
put
/pins/{id}
PUT /api/pins/{id} HTTP/1.1
Host: 
Content-Type: application/json
Accept: */*
Content-Length: 90

{
  "title": "text",
  "contentUrl": "https://example.com",
  "contentType": "IMAGE",
  "gcpData": "text"
}
{
  "id": 1,
  "title": "text",
  "latitude": 1,
  "longitude": 1,
  "geoPose": {},
  "contentType": "APK",
  "contentUrl": "text",
  "localizationData": {
    "trackingMode": "WORLD",
    "worldmapURL": "https://example.com"
  },
  "zoneId": 1,
  "gcpId": 1,
  "createdAt": "2025-10-30T17:41:36.757Z",
  "updatedAt": "2025-10-30T17:41:36.757Z"
}

Delete a pin

delete
Path parameters
idintegerRequired
Responses
204

Pin deleted

No content

delete
/pins/{id}
DELETE /api/pins/{id} HTTP/1.1
Host: 
Accept: */*

No content