Skip to main content

Python library for Autotask PSA REST API integration

Project description

py-autotask

A comprehensive Python SDK for the Autotask REST API providing 100% complete API coverage with 193 entity implementations.

PyPI version Python Version License: MIT Test Coverage API Coverage Entities

Features

  • 🎯 Complete Entity Coverage - Implementation of all major Autotask REST API entities
  • 🚀 Easy to Use - Intuitive API that follows Python best practices
  • 🔐 Automatic Authentication - Handles zone detection and authentication seamlessly
  • 📊 Full CRUD Operations - Create, Read, Update, Delete for all Autotask entities
  • 🔍 Flexible Filtering - Support for multiple filter formats and complex queries
  • 📄 Pagination Support - Automatic handling of paginated API responses
  • ⚡ Performance Optimized - Intelligent retry logic and connection pooling
  • 🛡️ Type Safe - Full type hints for better IDE support and code reliability
  • 🧪 Well Tested - Comprehensive test suite with live API integration tests
  • 💼 Production Ready - Robust error handling and logging

Quick Start

Installation

pip install py-autotask

Basic Usage

from py_autotask import AutotaskClient

# Create client with credentials
client = AutotaskClient.create(
    username="user@example.com",
    integration_code="YOUR_INTEGRATION_CODE", 
    secret="YOUR_SECRET"
)

# Get a ticket
ticket = client.tickets.get(12345)
print(f"Ticket: {ticket['title']}")

# Query companies
companies = client.companies.query({
    "filter": [{"op": "eq", "field": "isActive", "value": "true"}]
})

# Create a new contact
new_contact = client.contacts.create({
    "firstName": "John",
    "lastName": "Doe", 
    "emailAddress": "john.doe@example.com",
    "companyID": 12345
})

Environment Variables

You can also configure authentication using environment variables:

export AUTOTASK_USERNAME="user@example.com"
export AUTOTASK_INTEGRATION_CODE="YOUR_INTEGRATION_CODE"
export AUTOTASK_SECRET="YOUR_SECRET"
from py_autotask import AutotaskClient

# Client will automatically use environment variables
client = AutotaskClient.from_env()

Supported Entities

py-autotask supports all major Autotask entities:

  • Tickets - Service desk tickets and related operations
  • Companies - Customer and vendor company records
  • Contacts - Individual contact records
  • Projects - Project management and tracking
  • Resources - User and technician records
  • Contracts - Service contracts and agreements
  • Time Entries - Time tracking and billing
  • Expenses - Expense tracking and management
  • Products - Product catalog and inventory
  • Services - Service catalog management

Error Handling

from py_autotask.exceptions import (
    AutotaskAuthError,
    AutotaskAPIError,
    AutotaskRateLimitError
)

try:
    ticket = client.tickets.get(12345)
except AutotaskAuthError:
    print("Authentication failed - check credentials")
except AutotaskRateLimitError as e:
    print(f"Rate limit exceeded, retry after {e.retry_after} seconds")
except AutotaskAPIError as e:
    print(f"API error: {e.message}")

Batch Operations

# Bulk create
contacts_data = [
    {"firstName": "John", "lastName": "Doe", "companyID": 123},
    {"firstName": "Jane", "lastName": "Smith", "companyID": 123}
]

# Create multiple contacts
results = []
for contact_data in contacts_data:
    result = client.contacts.create(contact_data)
    results.append(result)

Configuration

Request Configuration

from py_autotask.types import RequestConfig

config = RequestConfig(
    timeout=60,          # Request timeout in seconds
    max_retries=5,       # Maximum retry attempts
    retry_delay=2.0,     # Base retry delay
    retry_backoff=2.0    # Exponential backoff multiplier
)

client = AutotaskClient(auth, config)

Logging

import logging

# Enable debug logging
logging.getLogger('py_autotask').setLevel(logging.DEBUG)

# Configure custom logging
logger = logging.getLogger('py_autotask.client')
logger.addHandler(logging.FileHandler('autotask.log'))

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/asachs01/py-autotask.git
cd py-autotask

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=py_autotask --cov-report=html

# Run specific test file
pytest tests/test_client.py

# Run integration tests (requires API credentials)
pytest tests/integration/ --integration

Code Quality

# Format code
black py_autotask tests

# Sort imports
isort py_autotask tests

# Lint code
flake8 py_autotask tests

# Type checking
mypy py_autotask

API Reference

For detailed API documentation, see the inline docstrings and type hints in the source code.

Core Classes

  • AutotaskClient - Main client class for API operations
  • AutotaskAuth - Authentication and zone detection
  • BaseEntity - Base class for all entity operations
  • EntityManager - Factory for entity handlers

Exception Classes

  • AutotaskError - Base exception class
  • AutotaskAPIError - HTTP/API related errors
  • AutotaskAuthError - Authentication failures
  • AutotaskValidationError - Data validation errors
  • AutotaskRateLimitError - Rate limiting errors

Migration Guide

From autotask-node (Node.js)

py-autotask provides similar functionality to the popular Node.js autotask library:

// Node.js (autotask-node)
const autotask = require('autotask-node');
const at = new autotask(username, integration, secret);

at.tickets.get(12345).then(ticket => {
    console.log(ticket.title);
});
# Python (py-autotask)
from py_autotask import AutotaskClient

client = AutotaskClient.create(username, integration, secret)
ticket = client.tickets.get(12345)
print(ticket['title'])

Contributing

We welcome contributions! Please see our Contributing Guide for details.

Reporting Issues

  • Use the GitHub Issues page
  • Include Python version, library version, and error details
  • Provide minimal reproduction code when possible

Feature Requests

  • Open an issue with the "enhancement" label
  • Describe the use case and expected behavior
  • Include relevant Autotask API documentation references

Changelog

See CHANGELOG.md for version history and changes.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Acknowledgments

  • Autotask API team for excellent documentation
  • Contributors to the autotask-node library for inspiration
  • Python community for amazing libraries and tools

Disclaimer: This library is not officially affiliated with Datto/Autotask. It is an independent implementation of the Autotask REST API.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_autotask-2.1.1.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_autotask-2.1.1-py3-none-any.whl (849.9 kB view details)

Uploaded Python 3

File details

Details for the file py_autotask-2.1.1.tar.gz.

File metadata

  • Download URL: py_autotask-2.1.1.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for py_autotask-2.1.1.tar.gz
Algorithm Hash digest
SHA256 9f2e7513dd0cdfadbe53e28e6c3824665947ce5c170a8ce1d97c21b4819b76c8
MD5 cf57e44dda36b11c347f9f878624fe38
BLAKE2b-256 eeb49846f5cf9b44af4dcde2667bdafafdd8667d907ae1a3f139da5b954d22a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_autotask-2.1.1.tar.gz:

Publisher: release.yml on asachs01/py-autotask

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file py_autotask-2.1.1-py3-none-any.whl.

File metadata

  • Download URL: py_autotask-2.1.1-py3-none-any.whl
  • Upload date:
  • Size: 849.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for py_autotask-2.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6e0534d00fa759b98aaefe3d00ed20696b1e0c73dc91533fd2adf1bafecf0065
MD5 9abe5f909f19b1336313742b69dd87d4
BLAKE2b-256 e5d5fe23d4c8fb61097daec8c437b5d111df8df3dd2b2b22a1088c1fffc16d68

See more details on using hashes here.

Provenance

The following attestation bundles were made for py_autotask-2.1.1-py3-none-any.whl:

Publisher: release.yml on asachs01/py-autotask

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page