---
title: "Create program calendar strategy"
method: POST
path: "/v1/programs/{programId}/calendar-strategies"
tags: ["Program calendar strategies"]
---

# Create program calendar strategy

`POST /v1/programs/{programId}/calendar-strategies`

## Request

- Base URL: `https://sandbox.pismolabs.io/calendar-management`
- URL: `https://sandbox.pismolabs.io/calendar-management/v1/programs/{programId}/calendar-strategies`
- Auth: HTTP bearer

Create a program calendar strategy.

Program calendar strategies provide new methods of calendar creation. For example, in the `FIXED_CYCLE_CLOSING` strategy, the `cycle_closing_date` of the calendar is fixed, but the due date is dynamic. The due date is calculated from the values set in the `configuration` object.

This endpoint generates a [Program calendar strategy created](https://developers.pismo.io/events/docs/balance-program-calendar-strategy-created-1) event.

<b>Note:</b> This endpoint cannot be used to create a [fixed due date calendar](doc:fixed-due-date-calendars).

## Path parameters

- `programId` integer, required

## Headers

- `x-cid` string

## Request body

- union
  - FIXEDCYCLECLOSING: Cycle closing date is fixed. Due date is dynamic.
    - `strategy` 'FIXED_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object, required
      - `cycle_closing_day` integer, required: Day of the month for the cycle closing. Must be in the range 1 to 28.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - MONTHLYCYCLECLOSING: Cycle closes on a fixed day or Nth weekday each month. Due date is derived forward from the close date. Either `cycle_closing_day` or `nth_specific_weekday` must be provided — not both.
    - `strategy` 'MONTHLY_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object, required
      - `cycle_closing_day` integer: Day of the month for the cycle closing. Must be in the range 1 to 28.
      - `nth_specific_weekday` NthSpecificWeekday: Nth specific weekday of the month (e.g. 3rd Friday). Mutually exclusive with fixed day fields.
        - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
        - `week_of_month` integer, required: Week of the month. 1 = first, 2 = second, 3 = third, 4 = fourth, 5 = last.
      - `every_x_months` integer: Interval in months between cycles. Must be between 1 and 12. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - MONTHLYDUEDATE: Due date falls on a fixed day or Nth weekday each month. Cycle close is derived backward from the due date. Either `due_day` or `nth_specific_weekday` must be provided — not both.
    - `strategy` 'MONTHLY_DUE_DATE': Program calendar strategy
    - `configuration` object, required
      - `due_day` integer: Day of the month for the due date. Must be in the range 1 to 28.
      - `nth_specific_weekday` NthSpecificWeekday: Nth specific weekday of the month (e.g. 3rd Friday). Mutually exclusive with fixed day fields.
        - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
        - `week_of_month` integer, required: Week of the month. 1 = first, 2 = second, 3 = third, 4 = fourth, 5 = last.
      - `every_x_months` integer: Interval in months between cycles. Must be between 1 and 12. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - WEEKLYCYCLECLOSING: Cycle closes on a specific weekday every N weeks. Due date is derived forward from the close date.
    - `strategy` 'WEEKLY_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object, required
      - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
      - `every_x_weeks` integer: Interval in weeks between cycles. Must be between 1 and 52. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - WEEKLYDUEDATE: Due date falls on a specific weekday every N weeks. Cycle close is derived backward from the due date.
    - `strategy` 'WEEKLY_DUE_DATE': Program calendar strategy
    - `configuration` object, required
      - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
      - `every_x_weeks` integer: Interval in weeks between cycles. Must be between 1 and 52. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - DAILYCYCLECLOSING: Cycle closes every N days. Due date is derived forward from the close date.
    - `strategy` 'DAILY_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object, required
      - `every_x_days` integer: Interval in days between cycles. Must be between 1 and 365. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - DAILYDUEDATE: Due date falls every N days. Cycle close is derived backward from the due date.
    - `strategy` 'DAILY_DUE_DATE': Program calendar strategy
    - `configuration` object, required
      - `every_x_days` integer: Interval in days between cycles. Must be between 1 and 365. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer, required: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?

## Response `202`

OK

- union
  - FIXEDCYCLECLOSINGResponse: Cycle closing date is fixed. Due date is dynamic.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'FIXED_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object
      - `cycle_closing_day` integer: Day of the month for the cycle closing. Must be in the range 1 to 28.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - MONTHLYCYCLECLOSINGResponse: Cycle closes on a fixed day or Nth weekday each month. Due date is derived forward from the close date.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'MONTHLY_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object
      - `cycle_closing_day` integer: Day of the month for the cycle closing. Must be in the range 1 to 28.
      - `nth_specific_weekday` NthSpecificWeekday: Nth specific weekday of the month (e.g. 3rd Friday). Mutually exclusive with fixed day fields.
        - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
        - `week_of_month` integer, required: Week of the month. 1 = first, 2 = second, 3 = third, 4 = fourth, 5 = last.
      - `every_x_months` integer: Interval in months between cycles. Must be between 1 and 12. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - MONTHLYDUEDATEResponse: Due date falls on a fixed day or Nth weekday each month. Cycle close is derived backward from the due date.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'MONTHLY_DUE_DATE': Program calendar strategy
    - `configuration` object
      - `due_day` integer: Day of the month for the due date. Must be in the range 1 to 28.
      - `nth_specific_weekday` NthSpecificWeekday: Nth specific weekday of the month (e.g. 3rd Friday). Mutually exclusive with fixed day fields.
        - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
        - `week_of_month` integer, required: Week of the month. 1 = first, 2 = second, 3 = third, 4 = fourth, 5 = last.
      - `every_x_months` integer: Interval in months between cycles. Must be between 1 and 12. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - WEEKLYCYCLECLOSINGResponse: Cycle closes on a specific weekday every N weeks. Due date is derived forward from the close date.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'WEEKLY_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object
      - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY': Day of the week.
      - `every_x_weeks` integer: Interval in weeks between cycles. Must be between 1 and 52. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - WEEKLYDUEDATEResponse: Due date falls on a specific weekday every N weeks. Cycle close is derived backward from the due date.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'WEEKLY_DUE_DATE': Program calendar strategy
    - `configuration` object
      - `day_of_week` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY': Day of the week.
      - `every_x_weeks` integer: Interval in weeks between cycles. Must be between 1 and 52. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - DAILYCYCLECLOSINGResponse: Cycle closes every N days. Due date is derived forward from the close date.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'DAILY_CYCLE_CLOSING': Program calendar strategy
    - `configuration` object
      - `every_x_days` integer: Interval in days between cycles. Must be between 1 and 365. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?
  - DAILYDUEDATEResponse: Due date falls every N days. Cycle close is derived backward from the due date.
    - `program_calendar_strategy_id` integer: Program calendar strategy ID
    - `program_id` integer: Program ID
    - `created_at` string, date-time: Datetime program calendar strategy was created. Format = YYYY-MM-DDTHH:MM:SS:MM.
    - `updated_at` string, date-time: Datetime program calendar strategy was updated. Format = YYYY-MM-DDTHH:MM:SS:MM
    - `strategy` 'DAILY_DUE_DATE': Program calendar strategy
    - `configuration` object
      - `every_x_days` integer: Interval in days between cycles. Must be between 1 and 365. Defaults to 1.
      - `days_between_cycle_closing_and_due_date` integer: Number of days between cycle closing and due date
    - `active` boolean: Is the program calendar strategy active?

## Other responses

- `400`: Bad request
- `500`: Internal server error

---

[API](https://skmtc.dev/pismo/apis/revolving-credit-calendar-management.md) - [All operations](https://skmtc.dev/pismo/apis/revolving-credit-calendar-management/llms.txt) - [OpenAPI document](https://skmtc.dev/pismo/apis/revolving-credit-calendar-management/revisions/28a722ae3976?raw)
