Preset fields
Presets are stored as field-level overrides on a card type, which is why they live under preset-fields. The full preset for a given (cardType, presetName) is the union of every preset-field row with that pair.
See presets for the conceptual model.
GET /preset-fields
Auth: JWT. List preset fields. Supports ?cardTypeId=…&presetName=… to narrow.
Response 200
[ { "id": "pf_…", "cardTypeId": "ctype_bug", "presetName": "P3-bug", "fieldId": "field_severity", "value": "P3" }]GET /preset-fields/{id}
Auth: JWT. Return one preset-field row.
POST /preset-fields
Auth: JWT. SA-only. Create a preset-field row.
Body
{ "cardTypeId": "ctype_bug", "presetName": "P3-bug", "fieldId": "field_severity", "value": "P3"}A preset is “born” the first time a row is created with its name; deleting the last row deletes the preset.
PATCH /preset-fields/{id}
Auth: JWT. SA-only. Update the value.
Body — { "value": "P2" }
DELETE /preset-fields/{id}
Auth: JWT. SA-only. Remove the row. If it was the last row for that preset, the preset disappears from the SPA’s + New from preset menu.
Applying a preset at card creation
The card-creation route accepts a presetName parameter. When set, the backend pre-fills the card’s field values from the preset rows before applying the explicit values in the body.
POST /api/v1/organizations/{orgId}/cardsAuthorization: Bearer <jwt>Content-Type: application/json
{ "projectId": "proj_…", "columnId": "col_backlog", "cardTypeId": "ctype_bug", "presetName": "P3-bug", "title": "Login button styled wrong on Safari"}Field values you supply explicitly always win over preset defaults.