Professional Python client for cdmon Domains & DNS API.
- Full endpoint coverage for core domain + DNS operations
- Sync and async clients
- Typed payload helpers
- Clean error model (
CdmonApiError,CdmonTransportError) - Designed for human and agent workflows
pip install pycdmonOr from source:
pip install -e .[dev]from pycdmon import CdmonDomainsClient
with CdmonDomainsClient(api_key="YOUR_API_KEY") as client:
result = client.check("example.com")
print(result["data"]["result"]["available"])import asyncio
from pycdmon import AsyncCdmonDomainsClient
async def main() -> None:
async with AsyncCdmonDomainsClient(api_key="YOUR_API_KEY") as client:
print(await client.check("example.com"))
asyncio.run(main())After installation, a cdmon command is available:
export CDMON_API_KEY="your_api_key"
cdmon check example.com
cdmon info example.com
cdmon authcode example.com
cdmon renew example.com --period 1
cdmon transfer example.com 'AUTH-CODE'
cdmon dns-records example.com
cdmon dns-create example.com --host @ --type A --destination 1.2.3.4 --ttl 900
cdmon dns-delete example.com --host @ --type A
cdmon price com create
cdmon periods com renew
cdmon balance
cdmon status checkYou can also pass the key inline:
cdmon --api-key "$CDMON_API_KEY" check example.com- Endpoint status:
status - Domains:
check,info,authcode,list_domains,register,renew,transfer,restore - Domain options:
set_block,set_whois_private,set_dnssec,modify_contact - DNS:
set_nameservers,get_dns_records,create_dns_record,edit_dns_record,delete_dns_record,send_dns_key - Billing/meta:
get_price,get_periods,balance - Auto-renewal:
get_autorenewal,manage_autorenewal
from pycdmon import CdmonApiError, CdmonDomainsClient
try:
with CdmonDomainsClient(api_key="...") as client:
client.transfer("example.com", "wrong-authcode")
except CdmonApiError as exc:
print(exc.status_code, exc.message)
print(exc.payload)This repository is structured to be easy for coding agents:
src/strict package layouttests/isolated, deterministic HTTP testsexamples/runnable snippetsdocs/implementation and API notes- CI with lint + tests
Suggested autonomous loop for agents:
- Add/update behavior in
src/pycdmon - Add/adjust tests in
tests/ - Run
ruff check . && pytest - Keep commits small and descriptive
This repository supports automatic releases from main using Python Semantic Release and Conventional Commits.
This is a Python package, so the release automation is now Python-native:
- no
package.json - no Node-based
semantic-release - versioning is configured in
pyproject.toml - the workflow uses
python-semantic-release,build, and optionaltwine
Conventional Commits are still used, but they are only the input convention for deciding the version bump. They do not imply a Node/npm release stack.
- merge changes into
main - GitHub Actions runs validation (
ruff check .andpytest) python-semantic-releaseinspects commit messages since the last tag- if a release is warranted, it will:
- determine the next version
- update
pyproject.toml - create the release commit and tag
- publish the GitHub Release
- if
PYPI_TOKENis defined in repository secrets, the workflow also publishesdist/*to PyPI viatwine upload - if
PYPI_TOKENis not defined butPYPI_MASTER_TOKENexists, the workflow falls back to that token for PyPI publication
Use Conventional Commits so release automation can infer version bumps:
fix:-> patch releasefeat:-> minor releasefeat!:or any commit withBREAKING CHANGE:-> major releasedocs:,test:,chore:-> no release by default
Example:
git commit -m "fix: handle TXT DNS records with value field"- The release workflow only runs on pushes to
main. - The repository must allow GitHub Actions to push release commits and tags using
GITHUB_TOKEN. - If branch protection is strict, make sure it still permits the release workflow to push the generated release commit.
- If neither
PYPI_TOKENnorPYPI_MASTER_TOKENis present, the workflow still creates the Git tag and GitHub Release and skips the PyPI upload.
Based on cdmon official API docs: https://apidedominioscat.docs.apiary.io/#introduction/endpoints-disponibles
MIT