Get digital sign upload URL
Get a pre-signed upload URL for a per-sign logo.
POST /app/dashboards/{id}/digital-signs/upload-url
Returns a short-lived pre-signed URL for uploading a per-sign logo to tenant asset storage.
Path parameters
| Parameter | Description |
|---|---|
id | The UUID of the dashboard. |
Request
See API Basics for required headers.
Request body
| Field | Type | Description |
|---|---|---|
signId | string | UUID of the sign the logo belongs to. |
contentType | string | MIME type of the file being uploaded. Must be one of the allowed types (see below). |
Allowed content types
| MIME type | Format |
|---|---|
image/png | PNG |
image/jpeg | JPEG |
image/gif | GIF |
image/webp | WebP |
image/svg+xml | SVG |
Sample request
curl -X POST https://api.statusdashboard.com/app/dashboards/a1b2c3d4-e5f6-7890-abcd-ef1234567890/digital-signs/upload-url \
-H "Authorization: Bearer bcf847abf5c6:def456" \
-H "Content-Type: application/json" \
-d '{
"signId": "550e8400-e29b-41d4-a716-446655440000",
"contentType": "image/png"
}'Sample response
Status: 200 OK
{
"uploadUrl": "https://upload.statusdashboard.com/tenant-assets/org-id/dash-id/digital-signs/sign-id/logo.png?signature=...",
"assetUrl": "https://assets.statusdashboard.com/tenant-assets/org-id/dash-id/digital-signs/sign-id/logo.png",
"s3Key": "tenant-assets/org-id/dash-id/digital-signs/sign-id/logo.png"
}| Field | Description |
|---|---|
uploadUrl | Pre-signed upload URL. Upload the image file directly to this URL using an HTTP PUT request with the Content-Type header matching what you specified. Expires in 5 minutes. |
assetUrl | Public URL that will serve the uploaded image once the PUT completes. Pass this as logoUrl on the sign in an Update digital signs call. |
s3Key | Storage key for the uploaded asset. Pass this as logoKey alongside logoUrl on the same sign in the update call. |
Uploading the file
After receiving the response, upload the image with a PUT request directly to uploadUrl:
curl -X PUT "<uploadUrl>" \
-H "Content-Type: image/png" \
--data-binary @sign-logo.pngThe Content-Type header must match exactly what you specified in the request body. The pre-signed URL is signed for that specific content type.
Once the upload completes, call Update digital signs with both logoKey and logoUrl on the sign. Send the full signs array on every save:
curl -X PUT https://api.statusdashboard.com/app/dashboards/a1b2c3d4-e5f6-7890-abcd-ef1234567890/digital-signs \
-H "Authorization: Bearer bcf847abf5c6:def456" \
-H "Content-Type: application/json" \
-d '{
"signs": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"path": "noc-lobby",
"enabled": true,
"title": "NOC Overview",
"compact": false,
"darkMode": false,
"logoKey": "tenant-assets/org-id/dash-id/digital-signs/sign-id/logo.png",
"logoUrl": "https://assets.statusdashboard.com/tenant-assets/org-id/dash-id/digital-signs/sign-id/logo.png",
"groups": { "enabled": false, "items": [] },
"components": {}
}
]
}'Error responses
| Status | When |
|---|---|
400 | Missing or invalid signId or contentType. |
403 | Insufficient permissions, or the required feature is not enabled. |
404 | Dashboard not found or does not belong to the caller's organization. |

