- Remove custom generate_docs.py script - Use mkdocstrings inline ::: syntax in markdown files - docs/api-reference.md: Main API reference with inline docs - docs/api/*.md: Category pages with inline injections - Pre-commit: Build mkdocs on commit Documentation now uses standard mkdocstrings approach.
1 line
72 KiB
JSON
1 line
72 KiB
JSON
{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Kwork API Documentation","text":"<p>Unofficial Python client for Kwork.ru API.</p>"},{"location":"#quick-start","title":"Quick Start","text":""},{"location":"#installation","title":"Installation","text":"<pre><code>pip install kwork-api\n</code></pre>"},{"location":"#authentication","title":"Authentication","text":"<pre><code>from kwork_api import KworkClient\n\n# Login with credentials\nclient = await KworkClient.login(\"username\", \"password\")\n\n# Or restore from token\nclient = KworkClient(token=\"your_web_auth_token\")\n</code></pre>"},{"location":"#basic-usage","title":"Basic Usage","text":"<pre><code>async with KworkClient(token=\"token\") as client:\n # Get catalog\n catalog = await client.catalog.get_list(page=1)\n\n # Get kwork details\n details = await client.catalog.get_details(kwork_id=123)\n\n # Get projects\n projects = await client.projects.get_list()\n</code></pre>"},{"location":"#documentation-sections","title":"Documentation Sections","text":"<ul> <li>API Reference \u2014 All endpoints and methods</li> <li>Models \u2014 Pydantic models</li> <li>Errors \u2014 Exception classes</li> <li>Examples \u2014 Usage examples</li> </ul>"},{"location":"#features","title":"Features","text":"<ul> <li>\u2705 Full API coverage (45 endpoints)</li> <li>\u2705 Async/await support</li> <li>\u2705 Pydantic models for type safety</li> <li>\u2705 Clear error handling</li> <li>\u2705 Session management</li> </ul>"},{"location":"#rate-limiting","title":"Rate Limiting","text":"<p>Rate limiting is not implemented in the library. Handle it in your code:</p> <pre><code>import asyncio\n\nfor page in range(1, 10):\n catalog = await client.catalog.get_list(page=page)\n await asyncio.sleep(1) # 1 second delay\n</code></pre>"},{"location":"#error-handling","title":"Error Handling","text":"<pre><code>from kwork_api import KworkAuthError, KworkApiError\n\ntry:\n catalog = await client.catalog.get_list()\nexcept KworkAuthError as e:\n print(f\"Auth failed: {e}\")\nexcept KworkApiError as e:\n print(f\"API error [{e.status_code}]: {e.message}\")\n</code></pre> <p>Documentation auto-generated from source code.</p>"},{"location":"api-reference/","title":"API Reference","text":"<p>Auto-generated API documentation using mkdocstrings.</p>"},{"location":"api-reference/#client","title":"Client","text":""},{"location":"api-reference/#kwork_api.client.KworkClient","title":"kwork_api.client.KworkClient","text":"<pre><code>KworkClient(\n token=None, cookies=None, timeout=30.0, base_url=None\n)\n</code></pre> <p>Kwork.ru API client.</p> Usage <p>Initialize client.</p> <p>Parameters:</p> Name Type Description Default <code>token</code> <code>Optional[str]</code> <p>Web auth token (from getWebAuthToken)</p> <code>None</code> <code>cookies</code> <code>Optional[dict[str, str]]</code> <p>Session cookies (optional, will be set from token)</p> <code>None</code> <code>timeout</code> <code>float</code> <p>Request timeout in seconds</p> <code>30.0</code> <code>base_url</code> <code>Optional[str]</code> <p>Custom base URL (for testing)</p> <code>None</code> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(\n self,\n token: Optional[str] = None,\n cookies: Optional[dict[str, str]] = None,\n timeout: float = 30.0,\n base_url: Optional[str] = None,\n):\n \"\"\"\n Initialize client.\n\n Args:\n token: Web auth token (from getWebAuthToken)\n cookies: Session cookies (optional, will be set from token)\n timeout: Request timeout in seconds\n base_url: Custom base URL (for testing)\n \"\"\"\n self.base_url = base_url or self.BASE_URL\n self.timeout = timeout\n self._token = token\n self._cookies = cookies or {}\n\n # Initialize HTTP client\n self._client: Optional[httpx.AsyncClient] = None\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient--login-with-credentials","title":"Login with credentials","text":"<p>client = await KworkClient.login(\"username\", \"password\")</p>"},{"location":"api-reference/#kwork_api.client.KworkClient--or-restore-from-token","title":"Or restore from token","text":"<p>client = KworkClient(token=\"your_web_auth_token\")</p>"},{"location":"api-reference/#kwork_api.client.KworkClient--make-requests","title":"Make requests","text":"<p>catalog = await client.catalog.get_list(page=1)</p>"},{"location":"api-reference/#kwork_api.client.KworkClient-attributes","title":"Attributes","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.catalog","title":"catalog <code>property</code>","text":"<pre><code>catalog\n</code></pre> <p>Catalog API.</p>"},{"location":"api-reference/#kwork_api.client.KworkClient.notifications","title":"notifications <code>property</code>","text":"<pre><code>notifications\n</code></pre> <p>Notifications API.</p>"},{"location":"api-reference/#kwork_api.client.KworkClient.other","title":"other <code>property</code>","text":"<pre><code>other\n</code></pre> <p>Other endpoints.</p>"},{"location":"api-reference/#kwork_api.client.KworkClient.projects","title":"projects <code>property</code>","text":"<pre><code>projects\n</code></pre> <p>Projects API.</p>"},{"location":"api-reference/#kwork_api.client.KworkClient.reference","title":"reference <code>property</code>","text":"<pre><code>reference\n</code></pre> <p>Reference data API.</p>"},{"location":"api-reference/#kwork_api.client.KworkClient.user","title":"user <code>property</code>","text":"<pre><code>user\n</code></pre> <p>User API.</p>"},{"location":"api-reference/#kwork_api.client.KworkClient-classes","title":"Classes","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.CatalogAPI","title":"CatalogAPI","text":"<pre><code>CatalogAPI(client)\n</code></pre> <p>Catalog/Kworks API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.CatalogAPI-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.CatalogAPI.get_details","title":"get_details <code>async</code>","text":"<pre><code>get_details(kwork_id)\n</code></pre> <p>Get kwork details.</p> <p>Parameters:</p> Name Type Description Default <code>kwork_id</code> <code>int</code> <p>Kwork ID</p> required <p>Returns:</p> Type Description <code>KworkDetails</code> <p>KworkDetails with full information</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_details(self, kwork_id: int) -> KworkDetails:\n \"\"\"\n Get kwork details.\n\n Args:\n kwork_id: Kwork ID\n\n Returns:\n KworkDetails with full information\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/getKworkDetails\",\n json={\"kwork_id\": kwork_id},\n )\n return KworkDetails.model_validate(data)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.CatalogAPI.get_details_extra","title":"get_details_extra <code>async</code>","text":"<pre><code>get_details_extra(kwork_id)\n</code></pre> <p>Get additional kwork details.</p> <p>Parameters:</p> Name Type Description Default <code>kwork_id</code> <code>int</code> <p>Kwork ID</p> required <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>Extra details dict</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_details_extra(self, kwork_id: int) -> dict[str, Any]:\n \"\"\"\n Get additional kwork details.\n\n Args:\n kwork_id: Kwork ID\n\n Returns:\n Extra details dict\n \"\"\"\n return await self.client._request(\n \"POST\",\n \"/getKworkDetailsExtra\",\n json={\"kwork_id\": kwork_id},\n )\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.CatalogAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list(page=1, category_id=None, sort='recommend')\n</code></pre> <p>Get kworks catalog.</p> <p>Parameters:</p> Name Type Description Default <code>page</code> <code>int</code> <p>Page number</p> <code>1</code> <code>category_id</code> <code>Optional[int]</code> <p>Category filter</p> <code>None</code> <code>sort</code> <code>str</code> <p>Sort option (recommend, price_asc, price_desc, etc.)</p> <code>'recommend'</code> <p>Returns:</p> Type Description <code>CatalogResponse</code> <p>CatalogResponse with kworks and pagination</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(\n self,\n page: int = 1,\n category_id: Optional[int] = None,\n sort: str = \"recommend\",\n) -> CatalogResponse:\n \"\"\"\n Get kworks catalog.\n\n Args:\n page: Page number\n category_id: Category filter\n sort: Sort option (recommend, price_asc, price_desc, etc.)\n\n Returns:\n CatalogResponse with kworks and pagination\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/catalogMainv2\",\n json={\n \"page\": page,\n \"category_id\": category_id,\n \"sort\": sort,\n },\n )\n return CatalogResponse.model_validate(data)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.NotificationsAPI","title":"NotificationsAPI","text":"<pre><code>NotificationsAPI(client)\n</code></pre> <p>Notifications and messages endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.NotificationsAPI-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.NotificationsAPI.fetch","title":"fetch <code>async</code>","text":"<pre><code>fetch()\n</code></pre> <p>Fetch new notifications.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def fetch(self) -> NotificationsResponse:\n \"\"\"Fetch new notifications.\"\"\"\n data = await self.client._request(\"POST\", \"/notificationsFetch\")\n return NotificationsResponse.model_validate(data)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs","title":"get_blocked_dialogs <code>async</code>","text":"<pre><code>get_blocked_dialogs()\n</code></pre> <p>Get blocked dialogs.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_blocked_dialogs(self) -> list[Dialog]:\n \"\"\"Get blocked dialogs.\"\"\"\n data = await self.client._request(\"POST\", \"/blockedDialogList\")\n return [Dialog.model_validate(d) for d in data.get(\"dialogs\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.NotificationsAPI.get_dialogs","title":"get_dialogs <code>async</code>","text":"<pre><code>get_dialogs()\n</code></pre> <p>Get dialogs list.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_dialogs(self) -> list[Dialog]:\n \"\"\"Get dialogs list.\"\"\"\n data = await self.client._request(\"POST\", \"/dialogs\")\n return [Dialog.model_validate(d) for d in data.get(\"dialogs\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.NotificationsAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list()\n</code></pre> <p>Get notifications list.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(self) -> NotificationsResponse:\n \"\"\"Get notifications list.\"\"\"\n data = await self.client._request(\"POST\", \"/notifications\")\n return NotificationsResponse.model_validate(data)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI","title":"OtherAPI","text":"<pre><code>OtherAPI(client)\n</code></pre> <p>Other API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_actor","title":"get_actor <code>async</code>","text":"<pre><code>get_actor()\n</code></pre> <p>Get actor info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_actor(self) -> dict[str, Any]:\n \"\"\"Get actor info.\"\"\"\n return await self.client._request(\"POST\", \"/actor\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_channel","title":"get_channel <code>async</code>","text":"<pre><code>get_channel()\n</code></pre> <p>Get channel info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_channel(self) -> dict[str, Any]:\n \"\"\"Get channel info.\"\"\"\n return await self.client._request(\"POST\", \"/getChannel\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_exchange_info","title":"get_exchange_info <code>async</code>","text":"<pre><code>get_exchange_info()\n</code></pre> <p>Get exchange info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_exchange_info(self) -> dict[str, Any]:\n \"\"\"Get exchange info.\"\"\"\n return await self.client._request(\"POST\", \"/exchangeInfo\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_favorite_categories","title":"get_favorite_categories <code>async</code>","text":"<pre><code>get_favorite_categories()\n</code></pre> <p>Get favorite categories.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_favorite_categories(self) -> list[int]:\n \"\"\"Get favorite categories.\"\"\"\n data = await self.client._request(\"POST\", \"/favoriteCategories\")\n return data.get(\"categories\", [])\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_in_app_notification","title":"get_in_app_notification <code>async</code>","text":"<pre><code>get_in_app_notification()\n</code></pre> <p>Get in-app notification.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_in_app_notification(self) -> dict[str, Any]:\n \"\"\"Get in-app notification.\"\"\"\n return await self.client._request(\"POST\", \"/getInAppNotification\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_kworks_status","title":"get_kworks_status <code>async</code>","text":"<pre><code>get_kworks_status()\n</code></pre> <p>Get kworks status.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_kworks_status(self) -> dict[str, Any]:\n \"\"\"Get kworks status.\"\"\"\n return await self.client._request(\"POST\", \"/kworksStatusList\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_offers","title":"get_offers <code>async</code>","text":"<pre><code>get_offers()\n</code></pre> <p>Get offers.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_offers(self) -> dict[str, Any]:\n \"\"\"Get offers.\"\"\"\n return await self.client._request(\"POST\", \"/offers\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_security_user_data","title":"get_security_user_data <code>async</code>","text":"<pre><code>get_security_user_data()\n</code></pre> <p>Get security user data.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_security_user_data(self) -> dict[str, Any]:\n \"\"\"Get security user data.\"\"\"\n return await self.client._request(\"POST\", \"/getSecurityUserData\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks","title":"get_viewed_kworks <code>async</code>","text":"<pre><code>get_viewed_kworks()\n</code></pre> <p>Get viewed kworks.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_viewed_kworks(self) -> list[Kwork]:\n \"\"\"Get viewed kworks.\"\"\"\n data = await self.client._request(\"POST\", \"/viewedCatalogKworks\")\n return [Kwork.model_validate(k) for k in data.get(\"kworks\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_wants","title":"get_wants <code>async</code>","text":"<pre><code>get_wants()\n</code></pre> <p>Get user wants.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_wants(self) -> dict[str, Any]:\n \"\"\"Get user wants.\"\"\"\n return await self.client._request(\"POST\", \"/myWants\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.get_wants_status","title":"get_wants_status <code>async</code>","text":"<pre><code>get_wants_status()\n</code></pre> <p>Get wants status.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_wants_status(self) -> dict[str, Any]:\n \"\"\"Get wants status.\"\"\"\n return await self.client._request(\"POST\", \"/wantsStatusList\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.go_offline","title":"go_offline <code>async</code>","text":"<pre><code>go_offline()\n</code></pre> <p>Set user status to offline.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def go_offline(self) -> dict[str, Any]:\n \"\"\"Set user status to offline.\"\"\"\n return await self.client._request(\"POST\", \"/offline\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.is_dialog_allow","title":"is_dialog_allow <code>async</code>","text":"<pre><code>is_dialog_allow(user_id)\n</code></pre> <p>Check if dialog is allowed.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def is_dialog_allow(self, user_id: int) -> bool:\n \"\"\"Check if dialog is allowed.\"\"\"\n data = await self.client._request(\n \"POST\",\n \"/isDialogAllow\",\n json={\"user_id\": user_id},\n )\n return data.get(\"allowed\", False)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.OtherAPI.update_settings","title":"update_settings <code>async</code>","text":"<pre><code>update_settings(settings)\n</code></pre> <p>Update user settings.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def update_settings(self, settings: dict[str, Any]) -> dict[str, Any]:\n \"\"\"Update user settings.\"\"\"\n return await self.client._request(\"POST\", \"/updateSettings\", json=settings)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ProjectsAPI","title":"ProjectsAPI","text":"<pre><code>ProjectsAPI(client)\n</code></pre> <p>Projects (freelance orders) API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ProjectsAPI-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.ProjectsAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list(page=1, category_id=None)\n</code></pre> <p>Get projects list.</p> <p>Parameters:</p> Name Type Description Default <code>page</code> <code>int</code> <p>Page number</p> <code>1</code> <code>category_id</code> <code>Optional[int]</code> <p>Category filter</p> <code>None</code> <p>Returns:</p> Type Description <code>ProjectsResponse</code> <p>ProjectsResponse with projects and pagination</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(\n self,\n page: int = 1,\n category_id: Optional[int] = None,\n) -> ProjectsResponse:\n \"\"\"\n Get projects list.\n\n Args:\n page: Page number\n category_id: Category filter\n\n Returns:\n ProjectsResponse with projects and pagination\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/projects\",\n json={\n \"page\": page,\n \"category_id\": category_id,\n },\n )\n return ProjectsResponse.model_validate(data)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders","title":"get_payer_orders <code>async</code>","text":"<pre><code>get_payer_orders()\n</code></pre> <p>Get orders where user is customer.</p> <p>Returns:</p> Type Description <code>list[Project]</code> <p>List of projects</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_payer_orders(self) -> list[Project]:\n \"\"\"\n Get orders where user is customer.\n\n Returns:\n List of projects\n \"\"\"\n data = await self.client._request(\"POST\", \"/payerOrders\")\n return [Project.model_validate(p) for p in data.get(\"orders\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders","title":"get_worker_orders <code>async</code>","text":"<pre><code>get_worker_orders()\n</code></pre> <p>Get orders where user is performer.</p> <p>Returns:</p> Type Description <code>list[Project]</code> <p>List of projects</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_worker_orders(self) -> list[Project]:\n \"\"\"\n Get orders where user is performer.\n\n Returns:\n List of projects\n \"\"\"\n data = await self.client._request(\"POST\", \"/workerOrders\")\n return [Project.model_validate(p) for p in data.get(\"orders\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI","title":"ReferenceAPI","text":"<pre><code>ReferenceAPI(client)\n</code></pre> <p>Reference data (cities, countries, etc.) endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI.get_badges_info","title":"get_badges_info <code>async</code>","text":"<pre><code>get_badges_info()\n</code></pre> <p>Get badges info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_badges_info(self) -> list[Badge]:\n \"\"\"Get badges info.\"\"\"\n data = await self.client._request(\"POST\", \"/getBadgesInfo\")\n return [Badge.model_validate(b) for b in data.get(\"badges\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI.get_cities","title":"get_cities <code>async</code>","text":"<pre><code>get_cities()\n</code></pre> <p>Get all cities.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_cities(self) -> list[City]:\n \"\"\"Get all cities.\"\"\"\n data = await self.client._request(\"POST\", \"/cities\")\n return [City.model_validate(c) for c in data.get(\"cities\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI.get_countries","title":"get_countries <code>async</code>","text":"<pre><code>get_countries()\n</code></pre> <p>Get all countries.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_countries(self) -> list[Country]:\n \"\"\"Get all countries.\"\"\"\n data = await self.client._request(\"POST\", \"/countries\")\n return [Country.model_validate(c) for c in data.get(\"countries\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI.get_features","title":"get_features <code>async</code>","text":"<pre><code>get_features()\n</code></pre> <p>Get available features.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_features(self) -> list[Feature]:\n \"\"\"Get available features.\"\"\"\n data = await self.client._request(\"POST\", \"/getAvailableFeatures\")\n return [Feature.model_validate(f) for f in data.get(\"features\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI.get_public_features","title":"get_public_features <code>async</code>","text":"<pre><code>get_public_features()\n</code></pre> <p>Get public features.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_public_features(self) -> list[Feature]:\n \"\"\"Get public features.\"\"\"\n data = await self.client._request(\"POST\", \"/getPublicFeatures\")\n return [Feature.model_validate(f) for f in data.get(\"features\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.ReferenceAPI.get_timezones","title":"get_timezones <code>async</code>","text":"<pre><code>get_timezones()\n</code></pre> <p>Get all timezones.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_timezones(self) -> list[TimeZone]:\n \"\"\"Get all timezones.\"\"\"\n data = await self.client._request(\"POST\", \"/timezones\")\n return [TimeZone.model_validate(t) for t in data.get(\"timezones\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.UserAPI","title":"UserAPI","text":"<pre><code>UserAPI(client)\n</code></pre> <p>User API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.UserAPI-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.UserAPI.get_favorite_kworks","title":"get_favorite_kworks <code>async</code>","text":"<pre><code>get_favorite_kworks()\n</code></pre> <p>Get favorite kworks.</p> <p>Returns:</p> Type Description <code>list[Kwork]</code> <p>List of kworks</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_favorite_kworks(self) -> list[Kwork]:\n \"\"\"\n Get favorite kworks.\n\n Returns:\n List of kworks\n \"\"\"\n data = await self.client._request(\"POST\", \"/favoriteKworks\")\n return [Kwork.model_validate(k) for k in data.get(\"kworks\", [])]\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.UserAPI.get_info","title":"get_info <code>async</code>","text":"<pre><code>get_info()\n</code></pre> <p>Get current user info.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>User info dict</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_info(self) -> dict[str, Any]:\n \"\"\"\n Get current user info.\n\n Returns:\n User info dict\n \"\"\"\n return await self.client._request(\"POST\", \"/user\")\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.UserAPI.get_reviews","title":"get_reviews <code>async</code>","text":"<pre><code>get_reviews(user_id=None, page=1)\n</code></pre> <p>Get user reviews.</p> <p>Parameters:</p> Name Type Description Default <code>user_id</code> <code>Optional[int]</code> <p>User ID (None for current user)</p> <code>None</code> <code>page</code> <code>int</code> <p>Page number</p> <code>1</code> <p>Returns:</p> Type Description <code>ReviewsResponse</code> <p>ReviewsResponse</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_reviews(\n self,\n user_id: Optional[int] = None,\n page: int = 1,\n) -> ReviewsResponse:\n \"\"\"\n Get user reviews.\n\n Args:\n user_id: User ID (None for current user)\n page: Page number\n\n Returns:\n ReviewsResponse\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/userReviews\",\n json={\"user_id\": user_id, \"page\": page},\n )\n return ReviewsResponse.model_validate(data)\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient-functions","title":"Functions","text":""},{"location":"api-reference/#kwork_api.client.KworkClient.close","title":"close <code>async</code>","text":"<pre><code>close()\n</code></pre> <p>Close HTTP client.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def close(self) -> None:\n \"\"\"Close HTTP client.\"\"\"\n if self._client and not self._client.is_closed:\n await self._client.aclose()\n</code></pre>"},{"location":"api-reference/#kwork_api.client.KworkClient.login","title":"login <code>async</code> <code>classmethod</code>","text":"<pre><code>login(username, password, timeout=30.0)\n</code></pre> <p>Login with username and password.</p> <p>Parameters:</p> Name Type Description Default <code>username</code> <code>str</code> <p>Kwork username or email</p> required <code>password</code> <code>str</code> <p>Kwork password</p> required <code>timeout</code> <code>float</code> <p>Request timeout</p> <code>30.0</code> <p>Returns:</p> Type Description <code>KworkClient</code> <p>Authenticated KworkClient instance</p> <p>Raises:</p> Type Description <code>KworkAuthError</code> <p>If login fails</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>@classmethod\nasync def login(\n cls,\n username: str,\n password: str,\n timeout: float = 30.0,\n) -> \"KworkClient\":\n \"\"\"\n Login with username and password.\n\n Args:\n username: Kwork username or email\n password: Kwork password\n timeout: Request timeout\n\n Returns:\n Authenticated KworkClient instance\n\n Raises:\n KworkAuthError: If login fails\n \"\"\"\n client = cls(timeout=timeout)\n\n try:\n async with client._get_httpx_client() as http_client:\n # Step 1: Login to get session cookies\n login_data = {\n \"login_or_email\": username,\n \"password\": password,\n }\n\n response = await http_client.post(\n cls.LOGIN_URL,\n data=login_data,\n headers={\"Referer\": \"https://kwork.ru/\"},\n )\n\n if response.status_code != 200:\n raise KworkAuthError(f\"Login failed: {response.status_code}\")\n\n # Extract cookies\n cookies = dict(response.cookies)\n\n if \"userId\" not in cookies:\n raise KworkAuthError(\"Login failed: no userId in cookies\")\n\n # Step 2: Get web auth token\n token_response = await http_client.post(\n cls.TOKEN_URL,\n json={},\n )\n\n if token_response.status_code != 200:\n raise KworkAuthError(f\"Token request failed: {token_response.status_code}\")\n\n token_data = token_response.json()\n web_token = token_data.get(\"web_auth_token\")\n\n if not web_token:\n raise KworkAuthError(\"No web_auth_token in response\")\n\n # Create new client with token\n return cls(token=web_token, cookies=cookies, timeout=timeout)\n\n except httpx.RequestError as e:\n raise KworkNetworkError(f\"Login request failed: {e}\")\n</code></pre>"},{"location":"api-reference/#models","title":"Models","text":""},{"location":"api-reference/#kwork_api.models.Kwork","title":"kwork_api.models.Kwork","text":"<p> Bases: <code>BaseModel</code></p> <p>Kwork (service) information.</p>"},{"location":"api-reference/#kwork_api.models.KworkDetails","title":"kwork_api.models.KworkDetails","text":"<p> Bases: <code>Kwork</code></p> <p>Extended kwork details.</p>"},{"location":"api-reference/#kwork_api.models.Project","title":"kwork_api.models.Project","text":"<p> Bases: <code>BaseModel</code></p> <p>Project (freelance order) information.</p>"},{"location":"api-reference/#kwork_api.models.CatalogResponse","title":"kwork_api.models.CatalogResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>Catalog response with kworks and pagination.</p>"},{"location":"api-reference/#errors","title":"Errors","text":""},{"location":"api-reference/#kwork_api.errors.KworkError","title":"kwork_api.errors.KworkError","text":"<pre><code>KworkError(message, response=None)\n</code></pre> <p> Bases: <code>Exception</code></p> <p>Base exception for all Kwork API errors.</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str, response: Optional[Any] = None):\n self.message = message\n self.response = response\n super().__init__(self.message)\n</code></pre>"},{"location":"api-reference/#kwork_api.errors.KworkAuthError","title":"kwork_api.errors.KworkAuthError","text":"<pre><code>KworkAuthError(\n message=\"Authentication failed\", response=None\n)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>Authentication/authorization error.</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str = \"Authentication failed\", response: Optional[Any] = None):\n super().__init__(message, response)\n</code></pre>"},{"location":"api-reference/#kwork_api.errors.KworkApiError","title":"kwork_api.errors.KworkApiError","text":"<pre><code>KworkApiError(message, status_code=None, response=None)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>API request error (4xx, 5xx).</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(\n self,\n message: str,\n status_code: Optional[int] = None,\n response: Optional[Any] = None,\n):\n self.status_code = status_code\n super().__init__(message, response)\n</code></pre>"},{"location":"examples/","title":"Usage Examples","text":""},{"location":"examples/#catalog","title":"Catalog","text":""},{"location":"examples/#get-catalog-list","title":"Get Catalog List","text":"<pre><code>from kwork_api import KworkClient\n\nasync with KworkClient(token=\"token\") as client:\n catalog = await client.catalog.get_list(page=1, category_id=5)\n\n for kwork in catalog.kworks:\n print(f\"{kwork.title}: {kwork.price} RUB\")\n\n # Pagination\n if catalog.pagination:\n print(f\"Page {catalog.pagination.current_page} of {catalog.pagination.total_pages}\")\n</code></pre>"},{"location":"examples/#get-kwork-details","title":"Get Kwork Details","text":"<pre><code>details = await client.catalog.get_details(kwork_id=123)\n\nprint(f\"Title: {details.title}\")\nprint(f\"Price: {details.price}\")\nprint(f\"Description: {details.full_description}\")\nprint(f\"Delivery: {details.delivery_time} days\")\n</code></pre>"},{"location":"examples/#projects","title":"Projects","text":""},{"location":"examples/#get-projects-list","title":"Get Projects List","text":"<pre><code>projects = await client.projects.get_list(page=1)\n\nfor project in projects.projects:\n print(f\"{project.title} - {project.budget} RUB\")\n</code></pre>"},{"location":"examples/#get-customer-orders","title":"Get Customer Orders","text":"<pre><code>orders = await client.projects.get_payer_orders()\n\nfor order in orders:\n print(f\"Order #{order.id}: {order.status}\")\n</code></pre>"},{"location":"examples/#get-performer-orders","title":"Get Performer Orders","text":"<pre><code>orders = await client.projects.get_worker_orders()\n\nfor order in orders:\n print(f\"Work #{order.id}: {order.status}\")\n</code></pre>"},{"location":"examples/#user","title":"User","text":""},{"location":"examples/#get-user-info","title":"Get User Info","text":"<pre><code>user_info = await client.user.get_info()\nprint(f\"Username: {user_info.get('username')}\")\n</code></pre>"},{"location":"examples/#get-reviews","title":"Get Reviews","text":"<pre><code>reviews = await client.user.get_reviews(page=1)\n\nfor review in reviews.reviews:\n print(f\"Rating: {review.rating}/5 - {review.comment}\")\n</code></pre>"},{"location":"examples/#get-favorite-kworks","title":"Get Favorite Kworks","text":"<pre><code>favorites = await client.user.get_favorite_kworks()\n\nfor kwork in favorites:\n print(f\"Favorite: {kwork.title}\")\n</code></pre>"},{"location":"examples/#reference-data","title":"Reference Data","text":""},{"location":"examples/#get-cities","title":"Get Cities","text":"<pre><code>cities = await client.reference.get_cities()\n\nfor city in cities:\n print(f\"{city.id}: {city.name}\")\n</code></pre>"},{"location":"examples/#get-countries","title":"Get Countries","text":"<pre><code>countries = await client.reference.get_countries()\n\nfor country in countries:\n print(f\"{country.id}: {country.name}\")\n</code></pre>"},{"location":"examples/#get-timezones","title":"Get Timezones","text":"<pre><code>timezones = await client.reference.get_timezones()\n\nfor tz in timezones:\n print(f\"{tz.id}: {tz.name} ({tz.offset})\")\n</code></pre>"},{"location":"examples/#notifications","title":"Notifications","text":""},{"location":"examples/#get-notifications","title":"Get Notifications","text":"<pre><code>notifications = await client.notifications.get_list()\n\nfor notif in notifications.notifications:\n print(f\"{notif.title}: {notif.message}\")\n\nprint(f\"Unread: {notifications.unread_count}\")\n</code></pre>"},{"location":"examples/#fetch-new-notifications","title":"Fetch New Notifications","text":"<pre><code>new_notifications = await client.notifications.fetch()\nprint(f\"New: {len(new_notifications.notifications)}\")\n</code></pre>"},{"location":"examples/#get-dialogs","title":"Get Dialogs","text":"<pre><code>dialogs = await client.notifications.get_dialogs()\n\nfor dialog in dialogs:\n print(f\"Dialog with {dialog.participant.username}: {dialog.last_message}\")\n</code></pre>"},{"location":"examples/#error-handling","title":"Error Handling","text":"<pre><code>from kwork_api import KworkAuthError, KworkApiError, KworkNotFoundError\n\ntry:\n catalog = await client.catalog.get_list()\nexcept KworkAuthError as e:\n print(f\"Authentication failed: {e}\")\nexcept KworkNotFoundError as e:\n print(f\"Resource not found: {e}\")\nexcept KworkApiError as e:\n print(f\"API error [{e.status_code}]: {e.message}\")\nexcept Exception as e:\n print(f\"Unexpected error: {e}\")\n</code></pre>"},{"location":"examples/#rate-limiting","title":"Rate Limiting","text":"<pre><code>import asyncio\n\nasync def fetch_all_pages():\n all_kworks = []\n\n for page in range(1, 10):\n try:\n catalog = await client.catalog.get_list(page=page)\n all_kworks.extend(catalog.kworks)\n\n if not catalog.pagination or not catalog.pagination.has_next:\n break\n\n # Delay to avoid rate limiting\n await asyncio.sleep(1)\n\n except KworkRateLimitError:\n print(\"Rate limited, waiting...\")\n await asyncio.sleep(5)\n\n return all_kworks\n</code></pre>"},{"location":"examples/#pagination-helper","title":"Pagination Helper","text":"<pre><code>async def fetch_all_catalog():\n \"\"\"Fetch all kworks from catalog with pagination.\"\"\"\n all_kworks = []\n page = 1\n\n while True:\n catalog = await client.catalog.get_list(page=page)\n all_kworks.extend(catalog.kworks)\n\n if not catalog.pagination or not catalog.pagination.has_next:\n break\n\n page += 1\n await asyncio.sleep(0.5) # Rate limiting\n\n return all_kworks\n</code></pre> <p>More examples in the API Reference.</p>"},{"location":"api/client/","title":"Client API","text":""},{"location":"api/client/#kwork_api.client.KworkClient","title":"kwork_api.client.KworkClient","text":"<pre><code>KworkClient(\n token=None, cookies=None, timeout=30.0, base_url=None\n)\n</code></pre> <p>Kwork.ru API client.</p> Usage <p>Initialize client.</p> <p>Parameters:</p> Name Type Description Default <code>token</code> <code>Optional[str]</code> <p>Web auth token (from getWebAuthToken)</p> <code>None</code> <code>cookies</code> <code>Optional[dict[str, str]]</code> <p>Session cookies (optional, will be set from token)</p> <code>None</code> <code>timeout</code> <code>float</code> <p>Request timeout in seconds</p> <code>30.0</code> <code>base_url</code> <code>Optional[str]</code> <p>Custom base URL (for testing)</p> <code>None</code> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(\n self,\n token: Optional[str] = None,\n cookies: Optional[dict[str, str]] = None,\n timeout: float = 30.0,\n base_url: Optional[str] = None,\n):\n \"\"\"\n Initialize client.\n\n Args:\n token: Web auth token (from getWebAuthToken)\n cookies: Session cookies (optional, will be set from token)\n timeout: Request timeout in seconds\n base_url: Custom base URL (for testing)\n \"\"\"\n self.base_url = base_url or self.BASE_URL\n self.timeout = timeout\n self._token = token\n self._cookies = cookies or {}\n\n # Initialize HTTP client\n self._client: Optional[httpx.AsyncClient] = None\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient--login-with-credentials","title":"Login with credentials","text":"<p>client = await KworkClient.login(\"username\", \"password\")</p>"},{"location":"api/client/#kwork_api.client.KworkClient--or-restore-from-token","title":"Or restore from token","text":"<p>client = KworkClient(token=\"your_web_auth_token\")</p>"},{"location":"api/client/#kwork_api.client.KworkClient--make-requests","title":"Make requests","text":"<p>catalog = await client.catalog.get_list(page=1)</p>"},{"location":"api/client/#kwork_api.client.KworkClient-attributes","title":"Attributes","text":""},{"location":"api/client/#kwork_api.client.KworkClient.catalog","title":"catalog <code>property</code>","text":"<pre><code>catalog\n</code></pre> <p>Catalog API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.notifications","title":"notifications <code>property</code>","text":"<pre><code>notifications\n</code></pre> <p>Notifications API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.other","title":"other <code>property</code>","text":"<pre><code>other\n</code></pre> <p>Other endpoints.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.projects","title":"projects <code>property</code>","text":"<pre><code>projects\n</code></pre> <p>Projects API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.reference","title":"reference <code>property</code>","text":"<pre><code>reference\n</code></pre> <p>Reference data API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient.user","title":"user <code>property</code>","text":"<pre><code>user\n</code></pre> <p>User API.</p>"},{"location":"api/client/#kwork_api.client.KworkClient-classes","title":"Classes","text":""},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI","title":"CatalogAPI","text":"<pre><code>CatalogAPI(client)\n</code></pre> <p>Catalog/Kworks API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_details","title":"get_details <code>async</code>","text":"<pre><code>get_details(kwork_id)\n</code></pre> <p>Get kwork details.</p> <p>Parameters:</p> Name Type Description Default <code>kwork_id</code> <code>int</code> <p>Kwork ID</p> required <p>Returns:</p> Type Description <code>KworkDetails</code> <p>KworkDetails with full information</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_details(self, kwork_id: int) -> KworkDetails:\n \"\"\"\n Get kwork details.\n\n Args:\n kwork_id: Kwork ID\n\n Returns:\n KworkDetails with full information\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/getKworkDetails\",\n json={\"kwork_id\": kwork_id},\n )\n return KworkDetails.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_details_extra","title":"get_details_extra <code>async</code>","text":"<pre><code>get_details_extra(kwork_id)\n</code></pre> <p>Get additional kwork details.</p> <p>Parameters:</p> Name Type Description Default <code>kwork_id</code> <code>int</code> <p>Kwork ID</p> required <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>Extra details dict</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_details_extra(self, kwork_id: int) -> dict[str, Any]:\n \"\"\"\n Get additional kwork details.\n\n Args:\n kwork_id: Kwork ID\n\n Returns:\n Extra details dict\n \"\"\"\n return await self.client._request(\n \"POST\",\n \"/getKworkDetailsExtra\",\n json={\"kwork_id\": kwork_id},\n )\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.CatalogAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list(page=1, category_id=None, sort='recommend')\n</code></pre> <p>Get kworks catalog.</p> <p>Parameters:</p> Name Type Description Default <code>page</code> <code>int</code> <p>Page number</p> <code>1</code> <code>category_id</code> <code>Optional[int]</code> <p>Category filter</p> <code>None</code> <code>sort</code> <code>str</code> <p>Sort option (recommend, price_asc, price_desc, etc.)</p> <code>'recommend'</code> <p>Returns:</p> Type Description <code>CatalogResponse</code> <p>CatalogResponse with kworks and pagination</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(\n self,\n page: int = 1,\n category_id: Optional[int] = None,\n sort: str = \"recommend\",\n) -> CatalogResponse:\n \"\"\"\n Get kworks catalog.\n\n Args:\n page: Page number\n category_id: Category filter\n sort: Sort option (recommend, price_asc, price_desc, etc.)\n\n Returns:\n CatalogResponse with kworks and pagination\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/catalogMainv2\",\n json={\n \"page\": page,\n \"category_id\": category_id,\n \"sort\": sort,\n },\n )\n return CatalogResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI","title":"NotificationsAPI","text":"<pre><code>NotificationsAPI(client)\n</code></pre> <p>Notifications and messages endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.fetch","title":"fetch <code>async</code>","text":"<pre><code>fetch()\n</code></pre> <p>Fetch new notifications.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def fetch(self) -> NotificationsResponse:\n \"\"\"Fetch new notifications.\"\"\"\n data = await self.client._request(\"POST\", \"/notificationsFetch\")\n return NotificationsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs","title":"get_blocked_dialogs <code>async</code>","text":"<pre><code>get_blocked_dialogs()\n</code></pre> <p>Get blocked dialogs.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_blocked_dialogs(self) -> list[Dialog]:\n \"\"\"Get blocked dialogs.\"\"\"\n data = await self.client._request(\"POST\", \"/blockedDialogList\")\n return [Dialog.model_validate(d) for d in data.get(\"dialogs\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.get_dialogs","title":"get_dialogs <code>async</code>","text":"<pre><code>get_dialogs()\n</code></pre> <p>Get dialogs list.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_dialogs(self) -> list[Dialog]:\n \"\"\"Get dialogs list.\"\"\"\n data = await self.client._request(\"POST\", \"/dialogs\")\n return [Dialog.model_validate(d) for d in data.get(\"dialogs\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.NotificationsAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list()\n</code></pre> <p>Get notifications list.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(self) -> NotificationsResponse:\n \"\"\"Get notifications list.\"\"\"\n data = await self.client._request(\"POST\", \"/notifications\")\n return NotificationsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI","title":"OtherAPI","text":"<pre><code>OtherAPI(client)\n</code></pre> <p>Other API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_actor","title":"get_actor <code>async</code>","text":"<pre><code>get_actor()\n</code></pre> <p>Get actor info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_actor(self) -> dict[str, Any]:\n \"\"\"Get actor info.\"\"\"\n return await self.client._request(\"POST\", \"/actor\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_channel","title":"get_channel <code>async</code>","text":"<pre><code>get_channel()\n</code></pre> <p>Get channel info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_channel(self) -> dict[str, Any]:\n \"\"\"Get channel info.\"\"\"\n return await self.client._request(\"POST\", \"/getChannel\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_exchange_info","title":"get_exchange_info <code>async</code>","text":"<pre><code>get_exchange_info()\n</code></pre> <p>Get exchange info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_exchange_info(self) -> dict[str, Any]:\n \"\"\"Get exchange info.\"\"\"\n return await self.client._request(\"POST\", \"/exchangeInfo\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_favorite_categories","title":"get_favorite_categories <code>async</code>","text":"<pre><code>get_favorite_categories()\n</code></pre> <p>Get favorite categories.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_favorite_categories(self) -> list[int]:\n \"\"\"Get favorite categories.\"\"\"\n data = await self.client._request(\"POST\", \"/favoriteCategories\")\n return data.get(\"categories\", [])\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_in_app_notification","title":"get_in_app_notification <code>async</code>","text":"<pre><code>get_in_app_notification()\n</code></pre> <p>Get in-app notification.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_in_app_notification(self) -> dict[str, Any]:\n \"\"\"Get in-app notification.\"\"\"\n return await self.client._request(\"POST\", \"/getInAppNotification\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_kworks_status","title":"get_kworks_status <code>async</code>","text":"<pre><code>get_kworks_status()\n</code></pre> <p>Get kworks status.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_kworks_status(self) -> dict[str, Any]:\n \"\"\"Get kworks status.\"\"\"\n return await self.client._request(\"POST\", \"/kworksStatusList\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_offers","title":"get_offers <code>async</code>","text":"<pre><code>get_offers()\n</code></pre> <p>Get offers.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_offers(self) -> dict[str, Any]:\n \"\"\"Get offers.\"\"\"\n return await self.client._request(\"POST\", \"/offers\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_security_user_data","title":"get_security_user_data <code>async</code>","text":"<pre><code>get_security_user_data()\n</code></pre> <p>Get security user data.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_security_user_data(self) -> dict[str, Any]:\n \"\"\"Get security user data.\"\"\"\n return await self.client._request(\"POST\", \"/getSecurityUserData\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks","title":"get_viewed_kworks <code>async</code>","text":"<pre><code>get_viewed_kworks()\n</code></pre> <p>Get viewed kworks.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_viewed_kworks(self) -> list[Kwork]:\n \"\"\"Get viewed kworks.\"\"\"\n data = await self.client._request(\"POST\", \"/viewedCatalogKworks\")\n return [Kwork.model_validate(k) for k in data.get(\"kworks\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_wants","title":"get_wants <code>async</code>","text":"<pre><code>get_wants()\n</code></pre> <p>Get user wants.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_wants(self) -> dict[str, Any]:\n \"\"\"Get user wants.\"\"\"\n return await self.client._request(\"POST\", \"/myWants\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.get_wants_status","title":"get_wants_status <code>async</code>","text":"<pre><code>get_wants_status()\n</code></pre> <p>Get wants status.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_wants_status(self) -> dict[str, Any]:\n \"\"\"Get wants status.\"\"\"\n return await self.client._request(\"POST\", \"/wantsStatusList\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.go_offline","title":"go_offline <code>async</code>","text":"<pre><code>go_offline()\n</code></pre> <p>Set user status to offline.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def go_offline(self) -> dict[str, Any]:\n \"\"\"Set user status to offline.\"\"\"\n return await self.client._request(\"POST\", \"/offline\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.is_dialog_allow","title":"is_dialog_allow <code>async</code>","text":"<pre><code>is_dialog_allow(user_id)\n</code></pre> <p>Check if dialog is allowed.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def is_dialog_allow(self, user_id: int) -> bool:\n \"\"\"Check if dialog is allowed.\"\"\"\n data = await self.client._request(\n \"POST\",\n \"/isDialogAllow\",\n json={\"user_id\": user_id},\n )\n return data.get(\"allowed\", False)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.OtherAPI.update_settings","title":"update_settings <code>async</code>","text":"<pre><code>update_settings(settings)\n</code></pre> <p>Update user settings.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def update_settings(self, settings: dict[str, Any]) -> dict[str, Any]:\n \"\"\"Update user settings.\"\"\"\n return await self.client._request(\"POST\", \"/updateSettings\", json=settings)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI","title":"ProjectsAPI","text":"<pre><code>ProjectsAPI(client)\n</code></pre> <p>Projects (freelance orders) API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_list","title":"get_list <code>async</code>","text":"<pre><code>get_list(page=1, category_id=None)\n</code></pre> <p>Get projects list.</p> <p>Parameters:</p> Name Type Description Default <code>page</code> <code>int</code> <p>Page number</p> <code>1</code> <code>category_id</code> <code>Optional[int]</code> <p>Category filter</p> <code>None</code> <p>Returns:</p> Type Description <code>ProjectsResponse</code> <p>ProjectsResponse with projects and pagination</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_list(\n self,\n page: int = 1,\n category_id: Optional[int] = None,\n) -> ProjectsResponse:\n \"\"\"\n Get projects list.\n\n Args:\n page: Page number\n category_id: Category filter\n\n Returns:\n ProjectsResponse with projects and pagination\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/projects\",\n json={\n \"page\": page,\n \"category_id\": category_id,\n },\n )\n return ProjectsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders","title":"get_payer_orders <code>async</code>","text":"<pre><code>get_payer_orders()\n</code></pre> <p>Get orders where user is customer.</p> <p>Returns:</p> Type Description <code>list[Project]</code> <p>List of projects</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_payer_orders(self) -> list[Project]:\n \"\"\"\n Get orders where user is customer.\n\n Returns:\n List of projects\n \"\"\"\n data = await self.client._request(\"POST\", \"/payerOrders\")\n return [Project.model_validate(p) for p in data.get(\"orders\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders","title":"get_worker_orders <code>async</code>","text":"<pre><code>get_worker_orders()\n</code></pre> <p>Get orders where user is performer.</p> <p>Returns:</p> Type Description <code>list[Project]</code> <p>List of projects</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_worker_orders(self) -> list[Project]:\n \"\"\"\n Get orders where user is performer.\n\n Returns:\n List of projects\n \"\"\"\n data = await self.client._request(\"POST\", \"/workerOrders\")\n return [Project.model_validate(p) for p in data.get(\"orders\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI","title":"ReferenceAPI","text":"<pre><code>ReferenceAPI(client)\n</code></pre> <p>Reference data (cities, countries, etc.) endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_badges_info","title":"get_badges_info <code>async</code>","text":"<pre><code>get_badges_info()\n</code></pre> <p>Get badges info.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_badges_info(self) -> list[Badge]:\n \"\"\"Get badges info.\"\"\"\n data = await self.client._request(\"POST\", \"/getBadgesInfo\")\n return [Badge.model_validate(b) for b in data.get(\"badges\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_cities","title":"get_cities <code>async</code>","text":"<pre><code>get_cities()\n</code></pre> <p>Get all cities.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_cities(self) -> list[City]:\n \"\"\"Get all cities.\"\"\"\n data = await self.client._request(\"POST\", \"/cities\")\n return [City.model_validate(c) for c in data.get(\"cities\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_countries","title":"get_countries <code>async</code>","text":"<pre><code>get_countries()\n</code></pre> <p>Get all countries.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_countries(self) -> list[Country]:\n \"\"\"Get all countries.\"\"\"\n data = await self.client._request(\"POST\", \"/countries\")\n return [Country.model_validate(c) for c in data.get(\"countries\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_features","title":"get_features <code>async</code>","text":"<pre><code>get_features()\n</code></pre> <p>Get available features.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_features(self) -> list[Feature]:\n \"\"\"Get available features.\"\"\"\n data = await self.client._request(\"POST\", \"/getAvailableFeatures\")\n return [Feature.model_validate(f) for f in data.get(\"features\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_public_features","title":"get_public_features <code>async</code>","text":"<pre><code>get_public_features()\n</code></pre> <p>Get public features.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_public_features(self) -> list[Feature]:\n \"\"\"Get public features.\"\"\"\n data = await self.client._request(\"POST\", \"/getPublicFeatures\")\n return [Feature.model_validate(f) for f in data.get(\"features\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.ReferenceAPI.get_timezones","title":"get_timezones <code>async</code>","text":"<pre><code>get_timezones()\n</code></pre> <p>Get all timezones.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_timezones(self) -> list[TimeZone]:\n \"\"\"Get all timezones.\"\"\"\n data = await self.client._request(\"POST\", \"/timezones\")\n return [TimeZone.model_validate(t) for t in data.get(\"timezones\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI","title":"UserAPI","text":"<pre><code>UserAPI(client)\n</code></pre> <p>User API endpoints.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>def __init__(self, client: \"KworkClient\"):\n self.client = client\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_favorite_kworks","title":"get_favorite_kworks <code>async</code>","text":"<pre><code>get_favorite_kworks()\n</code></pre> <p>Get favorite kworks.</p> <p>Returns:</p> Type Description <code>list[Kwork]</code> <p>List of kworks</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_favorite_kworks(self) -> list[Kwork]:\n \"\"\"\n Get favorite kworks.\n\n Returns:\n List of kworks\n \"\"\"\n data = await self.client._request(\"POST\", \"/favoriteKworks\")\n return [Kwork.model_validate(k) for k in data.get(\"kworks\", [])]\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_info","title":"get_info <code>async</code>","text":"<pre><code>get_info()\n</code></pre> <p>Get current user info.</p> <p>Returns:</p> Type Description <code>dict[str, Any]</code> <p>User info dict</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_info(self) -> dict[str, Any]:\n \"\"\"\n Get current user info.\n\n Returns:\n User info dict\n \"\"\"\n return await self.client._request(\"POST\", \"/user\")\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.UserAPI.get_reviews","title":"get_reviews <code>async</code>","text":"<pre><code>get_reviews(user_id=None, page=1)\n</code></pre> <p>Get user reviews.</p> <p>Parameters:</p> Name Type Description Default <code>user_id</code> <code>Optional[int]</code> <p>User ID (None for current user)</p> <code>None</code> <code>page</code> <code>int</code> <p>Page number</p> <code>1</code> <p>Returns:</p> Type Description <code>ReviewsResponse</code> <p>ReviewsResponse</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def get_reviews(\n self,\n user_id: Optional[int] = None,\n page: int = 1,\n) -> ReviewsResponse:\n \"\"\"\n Get user reviews.\n\n Args:\n user_id: User ID (None for current user)\n page: Page number\n\n Returns:\n ReviewsResponse\n \"\"\"\n data = await self.client._request(\n \"POST\",\n \"/userReviews\",\n json={\"user_id\": user_id, \"page\": page},\n )\n return ReviewsResponse.model_validate(data)\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient-functions","title":"Functions","text":""},{"location":"api/client/#kwork_api.client.KworkClient.close","title":"close <code>async</code>","text":"<pre><code>close()\n</code></pre> <p>Close HTTP client.</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>async def close(self) -> None:\n \"\"\"Close HTTP client.\"\"\"\n if self._client and not self._client.is_closed:\n await self._client.aclose()\n</code></pre>"},{"location":"api/client/#kwork_api.client.KworkClient.login","title":"login <code>async</code> <code>classmethod</code>","text":"<pre><code>login(username, password, timeout=30.0)\n</code></pre> <p>Login with username and password.</p> <p>Parameters:</p> Name Type Description Default <code>username</code> <code>str</code> <p>Kwork username or email</p> required <code>password</code> <code>str</code> <p>Kwork password</p> required <code>timeout</code> <code>float</code> <p>Request timeout</p> <code>30.0</code> <p>Returns:</p> Type Description <code>KworkClient</code> <p>Authenticated KworkClient instance</p> <p>Raises:</p> Type Description <code>KworkAuthError</code> <p>If login fails</p> Source code in <code>src/kwork_api/client.py</code> <pre><code>@classmethod\nasync def login(\n cls,\n username: str,\n password: str,\n timeout: float = 30.0,\n) -> \"KworkClient\":\n \"\"\"\n Login with username and password.\n\n Args:\n username: Kwork username or email\n password: Kwork password\n timeout: Request timeout\n\n Returns:\n Authenticated KworkClient instance\n\n Raises:\n KworkAuthError: If login fails\n \"\"\"\n client = cls(timeout=timeout)\n\n try:\n async with client._get_httpx_client() as http_client:\n # Step 1: Login to get session cookies\n login_data = {\n \"login_or_email\": username,\n \"password\": password,\n }\n\n response = await http_client.post(\n cls.LOGIN_URL,\n data=login_data,\n headers={\"Referer\": \"https://kwork.ru/\"},\n )\n\n if response.status_code != 200:\n raise KworkAuthError(f\"Login failed: {response.status_code}\")\n\n # Extract cookies\n cookies = dict(response.cookies)\n\n if \"userId\" not in cookies:\n raise KworkAuthError(\"Login failed: no userId in cookies\")\n\n # Step 2: Get web auth token\n token_response = await http_client.post(\n cls.TOKEN_URL,\n json={},\n )\n\n if token_response.status_code != 200:\n raise KworkAuthError(f\"Token request failed: {token_response.status_code}\")\n\n token_data = token_response.json()\n web_token = token_data.get(\"web_auth_token\")\n\n if not web_token:\n raise KworkAuthError(\"No web_auth_token in response\")\n\n # Create new client with token\n return cls(token=web_token, cookies=cookies, timeout=timeout)\n\n except httpx.RequestError as e:\n raise KworkNetworkError(f\"Login request failed: {e}\")\n</code></pre>"},{"location":"api/errors/","title":"Errors","text":"<p>Exception classes for error handling.</p>"},{"location":"api/errors/#kworkerror","title":"KworkError","text":""},{"location":"api/errors/#kwork_api.errors.KworkError","title":"kwork_api.errors.KworkError","text":"<pre><code>KworkError(message, response=None)\n</code></pre> <p> Bases: <code>Exception</code></p> <p>Base exception for all Kwork API errors.</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str, response: Optional[Any] = None):\n self.message = message\n self.response = response\n super().__init__(self.message)\n</code></pre>"},{"location":"api/errors/#kworkautherror","title":"KworkAuthError","text":""},{"location":"api/errors/#kwork_api.errors.KworkAuthError","title":"kwork_api.errors.KworkAuthError","text":"<pre><code>KworkAuthError(\n message=\"Authentication failed\", response=None\n)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>Authentication/authorization error.</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str = \"Authentication failed\", response: Optional[Any] = None):\n super().__init__(message, response)\n</code></pre>"},{"location":"api/errors/#kworkapierror","title":"KworkApiError","text":""},{"location":"api/errors/#kwork_api.errors.KworkApiError","title":"kwork_api.errors.KworkApiError","text":"<pre><code>KworkApiError(message, status_code=None, response=None)\n</code></pre> <p> Bases: <code>KworkError</code></p> <p>API request error (4xx, 5xx).</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(\n self,\n message: str,\n status_code: Optional[int] = None,\n response: Optional[Any] = None,\n):\n self.status_code = status_code\n super().__init__(message, response)\n</code></pre>"},{"location":"api/errors/#kworknotfounderror","title":"KworkNotFoundError","text":""},{"location":"api/errors/#kwork_api.errors.KworkNotFoundError","title":"kwork_api.errors.KworkNotFoundError","text":"<pre><code>KworkNotFoundError(resource, response=None)\n</code></pre> <p> Bases: <code>KworkApiError</code></p> <p>Resource not found (404).</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, resource: str, response: Optional[Any] = None):\n super().__init__(f\"Resource not found: {resource}\", 404, response)\n</code></pre>"},{"location":"api/errors/#kworkratelimiterror","title":"KworkRateLimitError","text":""},{"location":"api/errors/#kwork_api.errors.KworkRateLimitError","title":"kwork_api.errors.KworkRateLimitError","text":"<pre><code>KworkRateLimitError(\n message=\"Rate limit exceeded\", response=None\n)\n</code></pre> <p> Bases: <code>KworkApiError</code></p> <p>Rate limit exceeded (429).</p> Source code in <code>src/kwork_api/errors.py</code> <pre><code>def __init__(self, message: str = \"Rate limit exceeded\", response: Optional[Any] = None):\n super().__init__(message, 429, response)\n</code></pre>"},{"location":"api/models/","title":"Models","text":"<p>Pydantic models used in API responses.</p>"},{"location":"api/models/#kwork","title":"Kwork","text":""},{"location":"api/models/#kwork_api.models.Kwork","title":"kwork_api.models.Kwork","text":"<p> Bases: <code>BaseModel</code></p> <p>Kwork (service) information.</p>"},{"location":"api/models/#kworkdetails","title":"KworkDetails","text":""},{"location":"api/models/#kwork_api.models.KworkDetails","title":"kwork_api.models.KworkDetails","text":"<p> Bases: <code>Kwork</code></p> <p>Extended kwork details.</p>"},{"location":"api/models/#project","title":"Project","text":""},{"location":"api/models/#kwork_api.models.Project","title":"kwork_api.models.Project","text":"<p> Bases: <code>BaseModel</code></p> <p>Project (freelance order) information.</p>"},{"location":"api/models/#catalogresponse","title":"CatalogResponse","text":""},{"location":"api/models/#kwork_api.models.CatalogResponse","title":"kwork_api.models.CatalogResponse","text":"<p> Bases: <code>BaseModel</code></p> <p>Catalog response with kworks and pagination.</p>"},{"location":"api/models/#paginationinfo","title":"PaginationInfo","text":""},{"location":"api/models/#kwork_api.models.PaginationInfo","title":"kwork_api.models.PaginationInfo","text":"<p> Bases: <code>BaseModel</code></p> <p>Pagination metadata.</p>"}]} |