persona-sdk-python
Async Python SDK for the Persona AI platform.
Installation
pip install persona-sdk-python
Or with uv:
uv add persona-sdk-python
Requirements: Python 3.10+
Quick start
import asyncio
from persona_sdk import PersonaSdk
async def main():
sdk = PersonaSdk(
base_url="https://persona.applica.guru/api",
auth="prs_your_project_api_key",
)
# List agents in your project -> Paginated[AgentConfiguration]
page = await sdk.agents.list()
for agent in page.items:
print(agent.id, agent.name, agent.model.model_name)
await sdk.close()
asyncio.run(main())
Authentication
The SDK supports two authentication methods via the auth parameter.
API key (default)
A plain string is wrapped automatically in ApiKeyAuthenticationProvider and
sent as the x-persona-apikey header. Accepts:
- Master key (full admin access)
- Project API key (
prs_...) - Agent API key (
prs_ag_...)
from persona_sdk import PersonaSdk
sdk = PersonaSdk(
base_url="https://persona.applica.guru/api",
auth="prs_your_project_api_key",
)
IAM Bearer token
For applications that authenticate users via IAM, pass a
BearerTokenAuthenticationProvider with a valid JWT:
from persona_sdk import PersonaSdk, BearerTokenAuthenticationProvider
sdk = PersonaSdk(
base_url="https://persona.applica.guru/api",
auth=BearerTokenAuthenticationProvider(iam_jwt_token),
)
The token is sent as the Authorization: Bearer <token> header. The server
validates it via the IAM service and resolves the user's project automatically.
Custom provider
Implement your own provider by subclassing AuthenticationProvider:
from persona_sdk import AuthenticationProvider
class MyProvider(AuthenticationProvider):
def headers(self) -> dict[str, str]:
return {"x-custom-header": "value"}
def credentials(self) -> str:
return "my-credentials"
Available APIs
The PersonaSdk instance exposes one client per resource:
| Attribute | Description |
|---|---|
sdk.agents |
Agent management (CRUD, voices, AI instructions, architect) |
sdk.projects |
Project management and subscriptions |
sdk.sessions |
Sessions, messages, usage |
sdk.knowledge_bases |
Knowledge bases, documents, chunk search |
sdk.workflows |
Workflows, executions, queues |
sdk.triggers |
Triggers and trigger executions |
sdk.missions |
Missions (generate, execute, stop, continue) |
sdk.features |
Feature templates and MCP tools |
sdk.credentials |
OAuth credentials and authorization |
sdk.service_prices |
Service pricing |
Each API method is fully async. Always close the SDK when done to release the underlying HTTP connection pool:
sdk = PersonaSdk(
base_url="https://persona.applica.guru/api",
auth="prs_your_api_key",
)
try:
agents = await sdk.agents.list()
finally:
await sdk.close()
CRUD example
Every API method is typed via the pydantic models re-exported from
persona-models (e.g. AgentConfiguration, Project, Mission, ...). Write
methods accept either a model instance or a plain dict; read methods always
return the parsed model (or Paginated[...] for list endpoints).
from persona_sdk import AgentConfiguration, ModelConfiguration
# Create an agent from a typed model
agent = await sdk.agents.create(
AgentConfiguration(
name="my-agent",
model=ModelConfiguration(model_name="gpt-4o"),
)
)
# Read -> AgentConfiguration
fetched = await sdk.agents.get(agent.id)
# Update (mutate the model and send it back)
fetched.name = "renamed-agent"
await sdk.agents.update(agent.id, fetched)
# Delete
await sdk.agents.delete(agent.id)
A plain dict is still accepted for backwards compatibility:
agent = await sdk.agents.create({"name": "my-agent", "model": {"modelName": "gpt-4o"}})
AI System Instructions Generation
Generate system instructions for an agent using the project's AI architect:
# Generate from a description
instructions = await sdk.agents.generate_system_instructions(
"Create a customer support agent that handles billing inquiries"
)
# Multi-turn refinement with session ID
instructions = await sdk.agents.generate_system_instructions(
"Add a rule to always ask for the order number first",
session_id="my-session-id",
)
# Get the project's architect agent configuration -> AgentConfiguration
architect = await sdk.agents.get_architect()
Pagination
List endpoints return a Paginated[<Model>] with typed .items, .total,
.page and .size:
page = await sdk.agents.list(keyword="bot", page=1, size=20)
# page.items -> list[AgentConfiguration]
# page.total -> 42
# page.page -> 1
# page.size -> 20
Workflows
If your workflows service runs on a different host, pass workflows_url:
sdk = PersonaSdk(
base_url="https://persona.applica.guru/api",
auth="prs_...",
workflows_url="https://persona.applica.guru/workflows",
)
# Execute a workflow
result = await sdk.workflows.execute(
workflow_id="wf-123",
data={"input": "value"},
)
Runners
For higher-level abstractions, the SDK provides runners:
from persona_sdk import PersonaClient
from persona_sdk.runners import AgentRunner, invoke_tool, retrieve_resource
client = PersonaClient(
base_url="https://persona.applica.guru/api",
auth="prs_...",
)
# Run an agent in an existing session
runner = AgentRunner(client=client, agent_id="agent-1", session_code="sess-1")
response = await runner.run("Hello, agent!")
# Invoke an MCP tool directly
result = await invoke_tool(
client=client,
mcp_server_name="my-mcp",
transport=...,
tool_name="search",
args={"query": "hello"},
)
Proxy support
sdk = PersonaSdk(
base_url="https://persona.applica.guru/api",
auth="prs_...",
proxy="http://proxy.local:8080",
)
License
Proprietary — © Applica Software Guru
Release files for persona-sdk-python 0.2.24
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| persona_sdk_python-0.2.24.tar.gz | 31.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| persona_sdk_python-0.2.24-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.0 kB
Release files / persona_sdk_python-0.2.24.tar.gz
| Download URL | persona_sdk_python-0.2.24.tar.gz |
|---|---|
| Size | 31.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7ef47d5782ab34d86392e9c46c37312851894dbe183d45c88c490e60faa8860e
|
|
BLAKE2b-256 checksum How to use checksums |
89952537243a372fac782bc9819242d4c755ccf29d44a9a60032acd756cf1df4
|
| 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 Sep 25, 2026.
Transparency logRelease files / persona_sdk_python-0.2.24-py3-none-any.whl
| Download URL | persona_sdk_python-0.2.24-py3-none-any.whl |
|---|---|
| Size | 23.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c0cbf3a2c55308c62f908b2d5de1814566216d387ece1b46577450b64b5c6e6
|
|
BLAKE2b-256 checksum How to use checksums |
cbec0b5085fdc3c50dff8ff93dd9ae6031328e6b9a58c3f1b24ae73c3ef4290c
|
| 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 Sep 25, 2026.
Transparency log