---
updatedAt: 2026-04-22T18:05:56.000Z
---

Fetch the complete documentation index at: https://developers.pismo.io/pismo-docs/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# List products

Return a list of an organization's savings and time-deposit accounts.


# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Banking - Interest-bearing accounts",
    "version": "1.0.0",
    "description": "API for interest-bearing account functionality",
    "contact": {
      "name": "API Support",
      "url": "https://developers.pismo.io/support/"
    },
    "license": {
      "name": "Copyright Pismo"
    }
  },
  "servers": [
    {
      "url": "https://sandbox.pismolabs.io/savings-products",
      "description": "Sandbox API server for testing"
    }
  ],
  "tags": [
    {
      "name": "Product",
      "description": "Endpoints that manage Interest-bearing accounts products"
    }
  ],
  "components": {
    "parameters": {
      "afterIdQuery": {
        "description": "This is the `last_id` field returned in the response which you can use to get the next result set. This is displayed in UNIX timestamp.\n",
        "in": "query",
        "name": "afterId",
        "required": false,
        "schema": {
          "type": "integer"
        },
        "example": 1706027185000
      },
      "beginDateTimeQuery": {
        "description": "Queries for the date and time of products after the value of this field. Date and time are displayed in RFC 3339 format, for example: `2024-01-28T10:33:01Z`.\n",
        "in": "query",
        "name": "beginDatetime",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "example": "2024-01-28T10:33:01.000Z"
      },
      "endDateTimeQuery": {
        "description": "Queries for the date and time of products created before the value of this field. Date and time are displayed in RFC 3339 format, for example: `2024-01-29T10:33:01Z`.\n",
        "in": "query",
        "name": "endDatetime",
        "required": false,
        "schema": {
          "type": "string",
          "format": "date-time"
        },
        "example": "2024-01-30T10:33:01.000Z"
      },
      "perPageQuery": {
        "description": "Number of items per page.",
        "in": "query",
        "name": "perPage",
        "required": false,
        "schema": {
          "type": "integer",
          "maximum": 100,
          "default": 20
        },
        "example": 20
      },
      "orderQuery": {
        "description": "List result order of the `created_at` value. It can be sorted in ascending (`ASC`) or descending (`DESC`) order. Default is `DESC`.",
        "in": "query",
        "name": "order",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "ASC",
            "DESC"
          ],
          "default": "DESC"
        },
        "example": "DESC"
      },
      "productTypeQuery": {
        "description": "Filter results by product type.",
        "in": "query",
        "name": "productType",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "deposit",
            "savings-account"
          ]
        },
        "example": "deposit"
      },
      "statusQuery": {
        "description": "Filter results by status.",
        "in": "query",
        "name": "status",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "CREATED",
            "ACTIVE",
            "INACTIVE"
          ]
        },
        "example": "ACTIVE"
      }
    },
    "schemas": {
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Error type code",
            "example": "EIBACC0003"
          },
          "details": {
            "type": "string",
            "description": "Error details",
            "example": "error EIBACC0008: Validation error [(Field 'Order' is invalid)]"
          },
          "message": {
            "description": "Error message",
            "example": "Bad Request",
            "type": "string"
          }
        }
      },
      "DepositMaturityInstructions": {
        "properties": {
          "principal": {
            "type": "string",
            "description": "Specifies the status of the principal amount at maturity.\n- `NO_ACTION`: No action is taken with the principal amount\n- `ROLLOVER`: The principal amount is rolled over to a new deposit term\n\nIf no value is selected, the principal defaults to `NO_ACTION`.\n",
            "example": "ROLLOVER",
            "enum": [
              "NO_ACTION",
              "ROLLOVER"
            ],
            "default": "NO_ACTION"
          },
          "interest": {
            "type": "string",
            "description": "Specifies the status of the accrued interest at maturity.\n- `PAY`: The accrued interest is paid to the account\n- `ROLLOVER`: The accrued interest is rolled over and added to the principal\n\nIf no value is selected, the interest defaults to `PAY`.\n",
            "example": "PAY",
            "enum": [
              "PAY",
              "ROLLOVER"
            ],
            "default": "PAY"
          }
        },
        "type": "object",
        "description": "- If the principal or interest are `ROLLOVER,` the respective amounts is rolled over to a new deposit term.\n- If the principal is `NO_ACTION`, no action is taken with the principal amount at maturity.\n- If the interest is `PAY` and the accrued interest is greater than zero, it's paid to the account's cash balance.\n"
      },
      "MaturityNotice": {
        "type": "object",
        "required": [
          "days_before_maturity",
          "description"
        ],
        "properties": {
          "days_before_maturity": {
            "type": "integer",
            "minimum": 1,
            "description": "Number of days before the account’s maturity date when the notice is sent. The value must be a positive integer greater than zero. Inputs such as zero, negative numbers, decimals, null, or non-numeric values result in `HTTP 400`. Each notice must use a distinct `days_before_maturity` value within the array.\n",
            "example": 30
          },
          "description": {
            "type": "string",
            "maxLength": 128,
            "description": "A short, human‑readable label for the notice. Each entry must include one description, and it cannot exceed 128 characters.\n",
            "example": "30-day advance notice"
          }
        }
      },
      "DepositProduct": {
        "type": "object",
        "properties": {
          "cool_off_period": {
            "type": "integer",
            "description": "Period in days when a withdrawal can be made without penalty.",
            "example": 0
          },
          "created_at": {
            "type": "string",
            "format": "datetime",
            "description": "Date and time the product was created",
            "example": "2024-01-23T13:26:25.000Z"
          },
          "funding_duration": {
            "type": "integer",
            "description": "Period during which money is allowed to deposit into the account before the account is blocked. The value of this field is calculated in days.",
            "example": 12
          },
          "interest_plan_id": {
            "type": "string",
            "description": "Interest rate plan ID. This corresponds to the ID you created using the [Create interest plan version](https://developers.pismo.io/pismo-docs/reference/patch-v1-interest-plan)) endpoint.",
            "example": "263d509a-d5d0-4b3a-b909-ce1b9174beff"
          },
          "maturity_instructions": {
            "$ref": "#/components/schemas/DepositMaturityInstructions"
          },
          "min_amount": {
            "type": "number",
            "description": "The minimum balance required to earn yield. If the balance is below this amount, yield is not calculated, and if no value is specified, any available amount is treated as accrued interest.",
            "example": 1000
          },
          "max_amount": {
            "type": "number",
            "description": "Maximum deposit amount.",
            "example": 5000
          },
          "min_term": {
            "type": "integer",
            "description": "Minimum term duration. The value of this field is calculated in days.",
            "example": 265
          },
          "max_term": {
            "type": "integer",
            "description": "Maximum term duration. The value of this field is calculated in days.",
            "example": 1025
          },
          "grace_period_duration_days": {
            "type": "integer",
            "description": "The number of days in the grace period. Withdrawals are allowed during this period. This field applies only if no grace period penalty is defined and penalties do not apply. The grace‑period expiration is scheduled according to the account’s division timezone, using the parent division’s timezone when available, or UTC when no division timezone is defined.",
            "example": 30
          },
          "name": {
            "type": "string",
            "description": "Product name",
            "example": "Tax 1 Default"
          },
          "penalties": {
            "$ref": "#/components/schemas/DepositPenalties"
          },
          "notices": {
            "type": "array",
            "maxItems": 3,
            "description": "Advance maturity notice configurations for deposit products only, rejected for savings‑account products. If this field is included in a savings‑account request, the API returns `HTTP 400`. When provided, the field must contain one to three entries, each with a unique `days_before_maturity` value. If the field is absent or the array is empty, no notices are configured.\n",
            "items": {
              "$ref": "#/components/schemas/MaturityNotice"
            }
          },
          "processing_codes": {
            "$ref": "#/components/schemas/DepositProcessingCodes"
          },
          "product_id": {
            "type": "string",
            "description": "Product identifier.",
            "example": "2c336e9d-d04f-4fd0-8f6e-25808f48d70c"
          },
          "product_type": {
            "type": "string",
            "description": "Product type",
            "enum": [
              "deposit",
              "savings-account"
            ]
          },
          "status": {
            "type": "string",
            "description": "Indicates the current state of the product. For example, `CREATED`.",
            "enum": [
              "CREATED",
              "ACTIVE",
              "INACTIVE"
            ],
            "example": "CREATED"
          },
          "term_type": {
            "type": "string",
            "description": "Term type. For example, `FIXED` or `FLEXIBLE`.\n",
            "enum": [
              "FIXED",
              "FLEXIBLE"
            ],
            "example": "FIXED"
          },
          "accrual_model": {
            "type": "string",
            "description": "How interest bearing accounts feed the interest engine. `DEPOSIT_BASIS` submits per-movement deposits/withdrawals (default). `BALANCE_BASIS` submits the daily closing balance.",
            "enum": [
              "DEPOSIT_BASIS",
              "BALANCE_BASIS"
            ],
            "default": "DEPOSIT_BASIS",
            "example": "DEPOSIT_BASIS"
          },
          "balance_type": {
            "type": "string",
            "description": "Which balance of the `balance_history` event is submitted when `accrual_model` is `BALANCE_BASIS`. `VALUE_DATED_BALANCE` uses the cleared balance (default); `LEDGER_BALANCE` includes uncleared funds.",
            "enum": [
              "VALUE_DATED_BALANCE",
              "LEDGER_BALANCE"
            ],
            "default": "VALUE_DATED_BALANCE",
            "example": "VALUE_DATED_BALANCE"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Defines the earliest date from which the product can be attached to an account or program. Date is displayed in UTC.",
            "example": "2025-11-01"
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "description": "Defines the final date when the product can be attached to an account or program, rejects any attach operations submitted after that date, uses the `yyyy‑mm‑dd` format with all dates shown in UTC+0 regardless of your timezone, and must be set at least one day after the current date (D+1).",
            "example": "2027-12-31"
          },
          "metadata": {
            "type": "object",
            "description": "The metadata object contains user-defined key-value pairs that provide additional context or custom information.<br>\nMetadata content is not controlled by the Pismo platform and is instead controlled by the user.<br>\n\n**Note**: This field must not be used to send Personally Identifiable Information (PII), Payment Card Industry (PCI) data, or any sensitive/regulated information. Metadata fields are intended for operational, non-sensitive data only. For sensitive data, use the specific parameters designed for that purpose. For more information, refer to [Get started with Pismo APIs](https://developers.pismo.io/pismo-docs/reference/get-started-with-pismo-apis#metadata).\n",
            "example": {
              "key": "value"
            }
          }
        }
      },
      "ProductList": {
        "type": "object",
        "properties": {
          "last_id": {
            "type": "integer",
            "description": "Pagination reference, displayed in UNIX timestamp.",
            "example": 1706027185000
          },
          "next_page": {
            "type": "boolean",
            "description": "Indicates whether there is a next page of results.",
            "example": true
          },
          "per_page": {
            "type": "integer",
            "description": "Number of items per page. Default `20`, maximum is `100`.",
            "maximum": 100,
            "minimum": 1,
            "example": 20,
            "default": 20
          },
          "items": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DepositProduct"
              },
              {
                "$ref": "#/components/schemas/SavingsAccountProduct"
              }
            ],
            "description": "A collection of individual product objects."
          }
        }
      },
      "DepositProcessingCodes": {
        "type": "object",
        "properties": {
          "interest_processing_code": {
            "type": "string",
            "description": "Processing code for interest calculation. <br> If you don't specify a value, the default is `009797`.",
            "example": "009797"
          },
          "detach_processing_code": {
            "type": "string",
            "description": "Processing code for detaching deposit feature from a bank account.<br>\nDetaching means the bank removes the deposit feature from the bank account.\nIf you don't specify a value, the default is `009696`.\n",
            "example": "009696"
          }
        }
      },
      "SavingsAccountProcessingCodes": {
        "type": "object",
        "properties": {
          "interest_processing_code": {
            "type": "string",
            "description": "Processing code for interest calculation. <br> If you don't specify a value, the default is `009797`.",
            "example": "009797"
          },
          "detach_processing_code": {
            "type": "string",
            "description": "Processing code for detaching deposit feature from a bank account.<br>\nDetaching means the bank removes the deposit feature from the bank account.\nIf you don't specify a value, the default is `009696`.\n",
            "example": "009696"
          }
        }
      },
      "SavingsAccountProduct": {
        "type": "object",
        "properties": {
          "created_at": {
            "type": "string",
            "format": "datetime",
            "description": "The moment when a product is created.",
            "example": "2024-01-23T13:26:25.000Z"
          },
          "updated_at": {
            "type": "string",
            "format": "datetime",
            "description": "The moment when a product is updated.",
            "example": "2024-01-23T13:26:25.000Z"
          },
          "interest_plan_id": {
            "type": "string",
            "description": "Interest rate plan ID. This corresponds to the ID you created using the [Create interest plan version](https://developers.pismo.io/pismo-docs/reference/patch-v1-interest-plan)) endpoint.",
            "example": "263d509a-d5d0-4b3a-b909-ce1b9174beff"
          },
          "name": {
            "type": "string",
            "description": "The product name.",
            "example": "Tax 1 Default"
          },
          "min_amount": {
            "type": "number",
            "description": "Minimum amount for yield. If balance is below this value, yield is not calculated. If no value is provided, any available amount is treated as accrued interest.",
            "example": 1000
          },
          "processing_codes": {
            "$ref": "#/components/schemas/SavingsAccountProcessingCodes"
          },
          "product_id": {
            "type": "string",
            "description": "Product identifier.",
            "example": "2c336e9d-d04f-4fd0-8f6e-25808f48d70c"
          },
          "product_type": {
            "type": "string",
            "description": "Product type.",
            "enum": [
              "deposit",
              "savings-account"
            ]
          },
          "status": {
            "description": "Product status",
            "example": "ACTIVE",
            "type": "string",
            "enum": [
              "CREATED",
              "ACTIVE",
              "INACTIVE"
            ]
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "description": "Define the earliest date from which the product can be attached to an account or program. Date is displayed in UTC.",
            "example": "2025-11-01"
          },
          "metadata": {
            "type": "object",
            "description": "The metadata object contains user-defined key-value pairs that provide additional context or custom information.<br>\nMetadata content is not controlled by the Pismo platform and is instead controlled by the user.<br>\n\n**Note**: This field must not be used to send Personally Identifiable Information (PII), Payment Card Industry (PCI) data, or any sensitive/regulated information. Metadata fields are intended for operational, non-sensitive data only. For sensitive data, use the specific parameters designed for that purpose. For more information, refer to [Get started with Pismo APIs](https://developers.pismo.io/pismo-docs/reference/get-started-with-pismo-apis#metadata).\n",
            "example": {
              "key": "value"
            }
          }
        }
      },
      "DepositPenalties": {
        "type": "object",
        "description": "Set of penalty configurations that can be applied to a deposit product. Each penalty type corresponds to a specific fee ID and transaction flow within the Pismo platform.\nFor details about penalty types, refer to the [Penalty types](https://developers.pismo.io/pismo-docs/docs/penalties-for-cd-accounts#penalty-types) section of Penalties for CD accounts.\n",
        "properties": {
          "early_withdrawal_after_opening": {
            "$ref": "#/components/schemas/EarlyWithdrawalAfterOpening"
          },
          "grace_period": {
            "$ref": "#/components/schemas/GracePeriod"
          },
          "tiered_interest_forfeiture": {
            "description": "This penalty corresponds to fee ID `tieredInterestForfeiturePenaltyID` and transaction flow `tieredInterestForfeiturePenalty`",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TieredInterestForfeitureTier"
            }
          },
          "withdrawal_fee": {
            "$ref": "#/components/schemas/WithdrawalFee"
          },
          "subsequent_withdrawals": {
            "$ref": "#/components/schemas/SubsequentWithdrawals"
          }
        }
      },
      "EarlyWithdrawalAfterOpening": {
        "description": "This penalty corresponds to fee ID `earlyWithdrawalAfterOpeningPenaltyID` and transaction flow `earlyWithdrawalAfterOpeningPenalty`",
        "type": "object",
        "required": [
          "applicable_within_days",
          "penalty_interest_days"
        ],
        "properties": {
          "applicable_within_days": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of days after opening that the penalty is applied",
            "example": 30
          },
          "penalty_interest_days": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of days multiplied by the applicable interest or earnings rate to determine the penalty amount.",
            "example": 90
          }
        }
      },
      "GracePeriod": {
        "description": "This penalty corresponds to fee ID `gracePeriodPenaltyID` and trasaction flow `gracePeriodPenalty`",
        "type": "object",
        "required": [
          "duration_days",
          "penalty_interest_days"
        ],
        "properties": {
          "duration_days": {
            "type": "integer",
            "minimum": 0,
            "description": "Duration of the grace period in days",
            "example": 7
          },
          "penalty_interest_days": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of interest days to forfeit as penalty",
            "example": 30
          }
        }
      },
      "TieredInterestForfeitureTier": {
        "description": "This penalty corresponds to fee ID `tieredInterestForfeiturePenaltyID` and transaction flow `tieredInterestForfeiturePenalty`",
        "type": "object",
        "required": [
          "min_days_held",
          "max_days_held",
          "forfeited_interest_days"
        ],
        "properties": {
          "min_days_held": {
            "type": "integer",
            "description": "Minimum number of days the deposit must be held",
            "example": 1
          },
          "max_days_held": {
            "type": "integer",
            "description": "Maximum number of days the deposit can be held",
            "example": 90
          },
          "forfeited_interest_days": {
            "type": "integer",
            "description": "Number of interest days to forfeit as penalty",
            "example": 30
          }
        }
      },
      "WithdrawalFee": {
        "description": "This penalty corresponds to fee ID `withdrawalFeePenaltyID` and transaction flow `withdrawalFeePenalty`",
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "PERCENTAGE",
              "FIXED"
            ],
            "description": "Withdrawal fee type",
            "example": "PERCENTAGE"
          },
          "value": {
            "type": "number",
            "description": "Value of the withdrawal fee",
            "example": 1.5
          }
        }
      },
      "SubsequentWithdrawals": {
        "type": "object",
        "description": "This penalty corresponds to fee ID `subsequentWithdrawalPenaltyID` and transaction flow `subsequentWithdrawalPenalty`.<br>\nSettings for the subsequent withdrawal penalty (Regulation D).\nA penalty fee is applied when a customer makes a withdrawal within the configured window.\nThe window either resets with each withdrawal (ROLLING) or remains fixed from the first withdrawal (FIXED).\n",
        "required": [
          "applicable_within_days",
          "window_behavior"
        ],
        "properties": {
          "applicable_within_days": {
            "type": "integer",
            "minimum": 1,
            "description": "The number of days following a withdrawal during which a subsequent withdrawal triggers the penalty.\nMust be at least 1.\n",
            "example": 30
          },
          "window_behavior": {
            "type": "string",
            "enum": [
              "ROLLING",
              "FIXED"
            ],
            "description": "Controls how the penalty window is managed after each withdrawal:\n- `ROLLING`: the window resets on every withdrawal (scheduler is replaced)\n- `FIXED`: the window is set once on the first withdrawal and does not reset\n",
            "example": "ROLLING"
          },
          "penalty_interest_days": {
            "type": "integer",
            "minimum": 1,
            "description": "Number of interest days to forfeit as the penalty amount.\nMust be at least 1 when provided.\n",
            "example": 7
          }
        }
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "responses": {
      "400BadRequest": {
        "description": "Bad request",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              ]
            },
            "examples": {
              "invalidRequestBody": {
                "summary": "Bad Request",
                "value": {
                  "code": "EIBACC0008",
                  "message": "Bad Request",
                  "details": "error EIBACC0008: Validation error [(Field 'Order' is invalid)]"
                }
              },
              "maturityPeriodMutuallyExclusive": {
                "summary": "maturity_period — calendar_maturity_date and unit/value are mutually exclusive",
                "value": {
                  "code": "EIBACC0307",
                  "message": "Validation error",
                  "details": "maturity_period accepts either calendar_maturity_date OR unit+value, not both. Choose one: send calendar_maturity_date for an explicit date, or unit+value for a relative period."
                }
              },
              "calendarMaturityDateInvalidFormat": {
                "summary": "maturity_period — calendar_maturity_date is not in YYYY-MM-DD format",
                "value": {
                  "code": "EIBACC0305",
                  "message": "Validation error",
                  "details": "calendar_maturity_date must be in YYYY-MM-DD format"
                }
              },
              "calendarMaturityDateNotFuture": {
                "summary": "maturity_period — calendar_maturity_date is not a future date",
                "value": {
                  "code": "EIBACC0306",
                  "message": "Validation error",
                  "details": "calendar_maturity_date must be a future date (after today)"
                }
              },
              "effectiveDateInFuture": {
                "summary": "effective_date cannot be in the future",
                "value": {
                  "code": "EIBACC0308",
                  "message": "Effective date cannot be in the future"
                }
              },
              "effectiveDateTooFarInPast": {
                "summary": "effective_date exceeds maximum backdating limit",
                "value": {
                  "code": "EIBACC0309",
                  "message": "Effective date exceeds maximum backdating limit"
                }
              },
              "effectiveDateInvalidFormat": {
                "summary": "effective_date is not in YYYY-MM-DD format",
                "value": {
                  "code": "EIBACC0310",
                  "message": "Invalid effective date format. Expected YYYY-MM-DD"
                }
              }
            }
          }
        }
      },
      "500InternalServer": {
        "description": "Internal error",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              ]
            },
            "examples": {
              "internalProcessingError": {
                "summary": "Internal processing error",
                "value": {
                  "code": "EIBACC0007",
                  "message": "Internal error",
                  "detail": "Internal error"
                }
              }
            }
          }
        }
      }
    }
  },
  "paths": {
    "/v1/products": {
      "get": {
        "tags": [
          "Product"
        ],
        "summary": "List products",
        "description": "Return a list of an organization's savings and time-deposit accounts.\n",
        "operationId": "interest-bearing-v1-list-products",
        "parameters": [
          {
            "$ref": "#/components/parameters/beginDateTimeQuery"
          },
          {
            "$ref": "#/components/parameters/endDateTimeQuery"
          },
          {
            "$ref": "#/components/parameters/afterIdQuery"
          },
          {
            "$ref": "#/components/parameters/perPageQuery"
          },
          {
            "$ref": "#/components/parameters/orderQuery"
          },
          {
            "$ref": "#/components/parameters/productTypeQuery"
          },
          {
            "$ref": "#/components/parameters/statusQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductList"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/400BadRequest"
          },
          "500": {
            "$ref": "#/components/responses/500InternalServer"
          }
        }
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ]
}
```