Skip to main content
Version: Latest (4.0.6)

Update campaign

PATCH 

/recertification/campaigns/:campaignID

Partial update of an existing campaign.

Roles: CAMPAIGN_ADMIN/CAMPAIGN_MANAGER or CAMPAIGN_CREATE. Scope: cidaas:campaign_write required when token sub is ANONYMOUS.

Patchable fields: campaignName, status, timeFrame.from (PLANNED only), timeFrame.to, completedReason, groups[].reviewers. When groups[].reviewers is patched, any added subs are validated (must exist and be active; no role restriction). The reviewer list cannot be reduced to empty.

Server-controlled fields (always ignored in request body): completedBy, createdTime, updatedTime — derived server-side; updatedTime is refreshed on every successful PATCH.

Status transition rules:

  • PLANNED → IN_PROGRESS: system-only (rejected with 403 for human callers). To start a campaign early, update timeFrame.from to a near-future time.
  • PLANNED → COMPLETED: allowed; sets completedBy from token sub.
  • IN_PROGRESS → COMPLETED: allowed; sets completedBy from token sub.
  • Backward transitions and unknown values → 400.

Timeframe rules:

  • timeFrame.from may only be changed while the campaign is PLANNED; locked once started.
  • timeFrame.to can be changed independently — timeFrame.from need not be present in the same request.
  • Effective to must remain after effective from (merges payload with stored values).

Task scheduling side-effects:

  • from changed → start task rescheduled to new from.
  • to changed → end task rescheduled to new to (always targets COMPLETED).
  • status=IN_PROGRESS (system) → start task cancelled.
  • status=COMPLETED (any) → both start and end tasks cancelled.

Manual COMPLETED sets completedBy from token sub (ANONYMOUS → "system").

Emits fact event RECERTIFICATION_CAMPAIGN_UPDATED.

Request​

Responses​

Campaign updated. Also returned when all supplied values already match (no DB write); data is empty in that case.