Skip to main content

Unofficial Python library for Dikidi (beauty salon booking platform API). Based on reverse-engineered real browser requests.

Project description

📅 dikidi-api

Unofficial Dikidi API Client

PyPI - Version PyPI - Python Version GitHub License CI

🐍 Async + Sync Python client for Dikidi — beauty salon booking platform.

Get appointments, clients, services, schedules, finances, marketing data and more.

Based on reverse-engineered real browser AJAX requests. Built on httpx.


📦 Installation

pip install dikidi-api

Requires Python 3.11+.


🚀 Quick Start

Sync

from dikidi_api import SyncDikidiClient

with SyncDikidiClient("+79991234567", "password", company_id=12345) as client:
    client.auth()

    journal = client.journal.get_api_data("2026-06-01", "2026-06-07")
    for section in ("masters", "resources"):
        info = journal.get(section, {}).get("info", {})
        records = journal.get(section, {}).get("records", {}).get("data", {})
        for mid in info.get("ids", []):
            name = info.get("data", {}).get(mid, {}).get("title", f"ID {mid}")
            count = sum(len(v) for v in records.get(mid, {}).values())
            if count:
                print(f"{name}: {count} appointments")

    clients = client.clients.find("Иван")
    for c in clients:
        print(f"{c['name']}{c['phone']}")

Async

import asyncio
from dikidi_api import AsyncDikidiClient


async def main():
    async with AsyncDikidiClient("+79991234567", "password", company_id=12345) as client:
        await client.auth()
        journal = await client.journal.get_api_data("2026-06-01", "2026-06-07")
        print(journal)


asyncio.run(main())

📖 API Reference

Clients

Both clients share the same endpoint interface. The only difference is await on async calls.

Client Import HTTP Engine Methods
AsyncDikidiClient from dikidi_api import AsyncDikidiClient httpx.AsyncClient async
SyncDikidiClient from dikidi_api import SyncDikidiClient httpx.Client sync
client = SyncDikidiClient(login, password, company_id)
client.auth()
client.close()

# or
with SyncDikidiClient(login, password, company_id) as client:
    client.auth()
client = AsyncDikidiClient(login, password, company_id)
await client.auth()
await client.close()

# or
async with AsyncDikidiClient(login, password, company_id) as client:
    await client.auth()

Journal

Method Description
get_api_data(date_from, date_to, ...) Full journal: masters, resources, records, schedules
get_page() Journal page data
get_appointments(start, end, ...) Filtered appointment list
get_filters_data() Filter data
get_finance_widget_data() Finance summary
get_appointment_config() Booking config

Clients

Method Description
get_filter() Client list page
find(query) Search by name/phone
get_data_on_load(clients_ids, ...) Extended client data

Schedule

Method Description
get_page() Schedule page

Services

Method Description
get_filter() Service list
get_masters() Master list

Finance

Method Description
get_bonuses() Loyalty program
get_payment_filter() Payments
get_payroll() Payroll
get_salary_settlements() Salary settlements
get_salary_sheets() Salary sheets
get_salary_schemes() Salary schemes

Marketing

Method Description
get_mailing() Mailing campaigns
get_reviews() Reviews
get_retention() Client retention
get_season_tickets() Season tickets
get_certificates() Gift certificates
get_tips() Tips
get_fines() Fines
get_ats() Phone system (ATS)
get_sms_ready_messages() Ready SMS messages

Company

Method Description
get_profile() Company profile
get_permissions() Permissions
get_notifications() Notifications
get_alerts() Alerts
get_chat_page() Chat page
get_chat_unread() Unread chat dialogs
get_online_record_properties() Online booking settings
get_resources() Resources

🛠 Development

uv sync                        # Install all dependencies
uv run pytest -v               # Run unit tests (no .env required)
uv run pytest -v -m integration  # Run integration tests (requires .env)
uv build                       # Build sdist + wheel
uv publish                     # Publish to PyPI

Test Suite

Type Count Command
🔬 Unit (mocked) 14 uv run pytest
🌐 Integration (live API) 14 uv run pytest -m integration

Integration tests require .env in project root with LOGIN_DIKIDI, PASSWORD_DIKIDI, COMPANY_DIKIDI. Without it they skip automatically.


🔗 Links


☕ Donate

If this library saves you time or helps your business, consider supporting its development:

Crypto Address
₿ Bitcoin (BTC) bc1q98gg278ywqdfhmxpfttuvsyskdxxmg0ac4sg5a
◉ USDT (TRC-20) TFf8jHqaoTWEEx6XzHTdRpLkMcYcwwRd17
◎ USDT (Solana) 8SZc4jQoMKQeedJMe9VS5bnrWF8PCKvDjwixz3Zg4p2W

Your support keeps the project alive and up to date ❤️


📄 License

MIT

© 2026 Aleksandr Bevz


Not affiliated with Dikidi.

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

dikidi_api-0.1.1.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

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

dikidi_api-0.1.1-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

File details

Details for the file dikidi_api-0.1.1.tar.gz.

File metadata

  • Download URL: dikidi_api-0.1.1.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dikidi_api-0.1.1.tar.gz
Algorithm Hash digest
SHA256 34215ca0fafd79b153a934d7d8b055ebd66c01061c7b6ad1148b6b24a01c0cc5
MD5 88a27062a32c769d6f8b61221d85204d
BLAKE2b-256 debeaccfb46ddabfb2a107ba291a26164a55fc2e974ff05032eff8268e44671a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dikidi_api-0.1.1.tar.gz:

Publisher: release.yml on asbevz/dikidi-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dikidi_api-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: dikidi_api-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 18.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dikidi_api-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2b6fde2aeb157d2d0b50cd8807b416e59fad50d51536b1b43b8f2539924d01fd
MD5 5fcb219ab131b2ab703c0e115a14a1dd
BLAKE2b-256 39177c0f7c6ae18febb457f2fb9d34ba17df718316d4c1d4bb78448eb3807e68

See more details on using hashes here.

Provenance

The following attestation bundles were made for dikidi_api-0.1.1-py3-none-any.whl:

Publisher: release.yml on asbevz/dikidi-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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