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.8.0.tar.gz (185.6 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.8.0-py3-none-any.whl (525.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: corsa_sdk-1.8.0.tar.gz
  • Upload date:
  • Size: 185.6 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.8.0.tar.gz
Algorithm Hash digest
SHA256 e4956aa0034a6d48bf472fbe88d3381450aa776c10e9659e4acc5bf536fafc2b
MD5 1ea34e07b2b106229fc2cde3860e8cca
BLAKE2b-256 1be756f852d53d000090ed4671c80ed70cd4cc71c6c07ccd387fbba8118c6195

See more details on using hashes here.

Provenance

The following attestation bundles were made for corsa_sdk-1.8.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.8.0-py3-none-any.whl.

File metadata

  • Download URL: corsa_sdk-1.8.0-py3-none-any.whl
  • Upload date:
  • Size: 525.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.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b8d5fb9fba0d37669f82e58553451d049b59405444d85e3d57d573ede1c5ae10
MD5 1e3e28c89cc7d1d785c8989d3e7859b2
BLAKE2b-256 8a3bc4d1375a68aa4c266ae76e2b9ddd8d4209ab35cfa19f18006c374e993ccd

See more details on using hashes here.

Provenance

The following attestation bundles were made for corsa_sdk-1.8.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