---
title: "List savings plan executions"
method: GET
path: "/savings_plans/{savings_plan_id}/executions"
tags: ["Savings Plans"]
---

# List savings plan executions

`GET /savings_plans/{savings_plan_id}/executions`

## Request

- Base URL: `https://sandbox.upvest.co`
- URL: `https://sandbox.upvest.co/savings_plans/{savings_plan_id}/executions`
- Auth: OAuth 2 (client credentials, token URL `https://sandbox.upvest.co/auth/token`, scopes: `savings_plans:read`, `savings_plans:admin`)

List savings plan executions for a saving plan specified by its ID.

## Query parameters

- `start_date` string: Returns savings plan executions starting from and including this date (UTC)
- `end_date` string: Returns savings plan executions up to this date (UTC)
- `sort` 'execution_date' | 'created_at' | 'updated_at'
- `order` 'ASC' | 'DESC'
- `offset` integer
- `limit` integer

## Response `200`

OK

- object: Paginated list of savings plan executions for a savings plan, including cursor-based pagination metadata.
  - `meta` object, required: Offset/limit pagination metadata for a list response. Contains the `offset` and `limit` applied to the request, the `count` of resources returned in this page, and the `total_count` of matching resources.
    - `offset` integer, required: Amount of resource to offset in the response.
    - `limit` integer, required: Total limit of the response.
    - `count` integer, required: Count of the resources returned in the response.
    - `total_count` integer, required: Total count of all the resources.
    - `sort` string: The field that the list is sorted by.
    - `order` 'ASC' | 'DESC': The ordering applied to the list. * ASC — Ascending order. * DESC — Descending order.
  - `data` union[], required
    - union
      - object: Represents a single execution of an `INSTRUMENT`-type savings plan, recording the order placed, the execution date, and the resulting status.
        - `id` string, uuid, required: Universally Unique Identifier (UUID) of a savings plan execution.
        - `created_at` string, date-time, required: Date and time when the resource was created. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
        - `updated_at` string, date-time, required: Date and time when the resource was last updated. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
        - `user_id` string, uuid, required: Unique identifier of the user, as a UUID.
        - `account_id` string, uuid, required: Universally Unique Identifier (UUID) of the account.
        - `savings_plan_id` string, uuid, required: Universally Unique Identifier (UUID) of a savings plan.
        - `order_id` union, required: Order unique identifier (Portfolio order or Instrument order)
          - string, uuid: Universally Unique Identifier (UUID) of a portfolio order.
          - object: Represents an investment order placed by an end user or on their behalf. An order transitions through states (`NEW` → `PROCESSING` → `FILLED` or `CANCELLED`) as it is routed and executed.
            - `id` string, uuid, required: Unique identifier for an order. Universally Unique Identifier (UUID).
            - `created_at` string, date-time, required: Date and time when the resource was created. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
            - `updated_at` string, date-time, required: Date and time when the resource was last updated. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
            - `user_id` string, uuid: The ID of the user. Either user ID or business ID must be specified.
            - `business_id` string, uuid: The ID of the business. Either user ID or business ID must be specified.
            - `account_id` string, uuid, required: The ID of the account that owns the order
            - `cash_amount` string, required: Cash amount for a nominal order, not required if a share quantity is specified.
            - `currency` 'EUR' | 'GBP' | 'USD', required: The currency for the order.
            - `side` 'BUY' | 'SELL', required: Side of the order. * BUY — purchases the specified instrument. * SELL — disposes of the specified instrument.
            - `instrument_id` string, required: International securities identification number defined by [ISO 6166](https://en.wikipedia.org/wiki/International_Securities_Identification_Number).
            - `instrument_id_type` 'ISIN', required: The type of the ID used in the request. * ISIN -
            - `order_type` 'MARKET' | 'LIMIT' | 'STOP', required: Type of the order. * MARKET — executes immediately at the best available market price. * LIMIT — executes only at or better than the specified `limit_price`. * STOP — triggers when the market price reaches `stop_price`, then executes at the prevailing market price.
            - `quantity` string, required: Quantity of securities for the order. Only required if the cash amount is not specified.
            - `user_instrument_fit_acknowledgement` boolean: Only applicable if the user has failed the instrument fit check for the instrument type being ordered. True if the user has acknowledged their willingness to trade.
            - `limit_price` string: The limit price for orders of the type 'limit'.
            - `stop_price` string: The stop price for orders of the type 'stop'.
            - `expiry_date` string: The order expiration date (last day the order can trade) in the YYYY-MM-DD format. The expiry date can only be set for LIMIT and STOP orders. [RFC 3339, section 5.6](https://json-schema.org/draft/2020-12/json-schema-validation.html#RFC3339) RFC 3339. The default value is order creation date + 359 days
            - `status` 'NEW' | 'PROCESSING' | 'FILLED' | 'CANCELLED', required: The execution status of the order. * NEW — the order has been received and validated, awaiting routing. * PROCESSING — the order is being routed for execution. * FILLED — the order has been fully executed. * CANCELLED — the order was cancelled before being fully executed.
            - `fee` string, required: A positive decimal amount, as a string.
            - `cancellation_reason` 'CANCELLED_BY_CLIENT' | 'CANCELLED_BY_UPVEST_OPERATIONS' | 'CANCELLED_BY_TRADING_PARTNER' | 'CANCELLED_BY_UPVEST_PLATFORM': Reason for order cancellation. Present only when `status` is `CANCELLED`. * CANCELLED_BY_CLIENT — cancelled at the end user's or client's request via the API. * CANCELLED_BY_UPVEST_OPERATIONS — cancelled by Upvest operations. * CANCELLED_BY_TRADING_PARTNER — cancelled by the executing partner. * CANCELLED_BY_UPVEST_PLATFORM — cancelled automatically by the Upvest platform.
            - `initiation_flow` 'API' | 'PORTFOLIO' | 'CASH_DIVIDEND_REINVESTMENT' | 'PORTFOLIO_REBALANCING' | 'SELL_TO_COVER_FEES' | 'SELL_TO_COVER_TAXES' | 'ACCOUNT_LIQUIDATION' | 'UPVEST_OPERATIONS' | 'SAVINGS_PLAN' | 'CLIENT_OPERATIONS', required: Identifies what triggered the order. * API — initiated directly via the client API. * PORTFOLIO — initiated by a portfolio order. * CASH_DIVIDEND_REINVESTMENT — initiated as part of dividend reinvestment. * PORTFOLIO_REBALANCING — initiated by an automated rebalancing. * SELL_TO_COVER_FEES — initiated automatically to cover outstanding fees. * SELL_TO_COVER_TAXES — initiated automatically to cover tax obligations. * ACCOUNT_LIQUIDATION — initiated as part of an account liquidation. * UPVEST_OPERATIONS — initiated by Upvest operations. * SAVINGS_PLAN — initiated by a savings plan execution. * CLIENT_OPERATIONS — initiated by client operations.
            - `execution_flow` 'STRAIGHT_THROUGH' | 'BLOCK': Execution flow for order processing. Defaults to `STRAIGHT_THROUGH` if not specified. * STRAIGHT_THROUGH — the order is routed and executed directly without manual intervention. * BLOCK — the order is bundled with other orders for block execution.
            - `executions` object[], required: Order executions associated with this order
              - …
            - `client_reference` string: Immutable reference to the API flow that initiated the order. For client initiated API flows, this is a client provided ID. For internal initiations, it is set to the ID of the related object.
            - `fee_configuration` union[]: Fee configuration applied to this order. Determines how the order fee is calculated.
              - …
            - `decision_maker_id` string: ID of the user behind the decision to place an order. Required only if different from the user_id. (e.g. child account order placed by a guardian)
        - `cash_amount` string, required: A positive decimal amount, as a string.
        - `currency` 'EUR' | 'GBP', required: Alphabetic three-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. * EUR — Euro. * GBP — Pound Sterling.
        - `status` 'NEW' | 'PROCESSING' | 'FILLED' | 'SETTLED' | 'CANCELLED', required: Status of a Savings Plan Execution. * NEW - * PROCESSING - * FILLED - * SETTLED - * CANCELLED -
        - `type` string, required: The type of savings plan must be "INSTRUMENT".
        - `execution_date` string, required: Date of a savings plan execution in YYYY-MM-DD format.
        - `instrument_id` union: Instrument unique identifier.
          - string: International securities identification number defined by [ISO 6166](https://en.wikipedia.org/wiki/International_Securities_Identification_Number).
          - string: German securities identification code known as [Wertpapierkennnummer](https://en.wikipedia.org/wiki/Wertpapierkennnummer).
        - `instrument_id_type` 'ISIN' | 'WKN': The type of the ID used in the request. * ISIN - International Securities Identification Number * WKN - German securities identification code
        - `fee_configuration` object[]: Fee configuration for instrument-type savings plan executions. Specifies the transaction fee model to apply to each buy order placed on execution.
          - `type` 'TRANSACTION_FEE_BUY', required: Fee type * TRANSACTION_FEE_BUY -
          - `transaction_fee_model_id` string, uuid, required: Universally Unique Identifier (UUID) of the transaction fee model.
        - `funding` object: Funding of an individual savings plan execution. `method` determines which further properties apply; currently only `DIRECT_DEBIT` is supported, for which `mandate_id` and `direct_debit_id` apply.
          - `method` 'DIRECT_DEBIT', required: Funding method * DIRECT_DEBIT -
          - `mandate_id` string, uuid, required: Direct Debit Mandate unique identifier.
          - `direct_debit_id` string, uuid: Direct debit funding request unique identifier
        - `cancellation_reason` 'CANCELLED_BY_CLIENT' | 'CANCELLED_BY_UPVEST': Explains the reason why the savings plan execution was cancelled . * CANCELLED_BY_CLIENT: The savings plan execution was cancelled by the client. * CANCELLED_BY_UPVEST: The savings plan execution was cancelled by Upvest.
        - `cancellation_details` string: Human-readable description providing additional context about why the savings plan execution was cancelled.
      - object: Represents a single execution of a `PORTFOLIO`-type savings plan, recording the portfolio order placed, the execution date, and the resulting status.
        - `id` string, uuid, required: Universally Unique Identifier (UUID) of a savings plan execution.
        - `created_at` string, date-time, required: Date and time when the resource was created. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
        - `updated_at` string, date-time, required: Date and time when the resource was last updated. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
        - `user_id` string, uuid, required: Unique identifier of the user, as a UUID.
        - `account_id` string, uuid, required: Universally Unique Identifier (UUID) of the account.
        - `savings_plan_id` string, uuid, required: Universally Unique Identifier (UUID) of a savings plan.
        - `order_id` union, required: Order unique identifier (Portfolio order or Instrument order)
          - string, uuid: Universally Unique Identifier (UUID) of a portfolio order.
          - object: Represents an investment order placed by an end user or on their behalf. An order transitions through states (`NEW` → `PROCESSING` → `FILLED` or `CANCELLED`) as it is routed and executed.
            - `id` string, uuid, required: Unique identifier for an order. Universally Unique Identifier (UUID).
            - `created_at` string, date-time, required: Date and time when the resource was created. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
            - `updated_at` string, date-time, required: Date and time when the resource was last updated. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
            - `user_id` string, uuid: The ID of the user. Either user ID or business ID must be specified.
            - `business_id` string, uuid: The ID of the business. Either user ID or business ID must be specified.
            - `account_id` string, uuid, required: The ID of the account that owns the order
            - `cash_amount` string, required: Cash amount for a nominal order, not required if a share quantity is specified.
            - `currency` 'EUR' | 'GBP' | 'USD', required: The currency for the order.
            - `side` 'BUY' | 'SELL', required: Side of the order. * BUY — purchases the specified instrument. * SELL — disposes of the specified instrument.
            - `instrument_id` string, required: International securities identification number defined by [ISO 6166](https://en.wikipedia.org/wiki/International_Securities_Identification_Number).
            - `instrument_id_type` 'ISIN', required: The type of the ID used in the request. * ISIN -
            - `order_type` 'MARKET' | 'LIMIT' | 'STOP', required: Type of the order. * MARKET — executes immediately at the best available market price. * LIMIT — executes only at or better than the specified `limit_price`. * STOP — triggers when the market price reaches `stop_price`, then executes at the prevailing market price.
            - `quantity` string, required: Quantity of securities for the order. Only required if the cash amount is not specified.
            - `user_instrument_fit_acknowledgement` boolean: Only applicable if the user has failed the instrument fit check for the instrument type being ordered. True if the user has acknowledged their willingness to trade.
            - `limit_price` string: The limit price for orders of the type 'limit'.
            - `stop_price` string: The stop price for orders of the type 'stop'.
            - `expiry_date` string: The order expiration date (last day the order can trade) in the YYYY-MM-DD format. The expiry date can only be set for LIMIT and STOP orders. [RFC 3339, section 5.6](https://json-schema.org/draft/2020-12/json-schema-validation.html#RFC3339) RFC 3339. The default value is order creation date + 359 days
            - `status` 'NEW' | 'PROCESSING' | 'FILLED' | 'CANCELLED', required: The execution status of the order. * NEW — the order has been received and validated, awaiting routing. * PROCESSING — the order is being routed for execution. * FILLED — the order has been fully executed. * CANCELLED — the order was cancelled before being fully executed.
            - `fee` string, required: A positive decimal amount, as a string.
            - `cancellation_reason` 'CANCELLED_BY_CLIENT' | 'CANCELLED_BY_UPVEST_OPERATIONS' | 'CANCELLED_BY_TRADING_PARTNER' | 'CANCELLED_BY_UPVEST_PLATFORM': Reason for order cancellation. Present only when `status` is `CANCELLED`. * CANCELLED_BY_CLIENT — cancelled at the end user's or client's request via the API. * CANCELLED_BY_UPVEST_OPERATIONS — cancelled by Upvest operations. * CANCELLED_BY_TRADING_PARTNER — cancelled by the executing partner. * CANCELLED_BY_UPVEST_PLATFORM — cancelled automatically by the Upvest platform.
            - `initiation_flow` 'API' | 'PORTFOLIO' | 'CASH_DIVIDEND_REINVESTMENT' | 'PORTFOLIO_REBALANCING' | 'SELL_TO_COVER_FEES' | 'SELL_TO_COVER_TAXES' | 'ACCOUNT_LIQUIDATION' | 'UPVEST_OPERATIONS' | 'SAVINGS_PLAN' | 'CLIENT_OPERATIONS', required: Identifies what triggered the order. * API — initiated directly via the client API. * PORTFOLIO — initiated by a portfolio order. * CASH_DIVIDEND_REINVESTMENT — initiated as part of dividend reinvestment. * PORTFOLIO_REBALANCING — initiated by an automated rebalancing. * SELL_TO_COVER_FEES — initiated automatically to cover outstanding fees. * SELL_TO_COVER_TAXES — initiated automatically to cover tax obligations. * ACCOUNT_LIQUIDATION — initiated as part of an account liquidation. * UPVEST_OPERATIONS — initiated by Upvest operations. * SAVINGS_PLAN — initiated by a savings plan execution. * CLIENT_OPERATIONS — initiated by client operations.
            - `execution_flow` 'STRAIGHT_THROUGH' | 'BLOCK': Execution flow for order processing. Defaults to `STRAIGHT_THROUGH` if not specified. * STRAIGHT_THROUGH — the order is routed and executed directly without manual intervention. * BLOCK — the order is bundled with other orders for block execution.
            - `executions` object[], required: Order executions associated with this order
              - …
            - `client_reference` string: Immutable reference to the API flow that initiated the order. For client initiated API flows, this is a client provided ID. For internal initiations, it is set to the ID of the related object.
            - `fee_configuration` union[]: Fee configuration applied to this order. Determines how the order fee is calculated.
              - …
            - `decision_maker_id` string: ID of the user behind the decision to place an order. Required only if different from the user_id. (e.g. child account order placed by a guardian)
        - `cash_amount` string, required: A positive decimal amount, as a string.
        - `currency` 'EUR' | 'GBP', required: Alphabetic three-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. * EUR — Euro. * GBP — Pound Sterling.
        - `status` 'NEW' | 'PROCESSING' | 'FILLED' | 'SETTLED' | 'CANCELLED', required: Status of a Savings Plan Execution. * NEW - * PROCESSING - * FILLED - * SETTLED - * CANCELLED -
        - `type` string, required: The type of savings plan must be "PORTFOLIO".
        - `execution_date` string, required: Date of a savings plan execution in YYYY-MM-DD format.
        - `instrument_id` union: Instrument unique identifier.
          - string: International securities identification number defined by [ISO 6166](https://en.wikipedia.org/wiki/International_Securities_Identification_Number).
          - string: German securities identification code known as [Wertpapierkennnummer](https://en.wikipedia.org/wiki/Wertpapierkennnummer).
        - `instrument_id_type` 'ISIN' | 'WKN': The type of the ID used in the request. * ISIN - International Securities Identification Number * WKN - German securities identification code
        - `funding` object: Funding of an individual savings plan execution. `method` determines which further properties apply; currently only `DIRECT_DEBIT` is supported, for which `mandate_id` and `direct_debit_id` apply.
          - `method` 'DIRECT_DEBIT', required: Funding method * DIRECT_DEBIT -
          - `mandate_id` string, uuid, required: Direct Debit Mandate unique identifier.
          - `direct_debit_id` string, uuid: Direct debit funding request unique identifier
        - `cancellation_reason` 'CANCELLED_BY_CLIENT' | 'CANCELLED_BY_UPVEST': Explains the reason why the savings plan execution was cancelled . * CANCELLED_BY_CLIENT: The savings plan execution was cancelled by the client. * CANCELLED_BY_UPVEST: The savings plan execution was cancelled by Upvest.
        - `cancellation_details` string: Human-readable description providing additional context about why the savings plan execution was cancelled.

## Other responses

- `400`: Bad Request. The incoming request had a malformed parameter/object.
- `401`: Unauthorized. The caller has not been authenticated.
- `403`: Forbidden. The caller has been authenticated but is not allowed to take the requested action.
- `404`: Not Found. The requested resource could not be found.
- `405`: Method Not Allowed. The requested method is not allowed on the requested resource.
- `406`: Not Acceptable. The resource does not have a current representation that would be acceptable to the user agent. "Accept" header defined unsupported value.
- `429`: Too Many Requests. The caller has exceeded their quota for the time period and has been throttled.
- `500`: Internal Server Error. The service encountered an unexpected error.
- `503`: Service Unavailable. The service handling for this request cannot be reached at this time.
- `504`: Gateway Timeout. The service gateway has reached its internal timeout.

## Changes

- **2026-10-20** `48b66c49067a`: 2 info
  - added the optional property `data/items/anyOf[subschema #1: Savings plan execution (instrument)]/funding` to the response with the `200` status
  - added the optional property `data/items/anyOf[subschema #2: Savings plan execution (portfolio)]/funding` to the response with the `200` status

[Operation history](https://skmtc.dev/upvest/apis/upvest-investment-api/changes/savings_plans/:savings_plan_id/executions/get.md)

---

[API](https://skmtc.dev/upvest/apis/upvest-investment-api.md) · [All operations](https://skmtc.dev/upvest/apis/upvest-investment-api/llms.txt) · [OpenAPI document](https://skmtc.dev/upvest/apis/upvest-investment-api/revisions/ca69534b631d?raw)
