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
🐍 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
- Dikidi: dikidi.ru
- PyPI: dikidi-api
📄 License
© 2026 Aleksandr Bevz
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dikidi_api-0.1.0.tar.gz.
File metadata
- Download URL: dikidi_api-0.1.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23be10b8022c8dfdc972bde87e3833160adfa606630b2e93917aa15da245d678
|
|
| MD5 |
a7604636390d417c259adc76168d2f97
|
|
| BLAKE2b-256 |
2fdbdc1b865b8e54c1f2bb89d0508c4f9cd8e0060b3bf91780c59d758fd9823c
|
Provenance
The following attestation bundles were made for dikidi_api-0.1.0.tar.gz:
Publisher:
release.yml on asbevz/dikidi-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dikidi_api-0.1.0.tar.gz -
Subject digest:
23be10b8022c8dfdc972bde87e3833160adfa606630b2e93917aa15da245d678 - Sigstore transparency entry: 1745327819
- Sigstore integration time:
-
Permalink:
asbevz/dikidi-api@d27f2d7746bae662ead5def909f20553903665c2 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/asbevz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d27f2d7746bae662ead5def909f20553903665c2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file dikidi_api-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dikidi_api-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cfdeef57fc019fbfcc65e9f842926583215f268e64139281f350fa84d9f0832
|
|
| MD5 |
6466cc85d8bbca8810f008e838ee0090
|
|
| BLAKE2b-256 |
7010472154653ac5d964ea169af296144468634d564c672ffeb201b27c71adc4
|
Provenance
The following attestation bundles were made for dikidi_api-0.1.0-py3-none-any.whl:
Publisher:
release.yml on asbevz/dikidi-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dikidi_api-0.1.0-py3-none-any.whl -
Subject digest:
3cfdeef57fc019fbfcc65e9f842926583215f268e64139281f350fa84d9f0832 - Sigstore transparency entry: 1745327906
- Sigstore integration time:
-
Permalink:
asbevz/dikidi-api@d27f2d7746bae662ead5def909f20553903665c2 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/asbevz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d27f2d7746bae662ead5def909f20553903665c2 -
Trigger Event:
push
-
Statement type: