post
https://hover.to/api/v3/jobs//job_share
Overview
The Job Share endpoint allows you to create shareable links for jobs that can be viewed by external users without requiring authentication. Each share generates a unique token and URL that can be used to access the job's viewer interface. Currently, only interior jobs are supported with the supported viewer_version: virtual_walkthrough. This endpoint supports jobs with multiple models.
Request
URL Parameters
id(required) - The ID of the job to share
Request Body
{
"viewer_version": "virtual_walkthrough",
"password_protected": true
}
Sample Response Body
{
"id": 1234567,
"token": "zvXwgDcfjiL1q45NuScg",
"password_protected": true,
"expires_at": "2026-01-17T18:28:49.822Z",
"created_at": "2025-12-03T18:28:50.056Z",
"updated_at": "2025-12-03T18:28:50.056Z",
"url": "https://hover.to/shared/zvXwgDcfjiL1q45NuScg",
"generated_password": "12345678"
}
Viewer Versions
The endpoint supports the following viewer versions:
| Viewer Version | Value | Password Protection |
|---|---|---|
| Virtual Walkthrough | virtual_walkthrough | Required |
URL Structure
Base URL Format
The returned url field follows this format:
https://hover.to/shared/{token}
Where {token} is the unique share token returned in the response.
Specifying a Model
To view a specific model within a job, append the model_id query parameter to the URL:
https://hover.to/shared/{token}?model_id={model_id}
Example:
https://hover.to/shared/zvXwgDcfjiL1q45NuScg?model_id=14305379
Behavior:
- If
model_idis provided, the viewer will display that specific model - If
model_idis omitted, the viewer will display the job's primary model (typically the first model)
Note: The model_id must belong to the job associated with the share token.
How the Shared URL Works
- Wrapper Page: The
/shared/{token}URL loads a wrapper page that handles authentication and routing - Viewer Selection: Based on the
viewer_versionspecified when creating the share, the wrapper loads the appropriate viewer in an iframe:virtual_walkthrough→ Virtual Walkthrough viewer
- Password Protection: If the share is password-protected, the viewer itself handles password validation
- Model Selection: The
model_idquery parameter (if provided) determines which model to display
Expiration
- Default Expiration: 45 days from creation
- Expired Shares: Cannot be accessed after expiration
- Expiration Date: Available in the
expires_atfield of the response
Considerations
- Password Protection: Use password protection for sensitive shares
- Access Control: Only users with read access to the job can create shares
- Password Immutability: Passwords cannot be changed after share creation
Error Handling
Common Errors
| Status Code | Error | Description |
|---|---|---|
| 401 | Unauthorized | User is not authenticated |
| 403 | Forbidden | User does not have read access to the job |
| 404 | Not Found | Job with the specified ID does not exist |
| 422 | Unprocessable Entity | Validation errors (e.g., invalid viewer_version, missing required fields) |
Notes
- The
generated_passwordfield is only included in the response whenpassword_protectedistrue - Passwords are automatically generated using a secure random hex string (minimum 8 characters)
- The share URL format is consistent across all viewer versions
- Model selection via
model_idquery parameter works for all viewer versions - The wrapper page at
/shared/{token}handles routing to the appropriate viewer based on theviewer_version
