Guide
Test Connection
Verify that productId, appId, pluginKey, and pluginSecret belong together before activation testing.
SoundSync
Endpoint contract
This endpoint uses JSON body credential fields. It does not use product credential headers.
POST
/api/plugin-connections/verify
Verify product, App ID, plugin key, and plugin secret belong together before activation testing.
- Auth
- JSON body credential check. Headers are not used for this endpoint.
- Scope
- Product, app, credential, environment, and machine scoped.
- Request fields
- productId
- appId
- pluginKey
- pluginSecret
- pluginVersion optional
- environment optional
- Returns
- ok/connected, productId, credentialId, pluginVersion, environment, lastSeenAt.
- Side effects
- Updates credential last-used state, upserts plugin connection status, and records a plugin connection event.
SoundSync
Copyable examples
Use canonical field names in new clients.
cURL
curl -sS -X POST "$SOUNDSYNC_API_BASE/api/plugin-connections/verify" \
-H "Content-Type: application/json" \
-d '{
"productId": "prod_demo_piano",
"appId": "ss_prod_demoapp123",
"pluginKey": "ss_pk_demokey123",
"pluginSecret": "ss_ps_demosecret123",
"pluginVersion": "1.0.0",
"environment": "test"
}'
JUCE
SoundSyncApiClient.cpp
SoundSync::CredentialConfig config;
config.apiBaseUrl = "https://api.soundsync.example";
config.productId = "prod_demo_piano";
config.appId = "ss_prod_demoapp123";
config.pluginKey = "ss_pk_demokey123";
config.pluginSecret = "ss_ps_demosecret123";
config.environment = "test";
SoundSync::ApiClient client(config);
client.verifyConnection("1.0.0", [](SoundSync::ApiResult result)
{
// Runs on the JUCE message thread in the example client.
// Do not unlock audio here; Test Connection only verifies product credentials.
DBG(result.ok ? "SoundSync Test Connection passed" : result.code);
});
SoundSync
Stable failure codes
A failed Test Connection means fix credentials or product context before testing activation.
| Code | HTTP | Meaning | Client action |
|---|---|---|---|
| MISSING_CREDENTIALS | 400 | Missing productId, appId, pluginKey, or pluginSecret. | Fill all four body fields. |
| INVALID_PRODUCT | 400 | Product identifier is invalid. | Use Product ID from the product setup page. |
| INVALID_APP_ID | 401 | App ID was not found. | Use ss_prod_* from current product credential. |
| INVALID_PLUGIN_KEY | 401 | Plugin key mismatch. | Use the current ss_pk_* value. |
| INVALID_PLUGIN_SECRET | 401 | Plugin secret mismatch. | Use the current ss_ps_* value. |
| REVOKED_CREDENTIAL | 403 | Credential has been revoked. | Generate/rotate credential and regenerate package. |
| INACTIVE_CREDENTIAL | 403 | Credential is inactive. | Enable or replace credential. |
| PRODUCT_MISMATCH | 403 | Credential belongs to another product. | Do not mix product config files. |
| PRODUCT_NOT_FOUND | 404 | Product record was not found. | Check product setup. |
SoundSync
Do not confuse Test Connection with
These calls answer different questions.
| Call | What it verifies |
|---|---|
| /api/license/ping | General licensing service reachability only. |
| /api/plugin-connections/verify | Product credential relationship and connection status. |
| /api/license/v1/activate | Customer/product/machine activation. |
| /api/license/v1/validate | Cached activation is still allowed. |
| /api/license/v1/customer-login/activate | Customer login entitlement plus machine activation. |
