Update software configuration
View .mdPATCH /v1/developer/collections/{collection}/software/{module}/configuration
Operation ID: updateDeveloperSoftwareConfiguration
Atomically create a configuration revision using expectedRevision. Ordinary updates preserve declared variant identities and labels. To evolve the experiment, provide the complete settingsSchema plus fully valid variants and labels for every new variant. Historical revisions, assigned visits and receipts remain unchanged. Requires telemetry.configure in this installation; TEST and LIVE are separate.
Contract status
Section titled “Contract status”| Field | Value |
|---|---|
| Maturity | beta |
| Required capability | telemetry.configure |
| Freshness class | authenticated-state |
| Quota cost | 1 |
All operations require a Kismet Developer Bearer credential. Collection and resource authority is resolved from the credential’s installation grants; identifiers in the URL never grant access.
Request parameters
Section titled “Request parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
collection |
path | string | yes | |
module |
path | string | yes |
Request body
Section titled “Request body”The request body is JSON. The canonical schema is:
{ "type": "object", "properties": { "expectedRevision": { "type": "integer", "minimum": 1 }, "enabled": { "type": "boolean" }, "signedOutOnly": { "type": "boolean" }, "settingsSchema": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "enum": [ "boolean" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 160 } }, "required": [ "type", "label" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "enum": [ "integer" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 160 }, "minimum": { "type": "integer" }, "maximum": { "type": "integer" } }, "required": [ "type", "label", "minimum", "maximum" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "enum": [ "enum" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 160 }, "values": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 100 }, "minItems": 1, "maxItems": 20 } }, "required": [ "type", "label", "values" ], "additionalProperties": false } ] }, "nullable": true }, "variants": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" }, "label": { "type": "string", "minLength": 1, "maxLength": 160, "nullable": true }, "weight": { "type": "integer", "minimum": 0, "maximum": 10000 }, "settings": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "string", "maxLength": 100 }, { "type": "number" }, { "type": "boolean" } ] } } }, "required": [ "id", "weight", "settings" ], "additionalProperties": false }, "minItems": 1, "maxItems": 8 } }, "required": [ "expectedRevision", "enabled", "signedOutOnly", "variants" ], "additionalProperties": false}Minimal example:
{ "expectedRevision": 1, "enabled": true, "signedOutOnly": true, "variants": [ { "id": "string", "weight": 0, "settings": {} } ]}Set KISMET_API_ORIGIN=https://api.ksmt.app and configure KISMET_DEVELOPER_API_KEY in your environment. Run server-credential requests from your backend, not browser code.
curl --request PATCH \ "$KISMET_API_ORIGIN/v1/developer/collections/example-collection/software/{module}/configuration" \ --header "Authorization: Bearer $KISMET_DEVELOPER_API_KEY" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --data '{"expectedRevision":1,"enabled":true,"signedOutOnly":true,"variants":[{"id":"string","weight":0,"settings":{}}]}'Responses
Section titled “Responses”| Status | Meaning |
|---|---|
| 200 | Success. |
| 400 | Invalid request parameters or body. |
| 401 | Missing, invalid, expired, or inappropriate credential/session. |
| 403 | Credential lacks the required grant/capability, or an origin/CSRF check failed. |
| 404 | The authorized resource was not found. |
| 409 | Request conflicts with the installation environment or current state. |
| 429 | Rate limit or quota exceeded; inspect response metadata before retrying. |
| 503 | A required Kismet dependency is temporarily unavailable. |
200 response example
Section titled “200 response example”{ "revision": 2, "enabled": true, "signedOutOnly": true, "assignmentUnit": "session", "settingsSchema": { "eligiblePage": { "type": "integer", "label": "Eligible page", "minimum": 1, "maximum": 2 } }, "variants": [ { "id": "first-page", "label": "First page", "weight": 5000, "settings": { "eligiblePage": 1 } }, { "id": "second-page", "label": "Second page", "weight": 5000, "settings": { "eligiblePage": 2 } } ], "actions": [ { "id": "claim", "label": "Claim selected" } ], "updatedAt": "2026-09-01T00:00:00.000Z"}200 response schema
Section titled “200 response schema”Content type: application/json. Required fields, nullable values, and nested structures are defined below.
View complete response schema
{ "type": "object", "properties": { "revision": { "type": "integer", "minimum": 1 }, "enabled": { "type": "boolean" }, "signedOutOnly": { "type": "boolean" }, "assignmentUnit": { "type": "string", "enum": [ "session" ] }, "settingsSchema": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "enum": [ "boolean" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 160 } }, "required": [ "type", "label" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "enum": [ "integer" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 160 }, "minimum": { "type": "integer" }, "maximum": { "type": "integer" } }, "required": [ "type", "label", "minimum", "maximum" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "enum": [ "enum" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 160 }, "values": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 100 }, "minItems": 1, "maxItems": 20 } }, "required": [ "type", "label", "values" ], "additionalProperties": false } ] } }, "variants": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" }, "label": { "type": "string", "minLength": 1, "maxLength": 160 }, "weight": { "type": "integer", "minimum": 0, "maximum": 10000 }, "settings": { "type": "object", "additionalProperties": { "anyOf": [ { "type": "string", "maxLength": 100 }, { "type": "number" }, { "type": "boolean" } ] } } }, "required": [ "id", "label", "weight", "settings" ], "additionalProperties": false } }, "actions": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]{0,63}$" }, "label": { "type": "string" } }, "required": [ "id", "label" ], "additionalProperties": false } }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "revision", "enabled", "signedOutOnly", "assignmentUnit", "settingsSchema", "variants", "actions", "updatedAt" ], "additionalProperties": false}