API reference
Product Dashboard API
Load a product overview while honoring separate sales, review, file and credential permissions.
Start with the access object
GET /api/developer/products/{productId}/dashboard requires products.view and access to that product. Its access object identifies which optional sections the current role can receive: analytics, reviews, files and credentials. A product assignment is not permission to read every operational record.
analytics.view controls statistics, sales performance and recent activity. reviews.view controls private reviews and moderation summaries. product_files.view controls delivery-file metadata. credentials.view controls package credential status, plugin connection status and REST configuration. Unauthorized optional sections are not queried. Owners and authorized administrators retain their permitted view; role definitions are unchanged.
SoundSync
Illustrative product overview request
curl --fail-with-body -sS "$SOUNDSYNC_API_BASE/api/developer/products/123/dashboard?currency=usd&environment=live" \
-H "Authorization: Bearer $DEVELOPER_TOKEN"
Unavailable does not mean empty business activity
When analytics is restricted, performance has available:false with reason:permission_required and an empty ranges array; customer/order/download KPI values are null. Restricted reviews, files and activity are empty arrays, and the nested product excludes the corresponding analytics and delivery-file fields. Do not display these as zero sales, no customers or missing delivery setup.
Without credentials.view, hisePackage, pluginConnectionStatus and restApi are null; the dashboard does not provision credentials for that caller. Where configuration is allowed, productKey is a preview and secretReturned is false. Dedicated files and rest-config endpoints retain their own permissions. Product versions remain metadata permitted by products.view.
SoundSync
Product operations
SoundSync
Requests and responses
/api/developer/products/{productId}/hise-package/status
Read product package readiness metadata
- Auth
- Account Bearer JWT
- Scope
- products.view and assigned-product access.
- Returns
- HTTP 200: credentialStatus, status, packageReady, lastGeneratedAt, lastPluginConnectionAt, supportedModes.
- Notes
- credentialStatus is a structured status object, not a string or full secret. This compatible status handler can ensure product package credentials; it is not a zero-write health check. Package-ready metadata is not a new HISE runtime attestation.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"credentialStatus": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"ready": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
},
"appId": {
"type": [
"string",
"null"
]
},
"productKeyPreview": {
"type": [
"string",
"null"
]
},
"created": {
"type": "boolean"
},
"skipped": {
"type": "boolean"
}
},
"additionalProperties": true
},
"status": {
"type": "string"
},
"packageReady": {
"type": "boolean"
},
"lastGeneratedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"lastPluginConnectionAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"supportedModes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/products/{productId}/dashboard
Read the product overview with permission-filtered aggregates
- Auth
- Account Bearer JWT
- Scope
- products.view and assigned-product access; analytics.view, reviews.view, product_files.view and credentials.view separately control optional fields.
- Request fields
- query currency: string
- query environment: value
- Returns
- HTTP 200: access, product, health, kpis, performance, reviewSummary, readiness, hisePackage, pluginConnectionStatus, restApi, files, versions, reviews, recentActivity, storefrontDestination.
- Notes
- Check access first. Denied aggregates are not queried. Restricted performance has available:false/reason:permission_required; restricted reviews, file metadata and activity use empty arrays; hidden KPI counts are null, not zero. The nested product omits file URLs/counts and analytics fields when unauthorized. hisePackage/restApi are null without credentials.view; no dashboard credential provisioning is attempted for that caller. Credential responses contain previews, not a full secret. Versions remain product metadata available to products.view.
Request, response and error reference
Query and header parameters
[
{
"name": "currency",
"in": "query",
"schema": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "usd"
},
"required": false,
"description": ""
},
{
"name": "environment",
"in": "query",
"schema": {
"enum": [
"live",
"test"
]
},
"required": false,
"description": ""
}
]
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"access": {
"type": "object",
"properties": {
"analytics": {
"type": "boolean"
},
"reviews": {
"type": "boolean"
},
"files": {
"type": "boolean"
},
"credentials": {
"type": "boolean"
}
},
"additionalProperties": true
},
"product": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"health": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"kpis": {
"type": "object",
"properties": {
"customerCount": {
"type": [
"number",
"null"
]
},
"orderCount": {
"type": [
"number",
"null"
]
},
"downloadsTotal": {
"type": [
"number",
"null"
]
},
"ratingAverage": {
"type": [
"number",
"null"
]
},
"ratingCount": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": true
},
"performance": {
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"ranges": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
}
},
"additionalProperties": true
},
"reviewSummary": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"readiness": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
},
"hisePackage": {
"type": [
"object",
"null"
]
},
"pluginConnectionStatus": {
"type": [
"object",
"null"
]
},
"restApi": {
"type": [
"object",
"null"
],
"properties": {
"status": {
"type": "string"
},
"apiBaseUrl": {
"type": "string"
},
"productId": {
"type": "integer",
"minimum": 1
},
"appId": {
"type": [
"string",
"null"
]
},
"productKey": {
"type": [
"string",
"null"
]
},
"productKeyPreview": {
"type": [
"string",
"null"
]
},
"environment": {
"type": "string"
},
"apiStatus": {
"type": "string"
},
"lastRequestAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"secretReturned": {
"const": false
}
},
"additionalProperties": true
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"filename": {
"type": "string"
},
"platform": {
"type": "string"
},
"type": {
"type": "string"
},
"sizeBytes": {
"type": [
"number",
"null"
]
},
"version": {
"type": [
"string",
"null"
]
},
"managed": {
"type": "boolean"
},
"deliveryMode": {
"type": "string"
},
"uploadedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
}
},
"additionalProperties": true
}
},
"versions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
]
},
"version": {
"type": "string"
},
"changelog": {
"type": "string"
},
"releaseDate": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"isCurrent": {
"type": "boolean"
},
"createdAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"updatedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
}
},
"additionalProperties": true
}
},
"reviews": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
]
},
"productId": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
]
},
"rating": {
"type": "number"
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"status": {
"type": "string"
},
"customerName": {
"type": [
"string",
"null"
]
},
"customerEmail": {
"type": [
"string",
"null"
]
},
"customerId": {
"type": [
"integer",
"null"
]
},
"imported": {
"type": "boolean"
},
"verified": {
"type": "boolean"
},
"verifiedPurchase": {
"type": "boolean"
},
"metadata": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"additionalProperties": true
}
},
"recentActivity": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Operation-specific extension data; do not put credentials or unnecessary personal information here."
}
},
"storefrontDestination": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/products/{productId}/rest-config
Read private product integration configuration
- Auth
- Account Bearer JWT
- Scope
- credentials.view and assigned-product access.
- Returns
- HTTP 200: restApi.
- Notes
- Can ensure package credentials. productKey and productKeyPreview are masked previews; secretReturned is false. Do not use this response as a full credential or health-monitoring guarantee.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"restApi": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"apiBaseUrl": {
"type": "string"
},
"productId": {
"type": "integer",
"minimum": 1
},
"appId": {
"type": [
"string",
"null"
]
},
"productKey": {
"type": [
"string",
"null"
]
},
"productKeyPreview": {
"type": [
"string",
"null"
]
},
"environment": {
"type": "string"
},
"apiStatus": {
"type": "string"
},
"lastRequestAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"secretReturned": {
"const": false
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/products/{productId}/files
Read dashboard delivery-file metadata
- Auth
- Account Bearer JWT
- Scope
- product_files.view and assigned-product access.
- Returns
- HTTP 200: files.
- Notes
- Metadata only, not a signed download grant. Use the managed upload and authorized delivery workflows for file contents.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"filename": {
"type": "string"
},
"platform": {
"type": "string"
},
"type": {
"type": "string"
},
"sizeBytes": {
"type": [
"number",
"null"
]
},
"version": {
"type": [
"string",
"null"
]
},
"managed": {
"type": "boolean"
},
"deliveryMode": {
"type": "string"
},
"uploadedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
/api/developer/products/{productId}/versions
Read current product version metadata
- Auth
- Account Bearer JWT
- Scope
- products.view and assigned-product access.
- Returns
- HTTP 200: versions.
- Notes
- Reads saved product_file_versions when available; otherwise derives the compatible current version from product features. Separate from versioned delivery asset management.
Request, response and error reference
No request body fields are read by this operation.
HTTP 200 response (application/json)
{
"type": "object",
"properties": {
"versions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"integer",
"string"
]
},
"version": {
"type": "string"
},
"changelog": {
"type": "string"
},
"releaseDate": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"isCurrent": {
"type": "boolean"
},
"createdAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"updatedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
Documented failures: 400, 401, 403, 404, 500, 503.
