---
title: "Assign a steward to a stewardship"
method: POST
path: "/stewardships/{id}/assign"
tags: ["Stewardship Actions"]
---

# Assign a steward to a stewardship

`POST /stewardships/{id}/assign`

Assigns a user as a steward with the given role. If the user is already an active steward, the role is updated (soft-delete + re-insert). Returns the unchanged stewardship record and the full active stewards list after the operation.

## Path parameters

- `id` integer, required

## Request body

- object
  - `steward` object, required — The user to assign as steward. `username` and `displayName` must be provided together or both omitted — sending one without the other returns 400.
    - `userId` string, required — Auth0 sub of the user to assign as steward.
    - `username` string, nullable — LFX username of the steward. Must be provided together with `displayName`.
    - `displayName` string, nullable — Full display name of the steward. Must be provided together with `username`.
    - `role` 'lead' | 'co_steward', required
  - `note` string — Optional free-text note for the activity log.
  - `moveToAssessing` boolean — If true, atomically transitions the stewardship status to `assessing` in the same transaction as the assignment. Use for the "Assign & move to Assessing" action to avoid a second round-trip.
  - `actor` ActorInput, required — Profile of the actor performing this action. Stored as a snapshot on the activity log. `userId` is required. All other fields are optional and can be null.
    - `userId` string, required — Auth0 sub of the actor. Must match the authenticated user's token sub.
    - `username` string, nullable — LFX username of the actor.
    - `displayName` string, nullable — Full display name of the actor.
    - `avatarUrl` string, uri, nullable — Avatar URL of the actor.

## Response `200`

Steward assigned.

- object
  - `stewardship` StewardshipRecord, required
    - `id` string, required
    - `packageId` string, required
    - `status` 'unassigned' | 'open' | 'assessing' | 'active' | 'needs_attention' | 'escalated' | 'blocked' | 'inactive', required
    - `origin` 'auto_imported' | 'self_claimed' | 'assigned' | 'opened_for_claim', required
    - `version` integer, required
    - `openedAt` string, date-time, nullable
    - `lastStatusAt` string, date-time, nullable
    - `inactiveReason` 'quarterly_cadence_missed' | 'stepped_down' | 'no_longer_critical' | 'null', nullable
    - `resolutionPath` 'right_of_first_refusal' | 'replace_the_dependency' | 'find_vendor_for_lts' | 'consortium_adopts_maintainership' | 'compensating_controls_monitor' | 'namespace_takeover'
    - `statusNote` string, nullable — Free-text note for the current status. Set by escalate or updateStatus. Null on open.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
  - `stewards` StewardRecord[], required
    - `id` string, required
    - `stewardshipId` string, required
    - `userId` string, required — Auth0 sub of the assigned steward.
    - `username` string, nullable — LFX username of the steward. Null if not yet stored.
    - `displayName` string, nullable — Full display name of the steward. Null if not yet stored.
    - `role` 'lead' | 'co_steward', required
    - `assignedAt` string, date-time, required
    - `assignedBy` string, nullable — Auth0 sub of the admin who assigned this steward.

## Other responses

- `400` — Validation error (e.g. invalid role).
- `401` — Missing or invalid bearer token.
- `403` — Insufficient scopes.
- `404` — Stewardship not found.

---

[API](https://skmtc.net/linuxfoundation/apis/cdp-public-api-stewardship-admin-actions.md) · [All operations](https://skmtc.net/linuxfoundation/apis/cdp-public-api-stewardship-admin-actions/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/linuxfoundation/cdp-public-api-stewardship-admin-actions/versions/6ebc984b9a25/schema)
