Skip to main content

A comprehensive Python wrapper for the Holded API

Project description

Holded API Wrapper

A comprehensive Python wrapper for the Holded API, providing a clean, type-safe interface for interacting with Holded's services.

DISCLAIMER: This is an unofficial library for the Holded API. It is not affiliated with, officially maintained, or endorsed by Holded. The author(s) of this library are not responsible for any misuse or damage caused by using this code. Use at your own risk.

Features

  • Complete API Coverage: Supports all Holded API endpoints across Invoice, CRM, Projects, Team, and Accounting services
  • Type Safety: Comprehensive Pydantic models for request and response validation
  • Synchronous and Asynchronous: Choose between synchronous and asynchronous clients based on your needs
  • Pagination Handling: Automatic pagination for list endpoints
  • Error Handling: Robust error handling with detailed exception hierarchy
  • Rate Limiting: Built-in rate limit handling with exponential backoff

Installation

pip install holded-api

Quick Start

import os
from holded import HoldedClient

# Initialize the client with your API key
api_key = os.environ.get("HOLDED_API_KEY")
client = HoldedClient(api_key=api_key)

# List contacts
contacts = client.contacts.list(limit=10)
for contact in contacts.items:
    print(f"Contact: {contact.name} ({contact.id})")

# Create a new contact
new_contact = client.contacts.create(
    name="Acme Inc.",
    email="info@acme.com",
    type="client"
)
print(f"Created contact with ID: {new_contact.id}")

# Create an invoice
invoice = client.documents.create(
    contact_id=new_contact.id,
    type="invoice",
    date="2023-01-01",
    items=[
        {
            "name": "Product A",
            "units": 2,
            "price": 100
        }
    ]
)
print(f"Created invoice with ID: {invoice.id}")

Asynchronous Usage

import asyncio
import os
from holded import AsyncHoldedClient

async def main():
    api_key = os.environ.get("HOLDED_API_KEY")
    client = AsyncHoldedClient(api_key=api_key)
    
    # List contacts
    contacts = await client.contacts.list(limit=10)
    for contact in contacts.items:
        print(f"Contact: {contact.name} ({contact.id})")
    
    # Don't forget to close the client
    await client.close()

if __name__ == "__main__":
    asyncio.run(main())

Enhanced Data Models

The wrapper includes comprehensive data models for all Holded API resources:

Base Models

  • BaseModel: Foundation for all models with Pydantic configuration
  • BaseResponse: Common response structure
  • PaginationParams: Parameters for paginated endpoints
  • DateRangeParams: Parameters for date filtering
  • SortParams: Parameters for sorting results
  • ErrorResponse: Structure for API errors

Resource-Specific Models

  • Contacts: Contact management with address, bank account, and tax information
  • Documents: Invoices, estimates, orders, and other document types
  • Products: Product catalog with variants, categories, and stock management
  • CRM: Leads, funnels, tasks, and notes
  • Treasury: Accounts, transactions, and categories
  • Projects: Project management, tasks, and time tracking
  • Accounting: Journal entries, accounts, and financial reports
  • Team: Employee management and permissions

Documentation

For more detailed documentation, see:

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

holded_python-0.1.3.tar.gz (56.5 kB view details)

Uploaded Source

Built Distribution

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

holded_python-0.1.3-py3-none-any.whl (59.8 kB view details)

Uploaded Python 3

File details

Details for the file holded_python-0.1.3.tar.gz.

File metadata

  • Download URL: holded_python-0.1.3.tar.gz
  • Upload date:
  • Size: 56.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for holded_python-0.1.3.tar.gz
Algorithm Hash digest
SHA256 31bdf72af9c667c52e87316d68f97d7ccb176729adbc57b4125e1800c741554e
MD5 4ea4952c2f604df373d1ced7fe808e84
BLAKE2b-256 9602e26c5c0b953e4a22c337d211c0c6498a23788f2486596290d0ef95da6643

See more details on using hashes here.

File details

Details for the file holded_python-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: holded_python-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 59.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for holded_python-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9ed99232f35a5e1cfc4af32ff9f0411b84b68777f35441d86b00f059a5178bd8
MD5 9795b2aabf3dacd2237cf3176554b9ba
BLAKE2b-256 acac83a085b2e831d6d443f02886467a8d0fdb9825340f03600255d0e2909427

See more details on using hashes here.

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