pynteracta
pynteracta is an unofficial third-party Python client for the Interacta™ platform by Dinova S.r.l. / Maggioli S.p.A. It is neither sponsored nor endorsed by the vendor.
An unofficial Python 3.12+ library and CLI client for the Interacta™ REST API (external_v2).
Synchronous and typed: service-account and Google OAuth2 authentication, ten read resources, a
write surface that grows one resource group at a time (tasks, posts, attachment upload and the
admin area so far), a Typer CLI with table/JSON/YAML output and file export. Current version and contents: see
CHANGELOG.md.
Installation
uv pip install pynteracta
# with YAML output support:
uv pip install "pynteracta[yaml]"
# with Parquet export support:
uv pip install "pynteracta[parquet]"
# with all export formats (yaml + parquet):
uv pip install "pynteracta[export]"
Upgrading from 0.4.x? The API changed completely — see the compatibility note at the end of this page.
Each release is also attached as a wheel and sdist to its GitHub release. To pin an exact tag from the repository instead, pick one from the releases page:
uv pip install "pynteracta @ git+https://github.com/simodalla/pynteracta@vX.Y.Z"
Quickstart — library
from pathlib import Path
from pynteracta.auth import load_service_account_key
from pynteracta.client import InteractaClient
key = load_service_account_key(Path("sa.json"))
with InteractaClient(
base_url="https://interacta.example.it",
credentials=key,
) as client:
# Who am I?
me = client.users.me()
ud = me.user_data_typed
if ud is not None:
print(ud.firstName, ud.lastName)
# Lazy pagination over every user
for user in client.users.iterate(page_size=100):
print(user.id, user.firstName, user.lastName, user.contactEmail)
# Filtered, sorted posts of a community
page = client.posts.list_in_community(
79, order_by="postCreationTimestamp", order_desc=True, post_types=[1], page_size=50
)
for post in page.items_typed:
print(post.id, post.title, client.web_urls.post(post.id))
Quickstart — CLI
# Authenticate with a service-account key (global options go BEFORE the command)
pynteracta --base-url https://interacta.example.it auth login --service-account-key sa.json
# Who am I?
pynteracta auth whoami
# List users (table output by default); count matching users only
pynteracta users list --all
pynteracta users list --status 1 --count
# Fetch a post as JSON; list a community's posts with filters and validation
pynteracta posts get 21269 --output json
pynteracta posts list --community 79 --mentioned --field-filter 1411:4:226 --validate --web-url
# Export to file (csv / json / yaml / parquet inferred from the extension)
pynteracta posts list --community 79 --all --export posts.parquet
pynteracta --version
Features
- Authentication — service-account RS512 JWT assertion with token lifecycle and file/memory
cache (POSIX
0o600/0o700enforcement), or Google OAuth2 access-token exchange. - Read resources —
auth,users,posts,communities,catalogs,attachments,tasks,groups,hashtags,admin_manage(manage/edit forms). One facade per response with a.rawescape hatch to the generated DTO. - Write operations —
taskscreate/edit/delete, customposts(create, edit, copy, custom data, watchers, attachments, delete, mark-as-erasable, comments, workflow), event posts (create, edit, copy, answer to the invitation), adminusers(create, edit, delete, credentials), admingroups(create, edit, delete, members), admincatalogsand catalog entries (create, edit, logical delete, restore) and the admin workspace edit (name, description, members, roles, cover and logo), with explicit kwargs and*_rawvariants in the library andtasks …/posts …/users …/groups …/catalogs …/admin-manage edit-workspacewrite commands in the CLI (confirmation on destructive commands, exit code9onoccTokenconflicts, no automatic retry of uncertain writes). - Attachment upload —
client.attachments.upload()and--attach/attachments upload/posts edit-attachmentsin the CLI; the uploaded file is attached to posts, comments and tasks, with no Interacta token sent to the storage and signed links redacted from logs. - Filtering & sorting — curated kwargs/flags for posts and users, custom-field and workflow
screen-field filters with opt-in validation against the community post-definition, generic
--filter KEY=VALUEpassthrough. - Pagination — lazy
iterate*()helpers in Python;--all,--page-token,--countin the CLI. - CLI output —
table/json/yaml,--fulland--fieldsfield selection,--web-urldeep links,--exportto csv/json/yaml/parquet. - Configuration — 4-level precedence: built-in defaults →
config.tomlprofiles →PYNTERACTA_*env vars → CLI flags;configsub-commands edit the file without losing comments. - Logging — structured logging with token redaction; optional API call audit log to console and rotating JSON-lines file.
Configuration
Config file: ~/.config/pynteracta/config.toml (Linux/macOS, XDG; %LOCALAPPDATA%\pynteracta\
on Windows).
current_profile = "default"
[profiles.default]
base_url = "https://interacta.example.it"
service_account_key = "~/.config/pynteracta/sa.json"
Environment variables: PYNTERACTA_BASE_URL, PYNTERACTA_SERVICE_ACCOUNT_KEY,
PYNTERACTA_LOG_LEVEL, etc. See docs/configuration.md for the full
reference.
Documentation
Full documentation: https://simodalla.github.io/pynteracta/
- CLI reference — every command, flag and exit code.
- Guides: filtering and sorting posts, filtering and sorting users.
- Authentication, configuration, audit logging, testing.
- Planning:
ROADMAP.md(what ships when),specs/(one spec per version),WORKFLOW.md(how we work),CHANGELOG.md.
To preview the site locally: uv run mkdocs serve.
License
Apache-2.0 — see LICENSE.
Note for users of pynteracta 0.4.x and earlier
Version 0.9.4 and every later version are a complete rewrite of this project. The package name
on PyPI is the same, but the code is not: the library was rebuilt from scratch, and its public API
is not compatible with the 0.4.x line. (PyPI jumps straight from 0.4.30 to 0.9.4: the
rewrite's earlier versions were released on GitHub only.) Upgrading from 0.4.x will break your code, and there
is no migration path — the two versions share no common API surface.
What changed:
0.4.30 and earlier |
0.9.4 and later |
|
|---|---|---|
| Library API | pynteracta.api / pynteracta.core / pynteracta.schemas |
InteractaClient + pynteracta.api.* resource clients |
| CLI command | pynta |
pynteracta |
| HTTP backend | requests |
httpx |
| License | BSD-3-Clause | Apache-2.0 |
| Scope | read + write | read surface complete; writes reopened one group at a time (tasks first) |
If you depend on the old line, it is still published and installable — nothing has been removed or yanked. Pin it explicitly:
uv pip install "pynteracta==0.4.30"
The 0.4.x releases receive no further updates. New work happens on the rewrite.
Metadata
Release files for pynteracta 0.14.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pynteracta-0.14.0.tar.gz | 875.3 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pynteracta-0.14.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / pynteracta-0.14.0.tar.gz
| Download URL | pynteracta-0.14.0.tar.gz |
|---|---|
| Size | 875.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b4d20fa6e7c24fbaa9d38d465fe626d6503a207ed0cea9d38a34b783c96fb727
|
|
BLAKE2b-256 checksum How to use checksums |
fa1615ff42b080f95330bec78b6129f970d7c5d9ae1efc1be0c0d277e19fc624
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 13, 2026.
Transparency logRelease files / pynteracta-0.14.0-py3-none-any.whl
| Download URL | pynteracta-0.14.0-py3-none-any.whl |
|---|---|
| Size | 207.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1a08a87dcffee06b5e452d9114fac26b09ab964ec2e1ca57c8b14c9383ac9f2
|
|
BLAKE2b-256 checksum How to use checksums |
7e3ccc9a53c061740348f32df8deb6e2eb4a73974681f5582e48d5c0efd2bfa7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 13, 2026.
Transparency logSecurity for pynteracta 0.14.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pynteracta-0.14.0.tar.gz
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 Oct 13, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.