---
title: "Validates and stores a shared portfolio payload."
method: POST
path: "/import/portfolio"
---

# Validates and stores a shared portfolio payload.

`POST /import/portfolio`

## Request body

- object — DcaPal Portfolio
  - `assets` object[], required — Portfolio assets
    - `aclass` 'EQUITY' | 'BOND' | 'CURRENCY' | 'CASH' | 'CRYPTO' | 'COMMODITY' | 'OTHER' | 'Equity' | 'Bond' | 'Cash' | 'Currency' | 'Crypto' | 'Commodity' | 'Other', required — Asset class. Matching is case-insensitive. Supported aliases are Equity, Bond, Cash, Currency, Crypto, Commodity, and Other; unknown values are stored as Other.
    - `baseCcy` string, required — Asset base currency
    - `fees` object — Transaction fees
      - `feeStructure` union, required — Fee structure
        - object
          - `type` 'zeroFee', required
        - object
          - `feeAmount` string, required — Transaction fee amount
          - `type` 'fixed', required
        - object
          - `feeRate` string, required — Decimal percentage represented as a string
          - `maxFee` string — Transaction fee maximum amount
          - `minFee` string, required — Transaction fee minimum amount
          - `type` 'variable', required
      - `maxFeeImpact` string — Decimal percentage represented as a string
    - `name` string, required — Asset name
    - `price` string, required — Asset price
    - `provider` 'DCAPal' | 'Kraken' | 'YF' | 'Yahoo', required — Price provider. Matching is case-insensitive. Accepted aliases are DCAPal and Kraken for Kraken-backed assets, and YF and Yahoo for Yahoo Finance-backed assets. Choose DCAPal for Crypto and YF for anything else.
    - `qty` string, required — Number of units of the asset in portfolio
    - `symbol` string, required — Asset ticker
    - `targetWeight` string, required — Asset target weight
  - `fees` object — Transaction fees
    - `feeStructure` union, required — Fee structure
      - object
        - `type` 'zeroFee', required
      - object
        - `feeAmount` string, required — Transaction fee amount
        - `type` 'fixed', required
      - object
        - `feeRate` string, required — Decimal percentage represented as a string
        - `maxFee` string — Transaction fee maximum amount
        - `minFee` string, required — Transaction fee minimum amount
        - `type` 'variable', required
    - `maxFeeImpact` string — Decimal percentage represented as a string
  - `name` string — Portfolio name
  - `quoteCcy` 'usd' | 'eur' | 'gbp' | 'chf' | 'jpy' | 'cad' | 'aed' | 'aud', required

## Response `201`

Imported portfolio metadata

- ImportPortfolioResponse — Metadata returned after a portfolio is stored for sharing.
  - `expires_at` string, required
  - `id` string, required

## Other responses

- `400` — Input portfolio does not match schema requirements

## Changes

- **2026-08-27** `92c971381f20` — 2 breaking, 13 info
  - the `assets/items/aclass` request property type/format changed from ``/`` to `string`/``
  - the `assets/items/provider` request property type/format changed from ``/`` to `string`/``
  - added the new `BOND` enum value to the request property `assets/items/aclass`
  - added the new `Bond` enum value to the request property `assets/items/aclass`
  - …11 more
- **2026-08-02** `fcd63bcfbb5b` — 13 breaking, 10 info
  - added the new required request property `assets/items/aclass`
  - added the new required request property `assets/items/baseCcy`
  - added the new required request property `assets/items/name`
  - added the new required request property `assets/items/price`
  - …19 more

[Change history](https://skmtc.dev/dcapal/apis/dca-pal-apis/changes/import/portfolio/post.md)

---

[API](https://skmtc.dev/dcapal/apis/dca-pal-apis.md) · [All operations](https://skmtc.dev/dcapal/apis/dca-pal-apis/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/dcapal/dca-pal-apis/revisions/92c971381f20/schema)
