Upvest Portfolio Orders API

Place orders against portfolio allocations.

Documentation

Specifications

Schemas & Data

OpenAPI Specification

upvest-portfolio-orders-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Upvest Investment Account Transfers Portfolio Orders 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: Portfolio Orders
  description: Place orders against portfolio allocations.
paths:
  /portfolios/{portfolio_id}/orders:
    post:
      operationId: createPortfolioOrder
      summary: Upvest Place a portfolio order
      description: Place an order against a portfolio allocation. The order amount is distributed across the portfolio's instruments according to the target allocations.
      tags:
      - Portfolio Orders
      parameters:
      - $ref: '#/components/parameters/PortfolioId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioOrderCreate'
            examples:
              createPortfolioOrderRequestExample:
                summary: Default createPortfolioOrder request
                x-microcks-default: true
                value:
                  cash_amount: example-value
                  currency: EUR
      responses:
        '201':
          description: Portfolio order placed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioOrder'
              examples:
                createPortfolioOrder201Example:
                  summary: Default createPortfolioOrder 201 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    portfolio_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    cash_amount: example-value
                    currency: EUR
                    status: NEW
                    created_at: '2025-03-15T14:30:00Z'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                createPortfolioOrder400Example:
                  summary: Default createPortfolioOrder 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:
                createPortfolioOrder401Example:
                  summary: Default createPortfolioOrder 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:
  parameters:
    PortfolioId:
      name: portfolio_id
      in: path
      required: true
      description: The unique identifier of the portfolio.
      schema:
        type: string
        format: uuid
  schemas:
    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
    PortfolioOrder:
      type: object
      description: An order placed against a portfolio's allocations.
      properties:
        id:
          type: string
          format: uuid
          description: The portfolio order identifier.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        portfolio_id:
          type: string
          format: uuid
          description: The portfolio the order was placed for.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        cash_amount:
          type: string
          description: The total cash amount invested.
          example: example-value
        currency:
          type: string
          description: The order currency.
          example: EUR
        status:
          type: string
          enum:
          - NEW
          - PROCESSING
          - COMPLETED
          - CANCELLED
          description: The portfolio order status.
          example: NEW
        created_at:
          type: string
          format: date-time
          description: When the order was created.
          example: '2025-03-15T14:30:00Z'
    PortfolioOrderCreate:
      type: object
      description: Request body for placing a portfolio order.
      required:
      - cash_amount
      - currency
      properties:
        cash_amount:
          type: string
          description: The total cash amount to invest, distributed across allocations.
          example: example-value
        currency:
          type: string
          description: The order currency as an ISO 4217 code.
          pattern: ^[A-Z]{3}$
          example: EUR
  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/