Transfers API
API reference for transfer evaluation, settlement, consent, and indication of interest.
Transfer Lifecycle
The transfer workflow follows a strict sequence: evaluate → IOI → consent → settle. Each step produces events in the audit trail.
POST /v1/transfers/evaluate
Evaluate one or more proposed transfers against the Rights Engine. Returns a verdict with pass/fail/conditional status for each of the 18 compliance checks.
Request
{
"proposed_transfers": [
{
"position": "pos-rd-gp-b-saronic",
"seller": "part-gp-a",
"buyer": "part-buyer-001",
"amount_usd": "2000000"
}
],
"requester": "part-buyer-001"
}Response
{
"transfer_id": "txn-001",
"overall": "CONDITIONALLY_ALLOWED",
"requires_counsel_review": false,
"verdicts": [
{
"position": "pos-rd-gp-b-saronic",
"verdict": {
"allowed": true,
"conditional": true,
"requires_counsel_review": false,
"checks": [
{ "check": "accreditation", "status": "pass", "detail": "Buyer is accredited investor" },
{ "check": "kyc_aml", "status": "pass", "detail": "KYC verified, AML cleared" },
{ "check": "itar_eligibility", "status": "pass", "detail": "Buyer is US person, ITAR eligible" },
{ "check": "consent_required", "status": "conditional", "detail": "GP consent required" }
],
"pending_actions": [
{ "type": "consent", "party": "part-gp-a", "role": "managing_member", "required": true }
]
},
"carry_analysis": {
"carry_on_transfer_mode": "passthrough",
"inherited_basis": 1000000,
"purchase_price": 2000000,
"current_nav_slice": 2000000,
"carry_rate": 0.20,
"accrued_carry_burden": 200000,
"carry_adjusted_nav": 1800000,
"carry_recipients": [
{ "recipient": "deal_originator", "rate": 0.15, "amount": "150000" },
{ "recipient": "fund_gp", "rate": 0.05, "amount": "50000" }
]
}
}
],
"legs": [
{
"from": "part-gp-a",
"to": "part-buyer-001",
"position_id": "pos-rd-gp-b-saronic",
"fraction": 0.2,
"consideration_usd": "2000000",
"new_position_id": "pos-part-buyer-001-rd-gp-b-saronic"
}
]
}Verdict statuses
| Status | Meaning |
|---|---|
ALLOWED | All checks pass, no conditions |
CONDITIONALLY_ALLOWED | Checks pass but pending actions (consent, ROFR) must be resolved |
BLOCKED | One or more checks failed — transfer cannot proceed |
Carry analysis
When a position has carry terms, the evaluate response includes a carry_analysis object on each verdict. This is always computed regardless of the carry_on_transfer mode — the buyer needs to see the carry economics before committing.
| Field | Description |
|---|---|
carry_on_transfer_mode | How carry is treated on transfer: passthrough, crystallize_and_defer, or crystallize_and_settle |
inherited_basis | Seller's pro-rata cost basis on the transferred slice (the waterfall-visible basis) |
purchase_price | What the buyer is paying (consideration_usd) |
current_nav_slice | Current mark times the transfer fraction |
carry_rate | Total carry rate (e.g. 0.20 = 20%) |
accrued_carry_burden | carry_rate * (current_nav_slice - inherited_basis) |
carry_adjusted_nav | current_nav_slice - accrued_carry_burden — the effective value net of carry |
carry_recipients | Per-recipient breakdown: deal originator, fund GP, etc. |
For positions without carry terms, carry_analysis is null.
POST /v1/ioi/create
Submit an indication of interest for one or more positions. IOIs are non-binding expressions of intent.
Request
{
"buyer": "part-buyer-001",
"positions": [
{ "position_id": "pos-rd-gp-b-saronic", "amount_usd": "2000000" }
]
}Response (201)
{
"ioi_id": "ioi-001",
"buyer": "part-buyer-001",
"positions": [{ "position_id": "pos-rd-gp-b-saronic", "amount_usd": "2000000" }],
"status": "submitted"
}POST /v1/ioi/accept
Accept a submitted IOI. Requires authorization from the position owner or managing member.
Request
{
"ioi_id": "ioi-001",
"acceptors": ["part-gp-a"],
"authorized_by": "part-gp-a"
}Response
{
"ioi_id": "ioi-001",
"status": "accepted"
}POST /v1/consent/request
Request consent from one or more parties in the consent chain. Creates pending consent records.
Request
{
"transfer_id": "txn-001",
"consent_chain": [
{
"party": "part-gp-a",
"role": "managing_member",
"required": true,
"authority": "OA Section 9.4"
}
]
}Response (201)
{
"transfer_id": "txn-001",
"consents": [
{
"consent_id": "consent-001",
"transfer_id": "txn-001",
"party": "part-gp-a",
"role": "managing_member",
"required": true,
"status": "pending",
"authority": "OA Section 9.4"
}
]
}POST /v1/consent/approve
Grant or deny consent for a pending transfer.
Request
{
"transfer_id": "txn-001",
"party": "part-gp-a",
"signer": "john-komkov",
"approved": true,
"authority": "Managing Member authorization"
}Response
{
"consent_id": "consent-001",
"status": "granted",
"all_granted": true
}POST /v1/transfers/settle
Execute settlement for an evaluated transfer. All pending consents must be resolved first. Produces position mutations, generates a transfer agreement document, and records events in the audit chain.
Request
{
"transfer_id": "txn-001",
"settlements": [
{
"position_id": "pos-rd-gp-b-saronic",
"from": "part-gp-a",
"to": "part-buyer-001",
"fraction": 0.2,
"consideration_usd": "2000000"
}
]
}Response
{
"transfer_id": "txn-001",
"status": "settled",
"document_id": "doc-ta-txn-001",
"mutations": [
{
"position": "pos-rd-gp-b-saronic",
"new_position": "pos-part-buyer-001-rd-gp-b-saronic",
"from": "part-gp-a",
"to": "part-buyer-001",
"fraction": 0.2,
"consideration_usd": "2000000"
}
]
}Settlement effects
- Seller position is reduced by the transferred fraction
- New buyer position is created with inherited economic rights
- Transfer agreement document is generated with SHA-256 content hash
- Audit events are recorded:
position.transferred,position.registered,transfer.settled