API 360 Walkthrough Upload

This guide outlines the five-step process for performing a 360 Walkthrough upload via the Evercam API.


Sample Code

The sample code linked below requires some hard-coded values

360_upload_sample.py

Pre-requisites

Before beginning the API calls, you must identify your Project and Drawing IDs from the Evercam dashboard URL.

Example URL: https://dash.evercam.io/v2/projects/evercam/drawings/map?id=6143

  • project_id: Located between "projects" and "drawings" (e.g., evercam).

  • drawing_id: Located at the end of the URL (e.g., 6143).

You can also obtain the drawing_id if you create a Drawing/Floor programmatically via this guide: Drawing/Floor creation

Step 1: Get Authentication Token

Authenticate the user to receive a bearer token for subsequent requests.

Endpoint: POST https://media.evercam.io/auth/login

Request Body

{
  "username": "{evercam_email}",
  "password": "{evercam_password}"
}

Response

{
  "token": "{auth_token}"
}


Step 2: Create an Upload Object

Initialize the upload entry in the system to generate an upload_id.

Endpoint: POST https://ingest2.evercam.io/360/{project_id}/upload?date={upload_date}&name={upload_name}&drawing_id={drawing_id}&uploaded_by={upload_email}

  • upload_name: A human-readable identifier (e.g., "Office 20th July").

  • upload_date: Current date in DD-MM-YYYY format.

  • upload_email: Email of uploading user


Headers

Header

Value

Authorization

Bearer {auth_token}

Content-Type

application/x-www-form-urlencoded

Sample Response

{
  "id": 999,
  "name": "Example Name",
  "project_id": "evercam",
  "floor_id": 5555,
  "date": "2026-01-20",
  "Processing_status": "created",
  "uploaded_by": "daniel.caffrey@evercam.io",
  "inserted_at": "2026-01-20T12:31:30.022170",
  "updated_at": "2026-01-20T12:31:30.022175",
  "is_timelapse": false,
  "Images": [],
  "videos": [],
  "tus_links": []
}


Step 3: Create Placeholder File

Initialize an interruptible upload session using the Tus protocol.

Endpoint: POST https://portal.evercam.io/files/

Headers

Header

Value

Tus-Resumable

1.0.0

Upload-Length

{upload_length_bytes}

Upload-Metadata

filename {filename_base64_encoded},filetype

Content-Length

0

TE

trailers

Response Headers

  • location: http://portal.evercam.io/files/{file_id} (Save this {file_id} for the next steps).

  • tus-resumable: 1.0.0


Step 4: Send File Data

Upload the actual binary data to the file object created in Step 3.

Endpoint: PATCH https://portal.evercam.io/files/{file_id}

Headers

Header

Value

Content-Length

{upload_length_bytes}

Tus-Resumable

1.0.0

Upload-Offset

{upload_offset_bytes} (Set to 0 for new uploads)

Content-Type

application/offset+octet-stream


Body

INSV file binary data

Step 5: Write File Metadata

Finalize the upload by linking the uploaded file to the specific upload record.

Endpoint: PUT https://ingest2.evercam.io/360/{upload_id}/upload?uploaded_by={uploaded_by}

Headers

Header

Value

Content-Type

application/json

Authorization

Bearer {auth_token}

Request Body

{
  "asset_type": "video",
  "upload": [
    {
      "url": "http://portal.evercam.io/files/{file_id}",
      "title": "{filename}",
      "file_extension": "insv"
    }
    
  ],
  "start_position": "{latitude},{longitude}",
  "end_position": "{latitude},{longitude}",
  "target_points_count": 0
}