Upvest Savings Plans API

Configure automated recurring investments into portfolios or instruments.

Documentation

Specifications

Schemas & Data

OpenAPI Specification

upvest-savings-plans-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Upvest Investment Account Transfers Savings Plans 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: Savings Plans
  description: Configure automated recurring investments into portfolios or instruments.
paths:
  /savings_plans:
    get:
      operationId: listSavingsPlans
      summary: Upvest List savings plans
      description: Retrieve a paginated list of automated savings plans.
      tags:
      - Savings Plans
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A paginated list of savings plans
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SavingsPlan'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
              examples:
                listSavingsPlans200Example:
                  summary: Default listSavingsPlans 200 response
                  x-microcks-default: true
                  value:
                    data:
                    - id: {}
                      account_id: {}
                      portfolio_id: {}
                      instrument_id: {}
                      cash_amount: {}
                      currency: {}
                      frequency: {}
                      status: {}
                      next_execution_date: {}
                      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:
                listSavingsPlans401Example:
                  summary: Default listSavingsPlans 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: createSavingsPlan
      summary: Upvest Create a savings plan
      description: Create an automated recurring investment plan. Savings plans execute on a defined schedule, investing a specified amount into an instrument or portfolio.
      tags:
      - Savings Plans
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SavingsPlanCreate'
            examples:
              createSavingsPlanRequestExample:
                summary: Default createSavingsPlan request
                x-microcks-default: true
                value:
                  account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                  portfolio_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                  instrument_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                  cash_amount: example-value
                  currency: EUR
                  frequency: WEEKLY
      responses:
        '201':
          description: Savings plan created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SavingsPlan'
              examples:
                createSavingsPlan201Example:
                  summary: Default createSavingsPlan 201 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    portfolio_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    instrument_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    cash_amount: example-value
                    currency: EUR
                    frequency: WEEKLY
                    status: ACTIVE
                    next_execution_date: '2025-03-15'
                    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:
                createSavingsPlan400Example:
                  summary: Default createSavingsPlan 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:
                createSavingsPlan401Example:
                  summary: Default createSavingsPlan 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /savings_plans/{savings_plan_id}:
    get:
      operationId: retrieveSavingsPlan
      summary: Upvest Retrieve a savings plan
      description: Retrieve details for a specific savings plan.
      tags:
      - Savings Plans
      parameters:
      - $ref: '#/components/parameters/SavingsPlanId'
      responses:
        '200':
          description: Savings plan details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SavingsPlan'
              examples:
                retrieveSavingsPlan200Example:
                  summary: Default retrieveSavingsPlan 200 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    portfolio_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    instrument_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    cash_amount: example-value
                    currency: EUR
                    frequency: WEEKLY
                    status: ACTIVE
                    next_execution_date: '2025-03-15'
                    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:
                retrieveSavingsPlan401Example:
                  summary: Default retrieveSavingsPlan 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '404':
          description: Savings plan not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                retrieveSavingsPlan404Example:
                  summary: Default retrieveSavingsPlan 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: updateSavingsPlan
      summary: Upvest Update a savings plan
      description: Update the configuration of an existing savings plan.
      tags:
      - Savings Plans
      parameters:
      - $ref: '#/components/parameters/SavingsPlanId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SavingsPlanUpdate'
            examples:
              updateSavingsPlanRequestExample:
                summary: Default updateSavingsPlan request
                x-microcks-default: true
                value:
                  cash_amount: example-value
                  frequency: WEEKLY
                  status: ACTIVE
      responses:
        '200':
          description: Savings plan updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SavingsPlan'
              examples:
                updateSavingsPlan200Example:
                  summary: Default updateSavingsPlan 200 response
                  x-microcks-default: true
                  value:
                    id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    account_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    portfolio_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    instrument_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                    cash_amount: example-value
                    currency: EUR
                    frequency: WEEKLY
                    status: ACTIVE
                    next_execution_date: '2025-03-15'
                    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:
                updateSavingsPlan400Example:
                  summary: Default updateSavingsPlan 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:
                updateSavingsPlan401Example:
                  summary: Default updateSavingsPlan 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    delete:
      operationId: deleteSavingsPlan
      summary: Upvest Delete a savings plan
      description: Cancel and remove an automated savings plan.
      tags:
      - Savings Plans
      parameters:
      - $ref: '#/components/parameters/SavingsPlanId'
      responses:
        '204':
          description: Savings plan deleted
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                deleteSavingsPlan401Example:
                  summary: Default deleteSavingsPlan 401 response
                  x-microcks-default: true
                  value:
                    type: standard
                    status: 100
                    title: example-value
                    detail: example-value
        '404':
          description: Savings plan not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                deleteSavingsPlan404Example:
                  summary: Default deleteSavingsPlan 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:
  schemas:
    SavingsPlanCreate:
      type: object
      description: Request body for creating a savings plan.
      required:
      - account_id
      - cash_amount
      - currency
      - frequency
      properties:
        account_id:
          type: string
          format: uuid
          description: The account to create the plan for.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        portfolio_id:
          type: string
          format: uuid
          description: The portfolio to invest into.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        instrument_id:
          type: string
          format: uuid
          description: The instrument to invest into.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        cash_amount:
          type: string
          description: The recurring investment amount.
          example: example-value
        currency:
          type: string
          description: The currency as an ISO 4217 code.
          pattern: ^[A-Z]{3}$
          example: EUR
        frequency:
          type: string
          enum:
          - WEEKLY
          - BIWEEKLY
          - MONTHLY
          - QUARTERLY
          description: The execution frequency.
          example: WEEKLY
    SavingsPlan:
      type: object
      description: An automated recurring investment plan.
      properties:
        id:
          type: string
          format: uuid
          description: The unique identifier of the savings plan.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        account_id:
          type: string
          format: uuid
          description: The account the savings plan belongs to.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        portfolio_id:
          type: string
          format: uuid
          description: The portfolio to invest into, if applicable.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        instrument_id:
          type: string
          format: uuid
          description: The instrument to invest into, if applicable.
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        cash_amount:
          type: string
          description: The recurring investment amount as a decimal string.
          example: example-value
        currency:
          type: string
          description: The savings plan currency as an ISO 4217 code.
          pattern: ^[A-Z]{3}$
          example: EUR
        frequency:
          type: string
          enum:
          - WEEKLY
          - BIWEEKLY
          - MONTHLY
          - QUARTERLY
          description: How often the savings plan executes.
          example: WEEKLY
        status:
          type: string
          enum:
          - ACTIVE
          - PAUSED
          - CANCELLED
          description: The savings plan status.
          example: ACTIVE
        next_execution_date:
          type: string
          format: date
          description: The next scheduled execution date.
          example: '2025-03-15'
        created_at:
          type: string
          format: date-time
          description: When the savings plan was created.
          example: '2025-03-15T14:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: When the savings plan was last updated.
          example: '2025-03-15T14:30:00Z'
    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
    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
    SavingsPlanUpdate:
      type: object
      description: Request body for updating a savings plan.
      properties:
        cash_amount:
          type: string
          description: The updated investment amount.
          example: example-value
        frequency:
          type: string
          enum:
          - WEEKLY
          - BIWEEKLY
          - MONTHLY
          - QUARTERLY
          description: The updated execution frequency.
          example: WEEKLY
        status:
          type: string
          enum:
          - ACTIVE
          - PAUSED
          description: Activate or pause the savings plan.
          example: ACTIVE
  parameters:
    SavingsPlanId:
      name: savings_plan_id
      in: path
      required: true
      description: The unique identifier of the savings plan.
      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/