Skip to main content

The official Python SDK for the Confident AI platform management API.

Project description

confidentai (Python)

The official Python SDK for the Confident AI platform management API — manage organizations, projects, API keys, members, invitations, roles, and policies.

Looking to run evaluations, upload traces, or pull datasets? Use deepeval. This SDK focuses on platform/administration APIs.

Documentation: Admin SDK docs

Installation

pip install confidentai

Quickstart

from confidentai import ConfidentAI

client = ConfidentAI(api_key="confident_org_...")

# The organization the API key is scoped to
organization = client.organization().get()

# All projects in the organization
projects = client.projects.list()

# A scoped project client
project = client.project("project_id")
members = project.members.list()

Authentication

These endpoints require an organization API key. Provide it explicitly or via the environment:

client = ConfidentAI(api_key="confident_org_...")
export CONFIDENT_ORG_API_KEY="confident_org_..."

Use CONFIDENT_ORG_API_KEY, not CONFIDENT_API_KEY. The latter is reserved by deepeval for a project key; the distinct name lets both SDKs run side by side.

from confidentai import ConfidentAI

client = ConfidentAI()  # reads CONFIDENT_ORG_API_KEY

Configuration

ConfidentAI(api_key=None, base_url=None, timeout=None)

Setting Resolution order
api_key api_key argument → CONFIDENT_ORG_API_KEY
base_url base_url argument → CONFIDENT_BASE_URL → regional default
region CONFIDENT_REGION (US / EU) → API key prefix → US

Regional defaults: https://api.confident-ai.com (US), https://eu.api.confident-ai.com (EU).

Async

Every method that hits the API has an a_-prefixed async counterpart on the same client (list / a_list, assign / a_assign, …) — the same style as deepeval's measure / a_measure. There is no separate async client; use one ConfidentAI and await the a_ methods in asyncio code:

import asyncio

from confidentai import ConfidentAI


async def main():
    client = ConfidentAI(api_key="confident_org_...")

    organization = await client.a_whoami()
    projects = await client.projects.a_list()

    project = client.project("project_id")          # no I/O, no await
    members = await project.members.a_list()          # awaited

    created = await client.projects.a_create("Async App")
    await client.project(created.project.id).a_delete()


asyncio.run(main())

organization() and project(id) just build scoped clients (no network), so they are not awaited; only the a_-prefixed methods that actually hit the API are coroutines. Configuration, regions, and ConfidentApiError behave identically to the sync methods.

Organization example

org_client = client.organization()

# Profile
organization = org_client.get()
org_client.update(name="Acme Inc.")

# API keys (the full value is returned only on create)
created = org_client.api_keys.create(name="CI/CD key")
print(created.value)
org_client.api_keys.update(created.id, valid=False)
org_client.api_keys.delete(created.id)

# Members & invitations
members = org_client.members.list(page=1, page_size=25)
org_client.members.update_role(members[0].id, role_id="role_id")
org_client.invitations.create(["teammate@acme.com"], role_id="role_id")

# IAM: roles, policies & permissions
permissions = org_client.iam.permissions.list()
policy = org_client.iam.policies.create(
    "Billing", permission_ids=[permissions[0].id]
)
org_client.iam.roles.create("Billing Manager", policy_ids=[policy.id])

# Governance: list policies and assign projects to one (great for CI/CD)
governance_policies = org_client.governance.policies.list()
if governance_policies:
    org_client.governance.policies.assign(
        governance_policies[0].id, project_ids=["project_id"]
    )

Project example

# Create a project (returns the project + its first API key)
created = client.projects.create("Production App", description="Main app")
print(created.project.id, created.api_key.value)

# List / fetch
projects = client.projects.list()
project = client.project(created.project.id)
project.update(name="Production")

# Project-scoped resources
project.api_keys.create(name="Production agent key")
project.members.list()
project.invitations.create(["analyst@acme.com"], role_id="project_role_id")

# Project-scoped IAM (roles, policies, permissions)
project.iam.roles.list()
project.iam.policies.list()
project.iam.permissions.list()

# Delete
project.delete()

Error handling

When the API returns an unsuccessful response, the SDK raises ConfidentApiError, which carries the error message and an optional link to relevant docs.

from confidentai import ConfidentAI, ConfidentApiError

client = ConfidentAI()

try:
    client.project("does-not-exist").get()
except ConfidentApiError as err:
    print("Something went wrong:", err, err.link)

Development

cd python
poetry install
poetry run pytest

Or without Poetry:

cd python
python -m venv .venv && source .venv/bin/activate
pip install requests "pydantic>=2.11" tenacity aiohttp pytest
pytest

The default suite mocks the HTTP layer and never hits a real API, so it runs anywhere (and is the pre-merge CI gate).

Integration tests (optional, real API)

A separate, opt-in suite under tests/integration/ exercises the live API. It is excluded from the default run and auto-skips unless CONFIDENT_ORG_API_KEY is set:

CONFIDENT_ORG_API_KEY="confident_org_..." poetry run pytest -m integration

Most checks are read-only (whoami, projects.list, permissions.list); the project round-trip creates and then deletes a throwaway project. CI runs this suite nightly / on demand via the Integration workflow, never on pull requests.

See ROUTES.md for the full endpoint → method map.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

confidentai-0.2.0.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

confidentai-0.2.0-py3-none-any.whl (37.6 kB view details)

Uploaded Python 3

File details

Details for the file confidentai-0.2.0.tar.gz.

File metadata

  • Download URL: confidentai-0.2.0.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.13.13 Darwin/25.3.0

File hashes

Hashes for confidentai-0.2.0.tar.gz
Algorithm Hash digest
SHA256 944711c269cc4c4f5534c7cbd49b9be362b7532559bccbb5873e1f183d72a3f7
MD5 55b0cd2023891e6ac52f2fea2214750d
BLAKE2b-256 1c00ed2ed48d47f20d93bcb11f3b3f16e2dc875c8cb44bd63a3664773750b741

See more details on using hashes here.

File details

Details for the file confidentai-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: confidentai-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 37.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.4 CPython/3.13.13 Darwin/25.3.0

File hashes

Hashes for confidentai-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d516c3bdeb0b8119f80b163335d7f3e5e14413f25b276a63f9fa998309c885dd
MD5 996f13b9ede2a9ce046221fb6e64f714
BLAKE2b-256 39d3a1a9ced29067cdedbb8f5aa8a98c1bae901e1a4b01a46dc941aa3c48d387

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page