---
title: "Redeem shares from an investor"
method: POST
path: "/v1/invest/funds/{fundId}/holdings/redeem"
tags: ["Invest"]
---

# Redeem shares from an investor

`POST /v1/invest/funds/{fundId}/holdings/redeem`

## Request

- Base URL: `https://api.prod.keyban.io`
- URL: `https://api.prod.keyban.io/v1/invest/funds/{fundId}/holdings/redeem`
- Auth: API key in header `X-Api-Key`

Buy back shares from an investor. Reduces their holding and records a BUY_BACK transaction. Fails if the investor does not hold enough shares or if a lockup period is active (fund-level or investor-level).

## Path parameters

- `fundId` string, uuid, required

## Request body

- RedeemSharesDto
  - `identity` string, uuid, required: The unique identifier of the investor identity
  - `shares` integer, required: Number of shares to redeem
  - `price` number, required: Total price of the redemption

## Response `201`

Shares redeemed successfully

- InvestTransactionDto
  - `id` string, uuid, required: Entity UUID
  - `createdAt` string, date-time, required: Creation date (ISO 8601)
  - `updatedAt` string, date-time, required: Last update date (ISO 8601)
  - `fund` string, uuid, required: The unique identifier of the investment fund
  - `seller` string, uuid, nullable: UUID of the InvestIdentity acting as the seller. Null when `type` is `INITIAL_DISTRIBUTION` (primary issuance: the fund itself emits shares, there is no selling counterparty).
  - `buyer` string, uuid, nullable: UUID of the InvestIdentity acting as the buyer. Null when `type` is `BUY_BACK` (the fund redeems shares from an investor; there is no buying counterparty).
  - `shares` integer, required: Number of whole shares exchanged in this transaction (minimum 1).
  - `price` number, required: Unit price per share in the fund currency at the time of the transaction. Multiply by `shares` to obtain the total settlement amount.
  - `currency` 'EUR' | 'USD', required: Currency of the transaction, inherited from the fund (ISO 4217 code, e.g. `EUR`, `USD`).
  - `type` 'INITIAL_DISTRIBUTION' | 'BUY_BACK' | 'SECONDARY_MARKET', required: Transaction type. `INITIAL_DISTRIBUTION`: primary issuance of shares from the fund to a KYC-verified investor — `seller` is null. `BUY_BACK`: fund redemption of shares held by an investor — `buyer` is null. `SECONDARY_MARKET`: peer-to-peer transfer of shares between two investors via a secondary-market offer.
  - `status` 'PENDING' | 'VALIDATED' | 'REJECTED', required: Lifecycle status of the transaction. `PENDING`: submitted and awaiting validation (KYC check, blockchain settlement). `VALIDATED`: confirmed on-chain; shares have been transferred. `REJECTED`: declined due to KYC failure, lockup period violation, or insufficient funds.

## Other responses

- `400`: Lockup period active or investor does not hold enough shares

---

[API](https://skmtc.dev/keyban/apis/keyban-rest-apis.md) · [All operations](https://skmtc.dev/keyban/apis/keyban-rest-apis/llms.txt) · [OpenAPI document](https://skmtc.dev/keyban/apis/keyban-rest-apis/revisions/0bb79a1da961?raw)
