Python SDK for the Aqtos project management API
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aqtos-0.1.1.tar.gz.
File metadata
- Download URL: aqtos-0.1.1.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7177597680caee450abec47775c27bafad1920d5ce7780a90dec92fecfecd673
|
|
| MD5 |
1af1137263e89ba4ca1a7f274b2c8e9c
|
|
| BLAKE2b-256 |
724c9cde6323fb9b915fd90ffb32aa1d52f7c903334437142d54e03f0d4797c6
|
Provenance
The following attestation bundles were made for aqtos-0.1.1.tar.gz:
Publisher:
release.yml on Aqtos/aqtos-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aqtos-0.1.1.tar.gz -
Subject digest:
7177597680caee450abec47775c27bafad1920d5ce7780a90dec92fecfecd673 - Sigstore transparency entry: 1206028042
- Sigstore integration time:
-
Permalink:
Aqtos/aqtos-sdk@7e03c9f74336ca5d304c9ba55e943e6daafe55de -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Aqtos
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7e03c9f74336ca5d304c9ba55e943e6daafe55de -
Trigger Event:
release
-
Statement type:
File details
Details for the file aqtos-0.1.1-py3-none-any.whl.
File metadata
- Download URL: aqtos-0.1.1-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce657c6d7b24c8ce2134a5dc4fd2d49c5f578f852edb081d56fbab73523027e0
|
|
| MD5 |
5d83e57a8ee9f8c7e589edacc4a16e2e
|
|
| BLAKE2b-256 |
1c8b7baf7eeaa9ba9030275a491b7a4847f425af03c3f1443ae52fad0490fe78
|
Provenance
The following attestation bundles were made for aqtos-0.1.1-py3-none-any.whl:
Publisher:
release.yml on Aqtos/aqtos-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aqtos-0.1.1-py3-none-any.whl -
Subject digest:
ce657c6d7b24c8ce2134a5dc4fd2d49c5f578f852edb081d56fbab73523027e0 - Sigstore transparency entry: 1206028070
- Sigstore integration time:
-
Permalink:
Aqtos/aqtos-sdk@7e03c9f74336ca5d304c9ba55e943e6daafe55de -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Aqtos
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@7e03c9f74336ca5d304c9ba55e943e6daafe55de -
Trigger Event:
release
-
Statement type: