Changes the billing method of one or more Elastic Compute Service (ECS) instances. You can change the billing methods of instances between pay-as-you-go and subscription, or change the billing method of all data disks that are attached to an instance from pay-as-you-go to subscription.
Description
Before you call this operation, make sure that you understand the billing methods and pricing schedule of ECS. For more information, visit the Elastic Compute Service product page.
When you call this operation, take note of the following items:
- The instances must be in the Running (
Running
) or Stopped (Stopped
) state, and you have no overdue payments for them. - After you change the billing method, the payment (if any) is automatically completed. Maintain a sufficient account balance. Otherwise, your order becomes invalid and is canceled. If your account balance is insufficient, you can set the
AutoPay
parameter tofalse
to generate an unpaid order. Then, you can log on to the ECS console to pay for the order. - Change the billing method from subscription to pay-as-you-go:
-
Your ECS usage determines whether the billing method of an instance can be changed from subscription to pay-as-you-go.
-
After you change the billing method of an instance from subscription to pay-as-you-go, the new billing method remains in effect for the remaining lifecycle of the instance. The price difference is refunded to the payment account that you used. Vouchers that have been redeemed are not refundable.
- Refund rule: You have a quota for the total refund amount each month, and unused balance of this quota is not carried forward into the next month. After you use up the refund quota of the current month, you can change the billing method only in the next month. The refund amount incurred when you change the billing method is calculated based on the following formula: Number of vCPUs × (Number of remaining days × 24 ± Number of remaining or elapsed hours).
-
- Change the billing method from pay-as-you-go to subscription:
- You can change the billing method of all data disks that are attached to an instance from pay-as-you-go to subscription.
- This operation cannot be called for a pay-as-you-go instance that has an automatic release time set.
Debugging
Request parameters
Parameter | Type | Required | Example | Description |
---|---|---|---|---|
Action | String | Yes | ModifyInstanceChargeType | The operation that you want to perform. Set the value to ModifyInstanceChargeType. |
InstanceIds | String | Yes | ["i-bp67acfmxazb4p****","i-bp67acfmxazb4d****"] | The IDs of instances. The value can be a JSON array that consists of up to 20 instance IDs. Separate the instance IDs with commas (,). |
RegionId | String | Yes | cn-hangzhou | The region ID of the instance. You can call the DescribeRegions operation to query the most recent region list. |
Period | Integer | No | 1 | The renewal duration of the subscription instance. If the instance is hosted on a dedicated host, the renewal duration of the instance cannot exceed the subscription duration of the dedicated host. Valid values: Valid values when the |
PeriodUnit | String | No | Month | The unit of the renewal duration ( Month Default value: Month. |
IncludeDataDisks | Boolean | No | false | Specifies whether to change the billing method of all data disks attached to the instance from pay-as-you-go to subscription. Default value: false. |
DryRun | Boolean | No | false | Specifies whether to perform a dry run. Valid values:
Default value: false. |
AutoPay | Boolean | No | false | Specifies whether to automatically complete the payment. Valid values:
Default value: true. Note If your account balance is insufficient, you can set the AutoPay parameter to false to generate an unpaid order. Then, you can log on to the ECS console to pay for the order. |
InstanceChargeType | String | No | PrePaid | The new billing method. Valid values:
Default value: PrePaid. |
ClientToken | String | No | 123e4567-e89b-12d3-a456-426655440000 | The client token that is used to ensure the idempotence of the request. You can use the client to generate the value, but you must make sure that it is unique among different requests. The ClientToken value can contain only ASCII characters and cannot exceed 64 characters in length. For more information, see How to ensure idempotence. |
IsDetailFee | Boolean | No | false | Specifies whether to return cost details of the order when the billing method is changed from subscription to pay-as-you-go. Default value: false. |
Response parameters
Parameter | Type | Example | Description |
---|---|---|---|
OrderId | String | 20413515388**** | The ID of the order. |
RequestId | String | B61C08E5-403A-46A2-96C1-F7B1216DB10C | The ID of the request. |
FeeOfInstances | Array of FeeOfInstance | Details about the charges for the order. |
|
FeeOfInstance | |||
InstanceId | String | i-bp67acfmxazb4p**** | The ID of the instance. |
Currency | String | CNY | The unit of currency for the bill. Alibaba Cloud China site (aliyun.com): CNY. Alibaba Cloud International site (alibabacloud.com): USD. |
Fee | String | 0 | The cost value. |
Examples
Sample requests
http(s)://ecs.aliyuncs.com/?Action=ModifyInstanceChargeType
&RegionId=cn-hangzhou
&InstanceIds=["i-bp67acfmxazb4p****","i-bp67acfmxazb4d****"]
&Period=1
&PeriodUnit=Month
&AutoPay=false
&IncludeDataDisks=false
&ClientToken=123e4567-e89b-12d3-a456-426655440000
&<Common request parameters>
Sample success responses
XML
format
HTTP/1.1 200 OK
Content-Type:application/xml
<ModifyInstanceChargeTypeResponse>
<OrderId>20413515388****</OrderId>
<RequestId>B61C08E5-403A-46A2-96C1-F7B1216DB10C</RequestId>
<FeeOfInstances>
<InstanceId>i-bp67acfmxazb4p****</InstanceId>
<Currency>CNY</Currency>
<Fee>0</Fee>
</FeeOfInstances>
</ModifyInstanceChargeTypeResponse>
JSON
format
HTTP/1.1 200 OK
Content-Type:application/json
{
"OrderId" : "20413515388****",
"RequestId" : "B61C08E5-403A-46A2-96C1-F7B1216DB10C",
"FeeOfInstances" : [ {
"InstanceId" : "i-bp67acfmxazb4p****",
"Currency" : "CNY",
"Fee" : "0"
} ]
}
Error codes
HTTP status code | Error code | Error message | Description |
---|---|---|---|
400 | InvalidParameter.InstanceIds | The specified InstanceIds are invalid. | The error message returned because the specified InstanceIds parameter is invalid. |
400 | InvalidParameter | %s | The error message returned because a specified parameter is invalid. |
400 | InvalidStatus.ValueNotSupported | %s | The error message returned because the operation is not supported while the resource is in the current state. |
400 | InvalidInstanceChargeType.ValueNotSupported | %s | The error message returned because the specified InstanceChargeType parameter is invalid. |
400 | ExpiredInstance | The specified instance has expired. | The error message returned because the specified instance has expired. |
400 | InstancesIdQuotaExceed | The maximum number of Instances is exceeded. | The error message returned because the maximum number of instances has been reached. |
400 | InvalidClientToken.ValueNotSupported | The ClientToken provided is invalid. | The error message returned because the specified ClientToken parameter is invalid. |
400 | InvalidInternetChargeType.ValueNotSupported | %s | The error message returned because the specified InternetChargeType parameter is invalid. |
400 | ReleaseTimeHaveBeenSet | The specified instance has been set released time. | The error message returned because an automatic release time has been set for the specified instance. |
400 | Throttling | Request was denied due to request throttling, please try again after 5 minutes. | The error message returned because your request is throttled. Try again 5 minutes later. |
400 | Throttling | %s | The error message returned because the request is throttled. |
400 | QuotaExceed.AfterpayInstance | The maximum number of Pay-As-You-Go instances is exceeded: %s | The error message returned because resources are insufficient to create pay-as-you-go instances of the specified instance type. Reduce the number of instances to be created and try again. |
400 | InvalidParameter.Bandwidth | %s | The error message returned because the specified bandwidth is invalid. |
400 | QuotaExceed.RufundVcpu | The maximum number of refund vcpu is exceeded: %s | The error message returned because the number of vCPUs that is used to calculate the refund amount exceeds the upper limit. For more information about the limit, see the return value of the %s placeholder in the error message. |
400 | InvalidPeriod.UnitMismatch | The specified Period must be correlated with the PeriodUnit. | The error message returned because the specified value of the Period parameter falls outside the valid value range determined by the PeriodUnit parameter. |
400 | InvalidImageType.NotSupported | %s | The error message returned because the specified image type is invalid. Check whether this image type is supported in the region. |
400 | InvalidMarketImageChargeType.NotSupport | The specified chargeType of marketImage is unsupported. | The error message returned because the billing method of the Alibaba Cloud Marketplace image is not supported. |
400 | InvalidSystemDiskCategory.ValueNotSupported | %s | The error message returned because the operation is not supported by the specified system disk category. |
400 | InvalidInstance.NotFoundSystemDisk | The specified instance has no system disk. | The error message returned because the specified instance has no system disk attached. Make sure that the specified instance has a system disk attached. You can call the DescribeInstances operation to query the details of the specified instance. |
400 | Invalid.PrivatePoolOptions.MatchCriteria | Target mode does not support this operation. | The error message returned because the operation is not supported while the PrivatePoolOptions.MatchCriteria parameter is set to Target. |
400 | InvalidPeriod | The specified period is not valid. | The error message returned because the specified Period parameter is invalid. |
403 | InvalidInstance.TempBandwidthUpgrade | Cannot switch to Pay-As-You-Go during the period of temporary bandwidth upgrade. | The error message returned because you cannot change the billing method of the instance to pay-as-you-go when the bandwidth is being temporarily upgraded. |
403 | InvalidInstanceType.ValueNotSupported | The specified InstanceType does not exist or beyond the permitted range. | The error message returned because the specified InstanceType parameter does not exist or because you are not authorized to manage instances of this instance type. |
403 | InstanceType.Offline | %s | The error message returned because the operation is not supported while the instance type is retired or while resources of the instance type are insufficient. |
403 | InvalidAccountStatus.NotEnoughBalance | Your account does not have enough balance. | The error message returned because your account balance is insufficient. Add funds to your account and try again. |
403 | Account.Arrearage | Your account has an outstanding payment. | The error message returned because you have overdue payments in your account. |
403 | InvalidParameter.NotMatch | %s | The error message returned because a specified parameter is invalid. Check whether parameter conflicts exist. |
403 | InvalidAction | %s | The error message returned because the operation is invalid. |
403 | QuotaExceed.PostPaidDisk | Living postPaid disks quota exceeded. | The error message returned because the maximum number of pay-as-you-go disks has been reached. |
403 | ImageNotSupportInstanceType | The specified instanceType is not supported by instance with marketplace image. | The error message returned because the specified Alibaba Cloud Marketplace image does not support the instance type. |
403 | InvalidInstanceType.PhasedOut | This instanceType is no longer offered. | The error message returned because the specified instance type is retired. |
403 | RealNameAuthenticationError | Your account has not passed the real-name authentication yet. | The error message returned because you have not completed real-name verification. Complete real-name verification and try again. |
403 | QuotaExceed.ElasticQuota | No additional quota is available for the specified ECS instance type. | The error message returned because the maximum number of instances of the specified instance type in the region has been reached. You can try another region or instance type, or reduce the number of instances that you want to purchase. Alternatively, you can go to the ECS console or Quota Center to request a quota increase. |
403 | QuotaExceed.ElasticQuota | The number of the specified ECS instances has exceeded the quota of the specified instance type. | The error message returned because the maximum number of instances of the specified instance type in the region has been reached. You can try another region or instance type, or reduce the number of instances that you want to purchase. Alternatively, you can go to the ECS console or Quota Center to request a quota increase. |
403 | QuotaExceed.ElasticQuota | The number of vCPUs assigned to the ECS instances has exceeded the quota in the zone. | The error message returned because the maximum number of vCPUs for all instance types in the zone has been reached. You can go to the ECS console or Quota Center to request a quota increase. |
403 | QuotaExceed.ElasticQuota | The number of the specified ECS instances has exceeded the quota of the specified instance type, or the number of vCPUs assigned to the ECS instances has exceeded the quota in the zone. | The error message returned because the maximum number of instances of the specified instance type in the region has been reached or because the maximum number of vCPUs for all instance types in the zone has been reached. You can go to the ECS console or Quota Center to request a quota increase. |
404 | InvalidInstanceId.NotFound | The specified instanceId does not exist. | The error message returned because the specified instance does not exist. |
500 | InternalError | The request processing has failed due to some unknown error, exception or failure. | The error message returned because an internal error has occurred. Try again later. |
500 | InternalError | The request processing has failed due to some unknown error. | The error message returned because an internal error has occurred. Try again later. |
For a list of error codes, see Service error codes.