---
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.

# Update savings account product

Update a savings account product by product ID. Note that product ID is Pismo-generated.<br>
This endpoint generates the [Savings account product updated](https://developers.pismo.io/events/docs/savings-account-product-update-1) event.


# 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": {
      "productId": {
        "description": "Product ID",
        "in": "path",
        "name": "productId",
        "required": true,
        "schema": {
          "type": "string"
        },
        "example": "2c336e9d-d04f-4fd0-8f6e-25808f48d70c"
      }
    },
    "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"
          }
        }
      },
      "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"
          }
        }
      },
      "PatchProductRequest": {
        "type": "object",
        "description": "All fields are optional, but at least one of `status`, `min_amount`, or `notices` must be included. If `status` is present, `reason` becomes required.\n",
        "properties": {
          "status": {
            "description": "Product status",
            "example": "ACTIVE",
            "type": "string",
            "enum": [
              "CREATED",
              "ACTIVE",
              "INACTIVE"
            ]
          },
          "reason": {
            "description": "Status update reason. Required when `status` is provided.",
            "example": "Activating product",
            "maxLength": 128,
            "type": "string"
          },
          "min_amount": {
            "description": "The minimum balance required to earn yield. When provided, must be greater than 0. Applied from the moment of a successful update (Not retroactive. Accounts already opened are not revalidated).",
            "example": 50,
            "type": "number"
          },
          "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"
            },
            "example": [
              {
                "days_before_maturity": 60,
                "description": "Updated single 60-day notice"
              }
            ]
          }
        }
      }
    },
    "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"
                }
              }
            }
          }
        }
      },
      "404NotFound": {
        "description": "Bad request",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              ]
            },
            "examples": {
              "invalidRequestBody": {
                "summary": "Bad Request",
                "value": {
                  "code": "EIBACC0064",
                  "message": "Product not found"
                }
              }
            }
          }
        }
      },
      "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/savings-accounts/{productId}": {
      "patch": {
        "tags": [
          "Product"
        ],
        "summary": "Update savings account product",
        "description": "Update a savings account product by product ID. Note that product ID is Pismo-generated.<br>\nThis endpoint generates the [Savings account product updated](https://developers.pismo.io/events/docs/savings-account-product-update-1) event.\n",
        "operationId": "interest-bearing-v1-patch-savings-account-product",
        "parameters": [
          {
            "$ref": "#/components/parameters/productId"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchProductRequest"
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Success"
          },
          "400": {
            "$ref": "#/components/responses/400BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/404NotFound"
          },
          "500": {
            "$ref": "#/components/responses/500InternalServer"
          }
        }
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ]
}
```