Upvest Positions API

View current holdings and position details for accounts.

Documentation

Specifications

Schemas & Data

OpenAPI Specification

upvest-positions-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Upvest Investment Account Transfers Positions 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: Positions
  description: View current holdings and position details for accounts.
paths:
  /accounts/{account_id}/positions:
    get:
      operationId: listPositions
      summary: Upvest List positions
      description: Retrieve current holdings and position details for an account.
      tags:
      - Positions
      parameters:
      - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: List of positions
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Position'
              examples:
                listPositions200Example:
                  summary: Default listPositions 200 response
                  x-microcks-default: true
                  value:
                    data:
                    - id: {}
                      account_id: {}
                      instrument_id: {}
                      quantity: {}
                      average_buy_in_price: {}
                      currency: {}
                      created_at: {}
                      updated_at: {}
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                listPositions401Example:
                  summary: Default listPositions 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '404':
          description: Account not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                listPositions404Example:
                  summary: Default listPositions 404 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /accounts/{account_id}/positions/{position_id}:
    get:
      operationId: retrievePosition
      summary: Upvest Retrieve a position
      description: Retrieve details for a specific position within an account.
      tags:
      - Positions
      parameters:
      - $ref: '#/components/parameters/AccountId'
      - $ref: '#/components/parameters/PositionId'
      responses:
        '200':
          description: Position details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Position'
              examples:
                retrievePosition200Example:
                  summary: Default retrievePosition 200 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    instrument_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    quantity: example-value
                    average_buy_in_price: example-value
                    currency: EUR
                    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:
                retrievePosition401Example:
                  summary: Default retrievePosition 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '404':
          description: Position not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                retrievePosition404Example:
                  summary: Default retrievePosition 404 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:
    AccountId:
      name: account_id
      in: path
      required: true
      description: The unique identifier of the account.
      schema:
        type: string
        format: uuid
    PositionId:
      name: position_id
      in: path
      required: true
      description: The unique identifier of the position.
      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
    Position:
      type: object
      description: A holding of a financial instrument within an account.
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the position.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        account_id:
          type: string
          format: uuid
          description: The account the position belongs to.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        instrument_id:
          type: string
          format: uuid
          description: The instrument held.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        quantity:
          type: string
          description: The quantity of shares held as a decimal string.
          example: example-value
        average_buy_in_price:
          type: string
          description: The average buy-in price as a decimal string.
          example: example-value
        currency:
          type: string
          description: The position currency.
          pattern: ^[A-Z]{3}$
          example: EUR
        created_at:
          type: string
          format: date-time
          description: When the position was first established.
          example: '2025-03-15T14:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: When the position was last updated.
          example: '2025-03-15T14:30:00Z'
  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/