Get branding upload URL
Get a pre-signed upload URL for a branding image.
POST /app/dashboards/{id}/branding/upload-url
Returns a short-lived pre-signed URL for uploading a branding image (header logo, main logo, favicon, or email logo) to tenant asset storage. Use this endpoint, then pass the returned assetUrl and s3Key to Update branding.
Path parameters
| Parameter | Description |
|---|---|
id | The UUID of the dashboard. |
Request
See API Basics for required headers.
Request body
| Field | Type | Description |
|---|---|---|
assetType | string | The branding slot to upload for. One of headerLogo, mainLogo, favicon, or emailLogo. |
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 |
image/x-icon | ICO |
Sample request
curl -X POST https://api.statusdashboard.com/app/dashboards/a1b2c3d4-e5f6-7890-abcd-ef1234567890/branding/upload-url \
-H "Authorization: Bearer bcf847abf5c6:def456" \
-H "Content-Type: application/json" \
-d '{
"assetType": "mainLogo",
"contentType": "image/png"
}'Sample response
Status: 200 OK
{
"uploadUrl": "https://upload.statusdashboard.com/tenant-assets/org-id/dash-id/mainLogo.png?signature=...",
"assetUrl": "https://assets.statusdashboard.com/tenant-assets/org-id/dash-id/mainLogo.png",
"s3Key": "tenant-assets/org-id/dash-id/mainLogo.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 headerLogoUrl, mainLogoUrl, faviconUrl, or emailLogoUrl in an Update dashboard call. |
s3Key | Storage key for the uploaded asset. Pass this as headerLogoKey, mainLogoKey, faviconKey, or emailLogoKey alongside the URL 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 @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 branding with both the URL and key to save the branding and enable future cleanup:
curl -X PUT https://api.statusdashboard.com/app/dashboards/a1b2c3d4-e5f6-7890-abcd-ef1234567890/branding \
-H "Authorization: Bearer bcf847abf5c6:def456" \
-H "Content-Type: application/json" \
-d '{
"mainLogoUrl": "https://assets.statusdashboard.com/tenant-assets/org-id/dash-id/mainLogo.png",
"mainLogoKey": "tenant-assets/org-id/dash-id/mainLogo.png"
}'Error responses
| Status | When |
|---|---|
400 | Missing or invalid assetType 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. |

