Skip to content

Start campaign recertification

POST /api/v1/recertify/campaigns: request fields and declared response contract.

POST/api/v1/recertify/campaigns

Authorization
Permissionrecertify.start
Workspace scoperequired
Scope targetworkspace

Request body

Request body fields
FieldTypeRequiredNullableDefault
kind"group_membership" | "role_holdings" | "purpose_grants"requirednon-null—
cadenceDaysintegerrequirednon-null—
lapsePolicy"auto_revoke" | "escalate"requirednon-null—

Response

201

Response fields
FieldTypeRequiredNullableDefault
dataobjectrequirednon-null—
data.successbooleanrequirednon-null—
data.campaignIdstringrequirednon-null—
data.kind"group_membership" | "role_holdings" | "purpose_grants"requirednon-null—
data.dueAtstringrequirednon-null—
data.itemCountnumberrequirednon-null—
data.reusedbooleanrequirednon-null—
data.messagestringrequirednon-null—

Declared failures

Declared failures
RECERTIFY_START_FAILED400 — not retryable
RECERTIFY_START_INTENT_CONFLICT409 — not retryable

Durable identity

Durable identity
Kindrequest-identity
Request fieldskind
ConflictRECERTIFY_START_INTENT_CONFLICT

Readback

The effect completes asynchronously; reacquire the result with:

  • recertify.list

Request example

Schematic only. Replace placeholders with real values and include all required nested fields.

POST /api/v1/recertify/campaigns HTTP/1.1
Authorization: Bearer <token>
x-merulan-workspace-id: <workspace-id>
Content-Type: application/json

{
  "kind": "group_membership",
  "cadenceDays": 0,
  "lapsePolicy": "auto_revoke"
}