kwork-api/api_reference.md
root a771a75c49 docs: добавлены подробные docstrings для KworkClient
- KworkClient: полное описание класса, аутентификации, примеров
- __init__: детальное описание параметров
- login(): пошаговое описание процесса аутентификации
- CatalogAPI: документация класса и методов get_list, get_details, get_details_extra
- ProjectsAPI: документация класса и метода get_list
- get_payer_orders/get_worker_orders: описание методов

Все docstrings на русском языке с примерами использования.
2026-03-23 04:23:49 +00:00

2152 lines
48 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Table of Contents
* [kwork\_api](#kwork_api)
* [KworkClient](#kwork_api.KworkClient)
* [KworkError](#kwork_api.KworkError)
* [KworkAuthError](#kwork_api.KworkAuthError)
* [KworkApiError](#kwork_api.KworkApiError)
* [\_\_version\_\_](#kwork_api.__version__)
* [\_\_all\_\_](#kwork_api.__all__)
* [kwork\_api.client](#kwork_api.client)
* [logging](#kwork_api.client.logging)
* [Any](#kwork_api.client.Any)
* [Optional](#kwork_api.client.Optional)
* [httpx](#kwork_api.client.httpx)
* [HttpUrl](#kwork_api.client.HttpUrl)
* [KworkApiError](#kwork_api.client.KworkApiError)
* [KworkAuthError](#kwork_api.client.KworkAuthError)
* [KworkError](#kwork_api.client.KworkError)
* [KworkNetworkError](#kwork_api.client.KworkNetworkError)
* [KworkNotFoundError](#kwork_api.client.KworkNotFoundError)
* [KworkRateLimitError](#kwork_api.client.KworkRateLimitError)
* [KworkValidationError](#kwork_api.client.KworkValidationError)
* [APIErrorResponse](#kwork_api.client.APIErrorResponse)
* [AuthResponse](#kwork_api.client.AuthResponse)
* [Badge](#kwork_api.client.Badge)
* [CatalogResponse](#kwork_api.client.CatalogResponse)
* [City](#kwork_api.client.City)
* [Country](#kwork_api.client.Country)
* [DataResponse](#kwork_api.client.DataResponse)
* [Dialog](#kwork_api.client.Dialog)
* [Feature](#kwork_api.client.Feature)
* [Kwork](#kwork_api.client.Kwork)
* [KworkDetails](#kwork_api.client.KworkDetails)
* [NotificationsResponse](#kwork_api.client.NotificationsResponse)
* [Project](#kwork_api.client.Project)
* [ProjectsResponse](#kwork_api.client.ProjectsResponse)
* [Review](#kwork_api.client.Review)
* [ReviewsResponse](#kwork_api.client.ReviewsResponse)
* [TimeZone](#kwork_api.client.TimeZone)
* [logger](#kwork_api.client.logger)
* [KworkClient](#kwork_api.client.KworkClient)
* [BASE\_URL](#kwork_api.client.KworkClient.BASE_URL)
* [LOGIN\_URL](#kwork_api.client.KworkClient.LOGIN_URL)
* [TOKEN\_URL](#kwork_api.client.KworkClient.TOKEN_URL)
* [\_\_init\_\_](#kwork_api.client.KworkClient.__init__)
* [login](#kwork_api.client.KworkClient.login)
* [close](#kwork_api.client.KworkClient.close)
* [\_\_aenter\_\_](#kwork_api.client.KworkClient.__aenter__)
* [\_\_aexit\_\_](#kwork_api.client.KworkClient.__aexit__)
* [CatalogAPI](#kwork_api.client.KworkClient.CatalogAPI)
* [ProjectsAPI](#kwork_api.client.KworkClient.ProjectsAPI)
* [UserAPI](#kwork_api.client.KworkClient.UserAPI)
* [ReferenceAPI](#kwork_api.client.KworkClient.ReferenceAPI)
* [NotificationsAPI](#kwork_api.client.KworkClient.NotificationsAPI)
* [OtherAPI](#kwork_api.client.KworkClient.OtherAPI)
* [catalog](#kwork_api.client.KworkClient.catalog)
* [projects](#kwork_api.client.KworkClient.projects)
* [user](#kwork_api.client.KworkClient.user)
* [reference](#kwork_api.client.KworkClient.reference)
* [notifications](#kwork_api.client.KworkClient.notifications)
* [other](#kwork_api.client.KworkClient.other)
* [kwork\_api.models](#kwork_api.models)
* [datetime](#kwork_api.models.datetime)
* [Any](#kwork_api.models.Any)
* [Optional](#kwork_api.models.Optional)
* [BaseModel](#kwork_api.models.BaseModel)
* [Field](#kwork_api.models.Field)
* [KworkUser](#kwork_api.models.KworkUser)
* [id](#kwork_api.models.KworkUser.id)
* [username](#kwork_api.models.KworkUser.username)
* [avatar\_url](#kwork_api.models.KworkUser.avatar_url)
* [is\_online](#kwork_api.models.KworkUser.is_online)
* [rating](#kwork_api.models.KworkUser.rating)
* [KworkCategory](#kwork_api.models.KworkCategory)
* [id](#kwork_api.models.KworkCategory.id)
* [name](#kwork_api.models.KworkCategory.name)
* [slug](#kwork_api.models.KworkCategory.slug)
* [parent\_id](#kwork_api.models.KworkCategory.parent_id)
* [Kwork](#kwork_api.models.Kwork)
* [id](#kwork_api.models.Kwork.id)
* [title](#kwork_api.models.Kwork.title)
* [description](#kwork_api.models.Kwork.description)
* [price](#kwork_api.models.Kwork.price)
* [currency](#kwork_api.models.Kwork.currency)
* [category\_id](#kwork_api.models.Kwork.category_id)
* [seller](#kwork_api.models.Kwork.seller)
* [images](#kwork_api.models.Kwork.images)
* [rating](#kwork_api.models.Kwork.rating)
* [reviews\_count](#kwork_api.models.Kwork.reviews_count)
* [created\_at](#kwork_api.models.Kwork.created_at)
* [updated\_at](#kwork_api.models.Kwork.updated_at)
* [KworkDetails](#kwork_api.models.KworkDetails)
* [full\_description](#kwork_api.models.KworkDetails.full_description)
* [requirements](#kwork_api.models.KworkDetails.requirements)
* [delivery\_time](#kwork_api.models.KworkDetails.delivery_time)
* [revisions](#kwork_api.models.KworkDetails.revisions)
* [features](#kwork_api.models.KworkDetails.features)
* [faq](#kwork_api.models.KworkDetails.faq)
* [PaginationInfo](#kwork_api.models.PaginationInfo)
* [current\_page](#kwork_api.models.PaginationInfo.current_page)
* [total\_pages](#kwork_api.models.PaginationInfo.total_pages)
* [total\_items](#kwork_api.models.PaginationInfo.total_items)
* [items\_per\_page](#kwork_api.models.PaginationInfo.items_per_page)
* [has\_next](#kwork_api.models.PaginationInfo.has_next)
* [has\_prev](#kwork_api.models.PaginationInfo.has_prev)
* [CatalogResponse](#kwork_api.models.CatalogResponse)
* [kworks](#kwork_api.models.CatalogResponse.kworks)
* [pagination](#kwork_api.models.CatalogResponse.pagination)
* [filters](#kwork_api.models.CatalogResponse.filters)
* [sort\_options](#kwork_api.models.CatalogResponse.sort_options)
* [Project](#kwork_api.models.Project)
* [id](#kwork_api.models.Project.id)
* [title](#kwork_api.models.Project.title)
* [description](#kwork_api.models.Project.description)
* [budget](#kwork_api.models.Project.budget)
* [budget\_type](#kwork_api.models.Project.budget_type)
* [category\_id](#kwork_api.models.Project.category_id)
* [customer](#kwork_api.models.Project.customer)
* [status](#kwork_api.models.Project.status)
* [created\_at](#kwork_api.models.Project.created_at)
* [updated\_at](#kwork_api.models.Project.updated_at)
* [bids\_count](#kwork_api.models.Project.bids_count)
* [skills](#kwork_api.models.Project.skills)
* [ProjectsResponse](#kwork_api.models.ProjectsResponse)
* [projects](#kwork_api.models.ProjectsResponse.projects)
* [pagination](#kwork_api.models.ProjectsResponse.pagination)
* [Review](#kwork_api.models.Review)
* [id](#kwork_api.models.Review.id)
* [rating](#kwork_api.models.Review.rating)
* [comment](#kwork_api.models.Review.comment)
* [author](#kwork_api.models.Review.author)
* [kwork\_id](#kwork_api.models.Review.kwork_id)
* [created\_at](#kwork_api.models.Review.created_at)
* [ReviewsResponse](#kwork_api.models.ReviewsResponse)
* [reviews](#kwork_api.models.ReviewsResponse.reviews)
* [pagination](#kwork_api.models.ReviewsResponse.pagination)
* [average\_rating](#kwork_api.models.ReviewsResponse.average_rating)
* [Notification](#kwork_api.models.Notification)
* [id](#kwork_api.models.Notification.id)
* [type](#kwork_api.models.Notification.type)
* [title](#kwork_api.models.Notification.title)
* [message](#kwork_api.models.Notification.message)
* [is\_read](#kwork_api.models.Notification.is_read)
* [created\_at](#kwork_api.models.Notification.created_at)
* [link](#kwork_api.models.Notification.link)
* [NotificationsResponse](#kwork_api.models.NotificationsResponse)
* [notifications](#kwork_api.models.NotificationsResponse.notifications)
* [unread\_count](#kwork_api.models.NotificationsResponse.unread_count)
* [Dialog](#kwork_api.models.Dialog)
* [id](#kwork_api.models.Dialog.id)
* [participant](#kwork_api.models.Dialog.participant)
* [last\_message](#kwork_api.models.Dialog.last_message)
* [unread\_count](#kwork_api.models.Dialog.unread_count)
* [updated\_at](#kwork_api.models.Dialog.updated_at)
* [AuthResponse](#kwork_api.models.AuthResponse)
* [success](#kwork_api.models.AuthResponse.success)
* [user\_id](#kwork_api.models.AuthResponse.user_id)
* [username](#kwork_api.models.AuthResponse.username)
* [web\_auth\_token](#kwork_api.models.AuthResponse.web_auth_token)
* [message](#kwork_api.models.AuthResponse.message)
* [ErrorDetail](#kwork_api.models.ErrorDetail)
* [code](#kwork_api.models.ErrorDetail.code)
* [message](#kwork_api.models.ErrorDetail.message)
* [field](#kwork_api.models.ErrorDetail.field)
* [APIErrorResponse](#kwork_api.models.APIErrorResponse)
* [success](#kwork_api.models.APIErrorResponse.success)
* [errors](#kwork_api.models.APIErrorResponse.errors)
* [message](#kwork_api.models.APIErrorResponse.message)
* [City](#kwork_api.models.City)
* [id](#kwork_api.models.City.id)
* [name](#kwork_api.models.City.name)
* [country\_id](#kwork_api.models.City.country_id)
* [Country](#kwork_api.models.Country)
* [id](#kwork_api.models.Country.id)
* [name](#kwork_api.models.Country.name)
* [code](#kwork_api.models.Country.code)
* [cities](#kwork_api.models.Country.cities)
* [TimeZone](#kwork_api.models.TimeZone)
* [id](#kwork_api.models.TimeZone.id)
* [name](#kwork_api.models.TimeZone.name)
* [offset](#kwork_api.models.TimeZone.offset)
* [Feature](#kwork_api.models.Feature)
* [id](#kwork_api.models.Feature.id)
* [name](#kwork_api.models.Feature.name)
* [description](#kwork_api.models.Feature.description)
* [price](#kwork_api.models.Feature.price)
* [type](#kwork_api.models.Feature.type)
* [Badge](#kwork_api.models.Badge)
* [id](#kwork_api.models.Badge.id)
* [name](#kwork_api.models.Badge.name)
* [description](#kwork_api.models.Badge.description)
* [icon\_url](#kwork_api.models.Badge.icon_url)
* [DataResponse](#kwork_api.models.DataResponse)
* [success](#kwork_api.models.DataResponse.success)
* [data](#kwork_api.models.DataResponse.data)
* [message](#kwork_api.models.DataResponse.message)
* [kwork\_api.errors](#kwork_api.errors)
* [Any](#kwork_api.errors.Any)
* [Optional](#kwork_api.errors.Optional)
* [KworkError](#kwork_api.errors.KworkError)
* [\_\_init\_\_](#kwork_api.errors.KworkError.__init__)
* [\_\_str\_\_](#kwork_api.errors.KworkError.__str__)
* [KworkAuthError](#kwork_api.errors.KworkAuthError)
* [\_\_init\_\_](#kwork_api.errors.KworkAuthError.__init__)
* [\_\_str\_\_](#kwork_api.errors.KworkAuthError.__str__)
* [KworkApiError](#kwork_api.errors.KworkApiError)
* [\_\_init\_\_](#kwork_api.errors.KworkApiError.__init__)
* [\_\_str\_\_](#kwork_api.errors.KworkApiError.__str__)
* [KworkNotFoundError](#kwork_api.errors.KworkNotFoundError)
* [\_\_init\_\_](#kwork_api.errors.KworkNotFoundError.__init__)
* [KworkRateLimitError](#kwork_api.errors.KworkRateLimitError)
* [\_\_init\_\_](#kwork_api.errors.KworkRateLimitError.__init__)
* [KworkValidationError](#kwork_api.errors.KworkValidationError)
* [\_\_init\_\_](#kwork_api.errors.KworkValidationError.__init__)
* [\_\_str\_\_](#kwork_api.errors.KworkValidationError.__str__)
* [KworkNetworkError](#kwork_api.errors.KworkNetworkError)
* [\_\_init\_\_](#kwork_api.errors.KworkNetworkError.__init__)
* [\_\_str\_\_](#kwork_api.errors.KworkNetworkError.__str__)
<a id="kwork_api"></a>
# Module kwork\_api
Kwork.ru API Client
Unofficial Python client for Kwork.ru API.
**Example**:
from kwork_api import KworkClient
# Login with credentials
client = await KworkClient.login("username", "password")
# Or restore from token
client = KworkClient(token="your_web_auth_token")
# Get catalog
catalog = await client.catalog.get_list(page=1)
<a id="kwork_api.KworkClient"></a>
## KworkClient
<a id="kwork_api.KworkError"></a>
## KworkError
<a id="kwork_api.KworkAuthError"></a>
## KworkAuthError
<a id="kwork_api.KworkApiError"></a>
## KworkApiError
<a id="kwork_api.__version__"></a>
#### \_\_version\_\_
<a id="kwork_api.__all__"></a>
#### \_\_all\_\_
<a id="kwork_api.client"></a>
# Module kwork\_api.client
Kwork API Client.
Main client class with authentication and all API endpoints.
<a id="kwork_api.client.logging"></a>
## logging
<a id="kwork_api.client.Any"></a>
## Any
<a id="kwork_api.client.Optional"></a>
## Optional
<a id="kwork_api.client.httpx"></a>
## httpx
<a id="kwork_api.client.HttpUrl"></a>
## HttpUrl
<a id="kwork_api.client.KworkApiError"></a>
## KworkApiError
<a id="kwork_api.client.KworkAuthError"></a>
## KworkAuthError
<a id="kwork_api.client.KworkError"></a>
## KworkError
<a id="kwork_api.client.KworkNetworkError"></a>
## KworkNetworkError
<a id="kwork_api.client.KworkNotFoundError"></a>
## KworkNotFoundError
<a id="kwork_api.client.KworkRateLimitError"></a>
## KworkRateLimitError
<a id="kwork_api.client.KworkValidationError"></a>
## KworkValidationError
<a id="kwork_api.client.APIErrorResponse"></a>
## APIErrorResponse
<a id="kwork_api.client.AuthResponse"></a>
## AuthResponse
<a id="kwork_api.client.Badge"></a>
## Badge
<a id="kwork_api.client.CatalogResponse"></a>
## CatalogResponse
<a id="kwork_api.client.City"></a>
## City
<a id="kwork_api.client.Country"></a>
## Country
<a id="kwork_api.client.DataResponse"></a>
## DataResponse
<a id="kwork_api.client.Dialog"></a>
## Dialog
<a id="kwork_api.client.Feature"></a>
## Feature
<a id="kwork_api.client.Kwork"></a>
## Kwork
<a id="kwork_api.client.KworkDetails"></a>
## KworkDetails
<a id="kwork_api.client.NotificationsResponse"></a>
## NotificationsResponse
<a id="kwork_api.client.Project"></a>
## Project
<a id="kwork_api.client.ProjectsResponse"></a>
## ProjectsResponse
<a id="kwork_api.client.Review"></a>
## Review
<a id="kwork_api.client.ReviewsResponse"></a>
## ReviewsResponse
<a id="kwork_api.client.TimeZone"></a>
## TimeZone
<a id="kwork_api.client.logger"></a>
#### logger
<a id="kwork_api.client.KworkClient"></a>
## KworkClient
```python
class KworkClient()
```
Асинхронный клиент для Kwork.ru API.
Предоставляет доступ ко всем основным эндпоинтам Kwork API:
- Каталог кворков и поиск
- Биржа проектов (фриланс заказы)
- Пользовательские данные и отзывы
- Уведомления и сообщения
- Справочные данные (города, страны, категории)
Аутентификация:
Клиент использует двухэтапную аутентификацию Kwork:
1. POST /signIn — получение session cookies
2. POST /getWebAuthToken — получение web_auth_token
Примеры использования:
# Вход по логину/паролю
async with await KworkClient.login("username", "password") as client:
catalog = await client.catalog.get_list(page=1)
# Восстановление сессии по токену
client = KworkClient(token="saved_web_auth_token")
user_info = await client.user.get_info()
# Работа с проектами
projects = await client.projects.get_list(page=1)
my_orders = await client.projects.get_payer_orders()
**Attributes**:
- `catalog` - Доступ к каталогу кворков
- `projects` - Доступ к бирже проектов
- `user` - Пользовательские эндпоинты
- `reference` - Справочные данные
- `notifications` - Уведомления и сообщения
- `other` - Прочие эндпоинты
**Notes**:
Клиент поддерживает context manager для автоматического закрытия соединения.
Рекомендуется использовать `async with` для корректного освобождения ресурсов.
<a id="kwork_api.client.KworkClient.BASE_URL"></a>
#### BASE\_URL
<a id="kwork_api.client.KworkClient.LOGIN_URL"></a>
#### LOGIN\_URL
<a id="kwork_api.client.KworkClient.TOKEN_URL"></a>
#### TOKEN\_URL
<a id="kwork_api.client.KworkClient.__init__"></a>
#### KworkClient.\_\_init\_\_
```python
def __init__(token: Optional[str] = None,
cookies: Optional[dict[str, str]] = None,
timeout: float = 30.0,
base_url: Optional[str] = None)
```
Инициализация клиента.
Создаёт неаутентифицированный клиент или восстанавливает сессию
по ранее полученному токену.
**Arguments**:
- `token` - Web auth token, полученный через `getWebAuthToken` или `login()`.
Если указан, автоматически добавляется в cookies.
- `cookies` - Session cookies из предыдущей аутентификации.
Обычно не требуется — устанавливаются автоматически из token.
- `timeout` - Таймаут HTTP запросов в секундах. По умолчанию 30 секунд.
- `base_url` - Кастомный базовый URL. Используется только для тестирования.
**Example**:
# Новый клиент без аутентификации
client = KworkClient()
# Восстановление сессии
client = KworkClient(token="eyJ0eXAiOiJKV1QiLCJhbGc...")
# Клиент с кастомным таймаутом
client = KworkClient(timeout=60.0)
**Notes**:
Для полноценной работы API требуется аутентификация.
Используйте `login()` или передайте сохранённый token.
<a id="kwork_api.client.KworkClient.login"></a>
#### KworkClient.login
```python
@classmethod
async def login(cls,
username: str,
password: str,
timeout: float = 30.0) -> "KworkClient"
```
Аутентификация по логину и паролю.
Выполняет двухэтапный процесс аутентификации Kwork:
1. POST /signIn — проверка учётных данных, получение session cookies
2. POST /getWebAuthToken — обмен cookies на web_auth_token
Полученный токен и cookies сохраняются в клиенте для последующих запросов.
**Arguments**:
- `username` - Логин или email аккаунта Kwork.
- `password` - Пароль аккаунта Kwork.
- `timeout` - Таймаут запросов в секундах. Применяется к каждому этапу.
**Returns**:
Полностью аутентифицированный экземпляр KworkClient,
готовый к работе с API.
**Raises**:
- `KworkAuthError` - Если логин/пароль неверны или токен не получен.
- `KworkNetworkError` - Если произошла ошибка сети.
**Example**:
# Базовое использование
client = await KworkClient.login("myuser", "mypassword")
# С кастомным таймаутом
client = await KworkClient.login("user", "pass", timeout=60.0)
# Сохранение токена для повторного использования
token = client._token
# Позже: client = KworkClient(token=token)
Security:
Пароль не сохраняется в клиенте. Только token и cookies.
Рекомендуется сохранять token для повторного использования
вместо хранения пароля.
**Notes**:
Токен имеет ограниченное время жизни. При получении 401 ошибки
необходимо выполнить повторный login().
<a id="kwork_api.client.KworkClient.close"></a>
#### KworkClient.close
```python
async def close() -> None
```
Close HTTP client.
<a id="kwork_api.client.KworkClient.__aenter__"></a>
#### KworkClient.\_\_aenter\_\_
```python
async def __aenter__() -> "KworkClient"
```
<a id="kwork_api.client.KworkClient.__aexit__"></a>
#### KworkClient.\_\_aexit\_\_
```python
async def __aexit__(*args: Any) -> None
```
<a id="kwork_api.client.KworkClient.CatalogAPI"></a>
## CatalogAPI
```python
class CatalogAPI()
```
API каталога кворков.
Предоставляет доступ к каталогу услуг Kwork:
- Поиск и фильтрация кворков
- Получение детальной информации
- Категории и сортировка
**Example**:
# Получить первую страницу каталога
catalog = await client.catalog.get_list(page=1)
# Фильтрация по категории
catalog = await client.catalog.get_list(category_id=5)
# Детали конкретного кворка
details = await client.catalog.get_details(kwork_id=12345)
<a id="kwork_api.client.KworkClient.CatalogAPI.__init__"></a>
#### CatalogAPI.\_\_init\_\_
```python
def __init__(client: "KworkClient")
```
<a id="kwork_api.client.KworkClient.CatalogAPI.get_list"></a>
#### CatalogAPI.get\_list
```python
async def get_list(page: int = 1,
category_id: Optional[int] = None,
sort: str = "recommend") -> CatalogResponse
```
Получить список кворков из каталога.
Основной эндпоинт для поиска и просмотра кворков.
Возвращает пагинированный список с возможностью фильтрации.
**Arguments**:
- `page` - Номер страницы для пагинации (начиная с 1).
- `category_id` - ID категории для фильтрации.
Если None — все категории.
- `sort` - Опция сортировки. Варианты:
- "recommend" — по рекомендации (по умолчанию)
- "price_asc" — по возрастанию цены
- "price_desc" — по убыванию цены
- "rating" — по рейтингу
- "reviews" — по количеству отзывов
- "newest" — по дате создания
**Returns**:
CatalogResponse содержащий:
- kworks: список кворков на странице
- pagination: информация о пагинации
- filters: доступные фильтры
- sort_options: доступные опции сортировки
**Example**:
# Первая страница, сортировка по цене
response = await client.catalog.get_list(
page=1,
sort="price_asc"
)
for kwork in response.kworks:
- `print(f"{kwork.title}` - {kwork.price} RUB")
# Пагинация
if response.pagination and response.pagination.has_next:
next_page = await client.catalog.get_list(page=2)
<a id="kwork_api.client.KworkClient.CatalogAPI.get_details"></a>
#### CatalogAPI.get\_details
```python
async def get_details(kwork_id: int) -> KworkDetails
```
Получить полную информацию о кворке.
Возвращает расширенную информацию о кворке включая:
- Полное описание и требования
- Сроки выполнения и количество правок
- Дополнительные опции (features)
- FAQ от продавца
**Arguments**:
- `kwork_id` - Уникальный идентификатор кворка.
**Returns**:
KworkDetails с полной информацией о кворке.
**Raises**:
- `KworkNotFoundError` - Если кворк с таким ID не найден.
**Example**:
details = await client.catalog.get_details(12345)
- `print(f"Название` - {details.title}")
- `print(f"Цена` - {details.price} {details.currency}")
- `print(f"Срок` - {details.delivery_time} дней")
- `print(f"Правки` - {details.revisions}")
<a id="kwork_api.client.KworkClient.CatalogAPI.get_details_extra"></a>
#### CatalogAPI.get\_details\_extra
```python
async def get_details_extra(kwork_id: int) -> dict[str, Any]
```
Получить дополнительные детали кворка.
Возвращает расширенную информацию, которая не включена
в основной ответ get_details(). Может содержать:
- Дополнительные изображения
- Видео обзоры
- Детали пакетов услуг
- Статистику продаж
**Arguments**:
- `kwork_id` - Уникальный идентификатор кворка.
**Returns**:
Словарь с дополнительными данными. Структура зависит
от конкретного кворка и не гарантируется стабильной.
**Notes**:
Этот эндпоинт возвращает "сырые" данные без валидации.
Структура ответа может измениться без предупреждения.
<a id="kwork_api.client.KworkClient.ProjectsAPI"></a>
## ProjectsAPI
```python
class ProjectsAPI()
```
API биржи проектов (фриланс заказы).
Предоставляет доступ к заказам на фриланс:
- Просмотр открытых проектов
- Заказы где вы заказчик (payer)
- Заказы где вы исполнитель (worker)
**Example**:
# Новые проекты
projects = await client.projects.get_list(page=1)
# Мои заказы как заказчика
my_orders = await client.projects.get_payer_orders()
# Мои заказы как исполнителя
my_work = await client.projects.get_worker_orders()
<a id="kwork_api.client.KworkClient.ProjectsAPI.__init__"></a>
#### ProjectsAPI.\_\_init\_\_
```python
def __init__(client: "KworkClient")
```
<a id="kwork_api.client.KworkClient.ProjectsAPI.get_list"></a>
#### ProjectsAPI.get\_list
```python
async def get_list(page: int = 1,
category_id: Optional[int] = None) -> ProjectsResponse
```
Получить список проектов с биржи.
Основной эндпоинт для просмотра доступных заказов.
Возвращает пагинированный список проектов.
**Arguments**:
- `page` - Номер страницы (начиная с 1).
- `category_id` - ID категории для фильтрации.
Если None — все категории.
**Returns**:
ProjectsResponse содержащий:
- projects: список проектов на странице
- pagination: информация о пагинации
**Example**:
# Все новые проекты
response = await client.projects.get_list(page=1)
for project in response.projects:
- `print(f"{project.title}` - {project.budget} {project.budget_type}")
# Только категория "Разработка"
dev_projects = await client.projects.get_list(
page=1,
category_id=5
)
<a id="kwork_api.client.KworkClient.ProjectsAPI.get_payer_orders"></a>
#### ProjectsAPI.get\_payer\_orders
```python
async def get_payer_orders() -> list[Project]
```
Get orders where user is customer.
**Returns**:
List of projects
<a id="kwork_api.client.KworkClient.ProjectsAPI.get_worker_orders"></a>
#### ProjectsAPI.get\_worker\_orders
```python
async def get_worker_orders() -> list[Project]
```
Get orders where user is performer.
**Returns**:
List of projects
<a id="kwork_api.client.KworkClient.UserAPI"></a>
## UserAPI
```python
class UserAPI()
```
User API endpoints.
<a id="kwork_api.client.KworkClient.UserAPI.__init__"></a>
#### UserAPI.\_\_init\_\_
```python
def __init__(client: "KworkClient")
```
<a id="kwork_api.client.KworkClient.UserAPI.get_info"></a>
#### UserAPI.get\_info
```python
async def get_info() -> dict[str, Any]
```
Get current user info.
**Returns**:
User info dict
<a id="kwork_api.client.KworkClient.UserAPI.get_reviews"></a>
#### UserAPI.get\_reviews
```python
async def get_reviews(user_id: Optional[int] = None,
page: int = 1) -> ReviewsResponse
```
Get user reviews.
**Arguments**:
- `user_id` - User ID (None for current user)
- `page` - Page number
**Returns**:
ReviewsResponse
<a id="kwork_api.client.KworkClient.UserAPI.get_favorite_kworks"></a>
#### UserAPI.get\_favorite\_kworks
```python
async def get_favorite_kworks() -> list[Kwork]
```
Get favorite kworks.
**Returns**:
List of kworks
<a id="kwork_api.client.KworkClient.ReferenceAPI"></a>
## ReferenceAPI
```python
class ReferenceAPI()
```
Reference data (cities, countries, etc.) endpoints.
<a id="kwork_api.client.KworkClient.ReferenceAPI.__init__"></a>
#### ReferenceAPI.\_\_init\_\_
```python
def __init__(client: "KworkClient")
```
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_cities"></a>
#### ReferenceAPI.get\_cities
```python
async def get_cities() -> list[City]
```
Get all cities.
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_countries"></a>
#### ReferenceAPI.get\_countries
```python
async def get_countries() -> list[Country]
```
Get all countries.
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_timezones"></a>
#### ReferenceAPI.get\_timezones
```python
async def get_timezones() -> list[TimeZone]
```
Get all timezones.
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_features"></a>
#### ReferenceAPI.get\_features
```python
async def get_features() -> list[Feature]
```
Get available features.
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_public_features"></a>
#### ReferenceAPI.get\_public\_features
```python
async def get_public_features() -> list[Feature]
```
Get public features.
<a id="kwork_api.client.KworkClient.ReferenceAPI.get_badges_info"></a>
#### ReferenceAPI.get\_badges\_info
```python
async def get_badges_info() -> list[Badge]
```
Get badges info.
<a id="kwork_api.client.KworkClient.NotificationsAPI"></a>
## NotificationsAPI
```python
class NotificationsAPI()
```
Notifications and messages endpoints.
<a id="kwork_api.client.KworkClient.NotificationsAPI.__init__"></a>
#### NotificationsAPI.\_\_init\_\_
```python
def __init__(client: "KworkClient")
```
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_list"></a>
#### NotificationsAPI.get\_list
```python
async def get_list() -> NotificationsResponse
```
Get notifications list.
<a id="kwork_api.client.KworkClient.NotificationsAPI.fetch"></a>
#### NotificationsAPI.fetch
```python
async def fetch() -> NotificationsResponse
```
Fetch new notifications.
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_dialogs"></a>
#### NotificationsAPI.get\_dialogs
```python
async def get_dialogs() -> list[Dialog]
```
Get dialogs list.
<a id="kwork_api.client.KworkClient.NotificationsAPI.get_blocked_dialogs"></a>
#### NotificationsAPI.get\_blocked\_dialogs
```python
async def get_blocked_dialogs() -> list[Dialog]
```
Get blocked dialogs.
<a id="kwork_api.client.KworkClient.OtherAPI"></a>
## OtherAPI
```python
class OtherAPI()
```
Other API endpoints.
<a id="kwork_api.client.KworkClient.OtherAPI.__init__"></a>
#### OtherAPI.\_\_init\_\_
```python
def __init__(client: "KworkClient")
```
<a id="kwork_api.client.KworkClient.OtherAPI.get_wants"></a>
#### OtherAPI.get\_wants
```python
async def get_wants() -> dict[str, Any]
```
Get user wants.
<a id="kwork_api.client.KworkClient.OtherAPI.get_wants_status"></a>
#### OtherAPI.get\_wants\_status
```python
async def get_wants_status() -> dict[str, Any]
```
Get wants status.
<a id="kwork_api.client.KworkClient.OtherAPI.get_kworks_status"></a>
#### OtherAPI.get\_kworks\_status
```python
async def get_kworks_status() -> dict[str, Any]
```
Get kworks status.
<a id="kwork_api.client.KworkClient.OtherAPI.get_offers"></a>
#### OtherAPI.get\_offers
```python
async def get_offers() -> dict[str, Any]
```
Get offers.
<a id="kwork_api.client.KworkClient.OtherAPI.get_exchange_info"></a>
#### OtherAPI.get\_exchange\_info
```python
async def get_exchange_info() -> dict[str, Any]
```
Get exchange info.
<a id="kwork_api.client.KworkClient.OtherAPI.get_channel"></a>
#### OtherAPI.get\_channel
```python
async def get_channel() -> dict[str, Any]
```
Get channel info.
<a id="kwork_api.client.KworkClient.OtherAPI.get_in_app_notification"></a>
#### OtherAPI.get\_in\_app\_notification
```python
async def get_in_app_notification() -> dict[str, Any]
```
Get in-app notification.
<a id="kwork_api.client.KworkClient.OtherAPI.get_security_user_data"></a>
#### OtherAPI.get\_security\_user\_data
```python
async def get_security_user_data() -> dict[str, Any]
```
Get security user data.
<a id="kwork_api.client.KworkClient.OtherAPI.is_dialog_allow"></a>
#### OtherAPI.is\_dialog\_allow
```python
async def is_dialog_allow(user_id: int) -> bool
```
Check if dialog is allowed.
<a id="kwork_api.client.KworkClient.OtherAPI.get_viewed_kworks"></a>
#### OtherAPI.get\_viewed\_kworks
```python
async def get_viewed_kworks() -> list[Kwork]
```
Get viewed kworks.
<a id="kwork_api.client.KworkClient.OtherAPI.get_favorite_categories"></a>
#### OtherAPI.get\_favorite\_categories
```python
async def get_favorite_categories() -> list[int]
```
Get favorite categories.
<a id="kwork_api.client.KworkClient.OtherAPI.update_settings"></a>
#### OtherAPI.update\_settings
```python
async def update_settings(settings: dict[str, Any]) -> dict[str, Any]
```
Update user settings.
<a id="kwork_api.client.KworkClient.OtherAPI.go_offline"></a>
#### OtherAPI.go\_offline
```python
async def go_offline() -> dict[str, Any]
```
Set user status to offline.
<a id="kwork_api.client.KworkClient.OtherAPI.get_actor"></a>
#### OtherAPI.get\_actor
```python
async def get_actor() -> dict[str, Any]
```
Get actor info.
<a id="kwork_api.client.KworkClient.catalog"></a>
#### KworkClient.catalog
```python
@property
def catalog() -> CatalogAPI
```
Catalog API.
<a id="kwork_api.client.KworkClient.projects"></a>
#### KworkClient.projects
```python
@property
def projects() -> ProjectsAPI
```
Projects API.
<a id="kwork_api.client.KworkClient.user"></a>
#### KworkClient.user
```python
@property
def user() -> UserAPI
```
User API.
<a id="kwork_api.client.KworkClient.reference"></a>
#### KworkClient.reference
```python
@property
def reference() -> ReferenceAPI
```
Reference data API.
<a id="kwork_api.client.KworkClient.notifications"></a>
#### KworkClient.notifications
```python
@property
def notifications() -> NotificationsAPI
```
Notifications API.
<a id="kwork_api.client.KworkClient.other"></a>
#### KworkClient.other
```python
@property
def other() -> OtherAPI
```
Other endpoints.
<a id="kwork_api.models"></a>
# Module kwork\_api.models
Pydantic models for Kwork API responses.
All models follow the structure found in the HAR dump analysis.
<a id="kwork_api.models.datetime"></a>
## datetime
<a id="kwork_api.models.Any"></a>
## Any
<a id="kwork_api.models.Optional"></a>
## Optional
<a id="kwork_api.models.BaseModel"></a>
## BaseModel
<a id="kwork_api.models.Field"></a>
## Field
<a id="kwork_api.models.KworkUser"></a>
## KworkUser
```python
class KworkUser(BaseModel)
```
User information.
<a id="kwork_api.models.KworkUser.id"></a>
#### id
<a id="kwork_api.models.KworkUser.username"></a>
#### username
<a id="kwork_api.models.KworkUser.avatar_url"></a>
#### avatar\_url
<a id="kwork_api.models.KworkUser.is_online"></a>
#### is\_online
<a id="kwork_api.models.KworkUser.rating"></a>
#### rating
<a id="kwork_api.models.KworkCategory"></a>
## KworkCategory
```python
class KworkCategory(BaseModel)
```
Category information.
<a id="kwork_api.models.KworkCategory.id"></a>
#### id
<a id="kwork_api.models.KworkCategory.name"></a>
#### name
<a id="kwork_api.models.KworkCategory.slug"></a>
#### slug
<a id="kwork_api.models.KworkCategory.parent_id"></a>
#### parent\_id
<a id="kwork_api.models.Kwork"></a>
## Kwork
```python
class Kwork(BaseModel)
```
Kwork (service) information.
<a id="kwork_api.models.Kwork.id"></a>
#### id
<a id="kwork_api.models.Kwork.title"></a>
#### title
<a id="kwork_api.models.Kwork.description"></a>
#### description
<a id="kwork_api.models.Kwork.price"></a>
#### price
<a id="kwork_api.models.Kwork.currency"></a>
#### currency
<a id="kwork_api.models.Kwork.category_id"></a>
#### category\_id
<a id="kwork_api.models.Kwork.seller"></a>
#### seller
<a id="kwork_api.models.Kwork.images"></a>
#### images
<a id="kwork_api.models.Kwork.rating"></a>
#### rating
<a id="kwork_api.models.Kwork.reviews_count"></a>
#### reviews\_count
<a id="kwork_api.models.Kwork.created_at"></a>
#### created\_at
<a id="kwork_api.models.Kwork.updated_at"></a>
#### updated\_at
<a id="kwork_api.models.KworkDetails"></a>
## KworkDetails
```python
class KworkDetails(Kwork)
```
Extended kwork details.
<a id="kwork_api.models.KworkDetails.full_description"></a>
#### full\_description
<a id="kwork_api.models.KworkDetails.requirements"></a>
#### requirements
<a id="kwork_api.models.KworkDetails.delivery_time"></a>
#### delivery\_time
in days
<a id="kwork_api.models.KworkDetails.revisions"></a>
#### revisions
<a id="kwork_api.models.KworkDetails.features"></a>
#### features
<a id="kwork_api.models.KworkDetails.faq"></a>
#### faq
<a id="kwork_api.models.PaginationInfo"></a>
## PaginationInfo
```python
class PaginationInfo(BaseModel)
```
Pagination metadata.
<a id="kwork_api.models.PaginationInfo.current_page"></a>
#### current\_page
<a id="kwork_api.models.PaginationInfo.total_pages"></a>
#### total\_pages
<a id="kwork_api.models.PaginationInfo.total_items"></a>
#### total\_items
<a id="kwork_api.models.PaginationInfo.items_per_page"></a>
#### items\_per\_page
<a id="kwork_api.models.PaginationInfo.has_next"></a>
#### has\_next
<a id="kwork_api.models.PaginationInfo.has_prev"></a>
#### has\_prev
<a id="kwork_api.models.CatalogResponse"></a>
## CatalogResponse
```python
class CatalogResponse(BaseModel)
```
Catalog response with kworks and pagination.
<a id="kwork_api.models.CatalogResponse.kworks"></a>
#### kworks
<a id="kwork_api.models.CatalogResponse.pagination"></a>
#### pagination
<a id="kwork_api.models.CatalogResponse.filters"></a>
#### filters
<a id="kwork_api.models.CatalogResponse.sort_options"></a>
#### sort\_options
<a id="kwork_api.models.Project"></a>
## Project
```python
class Project(BaseModel)
```
Project (freelance order) information.
<a id="kwork_api.models.Project.id"></a>
#### id
<a id="kwork_api.models.Project.title"></a>
#### title
<a id="kwork_api.models.Project.description"></a>
#### description
<a id="kwork_api.models.Project.budget"></a>
#### budget
<a id="kwork_api.models.Project.budget_type"></a>
#### budget\_type
fixed, hourly
<a id="kwork_api.models.Project.category_id"></a>
#### category\_id
<a id="kwork_api.models.Project.customer"></a>
#### customer
<a id="kwork_api.models.Project.status"></a>
#### status
open, in_progress, completed, cancelled
<a id="kwork_api.models.Project.created_at"></a>
#### created\_at
<a id="kwork_api.models.Project.updated_at"></a>
#### updated\_at
<a id="kwork_api.models.Project.bids_count"></a>
#### bids\_count
<a id="kwork_api.models.Project.skills"></a>
#### skills
<a id="kwork_api.models.ProjectsResponse"></a>
## ProjectsResponse
```python
class ProjectsResponse(BaseModel)
```
Projects list response.
<a id="kwork_api.models.ProjectsResponse.projects"></a>
#### projects
<a id="kwork_api.models.ProjectsResponse.pagination"></a>
#### pagination
<a id="kwork_api.models.Review"></a>
## Review
```python
class Review(BaseModel)
```
Review information.
<a id="kwork_api.models.Review.id"></a>
#### id
<a id="kwork_api.models.Review.rating"></a>
#### rating
<a id="kwork_api.models.Review.comment"></a>
#### comment
<a id="kwork_api.models.Review.author"></a>
#### author
<a id="kwork_api.models.Review.kwork_id"></a>
#### kwork\_id
<a id="kwork_api.models.Review.created_at"></a>
#### created\_at
<a id="kwork_api.models.ReviewsResponse"></a>
## ReviewsResponse
```python
class ReviewsResponse(BaseModel)
```
Reviews list response.
<a id="kwork_api.models.ReviewsResponse.reviews"></a>
#### reviews
<a id="kwork_api.models.ReviewsResponse.pagination"></a>
#### pagination
<a id="kwork_api.models.ReviewsResponse.average_rating"></a>
#### average\_rating
<a id="kwork_api.models.Notification"></a>
## Notification
```python
class Notification(BaseModel)
```
Notification information.
<a id="kwork_api.models.Notification.id"></a>
#### id
<a id="kwork_api.models.Notification.type"></a>
#### type
message, order, system, etc.
<a id="kwork_api.models.Notification.title"></a>
#### title
<a id="kwork_api.models.Notification.message"></a>
#### message
<a id="kwork_api.models.Notification.is_read"></a>
#### is\_read
<a id="kwork_api.models.Notification.created_at"></a>
#### created\_at
<a id="kwork_api.models.Notification.link"></a>
#### link
<a id="kwork_api.models.NotificationsResponse"></a>
## NotificationsResponse
```python
class NotificationsResponse(BaseModel)
```
Notifications list response.
<a id="kwork_api.models.NotificationsResponse.notifications"></a>
#### notifications
<a id="kwork_api.models.NotificationsResponse.unread_count"></a>
#### unread\_count
<a id="kwork_api.models.Dialog"></a>
## Dialog
```python
class Dialog(BaseModel)
```
Dialog (chat) information.
<a id="kwork_api.models.Dialog.id"></a>
#### id
<a id="kwork_api.models.Dialog.participant"></a>
#### participant
<a id="kwork_api.models.Dialog.last_message"></a>
#### last\_message
<a id="kwork_api.models.Dialog.unread_count"></a>
#### unread\_count
<a id="kwork_api.models.Dialog.updated_at"></a>
#### updated\_at
<a id="kwork_api.models.AuthResponse"></a>
## AuthResponse
```python
class AuthResponse(BaseModel)
```
Authentication response.
<a id="kwork_api.models.AuthResponse.success"></a>
#### success
<a id="kwork_api.models.AuthResponse.user_id"></a>
#### user\_id
<a id="kwork_api.models.AuthResponse.username"></a>
#### username
<a id="kwork_api.models.AuthResponse.web_auth_token"></a>
#### web\_auth\_token
<a id="kwork_api.models.AuthResponse.message"></a>
#### message
<a id="kwork_api.models.ErrorDetail"></a>
## ErrorDetail
```python
class ErrorDetail(BaseModel)
```
Error detail from API.
<a id="kwork_api.models.ErrorDetail.code"></a>
#### code
<a id="kwork_api.models.ErrorDetail.message"></a>
#### message
<a id="kwork_api.models.ErrorDetail.field"></a>
#### field
<a id="kwork_api.models.APIErrorResponse"></a>
## APIErrorResponse
```python
class APIErrorResponse(BaseModel)
```
Standard API error response.
<a id="kwork_api.models.APIErrorResponse.success"></a>
#### success
<a id="kwork_api.models.APIErrorResponse.errors"></a>
#### errors
<a id="kwork_api.models.APIErrorResponse.message"></a>
#### message
<a id="kwork_api.models.City"></a>
## City
```python
class City(BaseModel)
```
City information.
<a id="kwork_api.models.City.id"></a>
#### id
<a id="kwork_api.models.City.name"></a>
#### name
<a id="kwork_api.models.City.country_id"></a>
#### country\_id
<a id="kwork_api.models.Country"></a>
## Country
```python
class Country(BaseModel)
```
Country information.
<a id="kwork_api.models.Country.id"></a>
#### id
<a id="kwork_api.models.Country.name"></a>
#### name
<a id="kwork_api.models.Country.code"></a>
#### code
<a id="kwork_api.models.Country.cities"></a>
#### cities
<a id="kwork_api.models.TimeZone"></a>
## TimeZone
```python
class TimeZone(BaseModel)
```
Timezone information.
<a id="kwork_api.models.TimeZone.id"></a>
#### id
<a id="kwork_api.models.TimeZone.name"></a>
#### name
<a id="kwork_api.models.TimeZone.offset"></a>
#### offset
e.g., "+03:00"
<a id="kwork_api.models.Feature"></a>
## Feature
```python
class Feature(BaseModel)
```
Feature/addon information.
<a id="kwork_api.models.Feature.id"></a>
#### id
<a id="kwork_api.models.Feature.name"></a>
#### name
<a id="kwork_api.models.Feature.description"></a>
#### description
<a id="kwork_api.models.Feature.price"></a>
#### price
<a id="kwork_api.models.Feature.type"></a>
#### type
extra, premium, etc.
<a id="kwork_api.models.Badge"></a>
## Badge
```python
class Badge(BaseModel)
```
User badge information.
<a id="kwork_api.models.Badge.id"></a>
#### id
<a id="kwork_api.models.Badge.name"></a>
#### name
<a id="kwork_api.models.Badge.description"></a>
#### description
<a id="kwork_api.models.Badge.icon_url"></a>
#### icon\_url
<a id="kwork_api.models.DataResponse"></a>
## DataResponse
```python
class DataResponse(BaseModel)
```
Generic data response wrapper.
<a id="kwork_api.models.DataResponse.success"></a>
#### success
<a id="kwork_api.models.DataResponse.data"></a>
#### data
<a id="kwork_api.models.DataResponse.message"></a>
#### message
<a id="kwork_api.errors"></a>
# Module kwork\_api.errors
Kwork API exceptions.
All exceptions provide clear error messages for debugging.
<a id="kwork_api.errors.Any"></a>
## Any
<a id="kwork_api.errors.Optional"></a>
## Optional
<a id="kwork_api.errors.KworkError"></a>
## KworkError
```python
class KworkError(Exception)
```
Base exception for all Kwork API errors.
<a id="kwork_api.errors.KworkError.__init__"></a>
#### KworkError.\_\_init\_\_
```python
def __init__(message: str, response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkError.__str__"></a>
#### KworkError.\_\_str\_\_
```python
def __str__() -> str
```
<a id="kwork_api.errors.KworkAuthError"></a>
## KworkAuthError
```python
class KworkAuthError(KworkError)
```
Authentication/authorization error.
<a id="kwork_api.errors.KworkAuthError.__init__"></a>
#### KworkAuthError.\_\_init\_\_
```python
def __init__(message: str = "Authentication failed",
response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkAuthError.__str__"></a>
#### KworkAuthError.\_\_str\_\_
```python
def __str__() -> str
```
<a id="kwork_api.errors.KworkApiError"></a>
## KworkApiError
```python
class KworkApiError(KworkError)
```
API request error (4xx, 5xx).
<a id="kwork_api.errors.KworkApiError.__init__"></a>
#### KworkApiError.\_\_init\_\_
```python
def __init__(message: str,
status_code: Optional[int] = None,
response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkApiError.__str__"></a>
#### KworkApiError.\_\_str\_\_
```python
def __str__() -> str
```
<a id="kwork_api.errors.KworkNotFoundError"></a>
## KworkNotFoundError
```python
class KworkNotFoundError(KworkApiError)
```
Resource not found (404).
<a id="kwork_api.errors.KworkNotFoundError.__init__"></a>
#### KworkNotFoundError.\_\_init\_\_
```python
def __init__(resource: str, response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkRateLimitError"></a>
## KworkRateLimitError
```python
class KworkRateLimitError(KworkApiError)
```
Rate limit exceeded (429).
<a id="kwork_api.errors.KworkRateLimitError.__init__"></a>
#### KworkRateLimitError.\_\_init\_\_
```python
def __init__(message: str = "Rate limit exceeded",
response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkValidationError"></a>
## KworkValidationError
```python
class KworkValidationError(KworkApiError)
```
Validation error (400).
<a id="kwork_api.errors.KworkValidationError.__init__"></a>
#### KworkValidationError.\_\_init\_\_
```python
def __init__(message: str = "Validation failed",
fields: Optional[dict[str, list[str]]] = None,
response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkValidationError.__str__"></a>
#### KworkValidationError.\_\_str\_\_
```python
def __str__() -> str
```
<a id="kwork_api.errors.KworkNetworkError"></a>
## KworkNetworkError
```python
class KworkNetworkError(KworkError)
```
Network/connection error.
<a id="kwork_api.errors.KworkNetworkError.__init__"></a>
#### KworkNetworkError.\_\_init\_\_
```python
def __init__(message: str = "Network error", response: Optional[Any] = None)
```
<a id="kwork_api.errors.KworkNetworkError.__str__"></a>
#### KworkNetworkError.\_\_str\_\_
```python
def __str__() -> str
```