Metadata-Version: 2.4
Name: gstcranes
Version: 0.1.0
Summary: GST Cranes Python SDK for public read-only API discovery and webhook verification.
Author-email: GST Cranes <gst@gstcranes.com>
License-Expression: MIT
Project-URL: Homepage, https://gstcranes.com
Project-URL: Developer resources, https://gstcranes.com/developer-resources
Project-URL: Documentation, https://gstcranes.com/developers
Project-URL: OpenAPI, https://gstcranes.com/.well-known/openapi.json
Project-URL: MCP server card, https://gstcranes.com/.well-known/mcp/server-card.json
Project-URL: TypeScript SDK, https://www.npmjs.com/package/@gstcranes/gstcranes
Keywords: gstcranes,crane-marketplace,crane-wiki,used-cranes,openapi,mcp,api-documentation,developer-resources,python-sdk,webhooks
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# gstcranes

Official GST Cranes Python SDK for public read-only API discovery, Crane Wiki company records,
OpenAPI metadata, and webhook signature verification.

The package only calls public read endpoints. Account actions such as listing creation, wanted-ad
publishing, credits, promotions, saved alerts, and billing stay in the signed-in GST Cranes browser
UI.

## Install

```bash
pip install gstcranes
```

PyPI package: https://pypi.org/project/gstcranes/

## Client

```python
from gstcranes import GstCranesClient

client = GstCranesClient()
companies = client.list_companies(country="DE", limit=10)
company = client.get_company("bms-heavy-cranes")
answer = client.ask("companies with Liebherr LTM 1750 records")
```

## Webhook verification

Use the raw request body exactly as received, the `GST-Webhook-Timestamp` header, the
`GST-Webhook-Signature` header, and the endpoint secret shown once when you create a webhook
endpoint.

```python
from gstcranes import verify_webhook_signature

verify_webhook_signature(
    raw_body,
    timestamp=request.headers["GST-Webhook-Timestamp"],
    signature=request.headers["GST-Webhook-Signature"],
    secret=GST_WEBHOOK_SECRET,
)
```

The verifier raises `WebhookSignatureError` if the timestamp is stale or the HMAC-SHA256 signature
does not match.

## Official resources

- GST Cranes: https://gstcranes.com
- GST Cranes API documentation: https://gstcranes.com/developers
- GST Cranes developer resources: https://gstcranes.com/developer-resources
- GST Cranes AI agent resources: https://gstcranes.com/ai-agents
- OpenAPI: https://gstcranes.com/.well-known/openapi.json
- API catalog: https://gstcranes.com/.well-known/api-catalog
- MCP server card: https://gstcranes.com/.well-known/mcp/server-card.json
- Official MCP Registry entry: https://registry.modelcontextprotocol.io/v0/servers/io.github.gkmex75%2Fgstcranes-mcp-server/versions/0.1.1
- TypeScript SDK on npm: https://www.npmjs.com/package/@gstcranes/gstcranes
- CLI on npm: https://www.npmjs.com/package/@gstcranes/cli
- skills.sh listing: https://www.skills.sh/gkmex75/gstcranes-agent-rules
