---
title: "Transfer a member's items"
method: POST
path: "/members/{id}/transfer"
tags: ["Roles and members"]
---

# Transfer a member's items

`POST /members/{id}/transfer`

## Request

- Base URL: `https://api.primitive.dev/v1`
- URL: `https://api.primitive.dev/v1/members/{id}/transfer`
- Auth: HTTP bearer

Moves items to another member, who must cover each; keys can be rotated as they move. Attribution of what was created is unchanged. Person only: a dashboard session, or the person's own OAuth or CLI token with a session step-up of purpose `members.transfer` (the person confirms at the step_up_url a 403 step_up_required answer carries, which names this client and the member, then send the token in the Primitive-Step-Up header; the token works only with the client it was confirmed for and only for the member it was confirmed for). Needs members:manage. API keys are refused.

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string

## Request body

- TransferOwnedItemsRequest
  - `to_user_id` string, uuid, required
  - `items` object[], required
    - `kind` 'api_key' | 'function' | 'github_binding' | 'endpoint' | 'function_trigger' | 'pull_subscription' | 'recipient_route' | 'filter_rule' | 'wake_schedule' | 'repeating_send' | 'scheduled_send', required
    - `id` string, uuid, required
    - `rotate` boolean

## Response `200`

Transfer a member's items

- object
  - `success` true, required
  - `data` TransferOwnedItemsResult, required
    - `transferred` object[], required
      - `kind` string, required
      - `id` string, required
      - `rotated` boolean
    - `refused` object[], required
    - `rotated` object[], required
    - `unrotated_keys` string[], required
    - `ended_predecessors` string[]
    - `stopped_until_redeploy` string[]
    - `transfer_stop_pending` string[]
    - `redeploy_failed` object[], required
    - `warning` string, nullable, required

## Other responses

- `400`: Invalid request parameters
- `401`: Invalid or missing API key
- `403`: Authenticated caller lacks permission for the operation
- `404`: feature_disabled: the feature is not enabled for the organization; or not_found: the item the path names does not exist.
- `409`: conflict: the item changed while you edited it, or a member was removed and added back. Look again, then retry.
- `429`: Rate limit exceeded. The `ratelimit-*` headers describe the limiter that rejected this request, with its own limit and window, not the API budget that successful responses report. A limiter that reports only a wait sends `Retry-After` alone.

---

[API](https://skmtc.dev/primitive/apis/primitive-api.md) - [All operations](https://skmtc.dev/primitive/apis/primitive-api/llms.txt) - [OpenAPI document](https://skmtc.dev/primitive/apis/primitive-api/revisions/bce409c97acb?raw)
