Donutwork Docs

Taxes

Manage regional tax profiles, automate VAT calculations, and ensure billing compliance across global markets.

Taxes API

The Taxes API provides a centralized layer for managing tax profiles and regional tax logic. By defining tax profiles (such as VAT, GST, or Sales Tax), organizations can automate tax calculation during invoicing and subscription renewals, ensuring consistent compliance with local regulations.


Tax Profiles

List Tax Profiles

Retrieve a comprehensive directory of all tax profiles configured for your organization. These profiles act as the authoritative source for tax percentage calculations and must be referenced when provisiong new customers or products.

GET
/2026-02-01/taxes.json
Required permissiontaxes:readApiAccessPermission::TAXES_READ

Query Parameters

sizeinteger
Maximum records per page (max 100).
pageinteger
Target page index for results.

Responses

Tax profile directory successfully retrieved.

{
  "entities": "Taxes",
  "count": 5,
  "per_page": 100,
  "pages": {
    "current": 1,
    "max": 1
  },
  "elements": [
    {
      "id": "66a151b7...",
      "name": "Standard EU VAT (22%)",
      "percentage": 22,
      "description": "Standard Value Added Tax for European Union member states."
    }
  ]
}

Technical Implementation

curl --location --request GET \
'https://api.hub.donutwork.com/2026-02-01/taxes.json' \
--header 'Authorization: Bearer YOUR_API_TOKEN'
try {
  const taxProfiles = await sdk.taxes.list();
  console.log(`Active Tax Profiles: ${taxProfiles.count}`);
} catch (error) {
  console.error(`Compliance Check Failed: ${error.message}`);
}

Integration Note: When orchestrating customer provisioning (via the CRM/Customer API), ensure the tax_id from these profiles is correctly mapped. This association is critical for accurate automated invoicing and financial reporting.


Tax Profile Lifecycle

Create Tax Profile

POST
/2026-02-01/taxes.json
Required permissiontaxes:writeApiAccessPermission::TAXES_WRITE

Query Parameters

No query parameters required.

Request Body

JSON
{
  "tax": {
    "name": "Standard EU VAT (22%)",
    "description": "EU default VAT profile",
    "percentage": 22,
    "default": false
  }
}
tax.namestringRequired
Unique tax profile label.
tax.percentagenumberRequired
Tax percentage value. Must be >= 0.
tax.descriptionstring
Optional internal description.
tax.defaultboolean
Marks the profile as default when true.

Responses

Tax profile created.

{
  "status": "success",
  "tax": {
    "id": "tax_001",
    "name": "Standard EU VAT (22%)",
    "percentage": 22
  }
}

Update Tax Profile

PUT
/2026-02-01/taxes/{taxId}.json
Required permissiontaxes:writeApiAccessPermission::TAXES_WRITE

Query Parameters

taxIdstringRequired
Tax profile ID.

Request Body

JSON
{
  "tax": {
    "name": "EU VAT 2026",
    "description": "Updated profile metadata",
    "percentage": 23,
    "default": true
  }
}
tax.namestring
Updated tax profile label.
tax.descriptionstring
Updated profile description.
tax.percentagenumber
Updated percentage value. Must be >= 0.
tax.defaultboolean
Update default profile flag.

Responses

Tax profile updated.

{
  "status": "success",
  "tax": {
    "id": "tax_001",
    "name": "EU VAT 2026",
    "percentage": 23
  }
}

Delete Tax Profile

DELETE
/2026-02-01/taxes/{taxId}.json
Required permissiontaxes:writeApiAccessPermission::TAXES_WRITE

Query Parameters

taxIdstringRequired
Tax profile ID.

Responses

Tax profile deleted.

{
  "status": "success",
  "tax": {
    "id": "tax_001",
    "deleted": true
  }
}

Tax profile not found.

{
  "error": "This tax profile does not exists"
}

On this page