# UpdateClientProduct

Updates a Client Service

### Request Parameters

| Parameter | Type | Description | Required |
|  --- | --- | --- | --- |
| action | string | "UpdateClientProduct" | Required |
| serviceid | int | The ID of the client service to update. | Required |
| pid | int | The package ID to associate with the service. | Optional |
| serverid | int | The server ID to associate with the service. | Optional |
| regdate | string | The registration date of the service. Format: Y-m-d | Optional |
| nextduedate | string | The next due date of the service. Format: Y-m-d | Optional |
| terminationdate | string | Update the termination date of the service. Format: Y-m-d | Optional |
| domain | string | The domain name to be changed to. | Optional |
| firstpaymentamount | float | The first payment amount on the service. | Optional |
| recurringamount | float | The recurring amount for automatic renewal invoices. | Optional |
| paymentmethod | string | The payment method to associate, in system format (for example, paypal). | Optional |
| billingcycle | string | The term in which the product is billed on (for example, One-Time, Monthly, or Quarterly). | Optional |
| subscriptionid | string | The subscription ID to associate with the service. | Optional |
| status | string | The status to change the service to. | Optional |
| notes | string | The admin notes for the service. | Optional |
| serviceusername | string | The service username. | Optional |
| servicepassword | string | The service password. | Optional |
| overideautosuspend | string | Whether to provide override auto suspend ('on' or 'off'). | Optional |
| overidesuspenduntil | string | Update the Override Suspend date of the service. Format: Y-m-d | Optional |
| ns1 | string | (VPS/Dedicated servers only) | Optional |
| ns2 | string | (VPS/Dedicated servers only) | Optional |
| dedicatedip | string |  | Optional |
| assignedips | string | (VPS/Dedicated servers only) | Optional |
| diskusage | int | The disk usage in megabytes. | Optional |
| disklimit | int | The disk limit in megabytes. | Optional |
| bwusage | int | The bandwidth usage in megabytes. | Optional |
| bwlimit | int | The bandwidth limit in megabytes. | Optional |
| suspendreason | string |  | Optional |
| promoid | int | The promotion ID to associate. | Optional |
| unset | array | An array of items to unset. Can be one of: 'domain', 'serviceusername', 'servicepassword', 'subscriptionid', 'ns1', 'ns2', 'dedicatedip', 'assignedips', 'notes', or 'suspendreason' | Optional |
| autorecalc | bool | Whether to automatically recalculate the recurring amount of the service (this will ignore any passed $recurringamount). | Optional |
| customfields | string | Base64 encoded serialized array of custom field values - base64_encode(serialize(array("1"=>"Yahoo"))); | Optional |
| configoptions | string | Base64 encoded serialized array of configurable option field values - base64_encode(serialize(array(configoptionid => dropdownoptionid, XXX => array('optionid' => YYY, 'qty' => ZZZ)))) - XXX is the ID of the configurable option - YYY is the optionid found in tblhostingconfigoption.optionid - ZZZ is the quantity you want to use for that option | Optional |


### Response Parameters

| Parameter | Type | Description |
|  --- | --- | --- |
| result | string | The result of the operation: success or error |
| serviceid | int | The ID of the updated service. |


### Example Request (CURL)

```
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.example.com/includes/api.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            'action' => 'UpdateClientProduct',
            // See https://developers.whmcs.com/api/authentication
            'username' => 'IDENTIFIER_OR_ADMIN_USERNAME',
            'password' => 'SECRET_OR_HASHED_PASSWORD',
            'serviceid' => '1',
            'status' => 'Terminated',
            'customfields' => base64_encode(serialize(array("1"=>"Yahoo"))),
            'configoptions' => base64_encode(serialize(array(configoptionid => dropdownoptionid, XXX => array('optionid' => YYY, 'qty' => ZZZ)))),
            'responsetype' => 'json',
        )
    )
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
```

### Example Request (Local API)

```
$command = 'UpdateClientProduct';
$postData = array(
    'serviceid' => '1',
    'status' => 'Terminated',
    'customfields' => base64_encode(serialize(array("1"=>"Yahoo"))),
    'configoptions' => base64_encode(serialize(array(configoptionid => dropdownoptionid, XXX => array('optionid' => YYY, 'qty' => ZZZ)))),
);
$adminUsername = 'ADMIN_USERNAME'; // Optional for WHMCS 7.2 and later

$results = localAPI($command, $postData, $adminUsername);
print_r($results);
```

### Example Response JSON

```
{
    "result": "success",
    "serviceid": "1"
}
```

### Error Responses

Possible error condition responses include:

* Service ID Not Found


### Version History

| Version | Changelog |
|  --- | --- |
| 1.0 | Initial Version |