# AddBillableItem

Adds a Billable Item

### Request Parameters

| Parameter | Type | Description | Required |
|  --- | --- | --- | --- |
| action | string | "AddBillableItem" | Required |
| clientid | int | The client to add the item to. | Required |
| description | string | The description of the Billable Item. This will appear on the invoice. | Required |
| amount | float | The total amount to invoice for. | Required |
| unit | string | Either 'hours' or 'quantity'. | Required |
| quantity | float | The number of units the billable items represents. Defaults to 0. | Optional |
| invoiceaction | string | One of 'noinvoice', 'nextcron', 'nextinvoice', 'duedate', or 'recur'. | Optional |
| recur | int | When `$invoiceaction=recur`. The frequency of the recurrence. | Optional |
| recurcycle | string | How often to recur the Billable Item. Days, Weeks, Months or Years. | Optional |
| recurfor | int | How many times the Billable Item should create an invoice. | Optional |
| duedate | string | Date the invoice should be due (only required for due date and recur invoice actions). YYYY-mm-dd | Optional |


### Response Parameters

| Parameter | Type | Description |
|  --- | --- | --- |
| result | string | The result of the operation: success or error |
| billableid | int | The ID of the newly created billable item. |


### 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' => 'AddBillableItem',
            // See https://developers.whmcs.com/api/authentication
            'username' => 'IDENTIFIER_OR_ADMIN_USERNAME',
            'password' => 'SECRET_OR_HASHED_PASSWORD',
            'clientid' => '1',
            'description' => 'This is a billable item',
            'amount' => '10.00',
            'invoiceaction' => 'recur',
            'recur' => '1',
            'recurcycle' => 'Months',
            'recurfor' => '12',
            'duedate' => '2021-01-01',
            'responsetype' => 'json',
        )
    )
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
```

### Example Request (Local API)

```
$command = 'AddBillableItem';
$postData = array(
    'clientid' => '1',
    'description' => 'This is a billable item',
    'amount' => '10.00',
    'invoiceaction' => 'recur',
    'recur' => '1',
    'recurcycle' => 'Months',
    'recurfor' => '12',
    'duedate' => '2021-01-01',
);
$adminUsername = 'ADMIN_USERNAME'; // Optional for WHMCS 7.2 and later

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

### Example Response JSON

```
{
    "status": "success",
    "billableid": 1
}
```

### Error Responses

Possible error condition responses include:

* Client ID not Found
* You must provide a description
* Invalid Invoice Action
* Recurring must have a unit, cycle and limit
* Due date is required
* Invalid Unit, please specify either 'hours' or 'quantity'
* Invalid Date Format - Expected: 'YYYY-mm-dd'


### Version History

| Version | Changelog |
|  --- | --- |
| 1.0 | Initial Version |
| 8.2 | Renamed 'hours' parameter to `quantity`. Now Required |
| 8.2 | Added `unit` parameter. |