Skip to content

Configuration profiles

A configuration profile is a named bundle of run configuration and constraint weights, owned by a tenant, for one model. A submit refers to it with configurationId, by id or by name, instead of repeating the same termination and weights on every request. Every tenant has a read-only standard profile per model, which is the model's defaults, and may create up to fifty of its own.

Create one

Profiles are managed on the platform API by a tenant admin:

curl -s -X POST -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  $SAT/api/platform/v1/tenants/$TENANT/configurations \
  -d '{
    "model": "employee-scheduling",
    "name": "fast",
    "description": "A quick answer for what-if questions.",
    "defaultConfigProfileId": "standard",
    "runConfiguration": { "termination": { "spentLimit": "PT30S", "unimprovedSpentLimit": "PT10S" } },
    "modelConfiguration": { "undesiredDayForEmployeeWeight": 3, "balanceEmployeeShiftAssignmentsWeight": 2 }
  }'
{"id":"cfg_01K6…","model":"employee-scheduling","name":"fast","description":"A quick answer for what-if questions.",
 "defaultConfigProfileId":"standard","runConfiguration":{"termination":{"spentLimit":"PT30S","unimprovedSpentLimit":"PT10S"}},
 "modelConfiguration":{"undesiredDayForEmployeeWeight":3,"balanceEmployeeShiftAssignmentsWeight":2},
 "resourcesConfiguration":null,"updatedAt":"2026-09-28T10:00:00Z","readOnly":false}
Field Rule
model the registration key the profile is for
name up to 60 characters, unique per model on the tenant
description up to 1000 characters
defaultConfigProfileId the profile this one derives from; standard for the model's defaults
runConfiguration maxThreadCount and termination, the same fields as a submit's config.run
modelConfiguration the weights, <key>Weight per constraint, checked against the model's schema

A weight that is not one of the model's constraints, or is negative, is a 400 naming it. A second profile with the same name, or a fifty-first, is a 409. PUT replaces a profile and DELETE removes it; both answer 405 for standard.

Use one

curl -s -X POST -H "X-API-KEY: $KEY" -H 'Content-Type: application/json' \
  "$API/schedules?configurationId=fast" -d '{"modelInput": { … }}'

The profile's configuration applies under the request's own: a field the request sets wins, a field it leaves out comes from the profile, and what neither sets comes from the model's defaults. For a derived dataset the parent's configuration sits between the profile and the defaults. GET /{id}/config returns the resolved configuration a dataset was solved with.

List them

GET /tenants/{tenantId}/configurations?model=employee-scheduling lists a model's profiles, standard included, and any member of the tenant may read them.