# StockTrim OpenAPI Client
A production-ready Python client library and MCP server for the
[StockTrim Inventory Management API](https://www.stocktrim.com/).
[](https://www.python.org/downloads/)
[](LICENSE)
[](https://github.com/astral-sh/ruff)
[](https://pypi.org/project/stocktrim-openapi-client/)
[](https://pypi.org/project/stocktrim-mcp-server/)
## Features
### Client Library
- **🎯 Domain Helpers**: Ergonomic wrapper methods for common operations (15+ convenience
functions)
- **🔄 Transport-Layer Resilience**: Automatic retries with exponential backoff built
into HTTP transport
- **⚡ Modern Python**: Fully async/await with comprehensive type hints (ty strict)
- **🔐 Custom Authentication**: Automatic handling of StockTrim `api-auth-id` and
`api-auth-signature` headers
- **🛡️ Typed Exceptions**: Structured error handling (AuthenticationError,
ValidationError, ServerError, etc.)
- **📦 OpenAPI Generated**: Always up-to-date with the latest StockTrim API
### MCP Server
- **🤖 AI Integration**: Natural language interface for Claude and other AI assistants
- **⚡ FastMCP**: High-performance Model Context Protocol implementation
- **🔧 Production Ready**: 5 tools across product, customer, and inventory domains
- **🎯 Type-Safe**: Full Pydantic validation for all operations
- **📝 Well-Documented**: Comprehensive usage examples and troubleshooting
## Installation
### Client Library
```bash
# With UV (recommended)
uv add stocktrim-openapi-client
# With pip
pip install stocktrim-openapi-client
# With Poetry
poetry add stocktrim-openapi-client
```
### MCP Server
```bash
# With UV
uv add stocktrim-mcp-server
# With pip
pip install stocktrim-mcp-server
```
## Quick Start
### Using Domain Helpers (Recommended)
```python
from stocktrim_public_api_client import StockTrimClient
async with StockTrimClient(
api_auth_id="your_tenant_id",
api_auth_signature="your_tenant_name"
) as client:
# Product operations
product = await client.products.find_by_code("WIDGET-001")
widgets = await client.products.search("WIDGET")
exists = await client.products.exists("WIDGET-001")
# Customer operations
customer = await client.customers.get("CUST-001")
customer = await client.customers.find_or_create(
"CUST-002",
name="New Customer",
email="customer@example.com"
)
# Inventory operations
await client.inventory.set_for_product(
product_id="123",
stock_on_hand=50.0,
stock_on_order=100.0,
location_code="WAREHOUSE-A"
)
```
### Using Generated API Methods
```python
from stocktrim_public_api_client import StockTrimClient
from stocktrim_public_api_client.generated.api.products import get_api_products
from stocktrim_public_api_client.utils import unwrap
async with StockTrimClient(
api_auth_id="your_tenant_id",
api_auth_signature="your_tenant_name"
) as client:
# Direct API call with automatic retries and auth
response = await get_api_products.asyncio_detailed(client=client)
# Unwrap response or raise typed exception
products = unwrap(response) # Raises AuthenticationError, ServerError, etc.
```
### MCP Server
```bash
# Set environment variables
export STOCKTRIM_API_AUTH_ID=your_tenant_id
export STOCKTRIM_API_AUTH_SIGNATURE=your_tenant_name
# Run server
uvx stocktrim-mcp-server
```
For Claude Desktop integration, see [MCP Server README](stocktrim_mcp_server/README.md).
## Domain Helpers
The client provides convenient helper classes that wrap the generated API:
### Products
- `find_by_code(code)` - Get product by exact code
- `search(code_prefix)` - Find products starting with prefix
- `exists(code)` - Check if product exists
- `get_all()` - List all products
- `create(...)` - Create new product
- `delete(product_id)` - Delete product
### Customers
- `get(code)` - Get customer by code
- `get_all()` - List all customers
- `exists(code)` - Check if customer exists
- `find_or_create(code, **defaults)` - Get or create customer (idempotent)
- `update(customer)` - Update customer
### Suppliers
- `find_by_code(code)` - Get supplier by code (handles API inconsistencies)
- `create_one(supplier)` - Create single supplier
- `exists(code)` - Check if supplier exists
- `get_all()` - List all suppliers
- `create([suppliers])` - Batch create suppliers
- `delete(code)` - Delete supplier
### Sales Orders
- `get_for_product(product_id)` - Get orders for specific product
- `delete_for_product(product_id)` - Delete all orders for product
- `get_all()` - List all orders
- `create(...)` - Create order
- `delete(...)` - Delete orders
### Purchase Orders
- `find_by_reference(reference_number)` - Get order by reference
- `exists(reference_number)` - Check if order exists
- `get_all()` - List all orders
- `create(...)` - Create order
- `delete(...)` - Delete orders
### Inventory
- `set_for_product(product_id, stock_on_hand, stock_on_order, ...)` - Set inventory
levels
- `set(request)` - Batch set inventory
### Locations
- `get_all()` - List all locations
- `create(...)` - Create location
See [docs/user-guide/helper-methods.md](docs/user-guide/helper-methods.md) for complete
documentation.
## Error Handling
The client provides typed exceptions for structured error handling:
```python
from stocktrim_public_api_client.utils import (
unwrap,
AuthenticationError,
ValidationError,
NotFoundError,
ServerError
)
try:
product = unwrap(response)
except AuthenticationError:
print("Invalid credentials")
except ValidationError as e:
print(f"Validation failed: {e.validation_errors}")
except NotFoundError:
print("Product not found")
except ServerError as e:
print(f"Server error: {e.status_code}")
```
## Configuration
### Environment Variables
```bash
# Required
STOCKTRIM_API_AUTH_ID=your_tenant_id
STOCKTRIM_API_AUTH_SIGNATURE=your_tenant_name
# Optional
STOCKTRIM_BASE_URL=https://api.stocktrim.com # Default
```
### Programmatic Configuration
```python
async with StockTrimClient(
api_auth_id="your_tenant_id",
api_auth_signature="your_tenant_name",
base_url="https://api.stocktrim.com",
timeout=30.0,
max_retries=5
) as client:
# Use client
pass
```
## Architecture
### Transport-Layer Resilience
Resilience features are implemented at the HTTP transport level:
- **Automatic retries** on 5xx errors for idempotent methods (GET, HEAD, OPTIONS, TRACE)
- **Exponential backoff** with jitter to prevent thundering herd
- **Error logging** with detailed response parsing
- **Custom authentication** injection without modifying generated code
This approach ensures:
- ✅ All generated API methods automatically get resilience features
- ✅ No code changes needed when regenerating from OpenAPI spec
- ✅ Type safety preserved throughout
- ✅ Optimal performance (resilience at lowest level)
### Domain Helpers
Helper classes provide:
- **Clear intent** with intuitive method names
- **API inconsistency handling** (e.g., single vs list returns)
- **Common patterns** for frequent workflows
- **Reduced boilerplate** for simple operations
- **Full type safety** with comprehensive hints
## MCP Server Tools
The MCP server provides 5 tools for AI assistant integration:
1. **get_product** - Retrieve product by code
1. **search_products** - Search products by prefix
1. **get_customer** - Retrieve customer by code
1. **list_customers** - List all customers
1. **set_product_inventory** - Update inventory levels
Example conversation with Claude:
```
You: What products do we have starting with "WID"?
Claude: [uses search_products("WID")]
Found 3 products:
- WIDGET-001: Standard Widget ($10.00)
- WIDGET-002: Premium Widget ($15.00)
- WIDGET-SPECIAL: Custom Widget ($25.00)
```
See [stocktrim_mcp_server/README.md](stocktrim_mcp_server/README.md) for detailed usage.
## Development
### Setup
```bash
# Clone repository
git clone https://github.com/dougborg/stocktrim-openapi-client.git
cd stocktrim-openapi-client
# Install UV (if needed)
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
# Install dependencies
uv sync --all-extras
# Install pre-commit hooks
uv run pre-commit install
```
### Common Tasks
```bash
# Run tests
uv run poe test
# Run linting
uv run poe lint
# Format code
uv run poe format
# Type check
uv run ty check
# Regenerate client from OpenAPI spec
uv run poe regenerate-client
# Build documentation
uv run poe docs-build
# Run all checks (format + lint + test)
uv run poe check
```
### Testing
```bash
# All tests
uv run poe test
# With coverage
uv run poe test-coverage
# Unit tests only
uv run poe test-unit
# Integration tests only
uv run poe test-integration
```
## Project Structure
```
stocktrim-openapi-client/
├── stocktrim_public_api_client/ # Client library
│ ├── stocktrim_client.py # Main client with transport layer
│ ├── helpers/ # Domain helper classes
│ │ ├── products.py
│ │ ├── customers.py
│ │ ├── suppliers.py
│ │ ├── sales_orders.py
│ │ ├── purchase_orders.py
│ │ ├── inventory.py
│ │ └── locations.py
│ ├── utils.py # Response unwrapping & exceptions
│ └── generated/ # OpenAPI-generated code
│ ├── api/ # API endpoint methods
│ ├── models/ # Data models
│ └── client.py # Base client
├── stocktrim_mcp_server/ # MCP server package
│ └── src/stocktrim_mcp_server/
│ ├── server.py # FastMCP server
│ └── tools/ # MCP tool implementations
├── tests/ # Test suite
├── scripts/ # Development scripts
└── docs/ # Documentation
```
## Documentation
- **Full Documentation**:
[https://dougborg.github.io/stocktrim-openapi-client/](https://dougborg.github.io/stocktrim-openapi-client/)
- **Client Guide**: [docs/user-guide/client-guide.md](docs/user-guide/client-guide.md)
- **Helper Methods**:
[docs/user-guide/helper-methods.md](docs/user-guide/helper-methods.md)
- **Testing Guide**: [docs/user-guide/testing.md](docs/user-guide/testing.md)
- **MCP Server**: [stocktrim_mcp_server/README.md](stocktrim_mcp_server/README.md)
## Contributing
Contributions are welcome! Please see:
- [Development Setup](#development) above
- [Code of Conduct](docs/contributing/code-of-conduct.md)
- [API Feedback](docs/contributing/api-feedback.md) - Constructive feedback for
StockTrim developers
## License
MIT License - see [LICENSE](LICENSE) for details.
## Acknowledgments
- Built with [httpx](https://www.python-httpx.org/) for modern async HTTP
- Generated with
[openapi-python-client](https://github.com/openapi-generators/openapi-python-client)
- MCP server built with [FastMCP](https://github.com/jlowin/fastmcp)
- Architecture patterns inspired by
[katana-openapi-client](https://github.com/dougborg/katana-openapi-client)
## Support
- **Issues**:
[GitHub Issues](https://github.com/dougborg/stocktrim-openapi-client/issues)
- **Source**: [GitHub Repository](https://github.com/dougborg/stocktrim-openapi-client)
- **StockTrim**: [www.stocktrim.com](https://www.stocktrim.com/)
Raw data
{
"_id": null,
"home_page": null,
"name": "stocktrim-openapi-client",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.14,>=3.11",
"maintainer_email": "Doug Borg <dougborg@dougborg.org>",
"keywords": "api-client, async, httpx, inventory, management, openapi, pagination, rate-limiting, retry, stocktrim",
"author": null,
"author_email": "Doug Borg <dougborg@dougborg.org>",
"download_url": "https://files.pythonhosted.org/packages/7d/a5/47f1f75c27c59e4be386c149646591b0051bf9273d87fd2066a25299a19b/stocktrim_openapi_client-0.5.1.tar.gz",
"platform": null,
"description": "# StockTrim OpenAPI Client\n\nA production-ready Python client library and MCP server for the\n[StockTrim Inventory Management API](https://www.stocktrim.com/).\n\n[](https://www.python.org/downloads/)\n[](LICENSE)\n[](https://github.com/astral-sh/ruff)\n[](https://pypi.org/project/stocktrim-openapi-client/)\n[](https://pypi.org/project/stocktrim-mcp-server/)\n\n## Features\n\n### Client Library\n\n- **\ud83c\udfaf Domain Helpers**: Ergonomic wrapper methods for common operations (15+ convenience\n functions)\n- **\ud83d\udd04 Transport-Layer Resilience**: Automatic retries with exponential backoff built\n into HTTP transport\n- **\u26a1 Modern Python**: Fully async/await with comprehensive type hints (ty strict)\n- **\ud83d\udd10 Custom Authentication**: Automatic handling of StockTrim `api-auth-id` and\n `api-auth-signature` headers\n- **\ud83d\udee1\ufe0f Typed Exceptions**: Structured error handling (AuthenticationError,\n ValidationError, ServerError, etc.)\n- **\ud83d\udce6 OpenAPI Generated**: Always up-to-date with the latest StockTrim API\n\n### MCP Server\n\n- **\ud83e\udd16 AI Integration**: Natural language interface for Claude and other AI assistants\n- **\u26a1 FastMCP**: High-performance Model Context Protocol implementation\n- **\ud83d\udd27 Production Ready**: 5 tools across product, customer, and inventory domains\n- **\ud83c\udfaf Type-Safe**: Full Pydantic validation for all operations\n- **\ud83d\udcdd Well-Documented**: Comprehensive usage examples and troubleshooting\n\n## Installation\n\n### Client Library\n\n```bash\n# With UV (recommended)\nuv add stocktrim-openapi-client\n\n# With pip\npip install stocktrim-openapi-client\n\n# With Poetry\npoetry add stocktrim-openapi-client\n```\n\n### MCP Server\n\n```bash\n# With UV\nuv add stocktrim-mcp-server\n\n# With pip\npip install stocktrim-mcp-server\n```\n\n## Quick Start\n\n### Using Domain Helpers (Recommended)\n\n```python\nfrom stocktrim_public_api_client import StockTrimClient\n\nasync with StockTrimClient(\n api_auth_id=\"your_tenant_id\",\n api_auth_signature=\"your_tenant_name\"\n) as client:\n # Product operations\n product = await client.products.find_by_code(\"WIDGET-001\")\n widgets = await client.products.search(\"WIDGET\")\n exists = await client.products.exists(\"WIDGET-001\")\n\n # Customer operations\n customer = await client.customers.get(\"CUST-001\")\n customer = await client.customers.find_or_create(\n \"CUST-002\",\n name=\"New Customer\",\n email=\"customer@example.com\"\n )\n\n # Inventory operations\n await client.inventory.set_for_product(\n product_id=\"123\",\n stock_on_hand=50.0,\n stock_on_order=100.0,\n location_code=\"WAREHOUSE-A\"\n )\n```\n\n### Using Generated API Methods\n\n```python\nfrom stocktrim_public_api_client import StockTrimClient\nfrom stocktrim_public_api_client.generated.api.products import get_api_products\nfrom stocktrim_public_api_client.utils import unwrap\n\nasync with StockTrimClient(\n api_auth_id=\"your_tenant_id\",\n api_auth_signature=\"your_tenant_name\"\n) as client:\n # Direct API call with automatic retries and auth\n response = await get_api_products.asyncio_detailed(client=client)\n\n # Unwrap response or raise typed exception\n products = unwrap(response) # Raises AuthenticationError, ServerError, etc.\n```\n\n### MCP Server\n\n```bash\n# Set environment variables\nexport STOCKTRIM_API_AUTH_ID=your_tenant_id\nexport STOCKTRIM_API_AUTH_SIGNATURE=your_tenant_name\n\n# Run server\nuvx stocktrim-mcp-server\n```\n\nFor Claude Desktop integration, see [MCP Server README](stocktrim_mcp_server/README.md).\n\n## Domain Helpers\n\nThe client provides convenient helper classes that wrap the generated API:\n\n### Products\n\n- `find_by_code(code)` - Get product by exact code\n- `search(code_prefix)` - Find products starting with prefix\n- `exists(code)` - Check if product exists\n- `get_all()` - List all products\n- `create(...)` - Create new product\n- `delete(product_id)` - Delete product\n\n### Customers\n\n- `get(code)` - Get customer by code\n- `get_all()` - List all customers\n- `exists(code)` - Check if customer exists\n- `find_or_create(code, **defaults)` - Get or create customer (idempotent)\n- `update(customer)` - Update customer\n\n### Suppliers\n\n- `find_by_code(code)` - Get supplier by code (handles API inconsistencies)\n- `create_one(supplier)` - Create single supplier\n- `exists(code)` - Check if supplier exists\n- `get_all()` - List all suppliers\n- `create([suppliers])` - Batch create suppliers\n- `delete(code)` - Delete supplier\n\n### Sales Orders\n\n- `get_for_product(product_id)` - Get orders for specific product\n- `delete_for_product(product_id)` - Delete all orders for product\n- `get_all()` - List all orders\n- `create(...)` - Create order\n- `delete(...)` - Delete orders\n\n### Purchase Orders\n\n- `find_by_reference(reference_number)` - Get order by reference\n- `exists(reference_number)` - Check if order exists\n- `get_all()` - List all orders\n- `create(...)` - Create order\n- `delete(...)` - Delete orders\n\n### Inventory\n\n- `set_for_product(product_id, stock_on_hand, stock_on_order, ...)` - Set inventory\n levels\n- `set(request)` - Batch set inventory\n\n### Locations\n\n- `get_all()` - List all locations\n- `create(...)` - Create location\n\nSee [docs/user-guide/helper-methods.md](docs/user-guide/helper-methods.md) for complete\ndocumentation.\n\n## Error Handling\n\nThe client provides typed exceptions for structured error handling:\n\n```python\nfrom stocktrim_public_api_client.utils import (\n unwrap,\n AuthenticationError,\n ValidationError,\n NotFoundError,\n ServerError\n)\n\ntry:\n product = unwrap(response)\nexcept AuthenticationError:\n print(\"Invalid credentials\")\nexcept ValidationError as e:\n print(f\"Validation failed: {e.validation_errors}\")\nexcept NotFoundError:\n print(\"Product not found\")\nexcept ServerError as e:\n print(f\"Server error: {e.status_code}\")\n```\n\n## Configuration\n\n### Environment Variables\n\n```bash\n# Required\nSTOCKTRIM_API_AUTH_ID=your_tenant_id\nSTOCKTRIM_API_AUTH_SIGNATURE=your_tenant_name\n\n# Optional\nSTOCKTRIM_BASE_URL=https://api.stocktrim.com # Default\n```\n\n### Programmatic Configuration\n\n```python\nasync with StockTrimClient(\n api_auth_id=\"your_tenant_id\",\n api_auth_signature=\"your_tenant_name\",\n base_url=\"https://api.stocktrim.com\",\n timeout=30.0,\n max_retries=5\n) as client:\n # Use client\n pass\n```\n\n## Architecture\n\n### Transport-Layer Resilience\n\nResilience features are implemented at the HTTP transport level:\n\n- **Automatic retries** on 5xx errors for idempotent methods (GET, HEAD, OPTIONS, TRACE)\n- **Exponential backoff** with jitter to prevent thundering herd\n- **Error logging** with detailed response parsing\n- **Custom authentication** injection without modifying generated code\n\nThis approach ensures:\n\n- \u2705 All generated API methods automatically get resilience features\n- \u2705 No code changes needed when regenerating from OpenAPI spec\n- \u2705 Type safety preserved throughout\n- \u2705 Optimal performance (resilience at lowest level)\n\n### Domain Helpers\n\nHelper classes provide:\n\n- **Clear intent** with intuitive method names\n- **API inconsistency handling** (e.g., single vs list returns)\n- **Common patterns** for frequent workflows\n- **Reduced boilerplate** for simple operations\n- **Full type safety** with comprehensive hints\n\n## MCP Server Tools\n\nThe MCP server provides 5 tools for AI assistant integration:\n\n1. **get_product** - Retrieve product by code\n1. **search_products** - Search products by prefix\n1. **get_customer** - Retrieve customer by code\n1. **list_customers** - List all customers\n1. **set_product_inventory** - Update inventory levels\n\nExample conversation with Claude:\n\n```\nYou: What products do we have starting with \"WID\"?\nClaude: [uses search_products(\"WID\")]\nFound 3 products:\n- WIDGET-001: Standard Widget ($10.00)\n- WIDGET-002: Premium Widget ($15.00)\n- WIDGET-SPECIAL: Custom Widget ($25.00)\n```\n\nSee [stocktrim_mcp_server/README.md](stocktrim_mcp_server/README.md) for detailed usage.\n\n## Development\n\n### Setup\n\n```bash\n# Clone repository\ngit clone https://github.com/dougborg/stocktrim-openapi-client.git\ncd stocktrim-openapi-client\n\n# Install UV (if needed)\ncurl -LsSf https://astral.sh/uv/install.sh | sh\nexport PATH=\"$HOME/.local/bin:$PATH\"\n\n# Install dependencies\nuv sync --all-extras\n\n# Install pre-commit hooks\nuv run pre-commit install\n```\n\n### Common Tasks\n\n```bash\n# Run tests\nuv run poe test\n\n# Run linting\nuv run poe lint\n\n# Format code\nuv run poe format\n\n# Type check\nuv run ty check\n\n# Regenerate client from OpenAPI spec\nuv run poe regenerate-client\n\n# Build documentation\nuv run poe docs-build\n\n# Run all checks (format + lint + test)\nuv run poe check\n```\n\n### Testing\n\n```bash\n# All tests\nuv run poe test\n\n# With coverage\nuv run poe test-coverage\n\n# Unit tests only\nuv run poe test-unit\n\n# Integration tests only\nuv run poe test-integration\n```\n\n## Project Structure\n\n```\nstocktrim-openapi-client/\n\u251c\u2500\u2500 stocktrim_public_api_client/ # Client library\n\u2502 \u251c\u2500\u2500 stocktrim_client.py # Main client with transport layer\n\u2502 \u251c\u2500\u2500 helpers/ # Domain helper classes\n\u2502 \u2502 \u251c\u2500\u2500 products.py\n\u2502 \u2502 \u251c\u2500\u2500 customers.py\n\u2502 \u2502 \u251c\u2500\u2500 suppliers.py\n\u2502 \u2502 \u251c\u2500\u2500 sales_orders.py\n\u2502 \u2502 \u251c\u2500\u2500 purchase_orders.py\n\u2502 \u2502 \u251c\u2500\u2500 inventory.py\n\u2502 \u2502 \u2514\u2500\u2500 locations.py\n\u2502 \u251c\u2500\u2500 utils.py # Response unwrapping & exceptions\n\u2502 \u2514\u2500\u2500 generated/ # OpenAPI-generated code\n\u2502 \u251c\u2500\u2500 api/ # API endpoint methods\n\u2502 \u251c\u2500\u2500 models/ # Data models\n\u2502 \u2514\u2500\u2500 client.py # Base client\n\u251c\u2500\u2500 stocktrim_mcp_server/ # MCP server package\n\u2502 \u2514\u2500\u2500 src/stocktrim_mcp_server/\n\u2502 \u251c\u2500\u2500 server.py # FastMCP server\n\u2502 \u2514\u2500\u2500 tools/ # MCP tool implementations\n\u251c\u2500\u2500 tests/ # Test suite\n\u251c\u2500\u2500 scripts/ # Development scripts\n\u2514\u2500\u2500 docs/ # Documentation\n```\n\n## Documentation\n\n- **Full Documentation**:\n [https://dougborg.github.io/stocktrim-openapi-client/](https://dougborg.github.io/stocktrim-openapi-client/)\n- **Client Guide**: [docs/user-guide/client-guide.md](docs/user-guide/client-guide.md)\n- **Helper Methods**:\n [docs/user-guide/helper-methods.md](docs/user-guide/helper-methods.md)\n- **Testing Guide**: [docs/user-guide/testing.md](docs/user-guide/testing.md)\n- **MCP Server**: [stocktrim_mcp_server/README.md](stocktrim_mcp_server/README.md)\n\n## Contributing\n\nContributions are welcome! Please see:\n\n- [Development Setup](#development) above\n- [Code of Conduct](docs/contributing/code-of-conduct.md)\n- [API Feedback](docs/contributing/api-feedback.md) - Constructive feedback for\n StockTrim developers\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Acknowledgments\n\n- Built with [httpx](https://www.python-httpx.org/) for modern async HTTP\n- Generated with\n [openapi-python-client](https://github.com/openapi-generators/openapi-python-client)\n- MCP server built with [FastMCP](https://github.com/jlowin/fastmcp)\n- Architecture patterns inspired by\n [katana-openapi-client](https://github.com/dougborg/katana-openapi-client)\n\n## Support\n\n- **Issues**:\n [GitHub Issues](https://github.com/dougborg/stocktrim-openapi-client/issues)\n- **Source**: [GitHub Repository](https://github.com/dougborg/stocktrim-openapi-client)\n- **StockTrim**: [www.stocktrim.com](https://www.stocktrim.com/)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A modern, pythonic StockTrim Inventory Management API client with automatic retries, rate limiting, and smart pagination",
"version": "0.5.1",
"project_urls": {
"Bug Tracker": "https://github.com/dougborg/stocktrim-openapi-client/issues",
"Changelog": "https://github.com/dougborg/stocktrim-openapi-client/blob/main/docs/CHANGELOG.md",
"Documentation": "https://dougborg.github.io/stocktrim-openapi-client/",
"Homepage": "https://github.com/dougborg/stocktrim-openapi-client",
"Repository": "https://github.com/dougborg/stocktrim-openapi-client"
},
"split_keywords": [
"api-client",
" async",
" httpx",
" inventory",
" management",
" openapi",
" pagination",
" rate-limiting",
" retry",
" stocktrim"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3904bd7ec8507dcb8b420ae469d9a29a67cd1a0bf9b6f8529303677b19505c9f",
"md5": "1a255dbe918a7e54169e171dda22a972",
"sha256": "e933bffd2db8e3db65a341f8b9d5b77782274afd1717359d804b455a60288130"
},
"downloads": -1,
"filename": "stocktrim_openapi_client-0.5.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1a255dbe918a7e54169e171dda22a972",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.14,>=3.11",
"size": 152950,
"upload_time": "2025-11-01T04:50:36",
"upload_time_iso_8601": "2025-11-01T04:50:36.220967Z",
"url": "https://files.pythonhosted.org/packages/39/04/bd7ec8507dcb8b420ae469d9a29a67cd1a0bf9b6f8529303677b19505c9f/stocktrim_openapi_client-0.5.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7da547f1f75c27c59e4be386c149646591b0051bf9273d87fd2066a25299a19b",
"md5": "f8a37fa2b27353f75be7019ebb72474d",
"sha256": "51644333bc30af1b303490edd23645be9e09b8200168a2af27752ec67c03bb5b"
},
"downloads": -1,
"filename": "stocktrim_openapi_client-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "f8a37fa2b27353f75be7019ebb72474d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.11",
"size": 281393,
"upload_time": "2025-11-01T04:50:38",
"upload_time_iso_8601": "2025-11-01T04:50:38.046019Z",
"url": "https://files.pythonhosted.org/packages/7d/a5/47f1f75c27c59e4be386c149646591b0051bf9273d87fd2066a25299a19b/stocktrim_openapi_client-0.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-01 04:50:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dougborg",
"github_project": "stocktrim-openapi-client",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "stocktrim-openapi-client"
}