Skip to content
SoundSyncAudio software platform

API reference

Plugin Notices API

Independent notice capabilities, campaign authoring, resources and delivery reporting.

A message cannot unlock or install a product

Notice tokens are independent, short-lived capabilities. A notice response does not activate a device, refresh offline grace, authorize audio or create a paid entitlement. Licensing controls, serial fields, passwords and payment controls cannot be registered as notice triggers.

Content downloads use current ownership checks and private expiring links. The maintained companion saves the selected file and checks its available size/checksum; it never automatically installs, extracts, imports or executes it. Import remains a deliberate customer action. A selected Windows or macOS instruction set is shown, otherwise General; the sets are not concatenated.

SoundSync

Client delivery and developer authoring

POST /api/notices/sessions

Create or renew an explicitly public notice session

Auth
Public request; operation-specific verification still applies
Scope
Product notice channel and public audience must both be enabled.
Request fields
  • productId: integer (required)
  • existingToken: string
Returns
HTTP 200: token, expiresAt, private, productId, recipientKey.
Notes
This is anonymous notice identity, never a license or customer session. Reuse a valid existingToken to preserve the anonymous recipient. Missing/expired local state can reset anonymous frequency history. Keep tokens private and out of URLs.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "existingToken": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "productId"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string"
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "private": {
      "type": "boolean"
    },
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "recipientKey": {
      "type": "string"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/native-sessions

Exchange current native proof for an independent notice token

Auth
Public request; operation-specific verification still applies
Scope
Valid existing native credential or signed validation proof bound to this product/device and live activation.
Request fields
  • productId: integer (required)
  • instanceId: string (required)
  • credential: string
  • validationToken: string
Returns
HTTP 200: token, expiresAt, private, productId, recipientKey.
Notes
Send existing in-memory native proof, not a developer secret. The exchange only reads licensing identity and issues a separate notice token; it does not activate, refresh licensing, write grace timestamps or unlock audio.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "instanceId": {
      "type": "string",
      "maxLength": 256
    },
    "credential": {
      "type": "string"
    },
    "validationToken": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "required": [
    "productId",
    "instanceId"
  ],
  "anyOf": [
    {
      "required": [
        "credential"
      ]
    },
    {
      "required": [
        "validationToken"
      ]
    }
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string"
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "private": {
      "type": "boolean"
    },
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "recipientKey": {
      "type": "string"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/authorize

Authorize notices using a verified shared customer account session

Auth
Account Bearer JWT
Scope
Live shared customer account session and an explicit account-linked product/serial relationship. Store-only credentials are not shared account authority.
Request fields
  • productId: integer (required)
Returns
HTTP 200: token, expiresAt, private, productId, recipientKey.
Notes
Client customer IDs and email do not establish ownership. The account session and product association are rechecked on private notice requests. This does not create an entitlement.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "productId": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": true,
  "required": [
    "productId"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string"
    },
    "expiresAt": {
      "type": "string",
      "format": "date-time"
    },
    "private": {
      "type": "boolean"
    },
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "recipientKey": {
      "type": "string"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/events

Record a permitted editor event and evaluate notice eligibility

Auth
Notice-only Bearer capability
Scope
Notice-only bearer capability, matching product, recipient and editor instance; current campaign eligibility is rechecked.
Request fields
  • id: string (required)
  • sessionId: string (required)
  • kind: editor_opened | editor_available | control_clicked (required)
  • occurredAt: string (required)
  • controlId: string
  • productId: integer
Returns
HTTP 200: eligible, duplicate.
Notes
Use a fresh semantic event UUID; retry it with the same ID. Events must be within five minutes of server time. A named control must be registered and cannot be a licensing/password/payment control. Eligibility is not actual display. Limits are 30 events per minute per product/recipient and 120 new sessions per minute per product.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "sessionId": {
      "type": "string",
      "format": "uuid"
    },
    "kind": {
      "type": "string",
      "enum": [
        "editor_opened",
        "editor_available",
        "control_clicked"
      ]
    },
    "occurredAt": {
      "type": "string",
      "format": "date-time"
    },
    "controlId": {
      "type": "string"
    },
    "productId": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": false,
  "required": [
    "id",
    "sessionId",
    "kind",
    "occurredAt"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "eligible": {
      "type": "integer",
      "minimum": 0
    },
    "duplicate": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/next

Lease the next eligible notice to this editor instance

Auth
Notice-only Bearer capability
Scope
Notice-only bearer capability, matching product, recipient and editor instance; current campaign eligibility is rechecked.
Request fields
  • instanceId: string (required)
  • resourceKinds: array
  • productId: integer
  • contentDownloads: boolean
Returns
HTTP 200: review the response schema below.
Notes
null means no eligible due delivery. Fetching or showing the collapsed badge is not a shown receipt. Revalidate before display/actions and release ownership when destroying the editor. Unsupported download clients receive a public details-page fallback, not a file grant.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "instanceId": {
      "type": "string",
      "format": "uuid"
    },
    "resourceKinds": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "product",
          "release",
          "content",
          "download"
        ]
      }
    },
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "contentDownloads": {
      "type": "boolean"
    }
  },
  "additionalProperties": true,
  "required": [
    "instanceId"
  ]
}

HTTP 200 response (application/json)

{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "productId": {
          "type": "integer",
          "minimum": 1
        },
        "deliveryId": {
          "type": "string",
          "format": "uuid"
        },
        "campaignId": {
          "type": "string",
          "format": "uuid"
        },
        "version": {
          "type": "integer",
          "minimum": 1
        },
        "validUntil": {
          "type": "string",
          "format": "date-time"
        },
        "shown": {
          "type": "boolean"
        },
        "completedActions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "content": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "body": {
              "type": "string"
            },
            "brand": {
              "type": "string"
            },
            "color": {
              "type": "string"
            },
            "audience": {
              "type": "string",
              "enum": [
                "public",
                "customers"
              ]
            },
            "noticeType": {
              "type": "string",
              "enum": [
                "announcement",
                "content",
                "plugin_update",
                "download",
                "promotion"
              ]
            },
            "trigger": {
              "type": "string",
              "enum": [
                "editor_opened",
                "editor_available",
                "control_clicked"
              ]
            },
            "controlId": {
              "type": "string"
            },
            "timezone": {
              "type": "string"
            },
            "startAt": {
              "type": "string",
              "format": "date-time"
            },
            "endAt": {
              "type": "string",
              "format": "date-time"
            },
            "delaySeconds": {
              "type": "integer",
              "minimum": 0,
              "maximum": 86400
            },
            "priority": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            },
            "maxDisplays": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "cooldownSeconds": {
              "type": "integer",
              "minimum": 60,
              "maximum": 2592000
            },
            "actions": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "https",
                      "navigate",
                      "dismiss",
                      "resource",
                      "download",
                      "instructions"
                    ]
                  },
                  "label": {
                    "type": "string"
                  },
                  "target": {
                    "type": "string"
                  },
                  "presentation": {
                    "type": "string",
                    "enum": [
                      "button",
                      "link"
                    ]
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string"
                      },
                      "productId": {
                        "type": "integer",
                        "minimum": 1
                      },
                      "url": {
                        "type": "string"
                      },
                      "downloadAvailable": {
                        "type": "boolean"
                      }
                    },
                    "additionalProperties": true
                  }
                },
                "additionalProperties": true
              },
              "maxItems": 4
            },
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "https",
                    "navigate",
                    "dismiss",
                    "resource",
                    "download",
                    "instructions"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "target": {
                  "type": "string"
                },
                "presentation": {
                  "type": "string",
                  "enum": [
                    "button",
                    "link"
                  ]
                },
                "resource": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "productId": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "url": {
                      "type": "string"
                    },
                    "downloadAvailable": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": true
                }
              },
              "additionalProperties": true,
              "description": "Legacy single-action input; prefer actions for new integrations."
            },
            "resourceId": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid"
                },
                {
                  "const": ""
                }
              ]
            },
            "linkedProductId": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "productUrl": {
              "type": "string"
            }
          },
          "additionalProperties": true,
          "required": [
            "name",
            "title",
            "body",
            "audience",
            "trigger",
            "timezone",
            "startAt",
            "endAt",
            "delaySeconds",
            "priority",
            "maxDisplays",
            "cooldownSeconds"
          ],
          "anyOf": [
            {
              "required": [
                "actions"
              ]
            },
            {
              "required": [
                "action"
              ]
            }
          ]
        }
      },
      "additionalProperties": true
    },
    {
      "type": "null"
    }
  ]
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/deliveries/{id}/current

Recheck eligibility and optionally renew this editor lease

Auth
Notice-only Bearer capability
Scope
Notice-only bearer capability, matching product, recipient and editor instance; current campaign eligibility is rechecked.
Request fields
  • instanceId: string (required)
  • keepAlive: boolean
Returns
HTTP 200: valid, validUntil.
Notes
A valid lease can be renewed with keepAlive:true. This records no display. Remove a revoked/expired notice; an offline partition cannot instantly retract already displayed pixels.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "instanceId": {
      "type": "string",
      "format": "uuid"
    },
    "keepAlive": {
      "type": "boolean"
    }
  },
  "additionalProperties": true,
  "required": [
    "instanceId"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "valid": {
      "type": "boolean"
    },
    "validUntil": {
      "type": "string",
      "format": "date-time"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/deliveries/{id}/release

Release editor-instance ownership without dismissing a campaign

Auth
Notice-only Bearer capability
Scope
Notice-only bearer capability, matching product, recipient and editor instance; current campaign eligibility is rechecked.
Request fields
  • instanceId: string (required)
Returns
HTTP 200: released.
Notes
Best-effort release on editor destruction; another eligible instance can reclaim after release or lease expiry.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "instanceId": {
      "type": "string",
      "format": "uuid"
    }
  },
  "additionalProperties": true,
  "required": [
    "instanceId"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "released": {
      "type": "boolean"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/deliveries/{id}/receipts

Record actual display, dismissal or action outcome

Auth
Notice-only Bearer capability
Scope
Notice-only bearer capability, matching product, recipient and editor instance; current campaign eligibility is rechecked.
Request fields
  • instanceId: string (required)
  • kind: shown | clicked | dismissed | failed | action_succeeded | action_failed (required)
  • actionId: string
Returns
HTTP 200: accepted, duplicate, reason.
Notes
shown follows actual card paint, not fetch/badge arrival. Click/dismiss requires display; action outcomes require a click. Dismiss suppresses this campaign for the recipient across selected products and later versions. A new campaign is independent. Inspect accepted:false rather than treating HTTP 200 as a recorded receipt.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "instanceId": {
      "type": "string",
      "format": "uuid"
    },
    "kind": {
      "type": "string",
      "enum": [
        "shown",
        "clicked",
        "dismissed",
        "failed",
        "action_succeeded",
        "action_failed"
      ]
    },
    "actionId": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "instanceId",
    "kind"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "accepted": {
      "type": "boolean"
    },
    "duplicate": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

POST /api/notices/deliveries/{id}/content

Read import instructions or request an authorized content download

Auth
Notice-only Bearer capability
Scope
Notice-only bearer capability, matching product, recipient and editor instance; current campaign eligibility is rechecked.
Request fields
  • instanceId: string (required)
  • actionId: string (required)
  • operation: details | download
Returns
HTTP 200: resourceId, name, version, filename, sha256, instructions, supportUrl, url, sizeBytes, expiresIn.
Notes
Details may omit url/sizeBytes/expiresIn. Download mode needs the download action, actual display, a current lease, managed file and current content ownership. Private signed URLs expire; never publish or retain them as permanent links. A notice does not grant paid content. The native companion saves the file, verifies length/available checksum and shows one platform instruction set. It never installs, extracts, imports or executes it.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "instanceId": {
      "type": "string",
      "format": "uuid"
    },
    "actionId": {
      "type": "string"
    },
    "operation": {
      "type": "string",
      "enum": [
        "details",
        "download"
      ]
    }
  },
  "additionalProperties": true,
  "required": [
    "instanceId",
    "actionId"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "resourceId": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "filename": {
      "type": "string"
    },
    "sha256": {
      "type": "string"
    },
    "instructions": {
      "type": "object",
      "properties": {
        "common": {
          "type": "string"
        },
        "windows": {
          "type": "string"
        },
        "mac": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "supportUrl": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "sizeBytes": {
      "type": "integer",
      "minimum": 0
    },
    "expiresIn": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 429, 500, 503.

Operation errors: notice_auth_required, notice_auth_expired, notice_auth_revoked, notice_product_mismatch, delivery_instance_mismatch, notice_no_longer_available, notices_disabled.

GET /api/developer/notices/products

List permitted product notice channels

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Returns
HTTP 200: review the response schema below.
Request, response and error reference

HTTP 200 response (application/json)

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "integer",
        "minimum": 1
      },
      "name": {
        "type": "string"
      },
      "enabled": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "public_enabled": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ]
      },
      "control_ids": {
        "anyOf": [
          {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "type": "null"
          }
        ]
      },
      "navigation_ids": {
        "anyOf": [
          {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "type": "null"
          }
        ]
      }
    },
    "additionalProperties": true
  }
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

PUT /api/developer/notices/products/{id}

Save the independent product channel and registered host controls

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Request fields
  • enabled: boolean (required)
  • publicEnabled: boolean (required)
  • controlIds: array (required)
  • navigationIds: array (required)
Returns
HTTP 200: product_id, enabled, public_enabled, control_ids, navigation_ids.
Notes
Defaults are disabled. The host must register the same permitted IDs. These controls are unrelated to licensing settings or offline grace.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean"
    },
    "publicEnabled": {
      "type": "boolean"
    },
    "controlIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 32
    },
    "navigationIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 32
    }
  },
  "additionalProperties": true,
  "required": [
    "enabled",
    "publicEnabled",
    "controlIds",
    "navigationIds"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "enabled": {
      "type": "boolean"
    },
    "public_enabled": {
      "type": "boolean"
    },
    "control_ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "navigation_ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

GET /api/developer/notices/schema

Read authoring capabilities, branding and companion version

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Returns
HTTP 200: types, triggers, canManage, installerIncluded, contentDownloadsIncluded, deliveryEnabled, packageVersion, branding.
Request, response and error reference

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "types": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      }
    },
    "triggers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "canManage": {
      "type": "boolean"
    },
    "installerIncluded": {
      "const": false
    },
    "contentDownloadsIncluded": {
      "type": "boolean"
    },
    "deliveryEnabled": {
      "type": "boolean"
    },
    "packageVersion": {
      "type": "string"
    },
    "branding": {
      "type": "object",
      "properties": {
        "brand": {
          "type": "string"
        },
        "color": {
          "type": "string"
        }
      },
      "additionalProperties": true
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

GET /api/developer/notices/products/{id}/content-files

List managed files eligible for notice content downloads

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Returns
HTTP 200: review the response schema below.
Notes
Private object keys are omitted. Refresh before selecting a file; a content-file hash identifies this exact managed file rather than an arbitrary external URL.
Request, response and error reference

HTTP 200 response (application/json)

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "string"
      },
      "name": {
        "type": "string"
      },
      "sha256": {
        "type": "string"
      },
      "sizeBytes": {
        "anyOf": [
          {
            "type": "integer",
            "minimum": 0
          },
          {
            "type": "null"
          }
        ]
      }
    },
    "additionalProperties": true
  }
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

GET /api/developer/notices/companion

Download independent notice-companion source

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Returns
HTTP 200: application/zip.
Notes
Authenticated source ZIP, not a precompiled plugin or installer. The complete JUCE source package already integrates the maintained companion. Regenerate, rebuild and distribute your actual plugin to update existing binaries.
Request, response and error reference

HTTP 200 response (application/zip)

{
  "type": "string",
  "format": "binary"
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

GET /api/developer/notices/resources

List immutable release/content/download references

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Request fields
  • query resourceId: string
  • query offset: integer
Returns
HTTP 200: review the response schema below.
Notes
Returns at most 200 rows at the requested offset. Team scope covers the resource product and every compatible product.
Request, response and error reference

Query and header parameters

[
  {
    "name": "resourceId",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  },
  {
    "name": "offset",
    "in": "query",
    "required": false,
    "schema": {
      "type": "integer",
      "minimum": 0
    }
  }
]

HTTP 200 response (application/json)

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "string",
        "format": "uuid"
      },
      "product_id": {
        "type": "integer",
        "minimum": 1
      },
      "kind": {
        "type": "string",
        "enum": [
          "release",
          "content",
          "download"
        ]
      },
      "name": {
        "type": "string"
      },
      "version": {
        "type": "string"
      },
      "description": {
        "type": "string"
      },
      "url": {
        "type": "string"
      },
      "compatible_product_ids": {
        "type": "array",
        "items": {
          "type": "integer",
          "minimum": 1
        }
      },
      "state": {
        "type": "string",
        "enum": [
          "published",
          "archived"
        ]
      },
      "download": {
        "anyOf": [
          {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          {
            "type": "null"
          }
        ]
      }
    },
    "additionalProperties": true
  }
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

POST /api/developer/notices/resources

Create an immutable approved content or release reference

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Request fields
  • productId: integer (required)
  • kind: release | content | download (required)
  • name: string (required)
  • version: string
  • description: string
  • url: string (required)
  • compatibleProductIds: array
  • deliveryMode: reference | download
  • downloadFileId: string
  • instructions: object
  • supportUrl: string
Returns
HTTP 200: id, product_id, kind, name, version, description, url, compatible_product_ids, state, download.
Notes
A release requires version. Content/download can reference an existing permitted managed file with deliveryMode:download and at least one nonempty instruction set. Use common, windows and mac keys; show the matching OS set, otherwise common, never concatenate sets. Existing IDs cannot be edited: create a new version. HTTPS destinations must pass server validation.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "kind": {
      "type": "string",
      "enum": [
        "release",
        "content",
        "download"
      ]
    },
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "compatibleProductIds": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    },
    "deliveryMode": {
      "type": "string",
      "enum": [
        "reference",
        "download"
      ]
    },
    "downloadFileId": {
      "type": "string"
    },
    "instructions": {
      "type": "object",
      "properties": {
        "common": {
          "type": "string"
        },
        "windows": {
          "type": "string"
        },
        "mac": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "supportUrl": {
      "type": "string"
    }
  },
  "additionalProperties": true,
  "required": [
    "productId",
    "kind",
    "name",
    "url"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "kind": {
      "type": "string",
      "enum": [
        "release",
        "content",
        "download"
      ]
    },
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "compatible_product_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    },
    "state": {
      "type": "string",
      "enum": [
        "published",
        "archived"
      ]
    },
    "download": {
      "anyOf": [
        {
          "type": "object",
          "properties": {},
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

POST /api/developer/notices/resources/{id}/archive

Archive a reference and cancel outstanding dependent deliveries

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Returns
HTTP 200: id, product_id, kind, name, version, description, url, compatible_product_ids, state, download.
Notes
Historical records remain; the archived reference cannot be newly published or served.
Request, response and error reference

No request body fields are read by this operation.

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "kind": {
      "type": "string",
      "enum": [
        "release",
        "content",
        "download"
      ]
    },
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "compatible_product_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    },
    "state": {
      "type": "string",
      "enum": [
        "published",
        "archived"
      ]
    },
    "download": {
      "anyOf": [
        {
          "type": "object",
          "properties": {},
          "additionalProperties": true
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

GET /api/developer/notices/campaigns

List scoped notice drafts and publication states

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Request fields
  • query productId: integer
  • query state: string
  • query noticeType: string
  • query search: string
  • query offset: integer
Returns
HTTP 200: review the response schema below.
Notes
Returns at most 200 rows. scheduled/expired are date-filtered views of published records. Current Brand Manager values are overlaid on returned draft branding.
Request, response and error reference

Query and header parameters

[
  {
    "name": "productId",
    "in": "query",
    "required": false,
    "schema": {
      "type": "integer",
      "minimum": 1
    }
  },
  {
    "name": "state",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "paused",
        "archived",
        "scheduled",
        "expired"
      ]
    }
  },
  {
    "name": "noticeType",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "search",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "offset",
    "in": "query",
    "required": false,
    "schema": {
      "type": "integer",
      "minimum": 0
    }
  }
]

HTTP 200 response (application/json)

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "id": {
        "type": "string",
        "format": "uuid"
      },
      "product_id": {
        "type": "integer",
        "minimum": 1
      },
      "product_ids": {
        "type": "array",
        "items": {
          "type": "integer",
          "minimum": 1
        }
      },
      "scope_mode": {
        "type": "string"
      },
      "version": {
        "type": "integer",
        "minimum": 1
      },
      "state": {
        "type": "string",
        "enum": [
          "draft",
          "published",
          "paused",
          "archived"
        ]
      },
      "draft": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "audience": {
            "type": "string",
            "enum": [
              "public",
              "customers"
            ]
          },
          "noticeType": {
            "type": "string",
            "enum": [
              "announcement",
              "content",
              "plugin_update",
              "download",
              "promotion"
            ]
          },
          "trigger": {
            "type": "string",
            "enum": [
              "editor_opened",
              "editor_available",
              "control_clicked"
            ]
          },
          "controlId": {
            "type": "string"
          },
          "timezone": {
            "type": "string"
          },
          "startAt": {
            "type": "string",
            "format": "date-time"
          },
          "endAt": {
            "type": "string",
            "format": "date-time"
          },
          "delaySeconds": {
            "type": "integer",
            "minimum": 0,
            "maximum": 86400
          },
          "priority": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "maxDisplays": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "cooldownSeconds": {
            "type": "integer",
            "minimum": 60,
            "maximum": 2592000
          },
          "actions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "https",
                    "navigate",
                    "dismiss",
                    "resource",
                    "download",
                    "instructions"
                  ]
                },
                "label": {
                  "type": "string"
                },
                "target": {
                  "type": "string"
                },
                "presentation": {
                  "type": "string",
                  "enum": [
                    "button",
                    "link"
                  ]
                },
                "resource": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "productId": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "url": {
                      "type": "string"
                    },
                    "downloadAvailable": {
                      "type": "boolean"
                    }
                  },
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            },
            "maxItems": 4
          },
          "action": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "https",
                  "navigate",
                  "dismiss",
                  "resource",
                  "download",
                  "instructions"
                ]
              },
              "label": {
                "type": "string"
              },
              "target": {
                "type": "string"
              },
              "presentation": {
                "type": "string",
                "enum": [
                  "button",
                  "link"
                ]
              },
              "resource": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "url": {
                    "type": "string"
                  },
                  "downloadAvailable": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              }
            },
            "additionalProperties": true,
            "description": "Legacy single-action input; prefer actions for new integrations."
          },
          "resourceId": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "const": ""
              }
            ]
          },
          "linkedProductId": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "productUrl": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "name",
          "title",
          "body",
          "audience",
          "trigger",
          "timezone",
          "startAt",
          "endAt",
          "delaySeconds",
          "priority",
          "maxDisplays",
          "cooldownSeconds"
        ],
        "anyOf": [
          {
            "required": [
              "actions"
            ]
          },
          {
            "required": [
              "action"
            ]
          }
        ]
      },
      "updated_at": {
        "type": "string",
        "format": "date-time"
      }
    },
    "additionalProperties": true
  }
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

POST /api/developer/notices/campaigns

Save a versioned draft without publishing or sending email

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Request fields
  • id: string
  • expectedVersion: integer
  • productIds: array
  • scopeMode: selected | all_integrated
  • content: object (required)
Returns
HTTP 200: id, product_id, product_ids, scope_mode, version, state, draft, updated_at.
Notes
Selected scope needs productIds. all_integrated snapshots the currently enabled permitted products, not future products. Updating an existing ID requires expectedVersion; saving creates a new immutable version, returns the notice to draft and cancels outstanding deliveries. Brand/color come from Brand Manager and cannot be overridden per notice. Non-announcements need the corresponding product/resource and resource/download actions.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "expectedVersion": {
      "type": "integer",
      "minimum": 1
    },
    "productIds": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      },
      "minItems": 1,
      "maxItems": 100
    },
    "scopeMode": {
      "type": "string",
      "enum": [
        "selected",
        "all_integrated"
      ]
    },
    "content": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "body": {
          "type": "string"
        },
        "brand": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "audience": {
          "type": "string",
          "enum": [
            "public",
            "customers"
          ]
        },
        "noticeType": {
          "type": "string",
          "enum": [
            "announcement",
            "content",
            "plugin_update",
            "download",
            "promotion"
          ]
        },
        "trigger": {
          "type": "string",
          "enum": [
            "editor_opened",
            "editor_available",
            "control_clicked"
          ]
        },
        "controlId": {
          "type": "string"
        },
        "timezone": {
          "type": "string"
        },
        "startAt": {
          "type": "string",
          "format": "date-time"
        },
        "endAt": {
          "type": "string",
          "format": "date-time"
        },
        "delaySeconds": {
          "type": "integer",
          "minimum": 0,
          "maximum": 86400
        },
        "priority": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        },
        "maxDisplays": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "cooldownSeconds": {
          "type": "integer",
          "minimum": 60,
          "maximum": 2592000
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "https",
                  "navigate",
                  "dismiss",
                  "resource",
                  "download",
                  "instructions"
                ]
              },
              "label": {
                "type": "string"
              },
              "target": {
                "type": "string"
              },
              "presentation": {
                "type": "string",
                "enum": [
                  "button",
                  "link"
                ]
              },
              "resource": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "url": {
                    "type": "string"
                  },
                  "downloadAvailable": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              }
            },
            "additionalProperties": true
          },
          "maxItems": 4
        },
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "https",
                "navigate",
                "dismiss",
                "resource",
                "download",
                "instructions"
              ]
            },
            "label": {
              "type": "string"
            },
            "target": {
              "type": "string"
            },
            "presentation": {
              "type": "string",
              "enum": [
                "button",
                "link"
              ]
            },
            "resource": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "productId": {
                  "type": "integer",
                  "minimum": 1
                },
                "url": {
                  "type": "string"
                },
                "downloadAvailable": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true,
          "description": "Legacy single-action input; prefer actions for new integrations."
        },
        "resourceId": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "const": ""
            }
          ]
        },
        "linkedProductId": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "productUrl": {
          "type": "string"
        }
      },
      "additionalProperties": true,
      "required": [
        "name",
        "title",
        "body",
        "audience",
        "trigger",
        "timezone",
        "startAt",
        "endAt",
        "delaySeconds",
        "priority",
        "maxDisplays",
        "cooldownSeconds"
      ],
      "anyOf": [
        {
          "required": [
            "actions"
          ]
        },
        {
          "required": [
            "action"
          ]
        }
      ]
    }
  },
  "additionalProperties": true,
  "required": [
    "content"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "product_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    },
    "scope_mode": {
      "type": "string"
    },
    "version": {
      "type": "integer",
      "minimum": 1
    },
    "state": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "paused",
        "archived"
      ]
    },
    "draft": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "body": {
          "type": "string"
        },
        "brand": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "audience": {
          "type": "string",
          "enum": [
            "public",
            "customers"
          ]
        },
        "noticeType": {
          "type": "string",
          "enum": [
            "announcement",
            "content",
            "plugin_update",
            "download",
            "promotion"
          ]
        },
        "trigger": {
          "type": "string",
          "enum": [
            "editor_opened",
            "editor_available",
            "control_clicked"
          ]
        },
        "controlId": {
          "type": "string"
        },
        "timezone": {
          "type": "string"
        },
        "startAt": {
          "type": "string",
          "format": "date-time"
        },
        "endAt": {
          "type": "string",
          "format": "date-time"
        },
        "delaySeconds": {
          "type": "integer",
          "minimum": 0,
          "maximum": 86400
        },
        "priority": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        },
        "maxDisplays": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "cooldownSeconds": {
          "type": "integer",
          "minimum": 60,
          "maximum": 2592000
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "https",
                  "navigate",
                  "dismiss",
                  "resource",
                  "download",
                  "instructions"
                ]
              },
              "label": {
                "type": "string"
              },
              "target": {
                "type": "string"
              },
              "presentation": {
                "type": "string",
                "enum": [
                  "button",
                  "link"
                ]
              },
              "resource": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "url": {
                    "type": "string"
                  },
                  "downloadAvailable": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              }
            },
            "additionalProperties": true
          },
          "maxItems": 4
        },
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "https",
                "navigate",
                "dismiss",
                "resource",
                "download",
                "instructions"
              ]
            },
            "label": {
              "type": "string"
            },
            "target": {
              "type": "string"
            },
            "presentation": {
              "type": "string",
              "enum": [
                "button",
                "link"
              ]
            },
            "resource": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "productId": {
                  "type": "integer",
                  "minimum": 1
                },
                "url": {
                  "type": "string"
                },
                "downloadAvailable": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true,
          "description": "Legacy single-action input; prefer actions for new integrations."
        },
        "resourceId": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "const": ""
            }
          ]
        },
        "linkedProductId": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "productUrl": {
          "type": "string"
        }
      },
      "additionalProperties": true,
      "required": [
        "name",
        "title",
        "body",
        "audience",
        "trigger",
        "timezone",
        "startAt",
        "endAt",
        "delaySeconds",
        "priority",
        "maxDisplays",
        "cooldownSeconds"
      ],
      "anyOf": [
        {
          "required": [
            "actions"
          ]
        },
        {
          "required": [
            "action"
          ]
        }
      ]
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

Operation errors: campaign_changed, invalid_product_scope, control_not_allowed, content_not_compatible.

POST /api/developer/notices/campaigns/{id}/state

Publish, pause or archive a reviewed notice version

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Request fields
  • state: published | paused | archived (required)
  • expectedVersion: integer (required)
Returns
HTTP 200: id, product_id, product_ids, scope_mode, version, state, draft, updated_at.
Notes
Publishing rechecks enabled channels, scope, references and the end date. A future start remains scheduled. Pausing/archiving cancels outstanding work. Publishing never schedules a marketing email or changes licensing.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "enum": [
        "published",
        "paused",
        "archived"
      ]
    },
    "expectedVersion": {
      "type": "integer",
      "minimum": 1
    }
  },
  "additionalProperties": true,
  "required": [
    "state",
    "expectedVersion"
  ]
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "product_id": {
      "type": "integer",
      "minimum": 1
    },
    "product_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 1
      }
    },
    "scope_mode": {
      "type": "string"
    },
    "version": {
      "type": "integer",
      "minimum": 1
    },
    "state": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "paused",
        "archived"
      ]
    },
    "draft": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "body": {
          "type": "string"
        },
        "brand": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "audience": {
          "type": "string",
          "enum": [
            "public",
            "customers"
          ]
        },
        "noticeType": {
          "type": "string",
          "enum": [
            "announcement",
            "content",
            "plugin_update",
            "download",
            "promotion"
          ]
        },
        "trigger": {
          "type": "string",
          "enum": [
            "editor_opened",
            "editor_available",
            "control_clicked"
          ]
        },
        "controlId": {
          "type": "string"
        },
        "timezone": {
          "type": "string"
        },
        "startAt": {
          "type": "string",
          "format": "date-time"
        },
        "endAt": {
          "type": "string",
          "format": "date-time"
        },
        "delaySeconds": {
          "type": "integer",
          "minimum": 0,
          "maximum": 86400
        },
        "priority": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100
        },
        "maxDisplays": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "cooldownSeconds": {
          "type": "integer",
          "minimum": 60,
          "maximum": 2592000
        },
        "actions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string",
                "enum": [
                  "https",
                  "navigate",
                  "dismiss",
                  "resource",
                  "download",
                  "instructions"
                ]
              },
              "label": {
                "type": "string"
              },
              "target": {
                "type": "string"
              },
              "presentation": {
                "type": "string",
                "enum": [
                  "button",
                  "link"
                ]
              },
              "resource": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  },
                  "productId": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "url": {
                    "type": "string"
                  },
                  "downloadAvailable": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": true
              }
            },
            "additionalProperties": true
          },
          "maxItems": 4
        },
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "https",
                "navigate",
                "dismiss",
                "resource",
                "download",
                "instructions"
              ]
            },
            "label": {
              "type": "string"
            },
            "target": {
              "type": "string"
            },
            "presentation": {
              "type": "string",
              "enum": [
                "button",
                "link"
              ]
            },
            "resource": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "productId": {
                  "type": "integer",
                  "minimum": 1
                },
                "url": {
                  "type": "string"
                },
                "downloadAvailable": {
                  "type": "boolean"
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true,
          "description": "Legacy single-action input; prefer actions for new integrations."
        },
        "resourceId": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid"
            },
            {
              "const": ""
            }
          ]
        },
        "linkedProductId": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "productUrl": {
          "type": "string"
        }
      },
      "additionalProperties": true,
      "required": [
        "name",
        "title",
        "body",
        "audience",
        "trigger",
        "timezone",
        "startAt",
        "endAt",
        "delaySeconds",
        "priority",
        "maxDisplays",
        "cooldownSeconds"
      ],
      "anyOf": [
        {
          "required": [
            "actions"
          ]
        },
        {
          "required": [
            "action"
          ]
        }
      ]
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

GET /api/developer/notices/campaigns/{id}/report

Read delivery, action and actual-display counts

Auth
Account Bearer JWT
Scope
marketing.view to read; marketing.manage to write. Effective developer and every assigned product in a notice/reference must be permitted.
Returns
HTTP 200: states, receipts, actions, fetched.
Notes
A report reconciles stale delivery states. fetched, shown, clicked and dismissed are distinct; fetching is not proof the customer saw the card. Exactly-once display across crashes is not guaranteed.
Request, response and error reference

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "states": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      }
    },
    "receipts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      }
    },
    "actions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "action_id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      }
    },
    "fetched": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 401, 403, 404, 409, 500, 503.

SoundSync

Create a public notice identity only for an enabled channel

No license or customer authority is created
curl --fail-with-body -sS "$SOUNDSYNC_API_BASE/api/notices/sessions" \
+  -H "Content-Type: application/json" \
+  --data '{"productId":123}'