Skip to main content

Corsa Python SDK

Python client for the Corsa compliance and risk API.

Auto-generated from the Corsa OpenAPI specification using openapi-python-client, with typed Pydantic v2 models and both sync/async httpx clients.

Installation

pip install corsa-sdk

Quick Start

Sync

from corsa_sdk import CorsaClient
from corsa_sdk.models.create_alert_dto import CreateAlertDto

client = CorsaClient(
    base_url="https://api.corsa.finance",
    token="your-api-token",
)

alert = client.alerts.create_alert(body=CreateAlertDto(
    name="Suspicious activity",
    description="Large transfer flagged",
))

client.close()

Async

from corsa_sdk import AsyncCorsaClient
from corsa_sdk.models.create_alert_dto import CreateAlertDto

async with AsyncCorsaClient(
    base_url="https://api.corsa.finance",
    token="your-api-token",
) as client:
    alert = await client.alerts.create_alert(body=CreateAlertDto(
        name="Suspicious activity",
        description="Large transfer flagged",
    ))

Context Manager (sync)

with CorsaClient(base_url="https://api.corsa.finance", token="your-api-token") as client:
    case = client.cases.get_case(case_id="abc-123")

API Namespaces

The client exposes each API tag as an attribute. Endpoint names match the generated module names.

Namespace Examples
client.alerts create_alert, get_alert, update_alert, bulk_assign_alert
client.cases create_case, get_case, update_case, bulk_update_case_status
client.clients create_individual_client, create_corporate_client, get_individual_client
client.transactions get_transaction_by_id, update_transaction, update_transaction_status
client.blockchain_wallets create_blockchain_wallet, get_blockchain_wallet
client.bank_accounts create_bank_account, get_bank_account
client.rules create_rule, list_rules, activate_rule, disable_rule
client.rule_templates list_rule_templates, get_rule_template, copy_rule_template
client.deposits create_deposit, get_deposit
client.withdrawals create_withdrawal, get_withdrawal
client.trades create_trade, get_trade, add_transaction
client.sessions create_session, get_session, get_client_sessions
client.members create_individual_member, create_corporate_member
client.attachments upload_attachments, get_attachments_by_entity
client.checklists create_checklist_template, update_checklist_item
client.evaluation evaluate, get_rule_evaluations
client.platform get_encryption_configuration

Advanced Usage

Direct module access

For full control over the response (status code, headers), use the generated modules directly:

from corsa_sdk import AuthenticatedClient
from corsa_sdk.api.alerts import create_alert
from corsa_sdk.models.create_alert_dto import CreateAlertDto

client = AuthenticatedClient(base_url="https://api.corsa.finance", token="your-api-token")

# Returns a Response object with status_code, headers, and parsed body
response = create_alert.sync_detailed(client=client, body=CreateAlertDto(...))
print(response.status_code, response.headers)
alert = response.parsed

Custom headers and timeout

client = CorsaClient(
    base_url="https://api.corsa.finance",
    token="your-api-token",
    timeout=60.0,
    headers={"X-Custom-Header": "value"},
)

Access the underlying httpx client

raw = client.raw_client.get_httpx_client()

Webhook Verification

Verify incoming webhook signatures using HMAC-SHA256:

from corsa_sdk import verify_webhook_signature, sign_webhook_payload

# Verify a webhook from Corsa
is_valid = verify_webhook_signature(
    secret="your-webhook-secret",
    event_payload=request.body,
    signature=request.headers["X-Signature"],
)

# Sign a payload (for testing)
sig = sign_webhook_payload("your-webhook-secret", '{"event":"alert.created"}')

Error Handling

from corsa_sdk.errors import UnexpectedStatus

try:
    alert = client.alerts.get_alert(alert_id="nonexistent")
except UnexpectedStatus as e:
    print(f"HTTP {e.status_code}: {e.content}")

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Lint
ruff check .

# Type check
mypy corsa_sdk/

How the SDK is Generated

This SDK is auto-generated from the Corsa API Gateway OpenAPI specification:

  1. A GitHub Actions workflow runs hourly and fetches the latest api-spec.json from staging
  2. openapi-python-client generates typed Python models and API modules
  3. Generated code is merged into the repo (preserving manual modules like webhooks/ and corsa_client.py)
  4. A PR is opened for review; on merge, python-semantic-release publishes to PyPI

License

MIT

Release files for corsa-sdk 1.11.0

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

Source distribution (sdist)

Source distribution for corsa-sdk 1.11.0
File Size Uploaded
corsa_sdk-1.11.0.tar.gz 330.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for corsa-sdk 1.11.0
File Interpreter ABI Platform
corsa_sdk-1.11.0-py3-none-any.whl Python 3 none any Details

Total release size:1.2 MB

Release files / corsa_sdk-1.11.0.tar.gz

Download URL corsa_sdk-1.11.0.tar.gz
Size 330.7 kB
Tags Source
SHA-256 checksum
How to use checksums
15faf48cc503ffdaad519b4b1274ef53421145779bbcca6f3d5f2beef36bc3e3
BLAKE2b-256 checksum
How to use checksums
5491916bd84ee55f23f85711405a4e87c9333f4beca0a0643c8fd3aa8708cbb8
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 Aug 18, 2026.

Transparency log

Release files / corsa_sdk-1.11.0-py3-none-any.whl

Download URL corsa_sdk-1.11.0-py3-none-any.whl
Size 896.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e7ca2c3f040ff2e5e19862fb0cfbc1200927c9edb5e9b8847b48696d27c0a452
BLAKE2b-256 checksum
How to use checksums
0aa807c514b71b1d64087e7d378dfd382720b970696a00ee02b3eebc0e4f9450
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 Aug 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.11.0 This release

2 release files

1.9.0

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.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