Skip to main content
Outcome types define the vocabulary of customer responses in the platform. Each outcome type has a classification (positive, negative, or neutral) and a category (impression or response). System-default outcome types are auto-seeded on first access.
See the Outcome Types feature page for UI guidance and conceptual overview.

Base path

/api/v1/outcome-types

List outcome types

GET /api/v1/outcome-types
Returns all outcome types for the current tenant, ordered by ordinal (ascending). If no outcome types exist, the system defaults are automatically seeded.

System defaults

KeyNameClassificationCategory
impressionImpressionneutralimpression
clickClickpositiveresponse
dismissDismissnegativeresponse
acceptAcceptpositiveresponse
convertConvertpositiveresponse
not_presentedNot Presentedneutralimpression
requested_infoRequested More Infopositiveresponse
not_interestedNot Interestednegativeresponse
expiredExpiredneutralimpression
deferredDeferredneutralresponse

Response 200

[
  {
    "id": "ot_001",
    "tenantId": "t_001",
    "key": "click",
    "name": "Click",
    "description": "",
    "classification": "positive",
    "category": "response",
    "isSystem": true,
    "ordinal": 1,
    "status": "active",
    "createdAt": "2026-03-10T12:00:00.000Z",
    "updatedAt": "2026-03-10T12:00:00.000Z"
  }
]

Create an outcome type

POST /api/v1/outcome-types
Creates a custom outcome type. Custom types have isSystem: false and can be fully edited or deleted.

Request body

FieldRequiredTypeDescription
keyYesstring (1-255)Unique key identifier (e.g., "purchased", "bounced").
nameYesstring (1-255)Display name.
descriptionNostringDescription. Default "".
classificationNoenumpositive, negative, neutral. Default "neutral".
categoryNoenumimpression, response. Default "response".
ordinalNointeger (>= 0)Sort order. Default 99.
statusNoenumdraft, active, paused, archived. Default "active".

Example request

{
  "key": "purchased",
  "name": "Purchased",
  "classification": "positive",
  "category": "response",
  "ordinal": 10
}

Response 201

Returns the created outcome type object.

Error codes

CodeReason
400Validation error (missing key or name).
415Content-Type is not application/json.

Update an outcome type

PUT /api/v1/outcome-types
Updates an existing outcome type. Only provided fields are changed.
System outcome types (isSystem: true) only allow editing name, description, and ordinal. The key, classification, and category fields are locked for system types.

Request body

FieldRequiredTypeDescription
idYesstringThe outcome type ID to update.
keyNostringUpdated key (custom types only).
nameNostringUpdated display name.
descriptionNostringUpdated description.
classificationNoenumUpdated classification (custom types only).
categoryNoenumUpdated category (custom types only).
ordinalNointegerUpdated sort order.
statusNoenumUpdated status (custom types only).

Response 200

Returns the updated outcome type object.

Error codes

CodeReason
400Validation error.
404Outcome type not found.

Delete an outcome type

DELETE /api/v1/outcome-types?id={outcomeTypeId}
Deletes a custom outcome type by ID.

Query parameters

ParameterRequiredTypeDescription
idYesstringOutcome type ID to delete.

Response 204

Empty body on success.

Error codes

CodeReason
400Missing id query parameter.
403Cannot delete system outcome types.
404Outcome type not found.

Role requirements

MethodMinimum role
GETviewer
POSTeditor
PUTeditor
DELETEeditor