Skip to main content

shedcloud-partner-api

Official Python client for the ShedCloud Partner API (/partner/v1/*).

Use this package from Python 3.10+ to call company-scoped Partner API endpoints with an API key (sc_live_…) or OAuth2 client credentials.

Install

pip install shedcloud-partner-api

For local development:

pip install -e ".[dev]"

Hosts

Environment Host
production (default) https://go.shedcloud.com
sandbox https://api.shedcloudtest.com

Pass environment="sandbox" for test, or base_url= for a custom/local override.

Quick start

API key (production)

from shedcloud_partner_api import ShedCloudPartnerClient

client = ShedCloudPartnerClient(
    auth={"type": "api_key", "api_key": "sc_live_..."},
)

stock = client.lot_stock.list({"limit": 50, "purchase_type": "Lot Stock"})
print(stock["total"], stock["data"][0]["title"])

Sandbox

client = ShedCloudPartnerClient(
    environment="sandbox",
    auth={"type": "api_key", "api_key": "sc_live_..."},
)

OAuth2 client credentials

client = ShedCloudPartnerClient(
    auth={
        "type": "oauth",
        "client_id": "...",
        "client_secret": "...",
    },
)

orders = client.orders.list({"status": "Unprocessed", "limit": 25})

Create credentials in the ShedCloud portal under Settings → Developer API.

Resources

Each attribute maps to a section of the hosted reference.

Client attribute Endpoints
client.lot_stock GET /partner/v1/lot-stock
client.stock_templates GET /partner/v1/stock-templates
client.leads leads CRUD + status
client.quotes quotes CRUD, convert, line items
client.orders orders CRUD, contract, payments, line items
client.work_orders work orders CRUD + status
client.locations locations CRUD
client.customers customers CRUD + merge
client.domains storefront domains (read-only)
client.agreements B2B agreements + state legal (read-only)
client.products catalog products + sizes
client.users users CRUD + roles
client.payments payments (read-only)
client.documents documents + download links
client.events event feed, iterator, redeliver, webhook deliveries
client.site_events visitor behavioral tracking: batch ingest (snake_case body) + read-back iterator
client.configurator_sessions 3D configurator launch sessions

Idempotency and optimistic concurrency

client.quotes.create(body, idempotency_key="uuid-here")
client.orders.update(order_id, body, if_match=record["version"])

Event feed iterator

for event in client.events.iterate({"types": ["order.created"]}):
    handle(event)

Site events (visitor tracking)

Server-side batch ingest from a partner marketing site. The ingest body stays snake_case on the wire — do not camelCase it.

from shedcloud_partner_api import PartnerScopes

client.site_events.track(
    {
        "session_id": "sess-abc",
        "visitor_id": "vis-xyz",
        "site_host": "www.example-sheds.com",
        "events": [
            {"event_type": "page.view", "page": "/buildings"},
            {"event_type": "cta.click", "product_id": "prod-1"},
        ],
    }
)

for event in client.site_events.iterate({"session_id": "sess-abc", "limit": 100}):
    print(event["eventType"], event.get("source"))

Scopes: PartnerScopes.SITE_EVENTS_WRITE (ingest), PartnerScopes.SITE_EVENTS_READ (read-back).

Webhook verification

from shedcloud_partner_api import verify_webhook_signature, WEBHOOK_SIGNATURE_HEADER

verify_webhook_signature(
    request.body,
    request.headers[WEBHOOK_SIGNATURE_HEADER],
    webhook_secret,
)

Python field names

Request params and bodies use snake_case in Python (e.g. location_id, default_for_store). The client serializes them to camelCase JSON automatically.

Scopes

See shedcloud_partner_api.PartnerScopes — kept in sync with the API's scope catalog.

Related SDKs

Publishing (maintainers)

Automated via .github/workflows/publish.yml:

Trigger Index Version Install
Push to main TestPyPI 0.5.1.dev42 pip install --index-url https://test.pypi.org/simple/ --pre shedcloud-partner-api
Tag v0.5.1 or GitHub Release PyPI 0.5.1 pip install shedcloud-partner-api

Every main commit publishes a unique dev build to TestPyPI only — production PyPI stays clean for stable tags.

One-time TestPyPI trusted publisher: test.pypi.orgPublishing → pending publisher → Owner Corland-Partners-LLC, repo shedcloud-pypi, workflow publish.yml, environment testpypi. Create matching GitHub environment testpypi.

Stable release:

  1. Bump version in pyproject.toml and src/shedcloud_partner_api/__init__.py
  2. Update CHANGELOG.md, commit to main (TestPyPI dev build)
  3. Tag: git tag v0.5.1 && git push origin v0.5.1 (production PyPI)

License

MIT

Release files for shedcloud-partner-api 0.8.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 shedcloud-partner-api 0.8.0
File Size Uploaded
shedcloud_partner_api-0.8.0.tar.gz 21.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for shedcloud-partner-api 0.8.0
File Interpreter ABI Platform
shedcloud_partner_api-0.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 53.6 kB

Release files / shedcloud_partner_api-0.8.0.tar.gz

Download URL shedcloud_partner_api-0.8.0.tar.gz
Size 21.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4bf9fb25268e8ed2a18f1248c2084c25b57fdc593c87e0bd53ad7c74a816450c
BLAKE2b-256 checksum
How to use checksums
e3fa99e6224658692611af71175224ab0bf2627bbdee1b17f5aec1f0194e945d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.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 Jul 28, 2026.

Transparency log

Release files / shedcloud_partner_api-0.8.0-py3-none-any.whl

Download URL shedcloud_partner_api-0.8.0-py3-none-any.whl
Size 31.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
267abb5c66d58455a68ca8573d644c78af006f371e99cd1ab3f79f3399d76c60
BLAKE2b-256 checksum
How to use checksums
92ab85bbba1b3934e9f1cb2198bc14941663fb8c95ee55c27f0b51dbbf061dc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.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 Jul 28, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.0

2 release files

0.8.1

2 release files

This release

0.8.0 This release

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

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