Skip to main content

Aqtos

aqtos-sdk

Python SDK for the Aqtos project management API.

Installation

pip install aqtos-sdk

Quick start

from aqtos import AqtosClient

with AqtosClient(domain="mycompany", api_key="ak_live_xxx") as client:
    task_id = client.tasks.create(
        project_id="proj-123",
        title="Deploy v2.0",
    )

domain is your Aqtos subdomain — e.g. "mycompany" for mycompany.aqtos.io.
Your API key is sent automatically as the X-API-KEY header on every request.

Tasks

Create

from aqtos import AqtosClient, Priority
from datetime import datetime

with AqtosClient(domain="mycompany", api_key="ak_live_xxx") as client:
    task_id = client.tasks.create(
        project_id="proj-123",
        title="Set up CI pipeline",
        # all keyword arguments below are optional
        description="Configure GitHub Actions for automated deploys.",
        priority=Priority.HIGH,
        status_id="status-todo",
        category_id="cat-engineering",
        assignees=["person-456", "person-789"],
        due_date=datetime(2026, 5, 1),
        start_date=datetime(2026, 4, 15),
        tags=["devops", "automation"],
        milestone_id="milestone-q2",
        estimated_duration_days=5,
        budget_type="HOURS",
        estimated_value=40,
    )

Returns the new task ID as a string.

Retrieve

task = client.tasks.get("task-uuid-001")

task.id          
task.title        
task.priority     
task.done         
task.tags         
task.assignee_ids 
task.raw          

List

tasks = client.tasks.list()

# with filters
tasks = client.tasks.list(projectId="proj-123", page=0, size=20)

Update status

client.tasks.update_status("task-uuid-001", status_id="status-in-review")


client.tasks.update_status("task-uuid-001", status_id="status-done", update_dependencies=True)

Update description

client.tasks.update_description(
    task_id="task-uuid-001",
    project_id="proj-123",
    description="Updated scope: include staging and production.",
)

Bulk update

Only fields you explicitly pass are updated — the SDK sets the underlying CQRS update flags automatically.

client.tasks.update(
    task_ids=["task-uuid-001", "task-uuid-002"],
    priority=Priority.CRITICAL,
    due_date=datetime(2026, 4, 30),
    status_id="status-in-progress",
    category_id="cat-backend",
)

Assign

client.tasks.assign("task-uuid-001", person_id="person-456")

Mark done / cancel

client.tasks.mark_done("task-uuid-001")

client.tasks.cancel("task-uuid-001")
client.tasks.cancel("task-uuid-001", update_dependencies=True)

Checklist items

# add
client.tasks.add_item("task-uuid-001", title="Write unit tests", assignees=["person-456"])

# edit
client.tasks.edit_item(
    "task-uuid-001",
    item_id="item-uuid-001",
    title="Write unit + integration tests",
    assignees=["person-789"],
)

Async client

Every method has an async counterpart via AsyncAqtosClient:

import asyncio
from aqtos import AsyncAqtosClient, Priority

async def main():
    async with AsyncAqtosClient(domain="mycompany", api_key="ak_live_xxx") as client:
        task_id = await client.tasks.create(
            project_id="proj-123",
            title="Async task",
            priority=Priority.MEDIUM,
        )
        await client.tasks.mark_done(task_id)

asyncio.run(main())

Error handling

from aqtos import (
    AqtosAuthError,
    AqtosNotFoundError,
    AqtosValidationError,
    AqtosServerError,
    AqtosAPIError,
)

try:
    task = client.tasks.get("nonexistent-id")
except AqtosAuthError:
    # 401 / 403 — invalid or missing API key
    ...
except AqtosNotFoundError:
    # 404 — resource does not exist
    ...
except AqtosValidationError as e:
    # 400 / 422 — bad request payload
    print(e.response_body)
except AqtosServerError as e:
    # 5xx — upstream server error
    print(e.status_code)
except AqtosAPIError as e:
    # catch-all for any other HTTP error
    print(e.status_code, e.response_body)

All exceptions expose status_code (int) and response_body (parsed JSON or raw text).

Reference

AqtosClient(domain, api_key, *, timeout=30, http_client=None)

Parameter Type Description
domain str Aqtos subdomain (e.g. "mycompany")
api_key str API key sent as X-API-KEY
timeout float Request timeout in seconds
http_client httpx.Client Optional pre-configured client

AsyncAqtosClient accepts the same parameters with an optional httpx.AsyncClient.

Priority

LOW · MEDIUM · HIGH · CRITICAL

BudgetType

MONEY · HOURS · DAYS

Metadata

Release files for aqtos 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aqtos 0.1.3
File Size Uploaded
aqtos-0.1.3.tar.gz 12.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aqtos 0.1.3
File Interpreter ABI Platform
aqtos-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 26.4 kB

Release files / aqtos-0.1.3.tar.gz

Download URL aqtos-0.1.3.tar.gz
Size 12.7 kB
Tags Source
SHA-256 checksum
How to use checksums
bf7eed5667863bd42f0b70a500e3e2cf36fa08c09e5ded35c4cc8724c740c927
BLAKE2b-256 checksum
How to use checksums
30f228913a6bc6980240b970c69529bb00b2d00a89a3d551fbe190428cd4dc90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 15, 2026.

Transparency log

Release files / aqtos-0.1.3-py3-none-any.whl

Download URL aqtos-0.1.3-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d52afdac7690ed842a71da8272cea38030fe0b6c916af84696d46a1ac470752e
BLAKE2b-256 checksum
How to use checksums
4e9433a72fcc53202a3826aff721bd86d86f0ef89386f42fd0b847d7352ea9d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page