# Create a payment schedule scheme

> For the complete machine-readable documentation index, see [llms.txt](https://apidocs.chargebee.com/llms.txt).


[Idempotency Supported](/docs/api/idempotency)

Creates a payment schedule scheme. After creating a payment schedule scheme, you can use it to generate payment schedules for multiple invoices.

## Sample Request

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/payment_schedule_schemes \
     -u {site_api_key}:\
     -d name="Scheme2" \
     -d number_of_schedules=3 \
     -d period_unit="MONTH" \
     -d period=1
```

#### .NET

```dotnet
using ChargeBee.Api;
using ChargeBee.Models;

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = PaymentScheduleScheme.Create()
		.Name("Scheme2")
		.NumberOfSchedules(3)
		.PeriodUnit(PaymentScheduleScheme.PeriodUnitEnum.Month)
		.Period(1)
		.Request();

PaymentScheduleScheme paymentScheduleScheme = result.PaymentScheduleScheme;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    paymentscheduleschemeAction "github.com/chargebee/chargebee-go/v3/actions/paymentschedulescheme"
    "github.com/chargebee/chargebee-go/v3/models/paymentschedulescheme"
    paymentScheduleSchemeEnum "github.com/chargebee/chargebee-go/v3/models/paymentschedulescheme/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := paymentscheduleschemeAction.Create(&paymentschedulescheme.CreateRequestParams{
        Name : "Scheme2",
        NumberOfSchedules : chargebee.Int32(3),
        PeriodUnit : paymentScheduleSchemeEnum.PeriodUnitMonth,
        Period : chargebee.Int32(1),
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        PaymentScheduleScheme := res.PaymentScheduleScheme
    }
}
```

#### Go

```go
package main

import (
  "fmt"
  "github.com/chargebee/chargebee-go/v4"
)

func main() {
  config := &chargebee.ClientConfig{
    SiteName: "{site}",
    ApiKey: "{site_api_key}",
  }    
  client := chargebee.NewClient(config)
  req := &chargebee.PaymentScheduleSchemeCreateRequest{
    Name : "Scheme2",
    NumberOfSchedules : chargebee.Int32(3),
    PeriodUnit : chargebee.PaymentScheduleSchemePeriodUnitMonth,
    Period : chargebee.Int32(1),
}
  res, err := client.PaymentScheduleScheme.Create(req)
      if err != nil {
        fmt.Println(err)
    } else {
        PaymentScheduleScheme := res.PaymentScheduleScheme
    }
}
```

#### Java

```java
import com.chargebee.*;
import com.chargebee.ListResult;
import com.chargebee.models.*;
import com.chargebee.models.enums.*;
import java.io.IOException;

public class Sample {

    public static void main(String args[]) throws IOException, Exception {
        Environment.configure("{site}", "{site_api_key}");
        Result result = PaymentScheduleScheme.create()
            .name("Scheme2")
            .numberOfSchedules(3)
            .periodUnit(PaymentScheduleScheme.PeriodUnit.MONTH)
            .period(1)
            .request();

        PaymentScheduleScheme paymentScheduleScheme = result.paymentScheduleScheme();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.paymentScheduleScheme.PaymentScheduleScheme;
import com.chargebee.v4.models.paymentScheduleScheme.params.PaymentScheduleSchemeCreateParams;
import com.chargebee.v4.models.paymentScheduleScheme.responses.PaymentScheduleSchemeCreateResponse;

public class PaymentScheduleSchemeCreate {

    public static void main(String[] args) {
        ChargebeeClient client = ChargebeeClient.builder()
            .apiKey("{site_api_key}")
            .siteName("{site}")
            .build();

        PaymentScheduleSchemeCreateParams params = PaymentScheduleSchemeCreateParams.builder()
            .name("Scheme2")
            .numberOfSchedules(3)
            .periodUnit(PaymentScheduleSchemeCreateParams.PeriodUnit.MONTH)
            .period(1)
            .build();

        PaymentScheduleSchemeCreateResponse response = client.paymentScheduleSchemes().create(params);

        PaymentScheduleScheme paymentScheduleScheme = response.getPaymentScheduleScheme();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

const chargebee = new Chargebee({
    site: "{site}",
    apiKey: "{site_api_key}",
});

try {
    const result = await chargebee.paymentScheduleScheme.create({
        name: "Scheme2",
        number_of_schedules: 3,
        period_unit: "month",
        period: 1
    });

    console.log(result);
    const paymentScheduleScheme = result.payment_schedule_scheme;
} catch (err) {
    console.log(err);
}
```

#### PHP

```php
<?php

require __DIR__ . '/vendor/autoload.php';

use Chargebee\ChargebeeClient;

$chargebee = new ChargebeeClient(options: [
    "site" => "{site}",
    "apiKey" => "{site_api_key}",
]);
$result = $chargebee->paymentScheduleScheme()->create([
    "name" => "Scheme2",
    "number_of_schedules" => 3,
    "period_unit" => "month",
    "period" => 1
]);
$paymentScheduleScheme = $result->payment_schedule_scheme;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.PaymentScheduleScheme.create(
    cb_client.PaymentScheduleScheme.CreateParams(
        name="Scheme2",
        number_of_schedules=3,
        period_unit=chargebee.PaymentScheduleScheme.PeriodUnit.MONTH,
        period=1
    )
)
payment_schedule_scheme = response.payment_schedule_scheme
```

#### Ruby

```ruby
require 'chargebee'

ChargeBee.configure(:site => "{site}",
  :api_key => "{site_api_key}")

result = ChargeBee::PaymentScheduleScheme.create({
  :name => "Scheme2",
  :number_of_schedules => 3,
  :period_unit => "MONTH",
  :period => 1
})

payment_schedule_scheme = result.payment_schedule_scheme
```

## Sample Response

```json
{
  "payment_schedule_scheme": {
    "id": "__dev__HvFwO7xUND2MBa3x",
    "number_of_schedules": 3,
    "period_unit": "month",
    "period": 1,
    "created_at": 1709371975,
    "updated_at": 1709371975,
    "resource_version": 1709371975988,
    "object": "payment_schedule_scheme"
  }
}
```

## URL Format

**POST** https://[site].chargebee.com/api/v2/payment_schedule_schemes

## Input Parameters

- `number_of_schedules` (required, integer, min=1, max=52)
  Specifies the total number of payment schedules for the invoice. The maximum `number_of_schedules` varies based on the `period_unit` : - **Day**: Up to 30 schedules
  
  -   **Week**: Up to 52 schedules
  -   **Month**: Up to 12 schedules

- `period_unit` (required, enumerated string)
  Defines the time unit for intervals between payment schedules. Possible values are: day, week, and month.
  Possible enum values:
    - `day`
      When the time unit for intervals between payment schedules is set as day
    - `week`
      When the time unit for intervals between payment schedules is set as week
    - `month`
      When the time unit for intervals between payment schedules is set as month

- `period` (optional, integer, min=1, max=30)
  The time period between the effective dates of two consecutive payment schedules, expressed in period\_units. Use this parameter to have fixed intervals between payment schedules. The maximum `period` varies based on the `period_unit` : - **Day**: Up to 30 days
  
  -   **Week**: Up to 6 weeks
  -   **Month**: Up to 6 months

- `name` (required, string, max chars=100)
  The name of a payment schedule scheme.

- `flexible_schedules` (optional, array)
  Parameters for flexible\_schedules
  - `period` (optional, integer)
    The interval after which this payment schedule should be collected.
  - `amount_percentage` (optional, bigdecimal)
    The percentage amount that this specific payment schedule should collect.

## Returns

- `payment_schedule_scheme` (Payment schedule scheme object)
  Resource object representing payment\_schedule\_scheme
