---
title: "Distribute shares to an investor"
method: POST
path: "/v1/invest/funds/{fundId}/holdings/distribute"
tags: ["Invest"]
---

# Distribute shares to an investor

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

## Request

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

Distribute shares from the fund to an investor. Creates or increments a holding and records an INITIAL_DISTRIBUTION transaction. Fails if the total distributed shares would exceed the fund capacity.

## Path parameters

- `fundId` string, uuid, required

## Request body

- DistributeSharesDto
  - `identity` string, uuid, required: The unique identifier of the investor identity
  - `shares` integer, required: Number of shares to distribute
  - `price` number, required: Total price of the distribution

## Response `201`

Shares distributed 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`: Not enough shares available in the fund

---

[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)
