Skip to main content

Professional Python client for the cdmon Domains & DNS API

Project description

pycdmon

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

Install

pip install pycdmon

Or from source:

pip install -e .[dev]

Quickstart

from pycdmon import CdmonDomainsClient

with CdmonDomainsClient(api_key="YOUR_API_KEY") as client:
    result = client.check("example.com")
    print(result["data"]["result"]["available"])

Async usage

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())

CLI (cdmon)

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 check

You can also pass the key inline:

cdmon --api-key "$CDMON_API_KEY" check example.com

Supported operations

  • 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

Error handling

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)

Agent-friendly repo workflow

This repository is structured to be easy for coding agents:

  • src/ strict package layout
  • tests/ isolated, deterministic HTTP tests
  • examples/ runnable snippets
  • docs/ implementation and API notes
  • CI with lint + tests

Suggested autonomous loop for agents:

  1. Add/update behavior in src/pycdmon
  2. Add/adjust tests in tests/
  3. Run ruff check . && pytest
  4. Keep commits small and descriptive

Releases

This repository supports automatic releases from main using Python Semantic Release and Conventional Commits.

Why this approach

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 optional twine

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.

How it works

  • merge changes into main
  • GitHub Actions runs validation (ruff check . and pytest)
  • python-semantic-release inspects 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_TOKEN is defined in repository secrets, the workflow also publishes dist/* to PyPI via twine upload
  • if PYPI_TOKEN is not defined but PYPI_MASTER_TOKEN exists, the workflow falls back to that token for PyPI publication

Commit conventions

Use Conventional Commits so release automation can infer version bumps:

  • fix: -> patch release
  • feat: -> minor release
  • feat!: or any commit with BREAKING CHANGE: -> major release
  • docs:, test:, chore: -> no release by default

Example:

git commit -m "fix: handle TXT DNS records with value field"

Notes

  • 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_TOKEN nor PYPI_MASTER_TOKEN is present, the workflow still creates the Git tag and GitHub Release and skips the PyPI upload.

API reference source

Based on cdmon official API docs: https://apidedominioscat.docs.apiary.io/#introduction/endpoints-disponibles

License

MIT

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

pycdmon-1.0.1.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

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

pycdmon-1.0.1-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file pycdmon-1.0.1.tar.gz.

File metadata

  • Download URL: pycdmon-1.0.1.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.13

File hashes

Hashes for pycdmon-1.0.1.tar.gz
Algorithm Hash digest
SHA256 b25dd828ea9a7e88b4ee05ba887e82e2e023fd1a33c5ef016d310ef6738bd083
MD5 3314dc2b15403bbe3a0f1aeb7927d056
BLAKE2b-256 fb410407e7cc2b6a26f1d7cbdab234a4a96f7e4f7fc7cb3b9abb0729de6aae02

See more details on using hashes here.

File details

Details for the file pycdmon-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: pycdmon-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.13

File hashes

Hashes for pycdmon-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 28191965d58cd9a6aedc12553538e25ac252fa59c158b0b4ce54876b55194ad0
MD5 9999186d2a74a1e9cb79f78ca4cc17de
BLAKE2b-256 a680ad643930df6eb5113c38977fbdb839b3ed11d6787f0be2b92ac765b10d03

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