{"id":34072835,"url":"https://github.com/asachs01/py-autotask","last_synced_at":"2026-04-04T16:18:31.699Z","repository":{"id":332408612,"uuid":"1007376593","full_name":"asachs01/py-autotask","owner":"asachs01","description":"A comprehensive community-supported Python client library for the Autotask REST API.","archived":false,"fork":false,"pushed_at":"2026-02-05T16:58:49.000Z","size":2574,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-06T01:17:52.797Z","etag":null,"topics":["autotask","kaseya","msp"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/py-autotask/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/asachs01.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-23T22:43:45.000Z","updated_at":"2026-02-05T17:04:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/asachs01/py-autotask","commit_stats":null,"previous_names":["asachs01/py-autotask"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/asachs01/py-autotask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fpy-autotask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fpy-autotask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fpy-autotask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fpy-autotask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asachs01","download_url":"https://codeload.github.com/asachs01/py-autotask/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asachs01%2Fpy-autotask/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31405700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autotask","kaseya","msp"],"created_at":"2025-12-14T08:25:24.707Z","updated_at":"2026-04-04T16:18:31.680Z","avatar_url":"https://github.com/asachs01.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# py-autotask\n\nA comprehensive Python SDK for the Autotask REST API providing **100% complete API coverage** with 193 entity implementations.\n\n[![PyPI version](https://badge.fury.io/py/py-autotask.svg)](https://badge.fury.io/py/py-autotask)\n[![Python Version](https://img.shields.io/pypi/pyversions/py-autotask.svg)](https://pypi.org/project/py-autotask/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Test Coverage](https://codecov.io/gh/asachs01/py-autotask/branch/main/graph/badge.svg)](https://codecov.io/gh/asachs01/py-autotask)\n[![API Coverage](https://img.shields.io/badge/API%20Coverage-100%25-brightgreen)](docs/API_COVERAGE.md)\n[![Entities](https://img.shields.io/badge/Entities-193-blue)](docs/API_COVERAGE.md)\n\n## Features\n\n- **🎯 Complete Entity Coverage** - Implementation of all major Autotask REST API entities\n- **🚀 Easy to Use** - Intuitive API that follows Python best practices\n- **🔐 Automatic Authentication** - Handles zone detection and authentication seamlessly  \n- **📊 Full CRUD Operations** - Create, Read, Update, Delete for all Autotask entities\n- **🔍 Flexible Filtering** - Support for multiple filter formats and complex queries\n- **📄 Pagination Support** - Automatic handling of paginated API responses\n- **⚡ Performance Optimized** - Intelligent retry logic and connection pooling\n- **🛡️ Type Safe** - Full type hints for better IDE support and code reliability\n- **🧪 Well Tested** - Comprehensive test suite with live API integration tests\n- **💼 Production Ready** - Robust error handling and logging\n\n## Quick Start\n\n### Installation\n\n```bash\npip install py-autotask\n```\n\n### Basic Usage\n\n```python\nfrom py_autotask import AutotaskClient\n\n# Create client with credentials\nclient = AutotaskClient.create(\n    username=\"user@example.com\",\n    integration_code=\"YOUR_INTEGRATION_CODE\", \n    secret=\"YOUR_SECRET\"\n)\n\n# Get a ticket\nticket = client.tickets.get(12345)\nprint(f\"Ticket: {ticket['title']}\")\n\n# Query companies\ncompanies = client.companies.query({\n    \"filter\": [{\"op\": \"eq\", \"field\": \"isActive\", \"value\": \"true\"}]\n})\n\n# Create a new contact\nnew_contact = client.contacts.create({\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\", \n    \"emailAddress\": \"john.doe@example.com\",\n    \"companyID\": 12345\n})\n```\n\n### Environment Variables\n\nYou can also configure authentication using environment variables:\n\n```bash\nexport AUTOTASK_USERNAME=\"user@example.com\"\nexport AUTOTASK_INTEGRATION_CODE=\"YOUR_INTEGRATION_CODE\"\nexport AUTOTASK_SECRET=\"YOUR_SECRET\"\n```\n\n```python\nfrom py_autotask import AutotaskClient\n\n# Client will automatically use environment variables\nclient = AutotaskClient.from_env()\n```\n\n\n## Supported Entities\n\npy-autotask supports all major Autotask entities:\n\n- **Tickets** - Service desk tickets and related operations\n- **Companies** - Customer and vendor company records  \n- **Contacts** - Individual contact records\n- **Projects** - Project management and tracking\n- **Resources** - User and technician records\n- **Contracts** - Service contracts and agreements\n- **Time Entries** - Time tracking and billing\n- **Expenses** - Expense tracking and management\n- **Products** - Product catalog and inventory\n- **Services** - Service catalog management\n\n\n### Error Handling\n\n```python\nfrom py_autotask.exceptions import (\n    AutotaskAuthError,\n    AutotaskAPIError,\n    AutotaskRateLimitError\n)\n\ntry:\n    ticket = client.tickets.get(12345)\nexcept AutotaskAuthError:\n    print(\"Authentication failed - check credentials\")\nexcept AutotaskRateLimitError as e:\n    print(f\"Rate limit exceeded, retry after {e.retry_after} seconds\")\nexcept AutotaskAPIError as e:\n    print(f\"API error: {e.message}\")\n```\n\n### Batch Operations\n\n```python\n# Bulk create\ncontacts_data = [\n    {\"firstName\": \"John\", \"lastName\": \"Doe\", \"companyID\": 123},\n    {\"firstName\": \"Jane\", \"lastName\": \"Smith\", \"companyID\": 123}\n]\n\n# Create multiple contacts\nresults = []\nfor contact_data in contacts_data:\n    result = client.contacts.create(contact_data)\n    results.append(result)\n```\n\n## Configuration\n\n### Request Configuration\n\n```python\nfrom py_autotask.types import RequestConfig\n\nconfig = RequestConfig(\n    timeout=60,          # Request timeout in seconds\n    max_retries=5,       # Maximum retry attempts\n    retry_delay=2.0,     # Base retry delay\n    retry_backoff=2.0    # Exponential backoff multiplier\n)\n\nclient = AutotaskClient(auth, config)\n```\n\n### Logging\n\n```python\nimport logging\n\n# Enable debug logging\nlogging.getLogger('py_autotask').setLevel(logging.DEBUG)\n\n# Configure custom logging\nlogger = logging.getLogger('py_autotask.client')\nlogger.addHandler(logging.FileHandler('autotask.log'))\n```\n\n## Development\n\n### Setup Development Environment\n\n```bash\n# Clone the repository\ngit clone https://github.com/asachs01/py-autotask.git\ncd py-autotask\n\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate  # On Windows: venv\\Scripts\\activate\n\n# Install development dependencies\npip install -e \".[dev]\"\n\n# Install pre-commit hooks\npre-commit install\n```\n\n### Running Tests\n\n```bash\n# Run all tests\npytest\n\n# Run with coverage\npytest --cov=py_autotask --cov-report=html\n\n# Run specific test file\npytest tests/test_client.py\n\n# Run integration tests (requires API credentials)\npytest tests/integration/ --integration\n```\n\n### Code Quality\n\n```bash\n# Format code\nblack py_autotask tests\n\n# Sort imports\nisort py_autotask tests\n\n# Lint code\nflake8 py_autotask tests\n\n# Type checking\nmypy py_autotask\n```\n\n## API Reference\n\nFor detailed API documentation, see the inline docstrings and type hints in the source code.\n\n### Core Classes\n\n- **AutotaskClient** - Main client class for API operations\n- **AutotaskAuth** - Authentication and zone detection\n- **BaseEntity** - Base class for all entity operations\n- **EntityManager** - Factory for entity handlers\n\n### Exception Classes\n\n- **AutotaskError** - Base exception class\n- **AutotaskAPIError** - HTTP/API related errors\n- **AutotaskAuthError** - Authentication failures\n- **AutotaskValidationError** - Data validation errors\n- **AutotaskRateLimitError** - Rate limiting errors\n\n## Migration Guide\n\n### From autotask-node (Node.js)\n\npy-autotask provides similar functionality to the popular Node.js autotask library:\n\n```javascript\n// Node.js (autotask-node)\nconst autotask = require('autotask-node');\nconst at = new autotask(username, integration, secret);\n\nat.tickets.get(12345).then(ticket =\u003e {\n    console.log(ticket.title);\n});\n```\n\n```python\n# Python (py-autotask)\nfrom py_autotask import AutotaskClient\n\nclient = AutotaskClient.create(username, integration, secret)\nticket = client.tickets.get(12345)\nprint(ticket['title'])\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Reporting Issues\n\n- Use the [GitHub Issues](https://github.com/asachs01/py-autotask/issues) page\n- Include Python version, library version, and error details\n- Provide minimal reproduction code when possible\n\n### Feature Requests\n\n- Open an issue with the \"enhancement\" label\n- Describe the use case and expected behavior\n- Include relevant Autotask API documentation references\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for version history and changes.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Support\n\n- 💬 [GitHub Discussions](https://github.com/asachs01/py-autotask/discussions)\n- 🐛 [Issue Tracker](https://github.com/asachs01/py-autotask/issues)\n\n## Acknowledgments\n\n- Autotask API team for excellent documentation\n- Contributors to the autotask-node library for inspiration\n- Python community for amazing libraries and tools\n\n---\n\n**Disclaimer**: This library is not officially affiliated with Datto/Autotask. It is an independent implementation of the Autotask REST API. # CI Trigger\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasachs01%2Fpy-autotask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasachs01%2Fpy-autotask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasachs01%2Fpy-autotask/lists"}