-
-
Notifications
You must be signed in to change notification settings - Fork 0
Tax Rates
Read tax rate definitions in Teamleader Focus.
Tax rates define the VAT or sales tax percentages applied to invoice line items. They are department-scoped β different departments may have different available rates.
Access via Teamleader::taxRates().
taxRates
| Capability | Supported |
|---|---|
| Pagination | β Supported |
| Filtering | β
Supported (department_id) |
| Sorting | β
Supported (department_id, rate, description) |
| Sideloading | β Not supported |
| Creation | β Not supported |
| Update | β Not supported |
| Deletion | β Not supported |
use McoreServices\TeamleaderSDK\Facades\Teamleader;
$rates = Teamleader::taxRates()->list();
$rates = Teamleader::taxRates()->list(
['department_id' => 'dept-uuid'],
['sort' => [['field' => 'rate', 'order' => 'asc']], 'page_size' => 50]
);Sort fields are validated β InvalidArgumentException for any field outside department_id, rate, description.
$rate = Teamleader::taxRates()->info('tax-rate-uuid');$rates = Teamleader::taxRates()->forDepartment('dept-uuid');Client-side via all(). Float comparison uses a tolerance of 0.0001.
$rate21 = Teamleader::taxRates()->findByRate(0.21); // 21%
$rate21 = Teamleader::taxRates()->findByRate(0.21, 'dept-uuid'); // scoped to departmentClient-side via list(). Default is exact match (case-insensitive).
$rate = Teamleader::taxRates()->findByDescription('21%');
$rate = Teamleader::taxRates()->findByDescription('vat', null, false); // partial matchPaginates up to 10 pages (100 per page). Not guaranteed exhaustive for very large sets.
$all = Teamleader::taxRates()->all();
$all = Teamleader::taxRates()->all(['department_id' => 'dept-uuid']);Returns flat [id => description] map. Calls all() internally.
$options = Teamleader::taxRates()->asOptions();
// ['uuid-1' => '21%', 'uuid-2' => '6%', 'uuid-3' => '0%']
$options = Teamleader::taxRates()->asOptions('dept-uuid');Convenience sort wrappers.
$rates = Teamleader::taxRates()->sortedByRate();
$rates = Teamleader::taxRates()->sortedByDescription(['department_id' => 'dept-uuid'], 'desc');Returns [departmentId => ['department' => ..., 'tax_rates' => [...]]].
$grouped = Teamleader::taxRates()->groupedByDepartment();$exists = Teamleader::taxRates()->exists('tax-rate-uuid');| Filter | Type | Description |
|---|---|---|
department_id |
string | Filter by department UUID |
| Field | Description |
|---|---|
department_id |
Department UUID |
rate |
Tax rate value |
description |
Rate description |
[
'data' => [
['id' => 'uuid', 'description' => '21%', 'rate' => 0.21, 'department' => ['type' => 'department', 'id' => 'dept-uuid']],
['id' => 'uuid', 'description' => '6%', 'rate' => 0.06, 'department' => ['type' => 'department', 'id' => 'dept-uuid']],
['id' => 'uuid', 'description' => '0%', 'rate' => 0.0, 'department' => ['type' => 'department', 'id' => 'dept-uuid']],
],
'meta' => ['page' => ['size' => 20, 'number' => 1], 'matches' => 3],
]// Find the 21% rate for a department
$rate = Teamleader::taxRates()->findByRate(0.21, 'dept-uuid');
// Use on invoice line item
Teamleader::invoices()->create([..., 'grouped_lines' => [[
'line_items' => [[..., 'tax_rate_id' => $rate['id']]],
]]]);
// Cache per department
$rates = Cache::remember("tl_tax_rates_{$deptId}", 3600, fn() =>
Teamleader::taxRates()->asOptions($deptId)
);-
Invoices β
tax_rate_idused on line items -
Subscriptions β
tax_rate_idused on line items - Withholding Tax Rates β Separate tax withheld at source
- Commercial Discounts β Department-scoped discounts
Last Updated: August 2026 β’ SDK Version: 2.2.2 β’ Made with β€οΈ by MCore Services
- Departments
- Users
- Teams
- Custom Fields
- Work Types
- Document Templates
- Currencies
- Notes
- Email Tracking
- Closing Days
- Day Off Types
- Days Off
- User Schedules
- Invoices
- Credit Notes
- Subscriptions
- Payment Methods
- Payment Terms
- Tax Rates
- Withholding Tax Rates
- Commercial Discounts
Next Gen Projects
Legacy Projects