Skip to content
KismetKismetDevelopers
llms.txt

Register a software module

View .md

PUT /v1/developer/collections/{collection}/software/{module}

Operation ID: registerDeveloperSoftwareModule

Installation-scoped custom software. Requires a server credential. Collection, application and TEST/LIVE environment come from the credential. Settings are revisioned; engagement is client-reported, not consent or booking authority. Canonical outcome attribution is currently unavailable. Browser components use their same-origin server boundary; never expose the server credential.

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.

Name In Type Required Description
collection path string yes
module path string yes

The request body is JSON. The canonical schema is:

{
"type": "object",
"properties": {
"displayName": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"panelUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"nullable": true
},
"presentation": {
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 320,
"nullable": true
},
"iconUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"nullable": true
},
"builder": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"logoUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"nullable": true
},
"websiteUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"nullable": true
}
},
"required": [
"name"
],
"additionalProperties": false,
"nullable": true
},
"integrations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"logoUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"nullable": true
},
"websiteUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"nullable": true
}
},
"required": [
"name"
],
"additionalProperties": false
},
"maxItems": 12,
"default": []
}
},
"additionalProperties": false,
"nullable": true
},
"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
},
"minItems": 1,
"maxItems": 8
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
"required": [
"id",
"label"
],
"additionalProperties": false
},
"maxItems": 12
},
"enabled": {
"type": "boolean"
},
"signedOutOnly": {
"type": "boolean",
"default": true
}
},
"required": [
"displayName",
"settingsSchema",
"variants",
"actions",
"enabled"
],
"additionalProperties": false
}

Minimal example:

{
"displayName": "string",
"settingsSchema": {},
"variants": [
{
"id": "string",
"label": "string",
"weight": 0,
"settings": {}
}
],
"actions": [
{
"id": "string",
"label": "string"
}
],
"enabled": true
}

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.

Terminal window
curl --request PUT \
"$KISMET_API_ORIGIN/v1/developer/collections/example-collection/software/{module}" \
--header "Authorization: Bearer $KISMET_DEVELOPER_API_KEY" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data '{"displayName":"string","settingsSchema":{},"variants":[{"id":"string","label":"string","weight":0,"settings":{}}],"actions":[{"id":"string","label":"string"}],"enabled":true}'
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.
{
"revision": 1,
"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"
}

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
}