Skip to main content

softsolz

Official Python SDK for the SoftSolz platform API.

pip install softsolz

Requires Python 3.9 or later. Fully type-annotated (py.typed).

Usage

import os
from softsolz import SoftSolz

client = SoftSolz(api_key=os.environ["SOFTSOLZ_API_KEY"])

me = client.whoami()

form = client.forms.create_form({"name": "Contact Us", "status": "published"})
client.forms.submit_form(form["slug"], {"data": {"full_name": "Jane Doe", "email": "jane@example.com"}})

invoice = client.invoicing.create_invoice({
    "customer_id": 42,
    "lines": [{"description": "Design work", "quantity": 1, "unit_price_cents": 50000}],
})
client.invoicing.send_invoice(invoice["id"])

Use an sk_test_* key to run against your sandbox workspace; swap to sk_live_* in production. No other configuration changes.

Services

client.blogs, client.customer_auth, client.forms, client.invoicing, client.payments, client.smart_chat, client.social, client.workflows - one method per API operation, generated from the platform's service manifests.

Pagination

List methods return a Page you can iterate; extra pages are fetched automatically:

for invoice in client.invoicing.list_invoices({"status": "overdue"}):
    print(invoice["invoice_number"])

Or page manually with page.data, page.has_more, and page.next_page().

Errors

All API failures raise a typed subclass of SoftSolzError carrying status, code, message, details, and request_id:

from softsolz import NotFoundError

try:
    client.forms.get_form(999)
except NotFoundError as err:
    print(err.code, err.request_id)

Classes: InvalidRequestError (400/422), AuthenticationError (401), PaymentRequiredError (402), PermissionDeniedError (403), NotFoundError (404), ConflictError (409), RateLimitError (429, with retry_after_seconds), APIConnectionError (network).

Retries and idempotency

429 and 5xx responses are retried automatically with exponential backoff (default 2 retries), honouring Retry-After. Every mutating request carries an auto-generated Idempotency-Key, so retries are always safe. Pass your own to control replays:

client.invoicing.create_invoice(body, idempotency_key="order-1234")

Configure per client: SoftSolz(api_key=..., max_retries=3, timeout=60.0).

Webhooks

Verify the Softsolz-Signature header on incoming webhooks using the raw request body:

from softsolz import webhooks

webhooks.assert_valid(
    raw_body=request.get_data(),
    header_value=request.headers.get("Softsolz-Signature"),
    secret=os.environ["SOFTSOLZ_WEBHOOK_SECRET"],
)

webhooks.verify(...) returns {"valid": False, "reason": ...} if you prefer not to raise.

Escape hatch

Call any endpoint directly while keeping auth, retries, and errors:

client.request("GET", "/api/v1/services/forms/forms", query={"limit": 10})

Documentation

License

MIT

Download files

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

Source Distribution

softsolz-0.2.0.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

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

softsolz-0.2.0-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for softsolz-0.2.0.tar.gz
Algorithm Hash digest
SHA256 cc1130d785e713494a103a1a516e2645ae418777de56f470a45c9e0bb00cf927
MD5 d29c9cbd1c59cfca855327dfbfffe653
BLAKE2b-256 7dbb8b9fd09647482423e36386cc17df5fdea5bf4b95a932fd9f406270a878b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for softsolz-0.2.0.tar.gz:

Publisher: publish-python.yml on soft-solz/sdk

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

File details

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

File metadata

  • Download URL: softsolz-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for softsolz-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 444e6e3125f575944b8d2f35a25973e781aa14d9acd4e7544b986a5dcf277d51
MD5 93a32b74996dda19e1d93b466ddaa6c2
BLAKE2b-256 cedbd8350c59c2a417583420d990f115c68a4938e3acbd8c6ff375ad69e99947

See more details on using hashes here.

Provenance

The following attestation bundles were made for softsolz-0.2.0-py3-none-any.whl:

Publisher: publish-python.yml on soft-solz/sdk

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

Release history Release notifications | RSS feed

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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