Welcome to the Moloni API Client! This Python package provides a simple and flexible way to interact with the Moloni API. It supports a wide range of endpoints and allows you to manage your Moloni account programmatically.
- Features
- Installation
- Documentation
- Usage
- Credentials
- API Response Handling
- Supported Endpoints
- License
- Comprehensive Coverage: Supports all Moloni API endpoints.
- Flexible Configuration: Easily configure and authenticate your requests.
- Built-in Models: Utilize predefined Pydantic models for request validation.
You can install the Moloni API Client using pip:
pip install python-moloni
Documentation is available here
You can set up a fully configured client with all necessary authentication details:
from moloni.api.companies_client import CompaniesClient
from moloni.base import AuthConfig, MoloniBaseUrl
import logging
logger = logging.getLogger(__name__)
companies = CompaniesClient(
environment=MoloniBaseUrl.PROD,
auth_config=AuthConfig(
client_id="your_client_id",
client_secret="your_client_secret",
username="your_username", # Optional if refresh_token is set
password="your_password", # Optional if refresh_token is set
refresh_token="your_refresh_token", # Optional if username and password are set
),
log_level="INFO",
version="v1",
validate=True,
)
logger.info(companies.get_all())
You can also use the predefined models as entrypoints to the API:
from moloni.api import CustomersGetBySearchModel
from moloni.base import AuthConfig, MoloniBaseUrl
from pprint import pprint
auth_config = AuthConfig(
client_id="your_client_id",
client_secret="your_client_secret",
username="your_username", # Optional if refresh_token is set
password="your_password", # Optional if refresh_token is set
refresh_token="your_refresh_token", # Optional if username and password are set
)
with CustomersGetBySearchModel(company_id=5, search="cafe").connect(
auth_config=auth_config
) as api:
pprint(api.request().payload)
For a minimal setup, credentials can be passed via environment variables:
from moloni.api.companies_client import CompaniesClient
from moloni.api.products_client import ProductsClient, ProductsGetAllModel
import logging
logger = logging.getLogger(__name__)
companies = CompaniesClient()
logger.info(companies.get_all())
products = ProductsClient()
logger.info(products.get_all(dict(company_id=5, category_id=8231525)))
product = products.insert(
dict(
company_id=5,
category_id=123456,
unit_id=134568,
has_stock="0",
name="Name",
reference="Reference",
price="10",
type="1",
taxes=[{"tax_id": 123455, "order": 0, "cumulative": 0}],
)
)
# or with a model
products_response = products.get_all(
ProductsGetAllModel(company_id=5, category_id=8231525)
)
You can pass your credentials directly in the code or via environment variables:
from moloni.base import AuthConfig
auth_config = AuthConfig(
client_id='your_client_id',
client_secret='your_client_secret',
username='your_username',
password='your_password',
refresh_token='your_refresh_token'
)
Alternatively, set the following environment variables:
export MOLONI_CLIENT_ID="your_client_id"
export MOLONI_CLIENT_SECRET="your_client_secret"
export MOLONI_REFRESH_TOKEN="your_refresh_token"
export MOLONI_USERNAME="your_username"
export MOLONI_PASSWORD="your_password"
The API responses are encapsulated in an ApiResponse object, which provides methods to access the response payload and handle pagination.
response = companies.get_all()
print(response.payload) # Access the JSON payload
print(response.status_code) # Check the HTTP status code
try:
next_page = response.next(qty=10)
print("Fetching next page with:", next_page)
except NoMoreRecords:
print("No more records to fetch.")
This client supports the full list of Moloni API endpoints, including:
• BankaccountsClient
• BillsofladingClient
• CompaniesClient
• CustomersClient
• InvoicesClient
• ProductsClient
• WarehousesClient
For a full list, please refer to the documentation.
This project is licensed under the MIT License. See the LICENSE file for details.
We are not affiliated with Moloni, this is an unofficial wrapper to access their API. For more information, please visit their official website.