Upvest Portfolios API

Create and manage portfolios with custom asset allocations.

Documentation

Specifications

Schemas & Data

OpenAPI Specification

upvest-portfolios-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Upvest Investment Account Transfers Portfolios API
  description: The Upvest Investment API provides a unified interface for building embedded investment experiences. It supports placing and managing orders, creating portfolios, configuring savings plans, handling securities transfers, and managing user accounts and positions. The API covers the full order lifecycle with asynchronous processing and webhook notifications for real-time event handling. Financial institutions can use the API to offer fractional investing, automated portfolio management, and localized investment products across European and UK markets.
  version: 1.0.0
  contact:
    name: Upvest Support
    url: https://upvest.co/
  termsOfService: https://upvest.co/legal
servers:
- url: https://api.upvest.co
  description: Production Server
- url: https://sandbox.upvest.co
  description: Sandbox Server
security:
- oauth2ClientCredentials: []
tags:
- name: Portfolios
  description: Create and manage portfolios with custom asset allocations.
paths:
  /portfolios:
    get:
      operationId: listPortfolios
      summary: Upvest List portfolios
      description: Retrieve a paginated list of portfolios.
      tags:
      - Portfolios
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A paginated list of portfolios
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Portfolio'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
              examples:
                listPortfolios200Example:
                  summary: Default listPortfolios 200 response
                  x-microcks-default: true
                  value:
                    data:
                    - id: {}
                      account_id: {}
                      name: {}
                      status: {}
                      created_at: {}
                      updated_at: {}
                    meta:
                      offset: 0
                      limit: 20
                      count: 100
                      total: 100
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                listPortfolios401Example:
                  summary: Default listPortfolios 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createPortfolio
      summary: Upvest Create a portfolio
      description: Create a new portfolio with a defined set of target allocations across instruments.
      tags:
      - Portfolios
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioCreate'
            examples:
              createPortfolioRequestExample:
                summary: Default createPortfolio request
                x-microcks-default: true
                value:
                  account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                  name: Example Name
                  allocations:
                  - {}
      responses:
        '201':
          description: Portfolio created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Portfolio'
              examples:
                createPortfolio201Example:
                  summary: Default createPortfolio 201 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    name: Example Name
                    status: ACTIVE
                    created_at: '2025-03-15T14:30:00Z'
                    updated_at: '2025-03-15T14:30:00Z'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                createPortfolio400Example:
                  summary: Default createPortfolio 400 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                createPortfolio401Example:
                  summary: Default createPortfolio 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /portfolios/{portfolio_id}:
    get:
      operationId: retrievePortfolio
      summary: Upvest Retrieve a portfolio
      description: Retrieve details for a specific portfolio including its allocations and current state.
      tags:
      - Portfolios
      parameters:
      - $ref: '#/components/parameters/PortfolioId'
      responses:
        '200':
          description: Portfolio details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Portfolio'
              examples:
                retrievePortfolio200Example:
                  summary: Default retrievePortfolio 200 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    name: Example Name
                    status: ACTIVE
                    created_at: '2025-03-15T14:30:00Z'
                    updated_at: '2025-03-15T14:30:00Z'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                retrievePortfolio401Example:
                  summary: Default retrievePortfolio 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '404':
          description: Portfolio not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                retrievePortfolio404Example:
                  summary: Default retrievePortfolio 404 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    patch:
      operationId: updatePortfolio
      summary: Upvest Update a portfolio
      description: Update portfolio settings or metadata.
      tags:
      - Portfolios
      parameters:
      - $ref: '#/components/parameters/PortfolioId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioUpdate'
            examples:
              updatePortfolioRequestExample:
                summary: Default updatePortfolio request
                x-microcks-default: true
                value:
                  name: Example Name
      responses:
        '200':
          description: Portfolio updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Portfolio'
              examples:
                updatePortfolio200Example:
                  summary: Default updatePortfolio 200 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    name: Example Name
                    status: ACTIVE
                    created_at: '2025-03-15T14:30:00Z'
                    updated_at: '2025-03-15T14:30:00Z'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                updatePortfolio400Example:
                  summary: Default updatePortfolio 400 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                updatePortfolio401Example:
                  summary: Default updatePortfolio 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    PaginationMeta:
      type: object
      description: Pagination metadata for list responses.
      properties:
        offset:
          type: integer
          description: The current offset.
          example: 0
        limit:
          type: integer
          description: The page size.
          example: 20
        count:
          type: integer
          description: The total number of items in the current page.
          example: 100
        total:
          type: integer
          description: The total number of items available.
          example: 100
    Portfolio:
      type: object
      description: A portfolio with defined target allocations across instruments.
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the portfolio.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        account_id:
          type: string
          format: uuid
          description: The account this portfolio belongs to.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        name:
          type: string
          description: The portfolio name.
          example: Example Name
        status:
          type: string
          enum:
          - ACTIVE
          - CLOSED
          description: The portfolio status.
          example: ACTIVE
        created_at:
          type: string
          format: date-time
          description: When the portfolio was created.
          example: '2025-03-15T14:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: When the portfolio was last updated.
          example: '2025-03-15T14:30:00Z'
    Error:
      type: object
      description: An API error response.
      properties:
        type:
          type: string
          description: The error type identifier.
          example: standard
        status:
          type: integer
          description: The HTTP status code.
          example: 100
        title:
          type: string
          description: A short human-readable summary of the error.
          example: example-value
        detail:
          type: string
          description: A detailed human-readable explanation of the error.
          example: example-value
    PortfolioAllocationCreate:
      type: object
      description: Request body for defining a portfolio allocation.
      required:
      - instrument_id
      - weight
      properties:
        instrument_id:
          type: string
          format: uuid
          description: The instrument to allocate to.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        weight:
          type: string
          description: The target weight as a decimal string between 0 and 1.
          example: example-value
    PortfolioCreate:
      type: object
      description: Request body for creating a portfolio.
      required:
      - account_id
      - name
      - allocations
      properties:
        account_id:
          type: string
          format: uuid
          description: The account to create the portfolio for.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        name:
          type: string
          description: The portfolio name.
          example: Example Name
        allocations:
          type: array
          items:
            $ref: '#/components/schemas/PortfolioAllocationCreate'
          description: The initial target allocations.
          example:
          - instrument_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
            weight: example-value
    PortfolioUpdate:
      type: object
      description: Request body for updating a portfolio.
      properties:
        name:
          type: string
          description: The updated portfolio name.
          example: Example Name
  parameters:
    PortfolioId:
      name: portfolio_id
      in: path
      required: true
      description: The unique identifier of the portfolio.
      schema:
        type: string
        format: uuid
    Offset:
      name: offset
      in: query
      description: The number of items to skip for pagination.
      schema:
        type: integer
        minimum: 0
        default: 0
    Limit:
      name: limit
      in: query
      description: The maximum number of items to return per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
  securitySchemes:
    oauth2ClientCredentials:
      type: oauth2
      description: OAuth 2.0 client credentials flow. Obtain an access token by providing your client ID and client secret.
      flows:
        clientCredentials:
          tokenUrl: /auth/token
          scopes:
            users:read: Read user data
            users:admin: Onboard and manage users
            accounts:read: Read account data
            accounts:admin: Create and manage accounts
            orders:read: Read order data
            orders:admin: Place and manage orders
            instruments:read: Read instrument data
            portfolios:read: Read portfolio data
            portfolios:admin: Create and manage portfolios
            positions:read: Read position data
            payments:read: Read payment data
            payments:admin: Manage payments and direct debits
            reports:read: Read reports
            webhooks:read: Read webhook subscriptions
            webhooks:admin: Manage webhook subscriptions
            transactions:read: Read transaction data
            fees:read: Read fee data
            fees:admin: Configure fees
externalDocs:
  description: Upvest API Documentation
  url: https://docs.upvest.co/