Product

Create deposit product

Create an organization's time deposit accounts. Time deposit accounts, such as CDs, require you to keep your funds in the account for a mutually agreed amount for a specific period of time.<br> This endpoint generates the Deposit product created event. For information about interest-bearing accounts, refer to Interest-bearing accounts. The interest plan is fetched once and used to resolve or validate accrual_model before any resource configuration. Missing, null, or empty values derive the model from the plan. An explicit mismatch returns HTTP 400 EIBACC0365. An unknown nonempty plan model or a missing plan object returns HTTP 500 EIBACC0007, and errors from the interest plan API are passed through. None of these failures configure resources, persist a product, or publish a creation event.

post/v1/deposits

Request

  • Base URL
    https://sandbox.pismolabs.io/savings-products
  • URL
    https://sandbox.pismolabs.io/savings-products/v1/deposits
  • Auth
    HTTP bearer

Request body

namestring required

The product name.

interest_plan_idstring required

Interest rate plan ID. This corresponds to the ID you created using the Create interest plan version) endpoint.

term_type'FIXED' | 'FLEXIBLE' required

Term type. For example, FIXED or FLEXIBLE.

accrual_model'DEPOSIT_BASIS' | 'BALANCE_BASIS' | '' | 'null' nullable

Defines the balance basis for daily interest accrual:

  • DEPOSIT_BASIS: Net daily balance change (credits minus debits), determined at the end of the day.
  • BALANCE_BASIS: Daily closing balance.

If not provided (omitted, null, or empty string ""), the value is derived from the interest plan: BALANCE-CHANGE → DEPOSIT_BASIS or CLOSING-BALANCE → BALANCE_BASIS. An explicit value must match the plan; otherwise, the request returns a 400 error: EIBACC0365.

If the plan's interest_base_model is missing, null, or empty, the Pismo platform treats it as CLOSING-BALANCE, which produces BALANCE_BASIS when the request does not set accrual_model.

balance_type'VALUE_DATED_BALANCE' | 'LEDGER_BALANCE'

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.

cool_off_periodinteger

Period in days when a withdrawal can be made without penalty.

funding_durationinteger

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.

grace_period_duration_daysinteger

Grace‑period duration in days. The maturity date is a hard boundary, and pay, rollover, and detach execute at maturity. The grace window opens at the start of the next cycle, spanning cycle_start_date, cycle_start_date + grace_period. The first cycle does not include a grace-period window. During grace period, interest accrues daily only when accrue_during_grace_period is true. If you define a grace‑period penalty, configure it under penalties.grace_period (penalty‑grace still pauses at maturity and is not relocated).

accrue_during_grace_periodboolean

Controls whether interest continues to accrue during the post‑maturity grace period. When set to true (the default), the Pismo platform submits daily accruals to the interest engine. When set to false, those submissions stop. If the field is omitted or null, it is treated as true. Note that this setting does not change the grace‑period lifecycle.

min_amountnumber

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.

max_amountnumber

Maximum deposit amount.

min_terminteger

Minimum term duration. The value of this field is calculated in days.

max_terminteger

Maximum term duration. The value of this field is calculated in days.

start_datestring date

Define the earliest date from which the product can be attached to an account or program. Attach operations attempted before this date are rejected. Date is displayed in UTC.

end_datestring date

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

metadataobject

The metadata object contains user-defined key-value pairs that provide additional context or custom information.<br> Metadata content is not controlled by the Pismo platform and is instead controlled by the user.<br>

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.

Example request

{
  "name": "Tax 1 Default",
  "interest_plan_id": "263d509a-d5d0-4b3a-b909-ce1b9174beff",
  "term_type": "FIXED",
  "accrual_model": "DEPOSIT_BASIS",
  "balance_type": "VALUE_DATED_BALANCE",
  "maturity_instructions": {
    "principal": "ROLLOVER",
    "interest": "PAY"
  },
  "processing_codes": {
    "interest_processing_code": "009797",
    "detach_processing_code": "009696"
  },
  "funding_duration": 12,
  "grace_period_duration_days": 10,
  "accrue_during_grace_period": true,
  "min_amount": 1000,
  "max_amount": 5000,
  "min_term": 265,
  "max_term": 1025,
  "penalties": {
    "early_withdrawal_after_opening": {
      "applicable_within_days": 30,
      "penalty_interest_days": 90
    },
    "grace_period": {
      "duration_days": 7,
      "penalty_interest_days": 30
    },
    "tiered_interest_forfeiture": [
      {
        "min_days_held": 1,
        "max_days_held": 90,
        "forfeited_interest_days": 30
      }
    ],
    "withdrawal_fee": {
      "type": "PERCENTAGE",
      "value": 1.5
    },
    "subsequent_withdrawals": {
      "applicable_within_days": 30,
      "window_behavior": "ROLLING",
      "penalty_interest_days": 7
    }
  },
  "notices": [
    {
      "days_before_maturity": 30,
      "description": "30-day advance notice"
    },
    {
      "days_before_maturity": 14,
      "description": "Final reminder"
    }
  ],
  "start_date": "2025-11-01",
  "end_date": "2027-12-31",
  "metadata": {
    "key": "value"
  }
}

Response

Success

cool_off_periodinteger

Period in days when a withdrawal can be made without penalty.

created_atstring date-time

Date and time the product was created

updated_atstring date-time

Date and time the product was last updated. Returned only when the product is updated.

funding_durationinteger

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.

interest_plan_idstring

Interest rate plan ID. This corresponds to the ID you created using the Create interest plan version) endpoint.

min_amountnumber

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.

max_amountnumber

Maximum deposit amount.

min_terminteger

Minimum term duration. The value of this field is calculated in days.

max_terminteger

Maximum term duration. The value of this field is calculated in days.

grace_period_duration_daysinteger

The number of days in the grace period. Applies only when no grace‑period penalty is defined. The grace‑period window opens at the start of the next cycle, spanning cycle_start_date, cycle_start_date + grace_period_duration_days, and the renewed cycle’s maturity extends by these days (cycle_start_date + grace_period_duration_days + term - 1, inclusive). The first cycle does not include a grace period. During grace period, interest accrues daily only when accrue_during_grace_period is true.

accrue_during_grace_periodboolean

Whether interest accrues daily during the grace window. Defaults to true. When false, no submissions are sent to the Interest Engine during grace (audited as IN_GRACE_NO_ACCRUAL) and accrual starts when grace ends. Deposit products only.

namestring

Product name

product_idstring

Product identifier.

product_type'deposit' | 'savings-account'

Product type

status'CREATED' | 'ACTIVE' | 'INACTIVE'

Indicates the current state of the product. For example, CREATED.

term_type'FIXED' | 'FLEXIBLE'

Term type. For example, FIXED or FLEXIBLE.

accrual_model'DEPOSIT_BASIS' | 'BALANCE_BASIS'

Interest accrual model configured at the product level and returned in both the creation event and API response. With DEPOSIT_BASIS, the Pismo platform calculates accruals based on the net daily balance change (credits minus debits) at the end of each day. With BALANCE_BASIS, accruals are calculated using the account's closing balance at the end of the day, regardless of whether any transactions occurred. For example, if an account has a balance of 1000 and no transactions are made during the day, the platform still uses 1000 as the accrual basis. At creation, the interest plan determines the model: BALANCE-CHANGE maps to DEPOSIT_BASIS, and CLOSING-BALANCE maps to BALANCE_BASIS.

balance_type'VALUE_DATED_BALANCE' | 'LEDGER_BALANCE'

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.

start_datestring date

Defines the earliest date from which the product can be attached to an account or program. Date is displayed in UTC.

end_datestring date

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

metadataobject

The metadata object contains user-defined key-value pairs that provide additional context or custom information.<br> Metadata content is not controlled by the Pismo platform and is instead controlled by the user.<br>

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.

Example response

{
  "created_at": "2024-01-23T13:26:25.000Z",
  "updated_at": "2024-01-23T13:26:25.000Z",
  "funding_duration": 12,
  "interest_plan_id": "263d509a-d5d0-4b3a-b909-ce1b9174beff",
  "maturity_instructions": {
    "principal": "ROLLOVER",
    "interest": "PAY"
  },
  "min_amount": 1000,
  "max_amount": 5000,
  "min_term": 265,
  "max_term": 1025,
  "grace_period_duration_days": 30,
  "accrue_during_grace_period": true,
  "name": "Tax 1 Default",
  "penalties": {
    "early_withdrawal_after_opening": {
      "applicable_within_days": 30,
      "penalty_interest_days": 90
    },
    "grace_period": {
      "duration_days": 7,
      "penalty_interest_days": 30
    },
    "tiered_interest_forfeiture": [
      {
        "min_days_held": 1,
        "max_days_held": 90,
        "forfeited_interest_days": 30
      }
    ],
    "withdrawal_fee": {
      "type": "PERCENTAGE",
      "value": 1.5
    },
    "subsequent_withdrawals": {
      "applicable_within_days": 30,
      "window_behavior": "ROLLING",
      "penalty_interest_days": 7
    }
  },
  "notices": [
    {
      "days_before_maturity": 30,
      "description": "30-day advance notice"
    }
  ],
  "processing_codes": {
    "interest_processing_code": "009797",
    "detach_processing_code": "009696"
  },
  "product_id": "2c336e9d-d04f-4fd0-8f6e-25808f48d70c",
  "status": "CREATED",
  "term_type": "FIXED",
  "accrual_model": "DEPOSIT_BASIS",
  "balance_type": "VALUE_DATED_BALANCE",
  "start_date": "2025-11-01",
  "end_date": "2027-12-31",
  "metadata": {
    "key": "value"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.