Skip to main content

Python SDK for the Corsa compliance and risk API

Project description

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

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

corsa_sdk-1.3.0.tar.gz (169.5 kB view details)

Uploaded Source

Built Distribution

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

corsa_sdk-1.3.0-py3-none-any.whl (481.5 kB view details)

Uploaded Python 3

File details

Details for the file corsa_sdk-1.3.0.tar.gz.

File metadata

  • Download URL: corsa_sdk-1.3.0.tar.gz
  • Upload date:
  • Size: 169.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for corsa_sdk-1.3.0.tar.gz
Algorithm Hash digest
SHA256 e60a63f39131362f8146c27f5dc858abc3b4a5cbd843d398c4d316a7dcedcdcb
MD5 a9622f1967fd2a4d051ac441eff3f890
BLAKE2b-256 507c93887b616aa5a7089c2cf529edfe20a44972e212bedab4da43ab286b2dcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for corsa_sdk-1.3.0.tar.gz:

Publisher: release.yaml on corsa-labs/corsa-sdk-py

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

File details

Details for the file corsa_sdk-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: corsa_sdk-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 481.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for corsa_sdk-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bbe30fdcd930c5ed3e016326370f41cf94a3ee4a1ed70de99aafcdc0aaf5a3df
MD5 e525594e9b685394d64ab5251bf24158
BLAKE2b-256 c20d0fbd3d29660ba2108fba5f306ef48537973db092bf8c65c40ebf2685fd55

See more details on using hashes here.

Provenance

The following attestation bundles were made for corsa_sdk-1.3.0-py3-none-any.whl:

Publisher: release.yaml on corsa-labs/corsa-sdk-py

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

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