Skip to content

Portfolio API

Portfolio management, investors, loan assignments, snapshots, and loan tape generation.

Base permission: IsViewerOrAbove (read), IsAdminOrAbove (write)

Portfolios

Method Path Description Permission
GET /portfolios List portfolios IsViewerOrAbove
GET /portfolios/{id} Get portfolio IsViewerOrAbove
POST /portfolios Create portfolio IsAdminOrAbove
PUT /portfolios/{id} Update portfolio IsAdminOrAbove
DELETE /portfolios/{id} Archive portfolio IsAdminOrAbove
POST /portfolios/{id}/unarchive Unarchive portfolio IsAdminOrAbove
POST /portfolios/{id}/auto-assign Auto-assign loans by criteria IsAdminOrAbove
POST /portfolios/{id}/sell Mark portfolio as sold IsAdminOrAbove
POST /portfolios/{id}/transfer-loans Transfer loans between portfolios IsAdminOrAbove
GET /portfolios/{id}/vintages Get vintage analysis IsViewerOrAbove

Create Portfolio

POST /api/v1/portfolios
{
  "name": "Q1 2026 Consumer Loans",
  "portfolio_type": "static",
  "description": "Consumer installment loans originated in Q1 2026",
  "criteria": {
    "program_id": "661f9511-f3ac-52e5-b827-557766551111",
    "origination_date_start": "2026-01-01",
    "origination_date_end": "2026-03-31"
  }
}

Portfolio Types

Type Description
static Loans are manually assigned
dynamic Loans are auto-assigned based on criteria

Auto-Assign Loans

Assign loans matching portfolio criteria that are not already assigned.

POST /api/v1/portfolios/{id}/auto-assign

Sell Portfolio

POST /api/v1/portfolios/{id}/sell
{
  "investor_id": "...",
  "sale_date": "2026-03-01",
  "sale_price": "9850000.00"
}

Assign Loan to Portfolio

POST /api/v1/loans/{id}/assign-portfolio
{
  "portfolio_id": "..."
}

Portfolio Snapshots

Daily point-in-time snapshots of portfolio metrics.

Method Path Description Permission
GET /portfolios/{id}/snapshots List snapshots IsViewerOrAbove
POST /portfolios/{id}/snapshots Create snapshot IsAdminOrAbove

Snapshot Metrics

{
  "id": "...",
  "portfolio_id": "...",
  "snapshot_date": "2026-01-31",
  "total_loans": 250,
  "total_principal": "2500000.00",
  "total_outstanding": "2150000.00",
  "weighted_average_rate": "0.078",
  "weighted_average_term": 42,
  "delinquency_rate": "0.032",
  "default_rate": "0.008",
  "by_bucket": {
    "current": 235,
    "dpd_1_29": 8,
    "dpd_30_59": 4,
    "dpd_60_89": 2,
    "dpd_90_119": 1
  }
}

Investors

Method Path Description Permission
GET /investors List investors IsViewerOrAbove
GET /investors/{id} Get investor IsViewerOrAbove
POST /investors Create investor IsAdminOrAbove
PUT /investors/{id} Update investor IsAdminOrAbove

Nested Resources

Method Path Description
GET /investors/{id}/settlement-instruments List settlement instruments
POST /investors/{id}/settlement-instruments Add settlement instrument
GET /investors/{id}/loan-assignments List loan assignments
POST /investors/{id}/loan-assignments Create loan assignment

Flat endpoints: GET /settlement-instruments/{id}, PUT /settlement-instruments/{id}, GET /loan-assignments/{id}, PUT /loan-assignments/{id}

Loan Snapshots

Point-in-time snapshots of individual loan state.

Method Path Description Permission
GET /loan-snapshots List loan snapshots IsViewerOrAbove

Loan Tape Configs

Configure and generate loan tapes for investor reporting.

Method Path Description Permission
GET /loan-tape-configs List configs IsViewerOrAbove
GET /loan-tape-configs/{id} Get config IsViewerOrAbove
POST /loan-tape-configs Create config IsAdminOrAbove
PUT /loan-tape-configs/{id} Update config IsAdminOrAbove
POST /loan-tape-configs/{id}/generate Generate loan tape IsAdminOrAbove

Create Loan Tape Config

POST /api/v1/loan-tape-configs
{
  "name": "Monthly Investor Report",
  "portfolio_id": "...",
  "format": "csv",
  "columns": [
    "loan_number",
    "borrower_name",
    "principal_balance",
    "interest_rate",
    "days_past_due",
    "delinquency_bucket",
    "next_payment_date"
  ],
  "schedule": "monthly"
}

See Also