Zones
Zone management
Comma-separated category IDs
List of zones
Internal server error
GET /api/zones HTTP/1.1
Accept: */*
[
{
"id": 1,
"title": "text",
"description": "text",
"geojson": {},
"userId": "text",
"isGlobal": true,
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {},
"previewImageUrl": "text",
"area": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced",
"categories": [
{
"category": {
"id": 1,
"name": "text",
"description": "text",
"color": "text",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
],
"pins": [
{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"_count": {
"pins": 1
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
]Zone created
Bad request
Unauthorized
Internal server error
POST /api/zones HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 122
{
"title": "text",
"description": "text",
"geojson": {},
"categoryIds": [
1
],
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {}
}{
"id": 1,
"title": "text",
"description": "text",
"geojson": {},
"userId": "text",
"isGlobal": true,
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {},
"previewImageUrl": "text",
"area": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced",
"categories": [
{
"category": {
"id": 1,
"name": "text",
"description": "text",
"color": "text",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
],
"pins": [
{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"_count": {
"pins": 1
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Fetches all zones owned by the currently authenticated user, ordered by creation date (newest first).
Bearer token authentication. Pass the session token obtained from /auth/sync.
List of user's zones
Unauthorized
Internal server error
GET /api/zones/mine HTTP/1.1
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
{
"id": 1,
"title": "text",
"description": "text",
"geojson": {},
"userId": "text",
"isGlobal": true,
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {},
"previewImageUrl": "text",
"area": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced",
"categories": [
{
"category": {
"id": 1,
"name": "text",
"description": "text",
"color": "text",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
],
"pins": [
{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"_count": {
"pins": 1
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
]Zone ID
Zone details
Bad request
Resource not found
Validation failed
Internal server error
GET /api/zones/{id} HTTP/1.1
Accept: */*
{
"id": 1,
"title": "text",
"description": "text",
"geojson": {},
"userId": "text",
"isGlobal": true,
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {},
"previewImageUrl": "text",
"area": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced",
"categories": [
{
"category": {
"id": 1,
"name": "text",
"description": "text",
"color": "text",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
],
"pins": [
{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"_count": {
"pins": 1
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Zone updated
Bad request
Resource not found
Internal server error
PUT /api/zones/{id} HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 122
{
"title": "text",
"description": "text",
"geojson": {},
"categoryIds": [
1
],
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {}
}{
"id": 1,
"title": "text",
"description": "text",
"geojson": {},
"userId": "text",
"isGlobal": true,
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {},
"previewImageUrl": "text",
"area": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced",
"categories": [
{
"category": {
"id": 1,
"name": "text",
"description": "text",
"color": "text",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
],
"pins": [
{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"_count": {
"pins": 1
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Retrieves the blockchain sync status, transaction signature, explorer URL, and transaction history for a specific zone. Authentication required.
Dynamic authentication header. Required for blockchain endpoints and other authenticated operations.
Zone ID
Blockchain status retrieved successfully
Invalid zone ID
Unauthorized
Zone not found
Failed to fetch blockchain status
GET /api/zones/{id}/blockchain HTTP/1.1
X-Dynamic-User-Id: YOUR_API_KEY
Accept: */*
{
"zone": {
"id": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "https://example.com",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced"
},
"transactions": [
{
"id": 1,
"entityType": "Zone",
"entityId": 1,
"signature": "text",
"network": "devnet",
"status": "pending",
"blockHeight": 1,
"createdAt": "2026-01-01T00:00:00.000Z"
}
]
}List of pins in zone
JSON object containing geographic position and orientation data
Pin visibility setting
URL of the relocalization reference photo
Instructions for scanning/relocalizing
Camera pose hint for AR relocalization
Bad request
Internal server error
GET /api/zones/{id}/pins HTTP/1.1
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,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
]Pin created
JSON object containing geographic position and orientation data
Pin visibility setting
URL of the relocalization reference photo
Instructions for scanning/relocalizing
Camera pose hint for AR relocalization
Bad request
Internal server error
POST /api/zones/{id}/pins HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 383
{
"title": "text",
"contentUrl": "https://example.com",
"contentType": "IMAGE",
"geoPose": {
"position": {
"lat": 1,
"lon": 1,
"h": 0
},
"angles": {
"yaw": 0,
"pitch": 0,
"roll": 0
}
},
"gcpData": "text",
"gcpType": "SINGLE",
"altitude": 1,
"aprilTagId": 1,
"photoUrls": [
"https://example.com"
],
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com",
"localizationPhotoURL": "https://example.com"
}
}{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}GCP created in zone
Bad request
Internal server error
POST /api/zones/{id}/gcp HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 255
{
"title": "text",
"description": "text",
"gcpType": "SINGLE",
"geoPose": {
"position": {
"lat": 1,
"lon": 1,
"h": 0
},
"angles": {
"yaw": 0,
"pitch": 0,
"roll": 0
}
},
"altitude": 1,
"aprilTagId": 1,
"gcpData": "text",
"photoUrls": [
"https://example.com"
],
"uploadedFileIds": [
1
],
"zoneId": 1
}{
"gcp": {
"id": 1,
"title": "text",
"description": "text",
"gcpType": "SINGLE",
"altitude": 1,
"aprilTagId": 1,
"gcpData": "text",
"photoUrls": [
"text"
],
"zoneId": 1,
"pin": {
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"zone": {
"id": 1,
"title": "text"
},
"uploadedFiles": [
{
"id": 1,
"fileName": "text",
"fileUrl": "text",
"fileSize": 1,
"mimeType": "text",
"bucketPath": "text",
"gcpId": 1,
"userId": "text",
"uploadedAt": "2026-01-01T00:00:00.000Z"
}
],
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"pin": {
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
}April tag validation result
Bad request
Internal server error
GET /api/zones/{id}/gcp/check-april-tag?aprilTagId=1 HTTP/1.1
Accept: */*
{
"available": true,
"conflicts": [
{}
]
}Global zone
Resource not found
Validation failed
Internal server error
GET /api/zones/global-zone HTTP/1.1
Accept: */*
{
"id": 1,
"title": "text",
"description": "text",
"geojson": {},
"userId": "text",
"isGlobal": true,
"map3dType": "text",
"map3dUrl": "text",
"map3dConfig": {},
"previewImageUrl": "text",
"area": 1,
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"blockchainSyncStatus": "not_synced",
"categories": [
{
"category": {
"id": 1,
"name": "text",
"description": "text",
"color": "text",
"createdAt": "2026-01-01T00:00:00.000Z"
}
}
],
"pins": [
{
"id": 1,
"title": "text",
"latitude": 1,
"longitude": 1,
"geoPose": {},
"contentType": "APK",
"contentUrl": "text",
"localizationData": {
"trackingMode": "WORLD",
"worldmapURL": "https://example.com"
},
"zoneId": 1,
"gcpId": 1,
"userId": "text",
"visibility": "public",
"relocalizationPhotoUrl": "text",
"scanInstructions": "text",
"cameraPoseHint": {},
"blockchainSignature": "text",
"blockchainTxUrl": "text",
"blockchainSyncedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"_count": {
"pins": 1
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}Last updated