# Edit advance invoice schedule

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


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

**Caution** This API will return an error when [multi-frequency billing](/docs/api/subscriptions#subscription-billing-frequencies) is enabled.

Modifies the [advance invoicing schedule](/docs/api/advance_invoice_schedules) for a subscription.

## Sample Request

### Default

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/subscriptions/__test__KyVkmQSCX2vpB3C/edit_advance_invoice_schedule \
     -X POST  \
     -u {site_api_key}:\
     -d schedule_type="SPECIFIC_DATES" \
     -d "specific_dates_schedule[id][0]"="__test__KyVkmQSCX2vwe3Q" \
     -d "specific_dates_schedule[terms_to_charge][0]"=1
```

#### .NET

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

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = Subscription.EditAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C")
		.ScheduleType(ScheduleTypeEnum.SpecificDates)
		.SpecificDatesScheduleId(0, "__test__KyVkmQSCX2vwe3Q")
		.SpecificDatesScheduleTermsToCharge(0, 1)
		.Request();

List<AdvanceInvoiceSchedule> advanceInvoiceSchedules = result.AdvanceInvoiceSchedules;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    subscriptionAction "github.com/chargebee/chargebee-go/v3/actions/subscription"
    "github.com/chargebee/chargebee-go/v3/models/subscription"
    enum "github.com/chargebee/chargebee-go/v3/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := subscriptionAction.EditAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C", &subscription.EditAdvanceInvoiceScheduleRequestParams{
        SpecificDatesSchedule : []*subscription.EditAdvanceInvoiceScheduleSpecificDatesScheduleParams{
            {
                Id : "__test__KyVkmQSCX2vwe3Q",
                TermsToCharge : chargebee.Int32(1),
            },
        },
        ScheduleType : enum.ScheduleTypeSpecificDates,
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        AdvanceInvoiceSchedules := res.AdvanceInvoiceSchedules
    }
}
```

#### 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.SubscriptionEditAdvanceInvoiceScheduleRequest{
    SpecificDatesSchedule : []*chargebee.SubscriptionEditAdvanceInvoiceScheduleSpecificDatesSchedule{
        {
            Id : "__test__KyVkmQSCX2vwe3Q",
            TermsToCharge : chargebee.Int32(1),
        },
    },
    ScheduleType : chargebee.ScheduleTypeSpecificDates,
}
  res, err := client.Subscription.EditAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C", req)
      if err != nil {
        fmt.Println(err)
    } else {
        AdvanceInvoiceSchedules := res.AdvanceInvoiceSchedules
    }
}
```

#### Java

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

public class Sample {

    public static void main(String args[]) throws IOException, Exception {
        Environment.configure("{site}", "{site_api_key}");
        Result result = Subscription.editAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C")
            .scheduleType(ScheduleType.SPECIFIC_DATES)
            .specificDatesScheduleId(0, "__test__KyVkmQSCX2vwe3Q")
            .specificDatesScheduleTermsToCharge(0, 1)
            .request();

        List<AdvanceInvoiceSchedule> advanceInvoiceSchedules = result.advanceInvoiceSchedules();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.advanceInvoiceSchedule.AdvanceInvoiceSchedule;
import com.chargebee.v4.models.subscription.params.SubscriptionEditAdvanceInvoiceScheduleParams;
import com.chargebee.v4.models.subscription.responses.SubscriptionEditAdvanceInvoiceScheduleResponse;
import java.util.List;

public class SubscriptionEditAdvanceInvoiceSchedule {

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

        SubscriptionEditAdvanceInvoiceScheduleParams.SpecificDatesScheduleParams specificDatesSchedule0 =
            SubscriptionEditAdvanceInvoiceScheduleParams.SpecificDatesScheduleParams.builder()
                .id("__test__KyVkmQSCX2vwe3Q")
                .termsToCharge(1)
                .build();

        List<SubscriptionEditAdvanceInvoiceScheduleParams.SpecificDatesScheduleParams> specificDatesScheduleList =
            List.of(specificDatesSchedule0);

        SubscriptionEditAdvanceInvoiceScheduleParams params = SubscriptionEditAdvanceInvoiceScheduleParams.builder()
            .scheduleType(SubscriptionEditAdvanceInvoiceScheduleParams.ScheduleType.SPECIFIC_DATES)
            .specificDatesSchedule(specificDatesScheduleList)
            .build();

        SubscriptionEditAdvanceInvoiceScheduleResponse response = client
            .subscriptions()
            .editAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C", params);

        List<AdvanceInvoiceSchedule> advanceInvoiceSchedules = response.getAdvanceInvoiceSchedules();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

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

try {
    const result = await chargebee.subscription.editAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C", {
        specific_dates_schedule: [
            {
                id: "__test__KyVkmQSCX2vwe3Q",
                terms_to_charge: 1
            }
        ],
        schedule_type: "specific_dates"
    });

    console.log(result);
    const advanceInvoiceSchedules = result.advance_invoice_schedules;
} 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->subscription()->editAdvanceInvoiceSchedule("__test__KyVkmQSCX2vpB3C", [
    "specific_dates_schedule" => [
        [
            "id" => "__test__KyVkmQSCX2vwe3Q",
            "terms_to_charge" => 1
        ]
    ],
    "schedule_type" => "specific_dates"
]);
$advanceInvoiceSchedules = $result->advance_invoice_schedules;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.Subscription.edit_advance_invoice_schedule("__test__KyVkmQSCX2vpB3C",
    cb_client.Subscription.EditAdvanceInvoiceScheduleParams(
        specific_dates_schedule=[
            cb_client.Subscription.EditAdvanceInvoiceScheduleSpecificDatesScheduleParams(
              id="__test__KyVkmQSCX2vwe3Q",
              terms_to_charge=1
            )
        ],
        schedule_type=chargebee.ScheduleType.SPECIFIC_DATES
    )
)
advance_invoice_schedules = response.advance_invoice_schedules
```

#### Ruby

```ruby
require 'chargebee'

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

result = ChargeBee::Subscription.edit_advance_invoice_schedule("__test__KyVkmQSCX2vpB3C",{
  :schedule_type => "SPECIFIC_DATES",
  :specific_dates_schedule => [
    {
      :id => "__test__KyVkmQSCX2vwe3Q",
      :terms_to_charge => 1
    }
  ]
})

advance_invoice_schedules = result.advance_invoice_schedules
```

### Edit Fixed Intervals

#### cURL

```bash
curl  https://{site}.chargebee.com/api/v2/subscriptions/__test__KyVkmQSCX2w3g3U/edit_advance_invoice_schedule \
     -u {site_api_key}:\
     -d schedule_type="FIXED_INTERVALS" \
     -d "fixed_interval_schedule[days_before_renewal]"=3
```

#### .NET

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

ApiConfig.Configure("{site}","{site_api_key}");
EntityResult result = Subscription.EditAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U")
		.ScheduleType(ScheduleTypeEnum.FixedIntervals)
		.FixedIntervalScheduleDaysBeforeRenewal(3)
		.Request();

List<AdvanceInvoiceSchedule> advanceInvoiceSchedules = result.AdvanceInvoiceSchedules;
```

#### Go

```go
package main
import (
    "fmt"
    "github.com/chargebee/chargebee-go/v3"
    subscriptionAction "github.com/chargebee/chargebee-go/v3/actions/subscription"
    "github.com/chargebee/chargebee-go/v3/models/subscription"
    enum "github.com/chargebee/chargebee-go/v3/enum"
)
func main() {
    chargebee.Configure("{site_api_key}","{site}");
    res,err := subscriptionAction.EditAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U", &subscription.EditAdvanceInvoiceScheduleRequestParams{
        ScheduleType : enum.ScheduleTypeFixedIntervals,
        FixedIntervalSchedule : &subscription.EditAdvanceInvoiceScheduleFixedIntervalScheduleParams{
            DaysBeforeRenewal : chargebee.Int32(3),
        },
    }).Request()
    if err != nil {
        fmt.Println(err)
    } else {
        AdvanceInvoiceSchedules := res.AdvanceInvoiceSchedules
    }
}
```

#### 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.SubscriptionEditAdvanceInvoiceScheduleRequest{
    ScheduleType : chargebee.ScheduleTypeFixedIntervals,
    FixedIntervalSchedule : &chargebee.SubscriptionEditAdvanceInvoiceScheduleFixedIntervalSchedule{
        DaysBeforeRenewal : chargebee.Int32(3),
    },
}
  res, err := client.Subscription.EditAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U", req)
      if err != nil {
        fmt.Println(err)
    } else {
        AdvanceInvoiceSchedules := res.AdvanceInvoiceSchedules
    }
}
```

#### Java

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

public class Sample {

    public static void main(String args[]) throws IOException, Exception {
        Environment.configure("{site}", "{site_api_key}");
        Result result = Subscription.editAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U")
            .scheduleType(ScheduleType.FIXED_INTERVALS)
            .fixedIntervalScheduleDaysBeforeRenewal(3)
            .request();

        List<AdvanceInvoiceSchedule> advanceInvoiceSchedules = result.advanceInvoiceSchedules();
    }
}
```

#### Java

```java
import com.chargebee.v4.client.ChargebeeClient;
import com.chargebee.v4.models.advanceInvoiceSchedule.AdvanceInvoiceSchedule;
import com.chargebee.v4.models.subscription.params.SubscriptionEditAdvanceInvoiceScheduleParams;
import com.chargebee.v4.models.subscription.responses.SubscriptionEditAdvanceInvoiceScheduleResponse;
import java.util.List;

public class SubscriptionEditAdvanceInvoiceSchedule {

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

        SubscriptionEditAdvanceInvoiceScheduleParams.FixedIntervalScheduleParams fixedIntervalScheduleParams =
            SubscriptionEditAdvanceInvoiceScheduleParams.FixedIntervalScheduleParams.builder()
                .daysBeforeRenewal(3)
                .build();

        SubscriptionEditAdvanceInvoiceScheduleParams params = SubscriptionEditAdvanceInvoiceScheduleParams.builder()
            .scheduleType(SubscriptionEditAdvanceInvoiceScheduleParams.ScheduleType.FIXED_INTERVALS)
            .fixedIntervalSchedule(fixedIntervalScheduleParams)
            .build();

        SubscriptionEditAdvanceInvoiceScheduleResponse response = client
            .subscriptions()
            .editAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U", params);

        List<AdvanceInvoiceSchedule> advanceInvoiceSchedules = response.getAdvanceInvoiceSchedules();
    }
}
```

#### Node.js

```node
import Chargebee from "chargebee";

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

try {
    const result = await chargebee.subscription.editAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U", {
        schedule_type: "fixed_intervals",
        fixed_interval_schedule: {
            days_before_renewal: 3
        }
    });

    console.log(result);
    const advanceInvoiceSchedules = result.advance_invoice_schedules;
} 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->subscription()->editAdvanceInvoiceSchedule("__test__KyVkmQSCX2w3g3U", [
    "schedule_type" => "fixed_intervals",
    "fixed_interval_schedule" => [
        "days_before_renewal" => 3
    ]
]);
$advanceInvoiceSchedules = $result->advance_invoice_schedules;
```

#### Python

```python
import chargebee
from chargebee import Chargebee

cb_client = Chargebee(api_key="{site_api_key}", site="{site}")
response = cb_client.Subscription.edit_advance_invoice_schedule("__test__KyVkmQSCX2w3g3U",
    cb_client.Subscription.EditAdvanceInvoiceScheduleParams(
        schedule_type=chargebee.ScheduleType.FIXED_INTERVALS,
        fixed_interval_schedule=cb_client.Subscription.EditAdvanceInvoiceScheduleFixedIntervalScheduleParams(
            days_before_renewal=3
        )
    )
)
advance_invoice_schedules = response.advance_invoice_schedules
```

#### Ruby

```ruby
require 'chargebee'

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

result = ChargeBee::Subscription.edit_advance_invoice_schedule("__test__KyVkmQSCX2w3g3U",{
  :schedule_type => "FIXED_INTERVALS",
  :fixed_interval_schedule => {
    :days_before_renewal => 3
  }
})

advance_invoice_schedules = result.advance_invoice_schedules
```

## Sample Response

```json
{
  "advance_invoice_schedules": [
    {
      "id": "__test__KyVkmQSCX2vwe3Q",
      "object": "advance_invoice_schedule",
      "schedule_type": "specific_dates",
      "specific_dates_schedule": {
        "date": 1518339708,
        "object": "specific_dates_schedule",
        "terms_to_charge": 1
      }
    },
    {..}
  ]
}
```

## URL Format

**POST** https://[site].chargebee.com/api/v2/subscriptions/{subscription-id}/edit_advance_invoice_schedule

## Input Parameters

- `terms_to_charge` (optional, integer, min=1)
  The number of billing cycles in one interval.

- `schedule_type` (optional, enumerated string)
  The type of advance invoice or advance invoicing schedule.
  Possible enum values:
    - `specific_dates`
      Charge on [specific dates](/docs/api/subscriptions/charge-future-renewals#specific_dates_schedule_date). For each date, specify the [number of billing cycles](/docs/api/subscriptions/charge-future-renewals#specific_dates_schedule_terms_to_charge) to charge for. Up to 5 dates can be configured.
    - `fixed_intervals`
      Charge at fixed intervals of time. Specify the [number of billing cycles](/docs/api/subscriptions/charge-future-renewals#terms_to_charge) that constitute an interval and the number of [days before each interval](/docs/api/subscriptions/charge-future-renewals#fixed_interval_schedule_days_before_renewal) that the invoice should be generated. Also specify [when the schedule should end](/docs/api/subscriptions/charge-future-renewals#fixed_interval_schedule_end_schedule_on) .

- `fixed_interval_schedule` (optional, integer)
  Parameters for fixed\_interval\_schedule
  - `number_of_occurrences` (optional, integer, min=1)
    The number of advance invoices to generate. The schedule is created such that the total number of billing cycles in the schedule does not exceed the [`remaining_billing_cycles`](/docs/api/subscriptions/subscription-object#remaining_billing_cycles) of the subscription. This parameter is applicable only when [`fixed_interval_schedule[end_schedule_on]`](/docs/api/advance_invoice_schedules/advance_invoice_schedule-object#fixed_interval_schedule_end_schedule_on) = `after_number_of_intervals`
  - `days_before_renewal` (optional, integer, min=1)
    The number of days before each interval that advance invoices are generated.
  - `end_schedule_on` (optional, enumerated string)
    Specifies when the schedule should end.
    Possible enum values:
      - `after_number_of_intervals`
        Advance invoices are generated a `specified number of times`
      - `specific_date`
        End the advance invoicing schedule on a `specific date` .
      - `subscription_end`
        Advance invoices are generated for as long as the subscription is active.
  - `end_date` (optional, timestamp(UTC) in seconds)
    The date when the schedule should end. Advance invoices are not generated beyond this date. It must be at least 1 day before the start of the last billing cycle of the subscription and also within 5 years from the current date. This parameter is only applicable when [`fixed_interval_schedule[end_schedule_on]`](/docs/api/advance_invoice_schedules/advance_invoice_schedule-object#fixed_interval_schedule_end_schedule_on) = `specific_date` .

- `specific_dates_schedule` (optional, array)
  Parameters for specific\_dates\_schedule
  - `id` (optional, string, max chars=50)
    The [unique id](/docs/api/advance_invoice_schedules/advance_invoice_schedule-object#id) of the member of the [advance\_invoice\_schedule](/docs/api/advance_invoice_schedules) array which corresponds to the [specific\_dates\_schedule](/docs/api/advance_invoice_schedules/advance_invoice_schedule-object#specific_dates_schedule) that you intend to modify. Only applicable when [schedule\_type](/docs/api/subscriptions/edit-advance-invoice-schedule#schedule_type) is specific\_dates.
  - `terms_to_charge` (optional, integer)
    The number of billing cycles to charge for, on the date specified. Applicable only when [`schedule_type`](/docs/api/advance_invoice_schedules/advance_invoice_schedule-object#schedule_type) is specific\_dates.
  - `date` (optional, timestamp(UTC) in seconds)
    The unique id of the member of the advance\_invoice\_schedule array which corresponds to the specific\_dates\_schedule that you intend to modify. Only applicable when [`schedule_type`](/docs/api/advance_invoice_schedules/advance_invoice_schedule-object#schedule_type) is `specific_dates` .

## Returns

- `advance_invoice_schedules` (always returned)
  Resource object representing advance\_invoice\_schedule
