Skip to content
SoundSyncAudio software platform

Architecture page

HISE Server Conversations

Understand which requests check credentials, claim ownership, activate a device, or open customer access.

SoundSync

Requests have different jobs

ConversationMeaningDoes not prove
Test ConnectionProduct credential connectivityCustomer entitlement or audio access
Claim / email verificationCustomer ownership proof for a supported serial flowA device has been activated
ActivateRegister authorized product access on the deviceUnlimited future device use
ValidateRefresh entitlement and machine authorizationA failed network call is permission
DeactivateRelease the selected device activationA purchase was refunded
BrandingRetrieve supported product/store visual configurationGenerated local assets are always dynamically updated
Library token / WebView libraryOpen the authenticated customer access surfaceA developer session should be shipped in the plugin

Debug the stage that failed

Record the operation, error code, package variant/version, product ID, and safe environment context. Do not log the secret, serial, password, customer token, or a complete customer record.

The licensing endpoint reference documents request authentication and fields. An unverified response example should not be treated as a tested transcript of a HISE runtime session.

SoundSync

Deactivated state

The supplied deactivation capture shows the product returning to the activation-required flow after device access changes.

HISE deactivated state

SoundSync

Activate an email entitlement with a code

This flow proves access to the email associated with an existing entitlement. It is separate from serial-claim verification and password-based customer-login activation.

POST /api/license/v1/activation/start

Begin email-code activation for a product entitlement

Auth
x-ss-app-id + x-ss-plugin-key + x-ss-plugin-secret OR x-ss-app-id + x-ss-product-id + x-soundsync-public-client (matching generated native client)
Scope
Product, customer email, and machine identity.
Request fields
  • email: string (required)
  • instance_id: string (required)
  • device_label: string
  • plugin_version: string
Returns
200: ok, status pending_email_verification, code PENDING_EMAIL_VERIFICATION; challengeId, emailSent, and branding can be present.
Notes
Can create a challenge and send an email. The same generic pending state can be returned when access is unavailable; it does not prove entitlement or email delivery.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email"
    },
    "instance_id": {
      "type": "string"
    },
    "device_label": {
      "type": "string"
    },
    "plugin_version": {
      "type": "string"
    }
  },
  "required": [
    "email",
    "instance_id"
  ],
  "additionalProperties": true
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "status": {
      "const": "pending_email_verification"
    },
    "code": {
      "const": "PENDING_EMAIL_VERIFICATION"
    },
    "challengeId": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "^[1-9][0-9]*$"
        },
        {
          "type": "integer",
          "minimum": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "emailSent": {
      "type": "boolean"
    },
    "branding": {
      "type": "object",
      "properties": {},
      "additionalProperties": true
    }
  },
  "required": [
    "status",
    "code"
  ],
  "additionalProperties": true
}

Documented failures: 400, 403, 500.

POST /api/license/v1/activation/verify-email

Verify the six-digit code and complete email-entitlement activation

Auth
x-ss-app-id + x-ss-plugin-key + x-ss-plugin-secret OR x-ss-app-id + x-ss-product-id + x-soundsync-public-client (matching generated native client)
Scope
Same product, email, and machine as the challenge.
Request fields
  • email: string (required)
  • instance_id: string (required)
  • device_label: string
  • plugin_version: string
  • device_credential_supported: boolean. Send true to request native renewal-credential enrollment. deviceCredentialSupported is an accepted body alias.
  • code: string (required)
Returns
200: activation result if the code and current entitlement/device checks pass.
Notes
Codes expire after 15 minutes and are one-use. Five incorrect attempts lock the challenge. Invalid, expired, missing, or locked codes return 400; product credential and access checks still apply.
Request, response and error reference

Request (application/json)

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email"
    },
    "instance_id": {
      "type": "string"
    },
    "device_label": {
      "type": "string"
    },
    "plugin_version": {
      "type": "string"
    },
    "device_credential_supported": {
      "type": "boolean",
      "description": "Send true to request native renewal-credential enrollment. deviceCredentialSupported is an accepted body alias."
    },
    "code": {
      "type": "string",
      "pattern": "^\\d{6}$"
    }
  },
  "required": [
    "email",
    "instance_id",
    "code"
  ],
  "additionalProperties": true
}

HTTP 200 response (application/json)

{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "status": {
      "type": "string"
    },
    "code": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "activationId": {
      "type": "integer",
      "minimum": 1
    },
    "validation_token": {
      "type": "string"
    },
    "entitlement_id": {
      "type": "integer",
      "minimum": 1
    },
    "customer": {
      "type": "object",
      "properties": {},
      "additionalProperties": true
    },
    "productId": {
      "type": "integer",
      "minimum": 1
    },
    "device_credential": {
      "type": "string",
      "description": "Private product/device-bound renewal proof. Returned when device_credential_supported is true and enrollment succeeds. Protect it in native secure storage; it is not a portal/library token or an offline grant."
    },
    "device_credential_status": {
      "type": "string",
      "enum": [
        "ready",
        "pending"
      ],
      "description": "pending means renewal enrollment is incomplete, even when activation was otherwise authorized. Follow the maintained client retry and access decision; do not manufacture offline authorization."
    },
    "plugin_session_id": {
      "type": "string",
      "description": "Private short-lived plugin license session. Distinct from durable device_credential and customer library tokens."
    },
    "plugin_session_expires_at": {
      "type": "string",
      "format": "date-time",
      "description": "Expiry of plugin_session_id, not the offline grace deadline."
    },
    "max_activations": {
      "type": "integer",
      "minimum": 0
    },
    "remaining": {
      "type": "integer",
      "minimum": 0
    },
    "grace_expires_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "offline_grace_days": {
      "type": "integer",
      "minimum": 0
    },
    "offline_grace": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "days": {
          "type": "integer",
          "minimum": 0
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "additionalProperties": true
    },
    "offline_lease": {
      "type": "string",
      "description": "Optional signed JSON envelope issued only by successful authorized activation/validation with a positive grace period and configured signer. Contains alg, kid, base64 payload and signature. Verify with trusted package public keys; decoding alone is not authorization. Never log customer grants."
    }
  },
  "additionalProperties": true
}

Documented failures: 400, 403, 500.

Keep the challenge bound to one machine

Use the same customer email, product credentials, and stable instance_id for start and verification. Enter the code into the client; do not treat the initial pending response as an unlocked plugin. After successful verification, keep the returned activation/validation state under the package policy.

Request a fresh code after expiry or a locked challenge. A serial claim link and its claim_activation_token belong to the separate claim flow; do not interchange those tokens with an email-entitlement activation code.