Skip to main content

Xberg

xberg-io-sdk

Xberg Enterprise

PyPI npm Go Reference License Documentation CI

Discord

Official Python client for the Xberg Enterprise and Xberg Pro document-processing APIs — one client, two targets.

  • httpx-based, sync (XbergClient) and async (AsyncXbergClient) surfaces
  • One client speaks to both products: shared extraction/jobs/presets/auto-tune/RAG surface, plus capability-gated tier-specific methods (Pro auth and control plane; Enterprise uploads/usage/document diff/enrichment)
  • Generated from two OpenAPI 3.1 specs (Enterprise + Pro), then wrapped in ergonomic helpers
  • Configurable retry engine (honors Retry-After, exponential backoff)
  • Type-annotated end to end, py.typed shipped

Install

pip install xberg-io-sdk
# or
uv add xberg-io-sdk

Requires Python 3.10+.

Quickstart

Sync — single file with explicit API key

from pathlib import Path
from xberg_io_sdk import XbergClient

# Enterprise (base_url defaults to https://api.xberg.io)
with XbergClient(api_key="kz_...") as client:
    job = client.extract_and_wait(file=Path("invoice.pdf"))
    if job.result is not None:
        print(job.result.content)

Connecting to Xberg Pro

Pro is self-hosted and has no default URL — pass base_url (and, to skip the /healthz tier probe, target="pro"):

from xberg_io_sdk import XbergClient

with XbergClient(api_key="kz_...", base_url="https://pro.internal", target="pro") as client:
    config = client.auth_config()          # Pro-only
    presets = client.list_saved_presets()  # both tiers; the path spelling follows the tier

Saved presets are served by both products under different spellings — /v1/saved_presets on Enterprise, /v1/saved-presets on Pro. The client renders the right one from the resolved tier, so the same call works against either target.

Async — batch extract with parallel waits

import asyncio
from pathlib import Path
from xberg_io_sdk import AsyncXbergClient

async def main() -> None:
    async with AsyncXbergClient(api_key="kz_...") as client:
        jobs = await client.extract_batch([Path("a.pdf"), Path("b.pdf"), Path("c.pdf")])
        results = await client.wait_for_jobs([str(j.id) for j in jobs])
        for job in results:
            print(job.filename, job.status)

asyncio.run(main())

Public API

One XbergClient (sync) / AsyncXbergClient (async) serves both products. Constructor: (api_key=None, base_url=None, target=None, timeout=30, headers=None, retries=0, retry_on=..., retry_backoff="exponential").

Shared methods (both tiers):

Method Purpose
extract(file=..., options=..., webhook=...) Submit one document, get back a Job.
extract_batch(files, options=...) Submit many documents in ONE multipart request.
get_job(job_id) Fetch current job status / result.
wait_for_job(job_id, timeout=300, ...) Poll until terminal (raises on failed/cancelled).
wait_for_jobs(job_ids, ...) Wait for multiple jobs.
extract_and_wait(file=..., ...) Submit + wait in one call.
get_job_result(job_id) Fetch a job's stored JobResult envelope.
list_jobs(...), audit(...) List jobs / read the audit log.
cancel_job(job_id) Cancel a job (idempotent — also 204s if already terminal).
list_rag_collections(), rag_retrieve(name, body), get_rag_job(job_id), … RAG collections/documents/retrieval.
delete_rag_documents(name, body) Delete documents from a collection by ID list or metadata filter.
presets(), get_preset(id), get_preset_sample(id, name) Curated managed presets.
list_saved_presets(...), create_saved_preset(body), get_saved_preset(id), update_saved_preset(id, body), delete_saved_preset(id) Project-owned saved presets (path spelling follows the tier).
list_auto_tune_jobs(...), submit_auto_tune(request, files), get_auto_tune_status(id), get_auto_tune_result(id), delete_auto_tune_job(id) Auto-tune runs (submit_auto_tune is multipart).
get_auto_tune_capabilities(), promote_auto_tune_profile(id, body) Discover tunable knobs; promote a run to a named profile.
list_tuning_profiles(...), get_tuning_profile(id), delete_tuning_profile(id) Promoted tuning profiles.

Tier-specific methods are capability-gated — calling one against the wrong tier raises a clear error instead of a raw 404:

  • Pro only: login, auth_config, get_rag_config/set_rag_config
  • Pro only (control plane): list_projects/create_project, list_api_keys/create_api_key/revoke_api_key, list_integrations/create_integration/get_integration/delete_integration, connect_integration/disconnect_integration, list_integration_documents/fetch_integration_document
  • Enterprise only: versions, get_document, diff/get_diff_job, presign_upload/confirm_upload, usage, list_extraction_events, get_job_page (raw image/png bytes), submit_enrich/get_enrich_status, stream_crawl_events (a generator of Server-Sent Events)

Deliberately not exposed

Three documented routes have no client method, on purpose:

  • GET /readyz — an infrastructure readiness probe for orchestrators, not caller-facing API surface. GET /healthz is exposed indirectly: it is the tier probe behind target=None.
  • GET /v1/oauth/callback (Pro) — a browser redirect leg of the OIDC flow. The provider calls it, not an API client.
  • DELETE /auth/account (Pro) — a session-cookie account-deletion flow, not API-key surface. POST /auth/login is exposed because it mints the session JWT this client can then send as a bearer token.

Errors are raised as one of: XbergError (base), AuthError (401 and 403), ValidationError, NotFoundError, RateLimitError (carries retry_after), ServerError, TimeoutError.

Documentation

License

MIT — © Kreuzberg, Inc.

Download files

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

Source Distribution

xberg_io_sdk-0.4.0.tar.gz (516.0 kB view details)

Uploaded Source

Built Distribution

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

xberg_io_sdk-0.4.0-py3-none-any.whl (1.4 MB view details)

Uploaded Python 3

File details

Details for the file xberg_io_sdk-0.4.0.tar.gz.

File metadata

  • Download URL: xberg_io_sdk-0.4.0.tar.gz
  • Upload date:
  • Size: 516.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for xberg_io_sdk-0.4.0.tar.gz
Algorithm Hash digest
SHA256 c609c1a407e69449e322267b7d13c85d6a9ecb96488cbbd5caec38fab0d17ef9
MD5 4a090a3fedcdb353af839df38c63678a
BLAKE2b-256 11d3bc756c1974e45f89d45e9d22b72fa08c23e6d9ee29db3f9bf4636b4da0fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for xberg_io_sdk-0.4.0.tar.gz:

Publisher: publish.yaml on xberg-io/sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xberg_io_sdk-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: xberg_io_sdk-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for xberg_io_sdk-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 655475187a56196722967f4089a4a6bdf315377e3c65fac2fb256976ab406e45
MD5 a17edfd549ab6443f1cf17ef8a505e75
BLAKE2b-256 788e7212c077569cf072bedd2a266937a3fe18fae032593635703ef4d77af090

See more details on using hashes here.

Provenance

The following attestation bundles were made for xberg_io_sdk-0.4.0-py3-none-any.whl:

Publisher: publish.yaml on xberg-io/sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 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