Skip to main content

agents24

Last Updated: 2026-08-07

Unified Python SDK for Agents24.

Runtime attachment uploads return durable metadata. Use client.agents.create_attachment_content_access(...) or client.embed.create_attachment_content_access(...) to mint an authorized short-lived inline or direct-download URL.

Interrupted runs use the strict V2 resume envelope: schema_version = "agents24.hitl.resume.v2", one exact interrupt_id, and one approve | reject | connect | skip | respond action. respond carries ordered structured answers instead of a comment. Reattach after every successful or idempotent resolution.

Endpoint methods are generated from packages/agents24-sdk-contract/agents24.sdk.json. Do not edit files under agents24/generated/ directly. For SDK maintenance, see docs/references/agents24_sdk_development_guide.md.

from agents24 import Agents24

client = Agents24(
    base_url="http://localhost:8000",
    api_key="tpk_...",
)

agent = client.agent({
    "name": "Support Agent",
    "instructions": "Answer briefly.",
}).create()

client.agents.publish(agent["id"])

Client Runtime Administration

Use organization credentials only in trusted server code to manage deployment clients and mint scoped end-user sessions:

deployment = client.client_deployments.create({
    "agent_id": "agent-id",
    "resource_policy_set_id": "policy-set-id",
    "version_policy": {"mode": "latest_published"},
    "name": "Customer chat",
    "auth_modes": ["backend_exchange"],
    "allowed_origins": ["https://customer.example"],
})

session = client.client_sessions.create_backend_session(
    deployment["id"],
    {
        "subject": "customer-user-42",
        "browser_origin": "https://customer.example",
        "requested_capabilities": ["chat.stream", "threads.read"],
    },
)

Return only the deployment-session credentials required by the end-user client. Never expose the organization API key. Use {"mode": "pinned", "version_id": "..."} when a deployment must remain on one immutable Agent version. Use client.client_deployments.update(id, {"lifecycle_status": "inactive"}) for a reversible stop and client.client_deployments.delete(id) for irreversible deletion. Active deployments require a Resource Policy; removing the assignment makes them inactive. There is no revoke() method.

Published-Agent Runtime

Use client.embed from server code to call a published agent through the public embed runtime:

def on_event(event):
    print(event["event"])

result = client.embed.stream_agent(
    "published-agent-id",
    {
        "input": "Help me with my account.",
        "external_user_id": "customer-user-123",
    },
    on_event=on_event,
)

Omitting agent_version_id resolves the Agent's latest published version. Pass an exact agent_version_id in the request only for a version-pinned server run.

The namespace also includes thread detail/delete, run-context, cancel, and attachment-upload methods.

Thread history can be listed for one agent or across several agents:

threads = client.embed.list_agent_threads(
    "published-agent-id",
    external_user_id="customer-user-123",
)

sidebar_threads = client.embed.list_agent_threads_multi({
    "agent_ids": ["agent-a", "agent-b"],
    "external_user_id": "customer-user-123",
})

Async backends can use AsyncAgents24.embed.list_agent_threads_multi(agent_ids, external_user_id=...).

FastAPI BFF

Install agents24[fastapi] when a browser application should reach one published Agent through a customer-owned, same-origin FastAPI backend:

from agents24 import AsyncAgents24
from agents24.bff.fastapi import (
    AgentBffPrincipal,
    AgentBffPrincipalResolution,
    create_agents24_bff_router,
)

client = AsyncAgents24(
    base_url="https://api.agents24.dev",
    api_key="tpk_...",
)

async def resolve_principal(request):
    user = await authenticate_application_request(request)
    return AgentBffPrincipal(issuer="https://app.example", subject=str(user.id))

app.include_router(create_agents24_bff_router(
    client=client,
    agent_id="published-agent-id",
    deployment_id="client-deployment-id",
    agent_version_id=None,
    resolve_principal=resolve_principal,
))

The default prefix is /api/agents24. The adapter derives identity on the server, fixes Agent/version scope at construction, rejects cross-origin browser requests, forwards idempotency and attach cursors, distinguishes stream detach from explicit run cancellation, advertises feedback.write, forwards durable response feedback through PUT /runs/{run_id}/feedback, and projects failures as sanitized agents24.failure.v1 values. Close the shared AsyncAgents24 client during the FastAPI application shutdown lifecycle. A resolver may return AgentBffPrincipalResolution when it must add response headers. Pass revoke_principal= when /session/revoke must also invalidate the host application session.

Customer Resource Policies

Sync and async clients expose resource_policies methods for list, customer assignment set/get/clear, effective projection, quota-schedule update, and explicit reset. Customer { issuer, subject } identity stays in JSON request bodies. Mutation RequestOptions must supply an idempotency key; organization keys require resource_policies.read and explicit resource_policies.write for mutations.

Artifact Authoring

Artifact code imports lightweight helpers from agents24.artifacts:

from pydantic import BaseModel, Field

from agents24.artifacts import tool


class EchoInput(BaseModel):
    text: str = Field(description="Text to echo.")


class EchoOutput(BaseModel):
    text: str


@tool(
    name="echo",
    input_schema=EchoInput,
    output_schema=EchoOutput,
)
async def echo(input, config, context):
    return {"text": input["text"]}

The agents24.artifacts module is transport-free and safe for artifact runtime code. If artifact code imports Pydantic, declare pydantic as an artifact dependency.

Self-hosted Python services can expose decorated tools through the framework-neutral server helper:

from agents24.server import create_artifact_server

server = create_artifact_server(
    exports=[echo],
    signing_secret="shared-environment-secret",
)

manifest = server.manifest()
health = server.health()
response = await server.invoke(body=request_body, headers=request_headers)

Signed HMAC invocation is the default. For an intentionally public endpoint, set auth_mode="none" and omit signing_secret; the manifest advertises that mode so Agents24 can reject mismatched connection configuration.

Every server and framework adapter also exposes POST /.well-known/agents24/artifact/verify. During registration Agents24 sends a random challenge, signed only in signed mode. Signed servers return a domain-separated HMAC proof so the platform can verify the exact shared secret without transmitting or returning it. Unsigned servers return the matching challenge without a proof.

Use a built-in adapter when the SDK should create the application and mount the protocol routes:

from agents24.server_adapters import create_artifact_fastapi_app

app = create_artifact_fastapi_app(
    exports=[echo],
    signing_secret="shared-environment-secret",
)

Adapters are available for FastAPI, Starlette, Flask, Django urlpatterns, and aiohttp. Application adapters create a new app by default or mount into an existing app passed as app=. Install only the selected extra, for example agents24[fastapi]; agents24[server] installs every supported framework adapter.

For custom providers, keep using ArtifactServer directly or wrap create_artifact_asgi_app() / create_artifact_wsgi_app(). server.routes() exposes the canonical method/path list and await server.dispatch(...) provides framework-independent routing and normalized JSON responses.

Development

pnpm run generate:sdk
pnpm run check:sdk-contract
pnpm run test:agents24-python

Generated endpoint methods stay in parity with the canonical TypeScript @agents24/node package.

Release files for agents24 0.4.1

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

Source distribution (sdist)

Source distribution for agents24 0.4.1
File Size Uploaded
agents24-0.4.1.tar.gz 61.7 kB Details

Built distribution (wheel)

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

Total release size: 109.1 kB

Release files / agents24-0.4.1.tar.gz

Download URL agents24-0.4.1.tar.gz
Size 61.7 kB
Tags Source
SHA-256 checksum
How to use checksums
bb8fe562a5f14bad23e15b500bc74a3083ced7c80853226db1da36d8e1400599
BLAKE2b-256 checksum
How to use checksums
5bd8999a7719e949d7e1f72879730641c3d295d63e20804fddfa4f2fb2ab4563
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 Aug 8, 2026.

Transparency log

Release files / agents24-0.4.1-py3-none-any.whl

Download URL agents24-0.4.1-py3-none-any.whl
Size 47.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8c43e99bfc57f205cf3e2c942d17e39a0a67681ac0c537e7025655537c64df90
BLAKE2b-256 checksum
How to use checksums
63ab734ba1d22bcb715286c173a9148eadda528a5d56108ce130722b877bf957
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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 Aug 8, 2026.

Transparency log

Release history Release notifications | RSS feed

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

This release

0.4.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

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