# Справочник API [Скачать OpenAPI](openapi.json). Поля и объявленные ответы сформированы из кода. Общие ошибки и условия заголовков — в [правилах интеграции](integration.md). Отсутствие схемы ответа не означает отсутствие тела. ## DELETE `/api/accounts/me/` **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 204 | схема тела не объявлена | | ## GET `/api/accounts/me/` **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | ProfileSchema | | ## PATCH `/api/accounts/me/` **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **ProfileInputPatch**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | ProfileSchema | | ## GET `/api/accounts/me/preferences` **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | UserPreferences | | ## PATCH `/api/accounts/me/preferences` **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **UserPreferencesInputPatch**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | UserPreferences | | ## DELETE `/api/accounts/me/preferences/fcm` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `token` | запрос | string | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 204 | схема тела не объявлена | | ## PUT `/api/accounts/me/push-devices` Register or refresh the FCM token for one app installation. **Авторизация:** JWT: ApplicationJWTAuth. ### Тело запроса `application/json`: **PushDeviceInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PushDeviceSchema | | ## DELETE `/api/accounts/me/push-devices/{device_id}` **Авторизация:** JWT: ApplicationJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `device_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 204 | схема тела не объявлена | | ## POST `/api/auth/otp/confirm` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **ConfirmOTPInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | ConfirmOTPOutput | | ## POST `/api/auth/otp/send` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **SendOTPInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | SuccessResponse | | ## POST `/api/auth/otp/update-pin/send` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **SendOTPInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | SuccessResponse | | ## POST `/api/auth/otp/update-pin/verify` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **VerifyOTPInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | RecoveryTokenSchema | | ## POST `/api/auth/otp/verify` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **VerifyOTPInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | VerifyOTPOutput | | ## PATCH `/api/auth/recovery/update-pin` **Авторизация:** JWT: RecoveryTokenApiKey. ### Тело запроса `application/json`: **PasswordUpdateInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | TokenObtainPairOutputSchema | | ## GET `/api/catalog/bootstrap/{version}` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `version` | путь | string (uuid) | да | | | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | схема тела не объявлена | | ## GET `/api/catalog/features/units/` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<MeasurementUnitSchema> | | ## GET `/api/catalog/groups/categories/main-page` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<MainPageCategoryBlockSchema> | | ## GET `/api/catalog/groups/categories/menu` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<CategoryMenuSchema> | | ## GET `/api/catalog/groups/categories/own-production` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<OwnCategorySchema> | | ## GET `/api/catalog/groups/categories/root` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<CategorySchema> | | ## GET `/api/catalog/groups/categories/{category_id}` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `category_id` | путь | string | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | CategorySchema | | ## GET `/api/catalog/groups/categories/{category_id}/children` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `category_id` | путь | string | да | | | `level` | запрос | integer / null | нет | | | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<CategorySchema> | | ## GET `/api/catalog/groups/categories/{category_id}/parents` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `category_id` | путь | string | да | | | `level` | запрос | integer / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<CategorySchema> | | ## GET `/api/catalog/products/` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `search` | запрос | string / null | нет | | | `category_id` | запрос | string (uuid) / null | нет | | | `is_favorite` | запрос | boolean / null | нет | | | `is_top` | запрос | boolean / null | нет | | | `is_new` | запрос | boolean / null | нет | | | `is_fresh` | запрос | boolean / null | нет | | | `sort_by` | запрос | "cheap" / "expensive" / "more_discount" / null | нет | | | `only_discount` | запрос | boolean / null | нет | | | `page` | запрос | integer | нет | | | `page_size` | запрос | integer / null | нет | | | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PagedProductListingSchema | | ## POST `/api/catalog/products/add-favorite/{product_id}` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `product_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | схема тела не объявлена | | ## POST `/api/catalog/products/check-availability` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **массив<AvailabilityItemInput>**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<AvailabilityOutput> | | ## POST `/api/catalog/products/favorites/check` **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **FavoriteProductsCheckInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | FavoriteProductsCheckOutput | | ## GET `/api/catalog/products/recommendations` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `product_ids` | запрос | массив<string (uuid)> | да | | | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<ProductListingSchema> | | ## DELETE `/api/catalog/products/remove-favorite/{product_id}` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `product_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 204 | схема тела не объявлена | | ## GET `/api/catalog/products/{product_id}` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `product_id` | путь | string | да | | | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | ProductDetailSchema | | ## GET `/api/catalog/version` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | схема тела не объявлена | | ## GET `/api/core/banners/` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | BannerSchema | | ## POST `/api/core/mobile-version/check/` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **MobileVersionInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | MobileVersionCheckResponse | | ## GET `/api/core/pages/` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<PageResponse> | | ## GET `/api/core/pages/main-page/products-titles` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | MainPageProductsTitlesSchema | | ## GET `/api/core/stories/` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<StorySchema> | | ## GET `/api/core/support-contact/` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | SupportContactSchema | | ## POST `/api/loaylty/discounts/preview/` Preview loyalty bonus accruals for cart items. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **DiscountPreviewInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | DiscountPreviewSchema | | ## GET `/api/loaylty/programs/` Legacy-compatible programs endpoint with silent fallback to `[]`. **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<LoyaltyProgramSchema> | | ## GET `/api/loaylty/programs/strict/` Return programs or surface Set Loyalty integration failures as 502. **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<LoyaltyProgramSchema> | | ## GET `/api/loaylty/wallet/` **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletSchema | | ## POST `/api/loaylty/wallet/accounts/switch/` Switch active bonus account. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **AccountSwitchInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## GET `/api/loaylty/wallet/block-reasons/` Return available card block reasons. **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<BlockReasonSchema> | | ## POST `/api/loaylty/wallet/block/` Block a loyalty card. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **CardBlockInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## POST `/api/loaylty/wallet/create/` Create wallet and trigger Set Loyalty provisioning. **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## POST `/api/loaylty/wallet/link-physical/` Link a physical Set Loyalty card to user's wallet via transfer API. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **CardLinkInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## POST `/api/loaylty/wallet/link-physical/preview/` Preview a physical Set Loyalty card before transfer. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **CardLinkInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletLinkPreviewSchema | | ## POST `/api/loaylty/wallet/link/` Link existing Set Loyalty card to user's wallet. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **CardLinkInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## POST `/api/loaylty/wallet/link/preview/` Preview card info before linking. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **CardLinkInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletLinkPreviewSchema | | ## GET `/api/loaylty/wallet/purchases/` Purchase history from Set Loyalty — single source of truth. Returns an empty list when the wallet is not linked to Set Loyalty or the CDP is unreachable. **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `page` | запрос | integer | нет | | | `page_size` | запрос | integer / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PagedPurchaseSchema | | ## GET `/api/loaylty/wallet/purchases/{purchase_id}/` Get detailed purchase from Set Loyalty (positions, discounts). Returns 404 when the wallet is not linked to Set Loyalty or the purchase is not found in the CDP. **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `purchase_id` | путь | string | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PurchaseDetailSchema | | ## POST `/api/loaylty/wallet/replace/` Replace current card with a new one. **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## GET `/api/loaylty/wallet/transactions/` Bonus transactions — from Set Loyalty if available, local fallback. **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `page` | запрос | integer | нет | | | `page_size` | запрос | integer / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PagedTransactionSchema | | ## POST `/api/loaylty/wallet/unblock/` Unblock a loyalty card. **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **CardUnblockInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | WalletWrapperSchema | | ## GET `/api/logistics/map/address-suggestions` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `lon` | запрос | number | да | | | `lat` | запрос | number | да | | | `query` | запрос | string | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<AddressSuggestionOutput> | | ## GET `/api/logistics/map/config` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | MapConfigOutput | | ## POST `/api/logistics/map/reverse-geocode` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **LocationInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | ReverseGeocodeOutput | | ## POST `/api/logistics/stores/delivery/can-use-location` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **LocationInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | string (uuid) / null | | ## POST `/api/logistics/stores/delivery/check-location` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **LocationInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | StoreLocationOutput | | ## POST `/api/logistics/stores/delivery/check-multiply-locations` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **массив<CheckLocationItemInput>**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | object | | ## GET `/api/logistics/stores/delivery/order-preferences` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | DeliveryPreferenceOutput | | ## GET `/api/logistics/stores/delivery/slots` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<DeliverySlotOutput> | | ## GET `/api/logistics/stores/delivery/zones` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<DeliveryZoneOutput> | | ## GET `/api/logistics/stores/pickup/` **Авторизация:** Без обязательного JWT. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<PickupStoreOutput> | | ## GET `/api/logistics/stores/pickup/order-preferences` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickupPreferenceOutput | | ## GET `/api/logistics/stores/pickup/slots` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<PickupSlotOutput> | | ## GET `/api/logistics/stores/pickup/{store_id}` **Авторизация:** Без обязательного JWT. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `store_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | схема тела не объявлена | | ## GET `/api/orders/` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `active` | запрос | boolean / null | нет | | | `page` | запрос | integer | нет | | | `page_size` | запрос | integer / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PagedOrdersListingSchema | | ## POST `/api/orders/` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **OrderInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 201 | string | | | 409 | OrderCommandError | | | 422 | OrderCommandError | | ## POST `/api/orders/delivery/price-estimate` **Авторизация:** JWT: CustomerJWTAuth. ### Тело запроса `application/json`: **DeliveryPriceEstimateInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | DeliveryPriceEstimateSchema | | | 422 | OrderCommandError | | | 502 | OrderCommandError | | | 503 | OrderCommandError | | ## GET `/api/orders/roadmap/{order_id}/detail` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | DetailOrderRoadmapSchema | | ## GET `/api/orders/roadmap/{order_id}/short` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | OrderRoadmapSchema | | ## GET `/api/orders/{order_id}` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | OrderDetailSchema | | ## POST `/api/orders/{order_id}/cancel` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | OrderDetailSchema | | ## GET `/api/payments/eskhata/preferences` **Авторизация:** JWT: CustomerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | object | | ## GET `/api/payments/eskhata/{order_id}/invoice` **Авторизация:** JWT: CustomerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | EskhataInvoiceResponse | | ## POST `/api/picker/auth/login` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **PickerLoginInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerLoginOutput | | ## GET `/api/picker/auth/me` **Авторизация:** JWT: PickerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerUserSchema | | ## POST `/api/picker/auth/refresh` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **PickerRefreshInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerRefreshOutput | | ## GET `/api/picker/catalog/products` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `query` | запрос | string / null | нет | | | `barcode` | запрос | string / null | нет | | | `limit` | запрос | integer | нет | | | `offset` | запрос | integer | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerCatalogOutput | | ## GET `/api/picker/catalog/products/v2` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `query` | запрос | string / null | нет | | | `barcode` | запрос | string / null | нет | | | `limit` | запрос | integer | нет | | | `cursor` | запрос | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerCatalogCursorOutput | | ## GET `/api/picker/history/sessions` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `started_at` | запрос | string (date-time) / null | нет | | | `ended_at` | запрос | string (date-time) / null | нет | | | `limit` | запрос | integer | нет | | | `offset` | запрос | integer | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerHistorySessionsOutput | | ## GET `/api/picker/history/sessions/{session_id}` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `session_id` | путь | integer | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerHistorySessionDetailSchema | | ## GET `/api/picker/history/summary` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `started_at` | запрос | string (date-time) / null | нет | | | `ended_at` | запрос | string (date-time) / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerHistorySummarySchema | | ## GET `/api/picker/orders` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `X-Store-Id` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | массив<PickerOrderSchema> | | ## POST `/api/picker/orders/{order_id}/additional-items` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **AdditionalItemInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/cancel` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **CancelPickingInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/cancelled/ack` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 204 | схема тела не объявлена | | ## POST `/api/picker/orders/{order_id}/finish` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/clarification/confirm` Подтверждает уже сохранённое расхождение до `finish`. Количество или вес должны точно совпадать с `confirmed_quantity` в актуальной session. Эта операция не изменяет фактическое значение, а переводит позицию из `clarified` в `picked`. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **ConfirmClarificationInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/clarification/reopen` Возвращает позицию в сборку до `finish`. Допустимо для `missing`, `clarified/removed`, `clarified/quantity_mismatch`, `clarified/weight_mismatch`, `clarified/store_transfer_shortage` и `picked`. Для уже собранной позиции передайте `reason="recheck"`; для найденной ранее отсутствующей — `reason="found_in_store"`. Сервер очищает фактическое количество и возвращает позицию в `pending`. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **ReopenItemInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/clarification/resolve` Окончательно удаляет отсутствующую позицию из заказа до `finish`. Сначала выполните `missing` с `action="remove"`, затем вызовите эту операцию с `resolution="remove"`. Результат — `clarified/removed`; при необходимости позицию можно вернуть через `clarification/reopen`. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **ResolveClarificationInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/manual-pick` Сохраняет фактическое количество штучной позиции после ручного ввода. Если количество отличается от заказанного, передайте `confirm: true` для подтверждения расхождения. Действие доступно до `finish`. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **ManualPickInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/missing` Помечает позицию как отсутствующую до `finish`. `call` и `remove` только фиксируют `missing_action` и переводят позицию в `missing`. Для фактического удаления из заказа затем вызовите `clarification/resolve` с `resolution="remove"`. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **MissingInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/piece-quantity` Изменяет фактическое количество штучной позиции до `finish`. Разрешено повторно вызывать для `pending`, `awaiting_quantity`, `picked` и `clarified/quantity_mismatch`. Количество — целое от 1 до заказанного. Неполное количество сохраняется как `clarified/quantity_mismatch`; оно не удаляет товар. Каждое новое действие требует новый `Idempotency-Key`. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **PieceQuantityInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | | 409 | схема тела не объявлена | Сессия закрыта или состояние позиции не позволяет изменение. | | 422 | схема тела не объявлена | Количество нецелое, нулевое или больше заказанного. | ## POST `/api/picker/orders/{order_id}/items/{item_id}/replacement` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **BarcodeInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/scan` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **BarcodeInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | ## POST `/api/picker/orders/{order_id}/items/{item_id}/weight` Сохраняет или исправляет фактический вес до `finish`. Повторный вызов для уже собранной позиции корректирует вес. Вес в допуске переводит позицию в `picked`; вне допуска сохраняется как `clarified/weight_mismatch` и требует отдельного подтверждения. **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `item_id` | путь | integer | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Тело запроса `application/json`: **WeightInput**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingActionOutput | | | 409 | схема тела не объявлена | Сессия закрыта или позиция не весовая. | | 422 | схема тела не объявлена | Вес нулевой, отрицательный или имеет более трёх знаков. | ## GET `/api/picker/orders/{order_id}/session` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingSessionSchema | | ## POST `/api/picker/orders/{order_id}/start` **Авторизация:** JWT: PickerJWTAuth. ### Параметры | Имя | Где | Тип | Обязателен в схеме | Описание | |---|---|---|---|---| | `order_id` | путь | string (uuid) | да | | | `Idempotency-Key` | заголовок | string / null | нет | | ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingSessionSchema | | ## GET `/api/picker/realtime/metadata` **Авторизация:** JWT: PickerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickerRealtimeMetadataSchema | | ## GET `/api/picker/session/active` **Авторизация:** JWT: PickerJWTAuth. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | PickingSessionSchema | | | 204 | схема тела не объявлена | | ## POST `/api/token/pair` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **TokenObtainPairInputSchema**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | TokenObtainPairOutputSchema | | ## POST `/api/token/refresh` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **TokenRefreshInputSchema**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | TokenRefreshOutputSchema | | ## POST `/api/token/verify` **Авторизация:** Без обязательного JWT. ### Тело запроса `application/json`: **TokenVerifyInputSchema**. Обязательно: да. ### Объявленные ответы | Код | Тип тела | Описание | |---|---|---| | 200 | Schema | | ## Модели данных ### AccountSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `title` | string | нет | | | `description` | string | нет | | | `balance` | string | нет | | | `is_active` | boolean | нет | | ```json { "properties": { "balance": { "default": "0", "title": "Balance", "type": "string" }, "description": { "default": "", "title": "Description", "type": "string" }, "id": { "title": "Id", "type": "string" }, "is_active": { "default": true, "title": "Is Active", "type": "boolean" }, "title": { "default": "", "title": "Title", "type": "string" } }, "required": [ "id" ], "title": "AccountSchema", "type": "object" } ``` ### AccountSwitchInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `account_id` | string | да | | ```json { "properties": { "account_id": { "title": "Account Id", "type": "string" } }, "required": [ "account_id" ], "title": "AccountSwitchInput", "type": "object" } ``` ### AdditionalItemInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `inventory_id` | string (uuid) | да | | | `quantity` | number / string | да | | ```json { "properties": { "inventory_id": { "format": "uuid", "title": "Inventory Id", "type": "string" }, "quantity": { "anyOf": [ { "exclusiveMinimum": 0.0, "type": "number" }, { "type": "string" } ], "title": "Quantity" } }, "required": [ "inventory_id", "quantity" ], "title": "AdditionalItemInput", "type": "object" } ``` ### AddressSuggestionOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `title` | string | да | | | `place_name` | string / null | нет | | | `category` | string | да | | | `location` | LocationOutput | да | | ```json { "properties": { "category": { "title": "Category", "type": "string" }, "location": { "$ref": "#/components/schemas/LocationOutput" }, "place_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place Name" }, "title": { "title": "Title", "type": "string" } }, "required": [ "title", "category", "location" ], "title": "AddressSuggestionOutput", "type": "object" } ``` ### AvailabilityItemInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_id` | string (uuid) | да | | | `unit_id` | string (uuid) | да | | | `quantity` | number / string | да | | ```json { "properties": { "product_id": { "format": "uuid", "title": "Product Id", "type": "string" }, "quantity": { "anyOf": [ { "minimum": 0.001, "type": "number" }, { "type": "string" } ], "title": "Quantity" }, "unit_id": { "format": "uuid", "title": "Unit Id", "type": "string" } }, "required": [ "product_id", "unit_id", "quantity" ], "title": "AvailabilityItemInput", "type": "object" } ``` ### AvailabilityOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_id` | string (uuid) | да | | | `unit_id` | string (uuid) | да | | | `is_available` | boolean | да | | | `max_quantity` | number / string | да | | | `is_user_order_quantity_limit_enabled` | boolean | нет | | | `user_order_quantity_limit` | number / string | нет | | | `requested_quantity` | number / string | нет | | | `reason_code` | string / null | нет | | ```json { "properties": { "is_available": { "title": "Is Available", "type": "boolean" }, "is_user_order_quantity_limit_enabled": { "default": false, "title": "Is User Order Quantity Limit Enabled", "type": "boolean" }, "max_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Max Quantity" }, "product_id": { "format": "uuid", "title": "Product Id", "type": "string" }, "reason_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reason Code" }, "requested_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "default": "0.000", "title": "Requested Quantity" }, "unit_id": { "format": "uuid", "title": "Unit Id", "type": "string" }, "user_order_quantity_limit": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "default": "0.000", "title": "User Order Quantity Limit" } }, "required": [ "product_id", "unit_id", "is_available", "max_quantity" ], "title": "AvailabilityOutput", "type": "object" } ``` ### BannerSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `image` | string | да | | | `reference_type` | string | да | | | `reference_id` | string / null | нет | | ```json { "properties": { "image": { "title": "Image", "type": "string" }, "reference_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reference Id" }, "reference_type": { "title": "Reference Type", "type": "string" } }, "required": [ "image", "reference_type" ], "title": "BannerSchema", "type": "object" } ``` ### BarcodeInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `barcode` | string | да | Штрихкод товара. | ```json { "properties": { "barcode": { "description": "Штрихкод товара.", "examples": [ "482000000001" ], "minLength": 1, "title": "Barcode", "type": "string" } }, "required": [ "barcode" ], "title": "BarcodeInput", "type": "object" } ``` ### BlockReasonSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `key` | string | да | | | `label` | string | да | | ```json { "properties": { "key": { "title": "Key", "type": "string" }, "label": { "title": "Label", "type": "string" } }, "required": [ "key", "label" ], "title": "BlockReasonSchema", "type": "object" } ``` ### CancelPickingInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `reason` | string / null | нет | | ```json { "properties": { "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reason" } }, "title": "CancelPickingInput", "type": "object" } ``` ### CardBlockInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `reason` | string / null | нет | | | `card_id` | string / null | нет | | ```json { "properties": { "card_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Card Id" }, "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reason" } }, "title": "CardBlockInput", "type": "object" } ``` ### CardLinkInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `card_number` | string | да | | ```json { "properties": { "card_number": { "title": "Card Number", "type": "string" } }, "required": [ "card_number" ], "title": "CardLinkInput", "type": "object" } ``` ### CardSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `title` | string | нет | | | `card_number` | string | нет | | | `is_virtual` | boolean | нет | | | `is_active` | boolean | нет | | | `is_blocked` | boolean | нет | | | `qrcode` | QrcodeSchema / null | нет | | ```json { "properties": { "card_number": { "default": "", "title": "Card Number", "type": "string" }, "id": { "title": "Id", "type": "string" }, "is_active": { "default": true, "title": "Is Active", "type": "boolean" }, "is_blocked": { "default": false, "title": "Is Blocked", "type": "boolean" }, "is_virtual": { "default": true, "title": "Is Virtual", "type": "boolean" }, "qrcode": { "anyOf": [ { "$ref": "#/components/schemas/QrcodeSchema" }, { "type": "null" } ] }, "title": { "default": "", "title": "Title", "type": "string" } }, "required": [ "id" ], "title": "CardSchema", "type": "object" } ``` ### CardUnblockInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `card_id` | string / null | нет | | ```json { "properties": { "card_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Card Id" } }, "title": "CardUnblockInput", "type": "object" } ``` ### CategoryMenuSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `level` | integer | да | | | `parent_id` | string (uuid) / null | нет | | | `color` | string | да | | | `children_count` | integer | нет | | | `image` | ListingImageSchema / null | нет | | | `children` | массив<CategorySchema> / null | нет | | ```json { "properties": { "children": { "anyOf": [ { "items": { "$ref": "#/components/schemas/CategorySchema" }, "type": "array" }, { "type": "null" } ], "title": "Children" }, "children_count": { "default": 0, "title": "Children Count", "type": "integer" }, "color": { "title": "Color", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "image": { "anyOf": [ { "$ref": "#/components/schemas/ListingImageSchema" }, { "type": "null" } ] }, "level": { "title": "Level", "type": "integer" }, "name": { "title": "Name", "type": "string" }, "parent_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Parent Id" } }, "required": [ "id", "name", "level", "color" ], "title": "CategoryMenuSchema", "type": "object" } ``` ### CategorySchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `level` | integer | да | | | `parent_id` | string (uuid) / null | нет | | | `color` | string | да | | | `children_count` | integer | нет | | | `image` | ListingImageSchema / null | нет | | ```json { "properties": { "children_count": { "default": 0, "title": "Children Count", "type": "integer" }, "color": { "title": "Color", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "image": { "anyOf": [ { "$ref": "#/components/schemas/ListingImageSchema" }, { "type": "null" } ] }, "level": { "title": "Level", "type": "integer" }, "name": { "title": "Name", "type": "string" }, "parent_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Parent Id" } }, "required": [ "id", "name", "level", "color" ], "title": "CategorySchema", "type": "object" } ``` ### CheckLocationItemInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `uuid` | string (uuid) | да | | | `location` | LocationInput | да | | ```json { "properties": { "location": { "$ref": "#/components/schemas/LocationInput" }, "uuid": { "format": "uuid", "title": "Uuid", "type": "string" } }, "required": [ "uuid", "location" ], "title": "CheckLocationItemInput", "type": "object" } ``` ### ConfirmClarificationInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `resolution` | string / null | нет | Необязательный тип расхождения: `quantity_mismatch` или `weight_mismatch`. Если передан, должен совпасть с состоянием позиции. | | `quantity` | integer / null | нет | Подтверждённое целое количество для штучного товара. | | `quantity_kg` | number / string / null | нет | Подтверждённый вес в килограммах для весового товара. | ```json { "properties": { "quantity": { "anyOf": [ { "minimum": 1, "type": "integer" }, { "type": "null" } ], "description": "Подтверждённое целое количество для штучного товара.", "examples": [ 2 ], "title": "Quantity" }, "quantity_kg": { "anyOf": [ { "exclusiveMinimum": 0.0, "type": "number" }, { "type": "string" }, { "type": "null" } ], "description": "Подтверждённый вес в килограммах для весового товара.", "examples": [ "0.680" ], "title": "Quantity Kg" }, "resolution": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Необязательный тип расхождения: `quantity_mismatch` или `weight_mismatch`. Если передан, должен совпасть с состоянием позиции.", "examples": [ "quantity_mismatch" ], "title": "Resolution" } }, "title": "ConfirmClarificationInput", "type": "object" } ``` ### ConfirmOTPInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `otp` | string | да | | | `first_name` | string / null | нет | | | `last_name` | string / null | нет | | | `patronymic` | string / null | нет | | ```json { "properties": { "first_name": { "anyOf": [ { "maxLength": 50, "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "First Name" }, "last_name": { "anyOf": [ { "maxLength": 50, "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Last Name" }, "otp": { "title": "Otp", "type": "string" }, "patronymic": { "anyOf": [ { "maxLength": 50, "type": "string" }, { "type": "null" } ], "title": "Patronymic" }, "phone": { "maxLength": 15, "minLength": 8, "pattern": "^\\+[1-9][0-9]{7,14}$", "title": "Phone", "type": "string" } }, "required": [ "phone", "otp" ], "title": "ConfirmOTPInput", "type": "object" } ``` ### ConfirmOTPOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `refresh` | string | да | | | `access` | string | да | | | `is_new_user` | boolean | да | | ```json { "properties": { "access": { "title": "Access", "type": "string" }, "is_new_user": { "title": "Is New User", "type": "boolean" }, "phone": { "maxLength": 15, "title": "Телефон", "type": "string" }, "refresh": { "title": "Refresh", "type": "string" } }, "required": [ "phone", "refresh", "access", "is_new_user" ], "title": "ConfirmOTPOutput", "type": "object" } ``` ### CourierLocationSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `lng` | number / string | да | | | `lat` | number / string | да | | | `bearing` | number / string / null | нет | | | `updated_at` | string (date-time) / null | нет | | ```json { "properties": { "bearing": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Bearing" }, "lat": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Lat" }, "lng": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Lng" }, "updated_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Updated At" } }, "required": [ "lng", "lat" ], "title": "CourierLocationSchema", "type": "object" } ``` ### CourierSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `name` | string / null | нет | | | `phone` | string / null | нет | | | `vehicle_number` | string / null | нет | | ```json { "properties": { "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Name" }, "phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Phone" }, "vehicle_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Vehicle Number" } }, "title": "CourierSchema", "type": "object" } ``` ### DeliveryInfoSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `address_line` | string | да | | | `date` | string (date) | да | | | `start_time` | string (time) | да | | | `end_time` | string (time) | да | | | `cost` | number / string | да | | | `store_location` | DeliveryRouteLocationSchema / null | нет | | | `customer_location` | DeliveryRouteLocationSchema / null | нет | | | `tracking` | DeliveryTrackingSchema / null | нет | | ```json { "properties": { "address_line": { "title": "Address Line", "type": "string" }, "cost": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Cost" }, "customer_location": { "anyOf": [ { "$ref": "#/components/schemas/DeliveryRouteLocationSchema" }, { "type": "null" } ] }, "date": { "format": "date", "title": "Date", "type": "string" }, "end_time": { "format": "time", "title": "End Time", "type": "string" }, "start_time": { "format": "time", "title": "Start Time", "type": "string" }, "store_location": { "anyOf": [ { "$ref": "#/components/schemas/DeliveryRouteLocationSchema" }, { "type": "null" } ] }, "tracking": { "anyOf": [ { "$ref": "#/components/schemas/DeliveryTrackingSchema" }, { "type": "null" } ] } }, "required": [ "address_line", "date", "start_time", "end_time", "cost" ], "title": "DeliveryInfoSchema", "type": "object" } ``` ### DeliveryInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `address` | UserAddressInput | да | | | `slot_id` | string (uuid) / null | нет | | | `estimate_id` | string (uuid) / null | нет | | ```json { "properties": { "address": { "$ref": "#/components/schemas/UserAddressInput" }, "estimate_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Estimate Id" }, "slot_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Slot Id" } }, "required": [ "address" ], "title": "DeliveryInput", "type": "object" } ``` ### DeliveryPreferenceOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `min_order_amount` | number / string | да | | | `express` | ExpressDeliveryOutput / null | нет | | | `standard` | StandardDeliveryOutput / null | нет | | ```json { "properties": { "express": { "anyOf": [ { "$ref": "#/components/schemas/ExpressDeliveryOutput" }, { "type": "null" } ] }, "min_order_amount": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Min Order Amount" }, "standard": { "anyOf": [ { "$ref": "#/components/schemas/StandardDeliveryOutput" }, { "type": "null" } ] } }, "required": [ "min_order_amount" ], "title": "DeliveryPreferenceOutput", "type": "object" } ``` ### DeliveryPriceEstimateInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `location` | LocationInput | да | | ```json { "properties": { "location": { "$ref": "#/components/schemas/LocationInput" } }, "required": [ "location" ], "title": "DeliveryPriceEstimateInput", "type": "object" } ``` ### DeliveryPriceEstimateSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `estimate_id` | string (uuid) | да | | | `total_price` | number / string | да | | | `currency` | string | да | | | `distance_km` | number / string | да | | | `tariff_id` | string | да | | | `tariff_name` | string / null | нет | | | `expires_at` | string (date-time) | да | | ```json { "properties": { "currency": { "title": "Currency", "type": "string" }, "distance_km": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Distance Km" }, "estimate_id": { "format": "uuid", "title": "Estimate Id", "type": "string" }, "expires_at": { "format": "date-time", "title": "Expires At", "type": "string" }, "tariff_id": { "title": "Tariff Id", "type": "string" }, "tariff_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tariff Name" }, "total_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Total Price" } }, "required": [ "estimate_id", "total_price", "currency", "distance_km", "tariff_id", "expires_at" ], "title": "DeliveryPriceEstimateSchema", "type": "object" } ``` ### DeliveryRouteLocationSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `lon` | number | да | | | `lat` | number | да | | ```json { "properties": { "lat": { "title": "Lat", "type": "number" }, "lon": { "title": "Lon", "type": "number" } }, "required": [ "lon", "lat" ], "title": "DeliveryRouteLocationSchema", "type": "object" } ``` ### DeliverySlotOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `type` | integer | да | | | `start_time` | string (time) | да | | | `end_time` | string (time) | да | | | `cost` | number / string | да | | ```json { "properties": { "cost": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Cost" }, "end_time": { "format": "time", "title": "End Time", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "start_time": { "format": "time", "title": "Start Time", "type": "string" }, "type": { "title": "Type", "type": "integer" } }, "required": [ "id", "type", "start_time", "end_time", "cost" ], "title": "DeliverySlotOutput", "type": "object" } ``` ### DeliveryTrackingSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `state` | string | да | | | `display` | string | да | | | `comment` | string / null | нет | | | `can_cancel` | boolean | нет | | | `cancellation_reason` | string / null | нет | | | `courier` | CourierSchema / null | нет | | | `location` | CourierLocationSchema / null | нет | | | `updated_at` | string (date-time) / null | нет | | ```json { "properties": { "can_cancel": { "default": false, "title": "Can Cancel", "type": "boolean" }, "cancellation_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cancellation Reason" }, "comment": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Comment" }, "courier": { "anyOf": [ { "$ref": "#/components/schemas/CourierSchema" }, { "type": "null" } ] }, "display": { "title": "Display", "type": "string" }, "location": { "anyOf": [ { "$ref": "#/components/schemas/CourierLocationSchema" }, { "type": "null" } ] }, "state": { "title": "State", "type": "string" }, "updated_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Updated At" } }, "required": [ "state", "display" ], "title": "DeliveryTrackingSchema", "type": "object" } ``` ### DeliveryZoneOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `store_id` | string (uuid) | да | | | `store_name` | string | да | | | `polygon` | PolygonSchema | да | | ```json { "properties": { "polygon": { "$ref": "#/components/schemas/PolygonSchema" }, "store_id": { "format": "uuid", "title": "Store Id", "type": "string" }, "store_name": { "title": "Store Name", "type": "string" } }, "required": [ "store_id", "store_name", "polygon" ], "title": "DeliveryZoneOutput", "type": "object" } ``` ### DetailImageSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `original` | string | да | | | `listing` | string | да | | | `detail` | string | да | | ```json { "properties": { "detail": { "title": "Detail", "type": "string" }, "listing": { "title": "Listing", "type": "string" }, "original": { "title": "Original", "type": "string" } }, "required": [ "original", "listing", "detail" ], "title": "DetailImageSchema", "type": "object" } ``` ### DetailOrderRoadmapSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `no` | integer | да | | | `type` | string | да | | | `status` | OrderStatusSchema | да | | | `total_price` | number / string | да | | | `picking_result_state` | string | нет | | | `has_picking_changes` | boolean | нет | | | `items` | массив<OrderItemSchema> | да | | | `delivery` | DeliveryInfoSchema / null | нет | | | `pickup` | PickupInfoSchema / null | нет | | | `can_cancel` | boolean | нет | | | `picking_result` | PickingResultSchema | да | | ```json { "properties": { "can_cancel": { "default": false, "title": "Can Cancel", "type": "boolean" }, "delivery": { "anyOf": [ { "$ref": "#/components/schemas/DeliveryInfoSchema" }, { "type": "null" } ] }, "has_picking_changes": { "default": false, "title": "Has Picking Changes", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/OrderItemSchema" }, "title": "Items", "type": "array" }, "no": { "title": "No", "type": "integer" }, "picking_result": { "$ref": "#/components/schemas/PickingResultSchema" }, "picking_result_state": { "default": "pending", "title": "Picking Result State", "type": "string" }, "pickup": { "anyOf": [ { "$ref": "#/components/schemas/PickupInfoSchema" }, { "type": "null" } ] }, "status": { "$ref": "#/components/schemas/OrderStatusSchema" }, "total_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Total Price" }, "type": { "title": "Type", "type": "string" } }, "required": [ "no", "type", "status", "total_price", "items", "picking_result" ], "title": "DetailOrderRoadmapSchema", "type": "object" } ``` ### DiscountPreviewInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<DiscountPreviewItemInput> | да | | ```json { "properties": { "items": { "items": { "$ref": "#/components/schemas/DiscountPreviewItemInput" }, "title": "Items", "type": "array" } }, "required": [ "items" ], "title": "DiscountPreviewInput", "type": "object" } ``` ### DiscountPreviewItemInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_id` | string (uuid) | да | | | `unit_id` | string (uuid) | да | | | `quantity` | number / string | да | | ```json { "properties": { "product_id": { "format": "uuid", "title": "Product Id", "type": "string" }, "quantity": { "anyOf": [ { "minimum": 0.001, "type": "number" }, { "type": "string" } ], "title": "Quantity" }, "unit_id": { "format": "uuid", "title": "Unit Id", "type": "string" } }, "required": [ "product_id", "unit_id", "quantity" ], "title": "DiscountPreviewItemInput", "type": "object" } ``` ### DiscountPreviewItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_external_id` | string | да | | | `original_price` | string | да | | | `discounted_price` | string | да | | | `discount_amount` | string | да | | ```json { "properties": { "discount_amount": { "title": "Discount Amount", "type": "string" }, "discounted_price": { "title": "Discounted Price", "type": "string" }, "original_price": { "title": "Original Price", "type": "string" }, "product_external_id": { "title": "Product External Id", "type": "string" } }, "required": [ "product_external_id", "original_price", "discounted_price", "discount_amount" ], "title": "DiscountPreviewItemSchema", "type": "object" } ``` ### DiscountPreviewSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<DiscountPreviewItemSchema> | нет | | | `total_discount` | string | нет | | | `bonus_accrual` | string | нет | | | `bonus_applied` | boolean | нет | | | `bonus_reason` | string | нет | | ```json { "properties": { "bonus_accrual": { "default": "0", "title": "Bonus Accrual", "type": "string" }, "bonus_applied": { "default": false, "title": "Bonus Applied", "type": "boolean" }, "bonus_reason": { "default": "", "title": "Bonus Reason", "type": "string" }, "items": { "items": { "$ref": "#/components/schemas/DiscountPreviewItemSchema" }, "title": "Items", "type": "array" }, "total_discount": { "default": "0", "title": "Total Discount", "type": "string" } }, "title": "DiscountPreviewSchema", "type": "object" } ``` ### EskhataInvoiceResponse | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `link` | string | да | | | `expires_at` | string (date-time) | да | | ```json { "properties": { "expires_at": { "format": "date-time", "title": "Expires At", "type": "string" }, "link": { "title": "Link", "type": "string" } }, "required": [ "link", "expires_at" ], "title": "EskhataInvoiceResponse", "type": "object" } ``` ### ExpressDeliveryOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `minutes` | integer | да | | | `cost` | number / string | да | | | `max_items_count` | integer / null | нет | | | `is_available` | boolean | да | | | `schedule` | массив<ExpressOrderScheduleOutput> | да | | ```json { "properties": { "cost": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Cost" }, "is_available": { "title": "Is Available", "type": "boolean" }, "max_items_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Max Items Count" }, "minutes": { "title": "Minutes", "type": "integer" }, "schedule": { "items": { "$ref": "#/components/schemas/ExpressOrderScheduleOutput" }, "title": "Schedule", "type": "array" } }, "required": [ "minutes", "cost", "is_available", "schedule" ], "title": "ExpressDeliveryOutput", "type": "object" } ``` ### ExpressOrderScheduleOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `weekday` | integer | да | | | `start_time` | string (time) | да | | | `end_time` | string (time) | да | | | `is_active` | boolean | да | | ```json { "properties": { "end_time": { "format": "time", "title": "End Time", "type": "string" }, "is_active": { "title": "Is Active", "type": "boolean" }, "start_time": { "format": "time", "title": "Start Time", "type": "string" }, "weekday": { "title": "Weekday", "type": "integer" } }, "required": [ "weekday", "start_time", "end_time", "is_active" ], "title": "ExpressOrderScheduleOutput", "type": "object" } ``` ### FavoriteProductsCheckInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_ids` | массив<string (uuid)> | да | | ```json { "properties": { "product_ids": { "items": { "format": "uuid", "type": "string" }, "maxItems": 100, "title": "Product Ids", "type": "array" } }, "required": [ "product_ids" ], "title": "FavoriteProductsCheckInput", "type": "object" } ``` ### FavoriteProductsCheckOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_ids` | массив<string (uuid)> | да | | ```json { "properties": { "product_ids": { "items": { "format": "uuid", "type": "string" }, "title": "Product Ids", "type": "array" } }, "required": [ "product_ids" ], "title": "FavoriteProductsCheckOutput", "type": "object" } ``` ### Gender ```json { "enum": [ "male", "female" ], "title": "Gender", "type": "string" } ``` ### InventoryItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `unit_id` | string (uuid) | да | | | `stock` | number / string / null | да | | | `unit_price` | number / string | да | | | `old_price` | number / string / null | нет | | | `discount_percent` | number / string / null | нет | | ```json { "properties": { "discount_percent": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Discount Percent" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "old_price": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Old Price" }, "stock": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Stock" }, "unit_id": { "format": "uuid", "title": "Unit Id", "type": "string" }, "unit_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Unit Price" } }, "required": [ "id", "unit_id", "stock", "unit_price" ], "title": "InventoryItemSchema", "type": "object" } ``` ### ListingImageSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `original` | string | да | | | `listing` | string | да | | ```json { "properties": { "listing": { "title": "Listing", "type": "string" }, "original": { "title": "Original", "type": "string" } }, "required": [ "original", "listing" ], "title": "ListingImageSchema", "type": "object" } ``` ### LocationInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `lon` | number | да | | | `lat` | number | да | | ```json { "properties": { "lat": { "maximum": 90, "minimum": -90, "title": "Lat", "type": "number" }, "lon": { "maximum": 180, "minimum": -180, "title": "Lon", "type": "number" } }, "required": [ "lon", "lat" ], "title": "LocationInput", "type": "object" } ``` ### LocationOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `lon` | number | да | | | `lat` | number | да | | ```json { "properties": { "lat": { "title": "Lat", "type": "number" }, "lon": { "title": "Lon", "type": "number" } }, "required": [ "lon", "lat" ], "title": "LocationOutput", "type": "object" } ``` ### LoyaltyProgramLevelSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | integer / null | нет | | | `order` | integer | да | | | `name` | string | да | | | `boundary` | string | нет | | | `clients_count` | integer / null | нет | | | `range_label` | string | нет | | | `description` | string | нет | | ```json { "properties": { "boundary": { "default": "0", "title": "Boundary", "type": "string" }, "clients_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Clients Count" }, "description": { "default": "", "title": "Description", "type": "string" }, "id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Id" }, "name": { "title": "Name", "type": "string" }, "order": { "title": "Order", "type": "integer" }, "range_label": { "default": "", "title": "Range Label", "type": "string" } }, "required": [ "order", "name" ], "title": "LoyaltyProgramLevelSchema", "type": "object" } ``` ### LoyaltyProgramSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | integer | да | | | `name` | string | да | | | `levels` | массив<LoyaltyProgramLevelSchema> | нет | | ```json { "properties": { "id": { "title": "Id", "type": "integer" }, "levels": { "items": { "$ref": "#/components/schemas/LoyaltyProgramLevelSchema" }, "title": "Levels", "type": "array" }, "name": { "title": "Name", "type": "string" } }, "required": [ "id", "name" ], "title": "LoyaltyProgramSchema", "type": "object" } ``` ### LoyaltyStatusSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `program_name` | string | нет | | | `current_tier` | string | нет | | | `next_tier` | string | нет | | | `tiers_source` | string | нет | | | `tiers_complete` | boolean | нет | | | `progress` | number | нет | | | `amount_to_next` | string | нет | | | `total_turnover` | string | нет | | | `last_purchase_points` | string | нет | | | `tiers` | массив<TierSchema> | нет | | ```json { "properties": { "amount_to_next": { "default": "0", "title": "Amount To Next", "type": "string" }, "current_tier": { "default": "", "title": "Current Tier", "type": "string" }, "last_purchase_points": { "default": "0", "title": "Last Purchase Points", "type": "string" }, "next_tier": { "default": "", "title": "Next Tier", "type": "string" }, "program_name": { "default": "", "title": "Program Name", "type": "string" }, "progress": { "default": 0.0, "title": "Progress", "type": "number" }, "tiers": { "items": { "$ref": "#/components/schemas/TierSchema" }, "title": "Tiers", "type": "array" }, "tiers_complete": { "default": false, "title": "Tiers Complete", "type": "boolean" }, "tiers_source": { "default": "cdp_fallback", "title": "Tiers Source", "type": "string" }, "total_turnover": { "default": "0", "title": "Total Turnover", "type": "string" } }, "title": "LoyaltyStatusSchema", "type": "object" } ``` ### MainPageCategoryBlockSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `level` | integer | да | | | `parent_id` | string (uuid) / null | нет | | | `color` | string | да | | | `children_count` | integer | нет | | | `image` | ListingImageSchema / null | нет | | | `children` | массив<CategorySchema> / null | нет | | | `layout` | string | да | | ```json { "properties": { "children": { "anyOf": [ { "items": { "$ref": "#/components/schemas/CategorySchema" }, "type": "array" }, { "type": "null" } ], "title": "Children" }, "children_count": { "default": 0, "title": "Children Count", "type": "integer" }, "color": { "title": "Color", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "image": { "anyOf": [ { "$ref": "#/components/schemas/ListingImageSchema" }, { "type": "null" } ] }, "layout": { "title": "Layout", "type": "string" }, "level": { "title": "Level", "type": "integer" }, "name": { "title": "Name", "type": "string" }, "parent_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Parent Id" } }, "required": [ "id", "name", "level", "color", "layout" ], "title": "MainPageCategoryBlockSchema", "type": "object" } ``` ### MainPageProductsTitlesSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `promo` | string | да | | | `amid` | string | да | | | `amid_category` | string / null | нет | | | `new` | string | да | | | `childhood` | string | да | | | `fresh` | string | да | | ```json { "properties": { "amid": { "title": "Amid", "type": "string" }, "amid_category": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Amid Category" }, "childhood": { "title": "Childhood", "type": "string" }, "fresh": { "title": "Fresh", "type": "string" }, "new": { "title": "New", "type": "string" }, "promo": { "title": "Promo", "type": "string" } }, "required": [ "promo", "amid", "new", "childhood", "fresh" ], "title": "MainPageProductsTitlesSchema", "type": "object" } ``` ### ManualPickInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `quantity` | integer | да | Фактически собранное целое количество. | | `confirm` | boolean | нет | Подтверждает уже сохранённое расхождение количества. | ```json { "properties": { "confirm": { "default": false, "description": "Подтверждает уже сохранённое расхождение количества.", "title": "Confirm", "type": "boolean" }, "quantity": { "description": "Фактически собранное целое количество.", "examples": [ 2 ], "minimum": 1, "title": "Quantity", "type": "integer" } }, "required": [ "quantity" ], "title": "ManualPickInput", "type": "object" } ``` ### MapConfigOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `enabled` | boolean | да | | | `mapbox_public_token` | string / null | нет | | | `style_uri` | string / null | нет | | | `search_min_length` | integer | нет | | | `search_max_results` | integer | нет | | | `search_debounce_ms` | integer | нет | | ```json { "properties": { "enabled": { "title": "Enabled", "type": "boolean" }, "mapbox_public_token": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Mapbox Public Token" }, "search_debounce_ms": { "default": 400, "title": "Search Debounce Ms", "type": "integer" }, "search_max_results": { "default": 7, "title": "Search Max Results", "type": "integer" }, "search_min_length": { "default": 2, "title": "Search Min Length", "type": "integer" }, "style_uri": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Style Uri" } }, "required": [ "enabled" ], "title": "MapConfigOutput", "type": "object" } ``` ### MaritalStatus ```json { "enum": [ "single", "married" ], "title": "MaritalStatus", "type": "string" } ``` ### MeasurementUnitSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `full_name` | string | да | | | `ratio` | number / string | да | | ```json { "properties": { "full_name": { "title": "Full Name", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "name": { "title": "Name", "type": "string" }, "ratio": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Ratio" } }, "required": [ "id", "name", "full_name", "ratio" ], "title": "MeasurementUnitSchema", "type": "object" } ``` ### MissingInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `action` | string | да | `call` — запросить звонок клиенту; `remove` — подготовить удаление. | ```json { "properties": { "action": { "description": "`call` — запросить звонок клиенту; `remove` — подготовить удаление.", "examples": [ "remove" ], "title": "Action", "type": "string" } }, "required": [ "action" ], "title": "MissingInput", "type": "object" } ``` ### MobileVersionCheckResponse | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `update_required` | boolean | да | | | `can_update` | boolean | да | | | `message` | string / null | нет | | ```json { "properties": { "can_update": { "title": "Can Update", "type": "boolean" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "update_required": { "title": "Update Required", "type": "boolean" } }, "required": [ "update_required", "can_update" ], "title": "MobileVersionCheckResponse", "type": "object" } ``` ### MobileVersionInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `platform` | "android" / "ios" | да | | | `version` | string | да | | ```json { "properties": { "platform": { "enum": [ "android", "ios" ], "title": "Platform", "type": "string" }, "version": { "title": "Version", "type": "string" } }, "required": [ "platform", "version" ], "title": "MobileVersionInput", "type": "object" } ``` ### OrderAdviceActionEnum ```json { "enum": [ "remove", "call" ], "title": "OrderAdviceActionEnum", "type": "string" } ``` ### OrderCommandError | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `detail` | string | да | | | `code` | string | да | | ```json { "properties": { "code": { "title": "Code", "type": "string" }, "detail": { "title": "Detail", "type": "string" } }, "required": [ "detail", "code" ], "title": "OrderCommandError", "type": "object" } ``` ### OrderDetailSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `no` | integer | да | | | `type` | string | да | | | `address_line` | string | да | | | `created_at` | string (date-time) | да | | | `total_price` | number / string | да | | | `picking_result_state` | string | нет | | | `has_picking_changes` | boolean | нет | | | `items` | массив<OrderItemSchema> | да | | | `status` | OrderStatusSchema | да | | | `delivery` | DeliveryInfoSchema / null | нет | | | `pickup` | PickupInfoSchema / null | нет | | | `comment` | string / null | нет | | | `can_cancel` | boolean | нет | | | `picking_result` | PickingResultSchema | да | | ```json { "properties": { "address_line": { "title": "Address Line", "type": "string" }, "can_cancel": { "default": false, "title": "Can Cancel", "type": "boolean" }, "comment": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Comment" }, "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "delivery": { "anyOf": [ { "$ref": "#/components/schemas/DeliveryInfoSchema" }, { "type": "null" } ] }, "has_picking_changes": { "default": false, "title": "Has Picking Changes", "type": "boolean" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "items": { "items": { "$ref": "#/components/schemas/OrderItemSchema" }, "title": "Items", "type": "array" }, "no": { "title": "No", "type": "integer" }, "picking_result": { "$ref": "#/components/schemas/PickingResultSchema" }, "picking_result_state": { "default": "pending", "title": "Picking Result State", "type": "string" }, "pickup": { "anyOf": [ { "$ref": "#/components/schemas/PickupInfoSchema" }, { "type": "null" } ] }, "status": { "$ref": "#/components/schemas/OrderStatusSchema" }, "total_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Total Price" }, "type": { "title": "Type", "type": "string" } }, "required": [ "id", "no", "type", "address_line", "created_at", "total_price", "items", "status", "picking_result" ], "title": "OrderDetailSchema", "type": "object" } ``` ### OrderInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `type` | OrderTypeEnum | да | | | `delivery_context` | DeliveryInput / null | нет | | | `pickup_context` | PickupInput / null | нет | | | `payment_method` | PaymentMethodEnum | да | | | `items` | массив<OrderItemInput> | да | | | `comment` | string / null | нет | | | `change` | number / string / null | нет | | | `absence_action` | OrderAdviceActionEnum | нет | | ```json { "properties": { "absence_action": { "allOf": [ { "$ref": "#/components/schemas/OrderAdviceActionEnum" } ], "default": "call" }, "change": { "anyOf": [ { "minimum": 0.01, "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Change" }, "comment": { "anyOf": [ { "maxLength": 1000, "type": "string" }, { "type": "null" } ], "title": "Comment" }, "delivery_context": { "anyOf": [ { "$ref": "#/components/schemas/DeliveryInput" }, { "type": "null" } ] }, "items": { "items": { "$ref": "#/components/schemas/OrderItemInput" }, "title": "Items", "type": "array" }, "payment_method": { "$ref": "#/components/schemas/PaymentMethodEnum" }, "pickup_context": { "anyOf": [ { "$ref": "#/components/schemas/PickupInput" }, { "type": "null" } ] }, "type": { "$ref": "#/components/schemas/OrderTypeEnum" } }, "required": [ "type", "payment_method", "items" ], "title": "OrderInput", "type": "object" } ``` ### OrderItemInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_id` | string (uuid) | да | | | `unit_id` | string (uuid) | да | | | `quantity` | number / string | да | | ```json { "properties": { "product_id": { "format": "uuid", "title": "Product Id", "type": "string" }, "quantity": { "anyOf": [ { "minimum": 0.001, "type": "number" }, { "type": "string" } ], "title": "Quantity" }, "unit_id": { "format": "uuid", "title": "Unit Id", "type": "string" } }, "required": [ "product_id", "unit_id", "quantity" ], "title": "OrderItemInput", "type": "object" } ``` ### OrderItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_id` | string (uuid) / null | нет | | | `unit_id` | string (uuid) / null | нет | | | `unit_name` | string | да | | | `name` | string | да | | | `image` | string / null | нет | | | `weight` | number / string | да | | | `old_price` | number / string / null | нет | | | `unit_price` | number / string | да | | | `quantity` | number / string | да | | ```json { "properties": { "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Image" }, "name": { "title": "Name", "type": "string" }, "old_price": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Old Price" }, "product_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Product Id" }, "quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Quantity" }, "unit_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Unit Id" }, "unit_name": { "title": "Unit Name", "type": "string" }, "unit_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Unit Price" }, "weight": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Weight" } }, "required": [ "unit_name", "name", "weight", "unit_price", "quantity" ], "title": "OrderItemSchema", "type": "object" } ``` ### OrderRoadmapSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `no` | integer | да | | | `type` | string | да | | | `status` | OrderStatusSchema | да | | | `total_price` | number / string | да | | | `picking_result_state` | string | нет | | | `has_picking_changes` | boolean | нет | | | `items_count` | integer | да | | ```json { "properties": { "has_picking_changes": { "default": false, "title": "Has Picking Changes", "type": "boolean" }, "items_count": { "title": "Items Count", "type": "integer" }, "no": { "title": "No", "type": "integer" }, "picking_result_state": { "default": "pending", "title": "Picking Result State", "type": "string" }, "status": { "$ref": "#/components/schemas/OrderStatusSchema" }, "total_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Total Price" }, "type": { "title": "Type", "type": "string" } }, "required": [ "no", "type", "status", "total_price", "items_count" ], "title": "OrderRoadmapSchema", "type": "object" } ``` ### OrderStatusSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `display` | string | да | | | `value` | string | да | | | `comment` | string / null | нет | | ```json { "properties": { "comment": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Comment" }, "display": { "title": "Display", "type": "string" }, "value": { "title": "Value", "type": "string" } }, "required": [ "display", "value" ], "title": "OrderStatusSchema", "type": "object" } ``` ### OrderTypeEnum ```json { "enum": [ "pickup", "delivery" ], "title": "OrderTypeEnum", "type": "string" } ``` ### OrdersListingSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `no` | integer | да | | | `type` | string | да | | | `address_line` | string | да | | | `created_at` | string (date-time) | да | | | `total_price` | number / string | да | | | `picking_result_state` | string | нет | | | `has_picking_changes` | boolean | нет | | ```json { "properties": { "address_line": { "title": "Address Line", "type": "string" }, "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "has_picking_changes": { "default": false, "title": "Has Picking Changes", "type": "boolean" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "no": { "title": "No", "type": "integer" }, "picking_result_state": { "default": "pending", "title": "Picking Result State", "type": "string" }, "total_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Total Price" }, "type": { "title": "Type", "type": "string" } }, "required": [ "id", "no", "type", "address_line", "created_at", "total_price" ], "title": "OrdersListingSchema", "type": "object" } ``` ### OwnCategorySchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `level` | integer | да | | | `parent_id` | string (uuid) / null | нет | | | `color` | string | да | | | `children_count` | integer | нет | | | `image` | ListingImageSchema / null | нет | | | `products_count` | integer / null | нет | | ```json { "properties": { "children_count": { "default": 0, "title": "Children Count", "type": "integer" }, "color": { "title": "Color", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "image": { "anyOf": [ { "$ref": "#/components/schemas/ListingImageSchema" }, { "type": "null" } ] }, "level": { "title": "Level", "type": "integer" }, "name": { "title": "Name", "type": "string" }, "parent_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Parent Id" }, "products_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Products Count" } }, "required": [ "id", "name", "level", "color" ], "title": "OwnCategorySchema", "type": "object" } ``` ### PageResponse | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `title` | string | да | | | `content` | string | да | | ```json { "properties": { "content": { "title": "Content", "type": "string" }, "title": { "title": "Title", "type": "string" } }, "required": [ "title", "content" ], "title": "PageResponse", "type": "object" } ``` ### PagedOrdersListingSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<OrdersListingSchema> | да | | | `count` | integer | да | | | `has_next` | boolean | да | | ```json { "properties": { "count": { "title": "Count", "type": "integer" }, "has_next": { "title": "Has Next", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/OrdersListingSchema" }, "title": "Items", "type": "array" } }, "required": [ "items", "count", "has_next" ], "title": "PagedOrdersListingSchema", "type": "object" } ``` ### PagedProductListingSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<ProductListingSchema> | да | | | `count` | integer | да | | | `has_next` | boolean | да | | ```json { "properties": { "count": { "title": "Count", "type": "integer" }, "has_next": { "title": "Has Next", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/ProductListingSchema" }, "title": "Items", "type": "array" } }, "required": [ "items", "count", "has_next" ], "title": "PagedProductListingSchema", "type": "object" } ``` ### PagedPurchaseSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<PurchaseSchema> | да | | | `count` | integer | да | | | `has_next` | boolean | да | | ```json { "properties": { "count": { "title": "Count", "type": "integer" }, "has_next": { "title": "Has Next", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/PurchaseSchema" }, "title": "Items", "type": "array" } }, "required": [ "items", "count", "has_next" ], "title": "PagedPurchaseSchema", "type": "object" } ``` ### PagedTransactionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<TransactionSchema> | да | | | `count` | integer | да | | | `has_next` | boolean | да | | ```json { "properties": { "count": { "title": "Count", "type": "integer" }, "has_next": { "title": "Has Next", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/TransactionSchema" }, "title": "Items", "type": "array" } }, "required": [ "items", "count", "has_next" ], "title": "PagedTransactionSchema", "type": "object" } ``` ### PasswordUpdateInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `password` | string (password) | да | | | `password_repeat` | string (password) | да | | ```json { "properties": { "password": { "format": "password", "title": "Password", "type": "string", "writeOnly": true }, "password_repeat": { "format": "password", "title": "Password Repeat", "type": "string", "writeOnly": true } }, "required": [ "password", "password_repeat" ], "title": "PasswordUpdateInput", "type": "object" } ``` ### PaymentMethodEnum ```json { "enum": [ "cash", "online" ], "title": "PaymentMethodEnum", "type": "string" } ``` ### PaymentSummarySchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `original_total` | number / string | да | | | `current_total` | number / string | да | | | `difference` | number / string | да | | | `reconciliation_status` | string / null | нет | | ```json { "properties": { "current_total": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Current Total" }, "difference": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Difference" }, "original_total": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Original Total" }, "reconciliation_status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reconciliation Status" } }, "required": [ "original_total", "current_total", "difference" ], "title": "PaymentSummarySchema", "type": "object" } ``` ### PickerCatalogCursorOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<PickerCatalogProductSchema> | да | | | `next_cursor` | string / null | нет | | | `has_more` | boolean | да | | ```json { "properties": { "has_more": { "title": "Has More", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/PickerCatalogProductSchema" }, "title": "Items", "type": "array" }, "next_cursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Next Cursor" } }, "required": [ "items", "has_more" ], "title": "PickerCatalogCursorOutput", "type": "object" } ``` ### PickerCatalogOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<PickerCatalogProductSchema> | да | | | `total` | integer | да | | | `limit` | integer | да | | | `offset` | integer | да | | | `has_more` | boolean | да | | ```json { "properties": { "has_more": { "title": "Has More", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/PickerCatalogProductSchema" }, "title": "Items", "type": "array" }, "limit": { "title": "Limit", "type": "integer" }, "offset": { "title": "Offset", "type": "integer" }, "total": { "title": "Total", "type": "integer" } }, "required": [ "items", "total", "limit", "offset", "has_more" ], "title": "PickerCatalogOutput", "type": "object" } ``` ### PickerCatalogProductSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `inventory_id` | string | да | | | `product_id` | string | да | | | `name` | string | да | | | `barcode` | string | да | | | `description` | string | да | | | `price` | number / string | да | | | `available_quantity` | number / string | да | | | `unit` | string | да | | | `kind` | string | да | | | `plu_code` | string / null | нет | | | `image_url` | string / null | нет | | ```json { "properties": { "available_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Available Quantity" }, "barcode": { "title": "Barcode", "type": "string" }, "description": { "title": "Description", "type": "string" }, "image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Image Url" }, "inventory_id": { "title": "Inventory Id", "type": "string" }, "kind": { "title": "Kind", "type": "string" }, "name": { "title": "Name", "type": "string" }, "plu_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Plu Code" }, "price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Price" }, "product_id": { "title": "Product Id", "type": "string" }, "unit": { "title": "Unit", "type": "string" } }, "required": [ "inventory_id", "product_id", "name", "barcode", "description", "price", "available_quantity", "unit", "kind" ], "title": "PickerCatalogProductSchema", "type": "object" } ``` ### PickerHistoryItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `item_id` | string | да | | | `source` | string | да | | | `original_name` | string | да | | | `original_image_url` | string / null | нет | | | `final_name` | string | да | | | `final_image_url` | string / null | нет | | | `original_barcode` | string | нет | | | `final_barcode` | string | нет | | | `barcode` | string | да | | | `original_plu_code` | string / null | нет | | | `final_plu_code` | string / null | нет | | | `plu_code` | string / null | нет | | | `required_quantity` | number / string | да | | | `actual_quantity` | number / string | да | | | `original_unit_price` | number / string | да | | | `final_unit_price` | number / string | да | | | `state` | string | да | | | `resolution_type` | string / null | нет | | | `is_added` | boolean | да | | | `is_removed` | boolean | да | | ```json { "properties": { "actual_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Actual Quantity" }, "barcode": { "title": "Barcode", "type": "string" }, "final_barcode": { "default": "", "title": "Final Barcode", "type": "string" }, "final_image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Final Image Url" }, "final_name": { "title": "Final Name", "type": "string" }, "final_plu_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Final Plu Code" }, "final_unit_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Final Unit Price" }, "is_added": { "title": "Is Added", "type": "boolean" }, "is_removed": { "title": "Is Removed", "type": "boolean" }, "item_id": { "title": "Item Id", "type": "string" }, "original_barcode": { "default": "", "title": "Original Barcode", "type": "string" }, "original_image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Original Image Url" }, "original_name": { "title": "Original Name", "type": "string" }, "original_plu_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Original Plu Code" }, "original_unit_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Original Unit Price" }, "plu_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Plu Code" }, "required_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Required Quantity" }, "resolution_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Resolution Type" }, "source": { "title": "Source", "type": "string" }, "state": { "title": "State", "type": "string" } }, "required": [ "item_id", "source", "original_name", "final_name", "barcode", "required_quantity", "actual_quantity", "original_unit_price", "final_unit_price", "state", "is_added", "is_removed" ], "title": "PickerHistoryItemSchema", "type": "object" } ``` ### PickerHistorySessionDetailSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `session_id` | integer | да | | | `order_id` | string | да | | | `order_number` | string | да | | | `session_status` | string | да | | | `completed_at` | string (date-time) | да | | | `duration_seconds` | integer | да | | | `items` | массив<PickerHistoryItemSchema> | да | | | `store` | PickerStoreSchema | да | | | `fulfillment_type` | string | да | | | `slot` | PickerSlotSchema / null | нет | | ```json { "properties": { "completed_at": { "format": "date-time", "title": "Completed At", "type": "string" }, "duration_seconds": { "title": "Duration Seconds", "type": "integer" }, "fulfillment_type": { "title": "Fulfillment Type", "type": "string" }, "items": { "items": { "$ref": "#/components/schemas/PickerHistoryItemSchema" }, "title": "Items", "type": "array" }, "order_id": { "title": "Order Id", "type": "string" }, "order_number": { "title": "Order Number", "type": "string" }, "session_id": { "title": "Session Id", "type": "integer" }, "session_status": { "title": "Session Status", "type": "string" }, "slot": { "anyOf": [ { "$ref": "#/components/schemas/PickerSlotSchema" }, { "type": "null" } ] }, "store": { "$ref": "#/components/schemas/PickerStoreSchema" } }, "required": [ "session_id", "order_id", "order_number", "session_status", "completed_at", "duration_seconds", "items", "store", "fulfillment_type" ], "title": "PickerHistorySessionDetailSchema", "type": "object" } ``` ### PickerHistorySessionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `session_id` | integer | да | | | `order_id` | string (uuid) | да | | | `order_number` | string | да | | | `picker_id` | integer | да | | | `picker_login` | string | да | | | `picker_display_name` | string | да | | | `store_id` | string | да | | | `store_name` | string | да | | | `status` | string | да | | | `started_at` | string (date-time) | да | | | `completed_at` | string (date-time) | да | | | `duration_seconds` | integer | да | | | `total_items` | integer | да | | | `picked_items` | integer | да | | | `added_items` | integer | да | | | `replacement_items` | integer | да | | | `removed_items` | integer | да | | | `weighted_items` | integer | да | | | `piece_items` | integer | да | | | `store` | PickerStoreSchema | да | | | `fulfillment_type` | string | да | | | `slot` | PickerSlotSchema / null | нет | | ```json { "properties": { "added_items": { "title": "Added Items", "type": "integer" }, "completed_at": { "format": "date-time", "title": "Completed At", "type": "string" }, "duration_seconds": { "title": "Duration Seconds", "type": "integer" }, "fulfillment_type": { "title": "Fulfillment Type", "type": "string" }, "order_id": { "format": "uuid", "title": "Order Id", "type": "string" }, "order_number": { "title": "Order Number", "type": "string" }, "picked_items": { "title": "Picked Items", "type": "integer" }, "picker_display_name": { "title": "Picker Display Name", "type": "string" }, "picker_id": { "title": "Picker Id", "type": "integer" }, "picker_login": { "title": "Picker Login", "type": "string" }, "piece_items": { "title": "Piece Items", "type": "integer" }, "removed_items": { "title": "Removed Items", "type": "integer" }, "replacement_items": { "title": "Replacement Items", "type": "integer" }, "session_id": { "title": "Session Id", "type": "integer" }, "slot": { "anyOf": [ { "$ref": "#/components/schemas/PickerSlotSchema" }, { "type": "null" } ] }, "started_at": { "format": "date-time", "title": "Started At", "type": "string" }, "status": { "title": "Status", "type": "string" }, "store": { "$ref": "#/components/schemas/PickerStoreSchema" }, "store_id": { "title": "Store Id", "type": "string" }, "store_name": { "title": "Store Name", "type": "string" }, "total_items": { "title": "Total Items", "type": "integer" }, "weighted_items": { "title": "Weighted Items", "type": "integer" } }, "required": [ "session_id", "order_id", "order_number", "picker_id", "picker_login", "picker_display_name", "store_id", "store_name", "status", "started_at", "completed_at", "duration_seconds", "total_items", "picked_items", "added_items", "replacement_items", "removed_items", "weighted_items", "piece_items", "store", "fulfillment_type" ], "title": "PickerHistorySessionSchema", "type": "object" } ``` ### PickerHistorySessionsOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `items` | массив<PickerHistorySessionSchema> | да | | | `total` | integer | да | | | `limit` | integer | да | | | `offset` | integer | да | | | `has_more` | boolean | да | | ```json { "properties": { "has_more": { "title": "Has More", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/PickerHistorySessionSchema" }, "title": "Items", "type": "array" }, "limit": { "title": "Limit", "type": "integer" }, "offset": { "title": "Offset", "type": "integer" }, "total": { "title": "Total", "type": "integer" } }, "required": [ "items", "total", "limit", "offset", "has_more" ], "title": "PickerHistorySessionsOutput", "type": "object" } ``` ### PickerHistorySummarySchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `picker_id` | integer | да | | | `picker_login` | string | да | | | `picker_full_name` | string | да | | | `picker_display_name` | string | да | | | `store_id` | string | да | | | `store_name` | string | да | | | `completed_orders` | integer | да | | | `total_items` | integer | да | | | `added_items` | integer | да | | | `replacement_items` | integer | да | | | `removed_items` | integer | да | | | `missing_items` | integer | да | | | `weighted_items` | integer | да | | | `piece_items` | integer | да | | | `total_duration_seconds` | integer | да | | | `average_duration_seconds` | integer | да | | ```json { "properties": { "added_items": { "title": "Added Items", "type": "integer" }, "average_duration_seconds": { "title": "Average Duration Seconds", "type": "integer" }, "completed_orders": { "title": "Completed Orders", "type": "integer" }, "missing_items": { "title": "Missing Items", "type": "integer" }, "picker_display_name": { "title": "Picker Display Name", "type": "string" }, "picker_full_name": { "title": "Picker Full Name", "type": "string" }, "picker_id": { "title": "Picker Id", "type": "integer" }, "picker_login": { "title": "Picker Login", "type": "string" }, "piece_items": { "title": "Piece Items", "type": "integer" }, "removed_items": { "title": "Removed Items", "type": "integer" }, "replacement_items": { "title": "Replacement Items", "type": "integer" }, "store_id": { "title": "Store Id", "type": "string" }, "store_name": { "title": "Store Name", "type": "string" }, "total_duration_seconds": { "title": "Total Duration Seconds", "type": "integer" }, "total_items": { "title": "Total Items", "type": "integer" }, "weighted_items": { "title": "Weighted Items", "type": "integer" } }, "required": [ "picker_id", "picker_login", "picker_full_name", "picker_display_name", "store_id", "store_name", "completed_orders", "total_items", "added_items", "replacement_items", "removed_items", "missing_items", "weighted_items", "piece_items", "total_duration_seconds", "average_duration_seconds" ], "title": "PickerHistorySummarySchema", "type": "object" } ``` ### PickerLoginInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `login` | string | да | | | `password` | string (password) | да | | ```json { "properties": { "login": { "minLength": 1, "title": "Login", "type": "string" }, "password": { "format": "password", "minLength": 1, "title": "Password", "type": "string", "writeOnly": true } }, "required": [ "login", "password" ], "title": "PickerLoginInput", "type": "object" } ``` ### PickerLoginOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `access_token` | string | да | | | `refresh_token` | string | да | | | `expires_at` | string (date-time) | да | | | `user` | PickerUserSchema | да | | ```json { "properties": { "access_token": { "title": "Access Token", "type": "string" }, "expires_at": { "format": "date-time", "title": "Expires At", "type": "string" }, "refresh_token": { "title": "Refresh Token", "type": "string" }, "user": { "$ref": "#/components/schemas/PickerUserSchema" } }, "required": [ "access_token", "refresh_token", "expires_at", "user" ], "title": "PickerLoginOutput", "type": "object" } ``` ### PickerOrderSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `order_number` | string | да | | | `created_at` | string (date-time) | да | | | `is_express` | boolean | да | | | `absence_preference` | string | да | | | `customer_comment` | string | да | | | `customer_phone` | string / null | нет | | | `status` | string | да | | | `store` | PickerStoreSchema | да | | | `fulfillment_type` | string | да | | | `slot` | PickerSlotSchema | да | | ```json { "properties": { "absence_preference": { "title": "Absence Preference", "type": "string" }, "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "customer_comment": { "title": "Customer Comment", "type": "string" }, "customer_phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Customer Phone" }, "fulfillment_type": { "title": "Fulfillment Type", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "is_express": { "title": "Is Express", "type": "boolean" }, "order_number": { "title": "Order Number", "type": "string" }, "slot": { "$ref": "#/components/schemas/PickerSlotSchema" }, "status": { "title": "Status", "type": "string" }, "store": { "$ref": "#/components/schemas/PickerStoreSchema" } }, "required": [ "id", "order_number", "created_at", "is_express", "absence_preference", "customer_comment", "status", "store", "fulfillment_type", "slot" ], "title": "PickerOrderSchema", "type": "object" } ``` ### PickerRealtimeMetadataSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `realtime_recommended` | boolean | да | | | `socket_path` | string | да | | | `poll_after_seconds` | integer | да | | ```json { "properties": { "poll_after_seconds": { "title": "Poll After Seconds", "type": "integer" }, "realtime_recommended": { "title": "Realtime Recommended", "type": "boolean" }, "socket_path": { "title": "Socket Path", "type": "string" } }, "required": [ "realtime_recommended", "socket_path", "poll_after_seconds" ], "title": "PickerRealtimeMetadataSchema", "type": "object" } ``` ### PickerRefreshInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `refresh` | string (password) | да | | ```json { "properties": { "refresh": { "format": "password", "minLength": 1, "title": "Refresh", "type": "string", "writeOnly": true } }, "required": [ "refresh" ], "title": "PickerRefreshInput", "type": "object" } ``` ### PickerRefreshOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `access` | string | да | | | `refresh` | string | да | | ```json { "properties": { "access": { "title": "Access", "type": "string" }, "refresh": { "title": "Refresh", "type": "string" } }, "required": [ "access", "refresh" ], "title": "PickerRefreshOutput", "type": "object" } ``` ### PickerSlotSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `date` | string (date) | да | | | `start_time` | string (time) | да | | | `end_time` | string (time) | да | | | `start_at` | string (date-time) | да | | | `end_at` | string (date-time) | да | | | `is_overdue` | boolean | да | | ```json { "properties": { "date": { "format": "date", "title": "Date", "type": "string" }, "end_at": { "format": "date-time", "title": "End At", "type": "string" }, "end_time": { "format": "time", "title": "End Time", "type": "string" }, "is_overdue": { "title": "Is Overdue", "type": "boolean" }, "start_at": { "format": "date-time", "title": "Start At", "type": "string" }, "start_time": { "format": "time", "title": "Start Time", "type": "string" } }, "required": [ "date", "start_time", "end_time", "start_at", "end_at", "is_overdue" ], "title": "PickerSlotSchema", "type": "object" } ``` ### PickerStoreSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `name` | string | да | | ```json { "properties": { "id": { "title": "Id", "type": "string" }, "name": { "title": "Name", "type": "string" } }, "required": [ "id", "name" ], "title": "PickerStoreSchema", "type": "object" } ``` ### PickerUserSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `login` | string | да | | | `full_name` | string | да | | | `role` | string | да | | | `status` | string | да | | | `access_scope` | string | да | | | `namespace` | string | да | | | `store` | PickerStoreSchema / null | нет | | | `stores` | массив<PickerStoreSchema> | нет | | ```json { "properties": { "access_scope": { "title": "Access Scope", "type": "string" }, "full_name": { "title": "Full Name", "type": "string" }, "id": { "title": "Id", "type": "string" }, "login": { "title": "Login", "type": "string" }, "namespace": { "title": "Namespace", "type": "string" }, "role": { "title": "Role", "type": "string" }, "status": { "title": "Status", "type": "string" }, "store": { "anyOf": [ { "$ref": "#/components/schemas/PickerStoreSchema" }, { "type": "null" } ] }, "stores": { "default": [], "items": { "$ref": "#/components/schemas/PickerStoreSchema" }, "title": "Stores", "type": "array" } }, "required": [ "id", "login", "full_name", "role", "status", "access_scope", "namespace" ], "title": "PickerUserSchema", "type": "object" } ``` ### PickingActionOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `session` | PickingSessionSchema | да | | | `status` | string | да | | | `message` | string / null | нет | | ```json { "properties": { "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "session": { "$ref": "#/components/schemas/PickingSessionSchema" }, "status": { "title": "Status", "type": "string" } }, "required": [ "session", "status" ], "title": "PickingActionOutput", "type": "object" } ``` ### PickingItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `name` | string | да | | | `category` | string | да | | | `image_asset` | string | да | | | `image_url` | string / null | нет | | | `barcode` | string | да | | | `description` | string | да | | | `price` | number / string | да | | | `required_quantity` | number / string | да | | | `confirmed_quantity` | number / string | да | | | `unit` | string | да | | | `kind` | string | да | | | `plu_code` | string / null | нет | | | `weight_tolerance_kg` | number / string / null | нет | | | `min_quantity_kg` | number / string / null | нет | | | `max_quantity_kg` | number / string / null | нет | | | `state` | string | да | | | `item_version` | integer | да | | | `source` | string | да | | | `replacement_options` | массив<ReplacementOptionSchema> | да | | | `selected_replacement` | ReplacementOptionSchema / null | нет | | | `missing_action` | string / null | нет | | | `is_added` | boolean | нет | | | `is_removed` | boolean | нет | | | `resolution_type` | string / null | нет | | ```json { "properties": { "barcode": { "title": "Barcode", "type": "string" }, "category": { "title": "Category", "type": "string" }, "confirmed_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Confirmed Quantity" }, "description": { "title": "Description", "type": "string" }, "id": { "title": "Id", "type": "string" }, "image_asset": { "title": "Image Asset", "type": "string" }, "image_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Image Url" }, "is_added": { "default": false, "title": "Is Added", "type": "boolean" }, "is_removed": { "default": false, "title": "Is Removed", "type": "boolean" }, "item_version": { "title": "Item Version", "type": "integer" }, "kind": { "title": "Kind", "type": "string" }, "max_quantity_kg": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Max Quantity Kg" }, "min_quantity_kg": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Min Quantity Kg" }, "missing_action": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Missing Action" }, "name": { "title": "Name", "type": "string" }, "plu_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Plu Code" }, "price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Price" }, "replacement_options": { "items": { "$ref": "#/components/schemas/ReplacementOptionSchema" }, "title": "Replacement Options", "type": "array" }, "required_quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Required Quantity" }, "resolution_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Resolution Type" }, "selected_replacement": { "anyOf": [ { "$ref": "#/components/schemas/ReplacementOptionSchema" }, { "type": "null" } ] }, "source": { "title": "Source", "type": "string" }, "state": { "title": "State", "type": "string" }, "unit": { "title": "Unit", "type": "string" }, "weight_tolerance_kg": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Weight Tolerance Kg" } }, "required": [ "id", "name", "category", "image_asset", "barcode", "description", "price", "required_quantity", "confirmed_quantity", "unit", "kind", "state", "item_version", "source", "replacement_options" ], "title": "PickingItemSchema", "type": "object" } ``` ### PickingResultItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `group` | string | да | | | `changes` | массив<string> | да | | | `reason` | PickingResultReasonSchema / null | нет | | | `original` | PickingResultPositionSchema / null | нет | | | `final` | PickingResultPositionSchema / null | нет | | ```json { "properties": { "changes": { "items": { "type": "string" }, "title": "Changes", "type": "array" }, "final": { "anyOf": [ { "$ref": "#/components/schemas/PickingResultPositionSchema" }, { "type": "null" } ] }, "group": { "title": "Group", "type": "string" }, "id": { "title": "Id", "type": "string" }, "original": { "anyOf": [ { "$ref": "#/components/schemas/PickingResultPositionSchema" }, { "type": "null" } ] }, "reason": { "anyOf": [ { "$ref": "#/components/schemas/PickingResultReasonSchema" }, { "type": "null" } ] } }, "required": [ "id", "group", "changes" ], "title": "PickingResultItemSchema", "type": "object" } ``` ### PickingResultPositionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `product_id` | string (uuid) / null | нет | | | `unit_id` | string (uuid) / null | нет | | | `name` | string | да | | | `image` | string / null | нет | | | `barcode` | string / null | нет | | | `plu_code` | string / null | нет | | | `unit` | string / null | нет | | | `weight` | number / string / null | нет | | | `quantity` | number / string | да | | | `unit_price` | number / string | да | | | `line_total` | number / string | да | | ```json { "properties": { "barcode": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Barcode" }, "image": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Image" }, "line_total": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Line Total" }, "name": { "title": "Name", "type": "string" }, "plu_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Plu Code" }, "product_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Product Id" }, "quantity": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Quantity" }, "unit": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Unit" }, "unit_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Unit Id" }, "unit_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Unit Price" }, "weight": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Weight" } }, "required": [ "name", "quantity", "unit_price", "line_total" ], "title": "PickingResultPositionSchema", "type": "object" } ``` ### PickingResultReasonSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `code` | string | да | | | `display` | string | да | | ```json { "properties": { "code": { "title": "Code", "type": "string" }, "display": { "title": "Display", "type": "string" } }, "required": [ "code", "display" ], "title": "PickingResultReasonSchema", "type": "object" } ``` ### PickingResultSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `state` | string | да | | | `completed_at` | string (date-time) / null | нет | | | `summary` | PickingResultSummarySchema | да | | | `items` | массив<PickingResultItemSchema> | да | | ```json { "properties": { "completed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Completed At" }, "items": { "items": { "$ref": "#/components/schemas/PickingResultItemSchema" }, "title": "Items", "type": "array" }, "state": { "title": "State", "type": "string" }, "summary": { "$ref": "#/components/schemas/PickingResultSummarySchema" } }, "required": [ "state", "summary", "items" ], "title": "PickingResultSchema", "type": "object" } ``` ### PickingResultSummarySchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `removed` | integer | да | | | `changed` | integer | да | | | `unchanged` | integer | да | | ```json { "properties": { "changed": { "title": "Changed", "type": "integer" }, "removed": { "title": "Removed", "type": "integer" }, "unchanged": { "title": "Unchanged", "type": "integer" } }, "required": [ "removed", "changed", "unchanged" ], "title": "PickingResultSummarySchema", "type": "object" } ``` ### PickingSessionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `session_id` | integer | да | | | `order_id` | string | да | | | `order_number` | string | да | | | `is_express` | boolean | да | | | `current_item_index` | integer | да | | | `is_locked` | boolean | да | | | `is_cancelled` | boolean | да | | | `is_completed` | boolean | да | | | `session_status` | string | да | | | `version` | integer | да | | | `updated_at` | string (date-time) | да | | | `closure_source` | string | да | | | `cancellation_reason` | string / null | нет | | | `absence_preference` | string | да | | | `customer_comment` | string | да | | | `customer_phone` | string | да | | | `items` | массив<PickingItemSchema> | да | | | `max_added_items` | integer | да | | | `added_items_count` | integer | да | | | `payment_summary` | PaymentSummarySchema | да | | | `cancel_after_resolved_items` | integer / null | нет | | | `store` | PickerStoreSchema | да | | | `fulfillment_type` | string | да | | | `slot` | PickerSlotSchema / null | нет | | ```json { "properties": { "absence_preference": { "title": "Absence Preference", "type": "string" }, "added_items_count": { "title": "Added Items Count", "type": "integer" }, "cancel_after_resolved_items": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Cancel After Resolved Items" }, "cancellation_reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cancellation Reason" }, "closure_source": { "title": "Closure Source", "type": "string" }, "current_item_index": { "title": "Current Item Index", "type": "integer" }, "customer_comment": { "title": "Customer Comment", "type": "string" }, "customer_phone": { "title": "Customer Phone", "type": "string" }, "fulfillment_type": { "title": "Fulfillment Type", "type": "string" }, "is_cancelled": { "title": "Is Cancelled", "type": "boolean" }, "is_completed": { "title": "Is Completed", "type": "boolean" }, "is_express": { "title": "Is Express", "type": "boolean" }, "is_locked": { "title": "Is Locked", "type": "boolean" }, "items": { "items": { "$ref": "#/components/schemas/PickingItemSchema" }, "title": "Items", "type": "array" }, "max_added_items": { "title": "Max Added Items", "type": "integer" }, "order_id": { "title": "Order Id", "type": "string" }, "order_number": { "title": "Order Number", "type": "string" }, "payment_summary": { "$ref": "#/components/schemas/PaymentSummarySchema" }, "session_id": { "title": "Session Id", "type": "integer" }, "session_status": { "title": "Session Status", "type": "string" }, "slot": { "anyOf": [ { "$ref": "#/components/schemas/PickerSlotSchema" }, { "type": "null" } ] }, "store": { "$ref": "#/components/schemas/PickerStoreSchema" }, "updated_at": { "format": "date-time", "title": "Updated At", "type": "string" }, "version": { "title": "Version", "type": "integer" } }, "required": [ "session_id", "order_id", "order_number", "is_express", "current_item_index", "is_locked", "is_cancelled", "is_completed", "session_status", "version", "updated_at", "closure_source", "absence_preference", "customer_comment", "customer_phone", "items", "max_added_items", "added_items_count", "payment_summary", "store", "fulfillment_type" ], "title": "PickingSessionSchema", "type": "object" } ``` ### PickupInfoSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `date` | string (date) | да | | | `start_time` | string (time) | да | | | `end_time` | string (time) | да | | ```json { "properties": { "date": { "format": "date", "title": "Date", "type": "string" }, "end_time": { "format": "time", "title": "End Time", "type": "string" }, "start_time": { "format": "time", "title": "Start Time", "type": "string" } }, "required": [ "date", "start_time", "end_time" ], "title": "PickupInfoSchema", "type": "object" } ``` ### PickupInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `slot_id` | string (uuid) | да | | ```json { "properties": { "slot_id": { "format": "uuid", "title": "Slot Id", "type": "string" } }, "required": [ "slot_id" ], "title": "PickupInput", "type": "object" } ``` ### PickupPreferenceOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `min_order_amount` | number / string | да | | ```json { "properties": { "min_order_amount": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Min Order Amount" } }, "required": [ "min_order_amount" ], "title": "PickupPreferenceOutput", "type": "object" } ``` ### PickupSlotOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `type` | integer | да | | | `start_time` | string (time) | да | | | `end_time` | string (time) | да | | ```json { "properties": { "end_time": { "format": "time", "title": "End Time", "type": "string" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "start_time": { "format": "time", "title": "Start Time", "type": "string" }, "type": { "title": "Type", "type": "integer" } }, "required": [ "id", "type", "start_time", "end_time" ], "title": "PickupSlotOutput", "type": "object" } ``` ### PickupStoreOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `address` | string / null | нет | | | `location` | LocationOutput | да | | | `work_time` | string / null | нет | | | `contacts` | массив<string> / null | нет | | ```json { "properties": { "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Address" }, "contacts": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Contacts" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "location": { "$ref": "#/components/schemas/LocationOutput" }, "name": { "title": "Name", "type": "string" }, "work_time": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Work Time" } }, "required": [ "id", "name", "location" ], "title": "PickupStoreOutput", "type": "object" } ``` ### PieceQuantityInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `quantity` | integer | да | Фактически собранное целое количество. | ```json { "properties": { "quantity": { "description": "Фактически собранное целое количество.", "examples": [ 2 ], "minimum": 1, "title": "Quantity", "type": "integer" } }, "required": [ "quantity" ], "title": "PieceQuantityInput", "type": "object" } ``` ### PolygonSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `type` | string | да | | | `coordinates` | массив<произвольный JSON> | да | | ```json { "properties": { "coordinates": { "items": {}, "title": "Coordinates", "type": "array" }, "type": { "title": "Type", "type": "string" } }, "required": [ "type", "coordinates" ], "title": "PolygonSchema", "type": "object" } ``` ### ProductDetailSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `category_id` | string (uuid) / null | нет | | | `category_uuid` | string (uuid) / null | нет | | | `category_name` | string / null | нет | | | `inventories` | массив<InventoryItemSchema> | да | | | `image` | DetailImageSchema / null | нет | | | `is_favorite` | boolean | нет | | | `description` | string / null | нет | | | `composition` | string / null | нет | | | `manufacturer` | string / null | нет | | | `made_country` | string / null | нет | | | `brand` | string / null | нет | | | `weight_based` | boolean | нет | | | `weight` | number / string | нет | | | `is_user_order_quantity_limit_enabled` | boolean | нет | | | `user_order_quantity_limit` | number / string | нет | | | `calories` | number / string / null | нет | | | `protein` | number / string / null | нет | | | `fats` | number / string / null | нет | | | `carbohydrates` | number / string / null | нет | | ```json { "properties": { "brand": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Brand" }, "calories": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Calories" }, "carbohydrates": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Carbohydrates" }, "category_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Category Id" }, "category_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Category Name" }, "category_uuid": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Category Uuid" }, "composition": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Composition" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "fats": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Fats" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "image": { "anyOf": [ { "$ref": "#/components/schemas/DetailImageSchema" }, { "type": "null" } ] }, "inventories": { "items": { "$ref": "#/components/schemas/InventoryItemSchema" }, "title": "Inventories", "type": "array" }, "is_favorite": { "default": false, "title": "Is Favorite", "type": "boolean" }, "is_user_order_quantity_limit_enabled": { "default": false, "title": "Is User Order Quantity Limit Enabled", "type": "boolean" }, "made_country": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Made Country" }, "manufacturer": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Manufacturer" }, "name": { "title": "Name", "type": "string" }, "protein": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Protein" }, "user_order_quantity_limit": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "default": "0.000", "title": "User Order Quantity Limit" }, "weight": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "default": "0.000", "title": "Weight" }, "weight_based": { "default": false, "title": "Weight Based", "type": "boolean" } }, "required": [ "id", "name", "inventories" ], "title": "ProductDetailSchema", "type": "object" } ``` ### ProductListingSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `category_id` | string (uuid) / null | нет | | | `category_uuid` | string (uuid) / null | нет | | | `unit_id` | string (uuid) | да | | | `stock` | number / string | да | | | `user_order_quantity_limit` | number / string | нет | | | `is_user_order_quantity_limit_enabled` | boolean | нет | | | `unit_price` | number / string | да | | | `old_price` | number / string / null | нет | | | `discount_percent` | number / string / null | нет | | | `image` | ListingImageSchema / null | нет | | | `is_favorite` | boolean | нет | | ```json { "properties": { "category_id": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Category Id" }, "category_uuid": { "anyOf": [ { "format": "uuid", "type": "string" }, { "type": "null" } ], "title": "Category Uuid" }, "discount_percent": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Discount Percent" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "image": { "anyOf": [ { "$ref": "#/components/schemas/ListingImageSchema" }, { "type": "null" } ] }, "is_favorite": { "default": false, "title": "Is Favorite", "type": "boolean" }, "is_user_order_quantity_limit_enabled": { "default": false, "title": "Is User Order Quantity Limit Enabled", "type": "boolean" }, "name": { "title": "Name", "type": "string" }, "old_price": { "anyOf": [ { "type": "number" }, { "type": "string" }, { "type": "null" } ], "title": "Old Price" }, "stock": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Stock" }, "unit_id": { "format": "uuid", "title": "Unit Id", "type": "string" }, "unit_price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Unit Price" }, "user_order_quantity_limit": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "default": "0.000", "title": "User Order Quantity Limit" } }, "required": [ "id", "name", "unit_id", "stock", "unit_price" ], "title": "ProductListingSchema", "type": "object" } ``` ### ProfileInputPatch | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `first_name` | string / null | нет | | | `last_name` | string / null | нет | | | `patronymic` | string / null | нет | | | `email` | string (email) / null | нет | | | `birth_date` | string (date) / null | нет | | | `gender` | Gender / null | нет | | | `marital_status` | MaritalStatus / null | нет | | ```json { "properties": { "birth_date": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "title": "Birth Date" }, "email": { "anyOf": [ { "format": "email", "type": "string" }, { "type": "null" } ], "title": "Email" }, "first_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "First Name" }, "gender": { "anyOf": [ { "$ref": "#/components/schemas/Gender" }, { "type": "null" } ] }, "last_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Last Name" }, "marital_status": { "anyOf": [ { "$ref": "#/components/schemas/MaritalStatus" }, { "type": "null" } ] }, "patronymic": { "anyOf": [ { "maxLength": 50, "type": "string" }, { "type": "null" } ], "title": "Patronymic" } }, "title": "ProfileInputPatch", "type": "object" } ``` ### ProfileSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `first_name` | string | нет | | | `last_name` | string | нет | | | `patronymic` | string | нет | | | `email` | string | нет | | | `birth_date` | string (date) / null | нет | | | `gender` | string / null | нет | | | `marital_status` | string / null | нет | | ```json { "properties": { "birth_date": { "anyOf": [ { "format": "date", "type": "string" }, { "type": "null" } ], "title": "Birth Date" }, "email": { "default": "", "title": "Email", "type": "string" }, "first_name": { "default": "", "title": "First Name", "type": "string" }, "gender": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Gender" }, "last_name": { "default": "", "title": "Last Name", "type": "string" }, "marital_status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Marital Status" }, "patronymic": { "default": "", "title": "Patronymic", "type": "string" }, "phone": { "title": "Phone", "type": "string" } }, "required": [ "phone" ], "title": "ProfileSchema", "type": "object" } ``` ### PurchaseDetailSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `date` | string | да | | | `shop_name` | string | нет | | | `total` | string | нет | | | `bonus_accrual` | string | нет | | | `items_count` | integer | нет | | | `positions` | массив<PurchasePositionSchema> | нет | | | `discounts` | массив<PurchaseDiscountSchema> | нет | | | `source` | string | нет | | ```json { "properties": { "bonus_accrual": { "default": "0", "title": "Bonus Accrual", "type": "string" }, "date": { "title": "Date", "type": "string" }, "discounts": { "items": { "$ref": "#/components/schemas/PurchaseDiscountSchema" }, "title": "Discounts", "type": "array" }, "id": { "title": "Id", "type": "string" }, "items_count": { "default": 0, "title": "Items Count", "type": "integer" }, "positions": { "items": { "$ref": "#/components/schemas/PurchasePositionSchema" }, "title": "Positions", "type": "array" }, "shop_name": { "default": "", "title": "Shop Name", "type": "string" }, "source": { "default": "offline", "title": "Source", "type": "string" }, "total": { "default": "0", "title": "Total", "type": "string" } }, "required": [ "id", "date" ], "title": "PurchaseDetailSchema", "type": "object" } ``` ### PurchaseDiscountSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `name` | string | нет | | | `amount` | string | нет | | ```json { "properties": { "amount": { "default": "0", "title": "Amount", "type": "string" }, "name": { "default": "", "title": "Name", "type": "string" } }, "title": "PurchaseDiscountSchema", "type": "object" } ``` ### PurchasePositionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `name` | string | нет | | | `code` | string | нет | | | `quantity` | integer | нет | | | `price` | string | нет | | | `amount` | string | нет | | | `discount` | string | нет | | ```json { "properties": { "amount": { "default": "0", "title": "Amount", "type": "string" }, "code": { "default": "", "title": "Code", "type": "string" }, "discount": { "default": "0", "title": "Discount", "type": "string" }, "name": { "default": "", "title": "Name", "type": "string" }, "price": { "default": "0", "title": "Price", "type": "string" }, "quantity": { "default": 1, "title": "Quantity", "type": "integer" } }, "title": "PurchasePositionSchema", "type": "object" } ``` ### PurchaseSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `date` | string | да | | | `shop_name` | string | нет | | | `total` | string | нет | | | `bonus_accrual` | string | нет | | | `items_count` | integer | нет | | | `source` | string | нет | | ```json { "properties": { "bonus_accrual": { "default": "0", "title": "Bonus Accrual", "type": "string" }, "date": { "title": "Date", "type": "string" }, "id": { "title": "Id", "type": "string" }, "items_count": { "default": 0, "title": "Items Count", "type": "integer" }, "shop_name": { "default": "", "title": "Shop Name", "type": "string" }, "source": { "default": "offline", "title": "Source", "type": "string" }, "total": { "default": "0", "title": "Total", "type": "string" } }, "required": [ "id", "date" ], "title": "PurchaseSchema", "type": "object" } ``` ### PushDeviceInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `fcm_token` | string | да | | | `device_id` | string (uuid) | да | | | `platform` | "ios" / "android" | да | | | `app_kind` | "customer" / "picker" | нет | | | `environment` | "TEST" / "PRODUCTION" / null | нет | | | `app_version` | string | да | | | `build_number` | string | да | | ```json { "properties": { "app_kind": { "default": "customer", "enum": [ "customer", "picker" ], "title": "App Kind", "type": "string" }, "app_version": { "maxLength": 64, "minLength": 1, "title": "App Version", "type": "string" }, "build_number": { "maxLength": 64, "minLength": 1, "title": "Build Number", "type": "string" }, "device_id": { "format": "uuid", "title": "Device Id", "type": "string" }, "environment": { "anyOf": [ { "enum": [ "TEST", "PRODUCTION" ], "type": "string" }, { "type": "null" } ], "title": "Environment" }, "fcm_token": { "maxLength": 255, "minLength": 3, "title": "Fcm Token", "type": "string" }, "platform": { "enum": [ "ios", "android" ], "title": "Platform", "type": "string" } }, "required": [ "fcm_token", "device_id", "platform", "app_version", "build_number" ], "title": "PushDeviceInput", "type": "object" } ``` ### PushDeviceSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `device_id` | string (uuid) | да | | | `platform` | string | да | | | `app_version` | string | да | | | `build_number` | string | да | | | `app_kind` | string | да | | | `environment` | string | да | | | `updated_at` | string (date-time) | да | | ```json { "properties": { "app_kind": { "title": "App Kind", "type": "string" }, "app_version": { "title": "App Version", "type": "string" }, "build_number": { "title": "Build Number", "type": "string" }, "device_id": { "format": "uuid", "title": "Device Id", "type": "string" }, "environment": { "title": "Environment", "type": "string" }, "platform": { "title": "Platform", "type": "string" }, "updated_at": { "format": "date-time", "title": "Updated At", "type": "string" } }, "required": [ "device_id", "platform", "app_version", "build_number", "app_kind", "environment", "updated_at" ], "title": "PushDeviceSchema", "type": "object" } ``` ### QrcodeSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `original` | string | да | | | `listing` | string | да | | | `detail` | string | да | | ```json { "properties": { "detail": { "title": "Detail", "type": "string" }, "listing": { "title": "Listing", "type": "string" }, "original": { "title": "Original", "type": "string" } }, "required": [ "original", "listing", "detail" ], "title": "QrcodeSchema", "type": "object" } ``` ### RecoveryTokenSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `token` | string | да | | ```json { "properties": { "phone": { "title": "Phone", "type": "string" }, "token": { "title": "Token", "type": "string" } }, "required": [ "phone", "token" ], "title": "RecoveryTokenSchema", "type": "object" } ``` ### ReopenItemInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `reason` | string | да | `found_in_store` — товар найден после отсутствия; `recheck` — вернуть уже собранный товар на пересчёт. | ```json { "properties": { "reason": { "description": "`found_in_store` — товар найден после отсутствия; `recheck` — вернуть уже собранный товар на пересчёт.", "examples": [ "found_in_store", "recheck" ], "title": "Reason", "type": "string" } }, "required": [ "reason" ], "title": "ReopenItemInput", "type": "object" } ``` ### ReplacementOptionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string | да | | | `name` | string | да | | | `barcode` | string | да | | | `description` | string | да | | | `price` | number / string | да | | ```json { "properties": { "barcode": { "title": "Barcode", "type": "string" }, "description": { "title": "Description", "type": "string" }, "id": { "title": "Id", "type": "string" }, "name": { "title": "Name", "type": "string" }, "price": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Price" } }, "required": [ "id", "name", "barcode", "description", "price" ], "title": "ReplacementOptionSchema", "type": "object" } ``` ### ResolveClarificationInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `resolution` | string | да | Для удаления используется только значение `remove`. | ```json { "properties": { "resolution": { "description": "Для удаления используется только значение `remove`.", "examples": [ "remove" ], "title": "Resolution", "type": "string" } }, "required": [ "resolution" ], "title": "ResolveClarificationInput", "type": "object" } ``` ### ReverseGeocodeOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `address` | AddressSuggestionOutput / null | нет | | ```json { "properties": { "address": { "anyOf": [ { "$ref": "#/components/schemas/AddressSuggestionOutput" }, { "type": "null" } ] } }, "title": "ReverseGeocodeOutput", "type": "object" } ``` ### Schema ```json { "properties": {}, "title": "Schema", "type": "object" } ``` ### SendOTPInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | ```json { "properties": { "phone": { "maxLength": 15, "minLength": 8, "pattern": "^\\+[1-9][0-9]{7,14}$", "title": "Phone", "type": "string" } }, "required": [ "phone" ], "title": "SendOTPInput", "type": "object" } ``` ### StandardDeliveryOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `free_amount_threshold` | number / string | да | | ```json { "properties": { "free_amount_threshold": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Free Amount Threshold" } }, "required": [ "free_amount_threshold" ], "title": "StandardDeliveryOutput", "type": "object" } ``` ### StoreLocationOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `store` | StoreOutput | да | | | `location` | LocationOutput | да | | | `distance_km` | number | да | | ```json { "properties": { "distance_km": { "title": "Distance Km", "type": "number" }, "location": { "$ref": "#/components/schemas/LocationOutput" }, "store": { "$ref": "#/components/schemas/StoreOutput" } }, "required": [ "store", "location", "distance_km" ], "title": "StoreLocationOutput", "type": "object" } ``` ### StoreOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | string (uuid) | да | | | `name` | string | да | | | `address` | string / null | нет | | | `location` | LocationOutput | да | | ```json { "properties": { "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Address" }, "id": { "format": "uuid", "title": "Id", "type": "string" }, "location": { "$ref": "#/components/schemas/LocationOutput" }, "name": { "title": "Name", "type": "string" } }, "required": [ "id", "name", "location" ], "title": "StoreOutput", "type": "object" } ``` ### StoryItemSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `image` | string | да | | | `type` | string | да | | | `reference_id` | string / null | нет | | ```json { "properties": { "image": { "title": "Image", "type": "string" }, "reference_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reference Id" }, "type": { "title": "Type", "type": "string" } }, "required": [ "image", "type" ], "title": "StoryItemSchema", "type": "object" } ``` ### StorySchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `image` | string | да | | | `created_at` | string (date-time) | да | | | `items` | массив<StoryItemSchema> | да | | ```json { "properties": { "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "image": { "title": "Image", "type": "string" }, "items": { "items": { "$ref": "#/components/schemas/StoryItemSchema" }, "title": "Items", "type": "array" } }, "required": [ "image", "created_at", "items" ], "title": "StorySchema", "type": "object" } ``` ### SuccessResponse | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `message` | string | да | | | `data` | object / null | нет | | ```json { "properties": { "data": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "title": "Data" }, "message": { "title": "Message", "type": "string" } }, "required": [ "message" ], "title": "SuccessResponse", "type": "object" } ``` ### SupportContactSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `jivo_enabled_android` | boolean | нет | | | `jivo_enabled_ios` | boolean | нет | | | `jivo_channel_id` | string / null | нет | | | `jivo_android_app_key` | string / null | нет | | | `jivo_ios_app_key` | string / null | нет | | | `support_phone` | string / null | нет | | | `email` | string / null | нет | | | `site` | string / null | нет | | ```json { "properties": { "email": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Email" }, "jivo_android_app_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Jivo Android App Key" }, "jivo_channel_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Jivo Channel Id" }, "jivo_enabled_android": { "default": false, "title": "Jivo Enabled Android", "type": "boolean" }, "jivo_enabled_ios": { "default": false, "title": "Jivo Enabled Ios", "type": "boolean" }, "jivo_ios_app_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Jivo Ios App Key" }, "site": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Site" }, "support_phone": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Support Phone" } }, "title": "SupportContactSchema", "type": "object" } ``` ### TierSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `id` | integer / null | нет | | | `label` | string | да | | | `is_active` | boolean | да | | | `order` | integer / null | нет | | | `boundary` | string / null | нет | | | `range_label` | string | нет | | | `description` | string | нет | | ```json { "properties": { "boundary": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Boundary" }, "description": { "default": "", "title": "Description", "type": "string" }, "id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Id" }, "is_active": { "title": "Is Active", "type": "boolean" }, "label": { "title": "Label", "type": "string" }, "order": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Order" }, "range_label": { "default": "", "title": "Range Label", "type": "string" } }, "required": [ "label", "is_active" ], "title": "TierSchema", "type": "object" } ``` ### TokenObtainPairInputSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `password` | string | да | | | `phone` | string | да | | ```json { "additionalProperties": false, "properties": { "password": { "maxLength": 128, "title": "Пароль", "type": "string" }, "phone": { "maxLength": 15, "title": "Телефон", "type": "string" } }, "required": [ "password", "phone" ], "title": "TokenObtainPairInputSchema", "type": "object" } ``` ### TokenObtainPairOutputSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `refresh` | string | да | | | `access` | string | да | | ```json { "properties": { "access": { "title": "Access", "type": "string" }, "phone": { "maxLength": 15, "title": "Телефон", "type": "string" }, "refresh": { "title": "Refresh", "type": "string" } }, "required": [ "phone", "refresh", "access" ], "title": "TokenObtainPairOutputSchema", "type": "object" } ``` ### TokenRefreshInputSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `refresh` | string | да | | ```json { "properties": { "refresh": { "title": "Refresh", "type": "string" } }, "required": [ "refresh" ], "title": "TokenRefreshInputSchema", "type": "object" } ``` ### TokenRefreshOutputSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `refresh` | string | да | | | `access` | string / null | да | | ```json { "properties": { "access": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Access" }, "refresh": { "title": "Refresh", "type": "string" } }, "required": [ "refresh", "access" ], "title": "TokenRefreshOutputSchema", "type": "object" } ``` ### TokenVerifyInputSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `token` | string | да | | ```json { "properties": { "token": { "title": "Token", "type": "string" } }, "required": [ "token" ], "title": "TokenVerifyInputSchema", "type": "object" } ``` ### TransactionSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `action` | string | да | | | `before` | number / string | да | | | `amount` | number / string | да | | | `after` | number / string | да | | | `time` | string (date-time) | да | | | `reason` | string / null | нет | | ```json { "properties": { "action": { "title": "Action", "type": "string" }, "after": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "After" }, "amount": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Amount" }, "before": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Before" }, "reason": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reason" }, "time": { "format": "date-time", "title": "Time", "type": "string" } }, "required": [ "action", "before", "amount", "after", "time" ], "title": "TransactionSchema", "type": "object" } ``` ### UserAddressInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `address` | string | да | | | `location` | LocationInput | да | | | `apartment_number` | string / null | нет | | | `entrance` | string / null | нет | | | `floor` | string / null | нет | | | `intercom` | string / null | нет | | | `landmark` | string / null | нет | | ```json { "properties": { "address": { "title": "Address", "type": "string" }, "apartment_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Apartment Number" }, "entrance": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Entrance" }, "floor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Floor" }, "intercom": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Intercom" }, "landmark": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Landmark" }, "location": { "$ref": "#/components/schemas/LocationInput" } }, "required": [ "address", "location" ], "title": "UserAddressInput", "type": "object" } ``` ### UserPreferences | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `receive_mail` | boolean | нет | | | `receive_sms` | boolean | нет | | ```json { "properties": { "receive_mail": { "default": false, "title": "Receive Mail", "type": "boolean" }, "receive_sms": { "default": false, "title": "Receive Sms", "type": "boolean" } }, "title": "UserPreferences", "type": "object" } ``` ### UserPreferencesInputPatch | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `receive_mail` | boolean / null | нет | | | `receive_sms` | boolean / null | нет | | | `fcm_token` | string / null | нет | | ```json { "properties": { "fcm_token": { "anyOf": [ { "minLength": 3, "type": "string" }, { "type": "null" } ], "title": "Fcm Token" }, "receive_mail": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Receive Mail" }, "receive_sms": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Receive Sms" } }, "title": "UserPreferencesInputPatch", "type": "object" } ``` ### VerifyOTPInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `otp` | string | да | | ```json { "properties": { "otp": { "title": "Otp", "type": "string" }, "phone": { "maxLength": 15, "minLength": 8, "pattern": "^\\+[1-9][0-9]{7,14}$", "title": "Phone", "type": "string" } }, "required": [ "phone", "otp" ], "title": "VerifyOTPInput", "type": "object" } ``` ### VerifyOTPOutput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `phone` | string | да | | | `is_new_user` | boolean | да | | ```json { "properties": { "is_new_user": { "title": "Is New User", "type": "boolean" }, "phone": { "title": "Phone", "type": "string" } }, "required": [ "phone", "is_new_user" ], "title": "VerifyOTPOutput", "type": "object" } ``` ### WalletLinkPreviewSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `card_number_digits` | string | нет | | | `card_number` | string | нет | | | `status` | string | нет | | | `bonus_points` | integer | нет | | ```json { "properties": { "bonus_points": { "default": 0, "title": "Bonus Points", "type": "integer" }, "card_number": { "default": "", "title": "Card Number", "type": "string" }, "card_number_digits": { "default": "", "title": "Card Number Digits", "type": "string" }, "status": { "default": "", "title": "Status", "type": "string" } }, "title": "WalletLinkPreviewSchema", "type": "object" } ``` ### WalletManagementSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `is_blocked` | boolean | нет | | | `status_label` | string | нет | | | `blocked_reason` | string | нет | | | `active_account_id` | string | нет | | | `accounts` | массив<AccountSchema> | нет | | | `cards` | массив<CardSchema> | нет | | ```json { "properties": { "accounts": { "items": { "$ref": "#/components/schemas/AccountSchema" }, "title": "Accounts", "type": "array" }, "active_account_id": { "default": "", "title": "Active Account Id", "type": "string" }, "blocked_reason": { "default": "", "title": "Blocked Reason", "type": "string" }, "cards": { "items": { "$ref": "#/components/schemas/CardSchema" }, "title": "Cards", "type": "array" }, "is_blocked": { "default": false, "title": "Is Blocked", "type": "boolean" }, "status_label": { "default": "", "title": "Status Label", "type": "string" } }, "title": "WalletManagementSchema", "type": "object" } ``` ### WalletSchema | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `amount` | number / string | да | | | `points_balance` | string | нет | | | `card_number` | string / null | нет | | | `qrcode` | QrcodeSchema / null | нет | | | `status` | string | нет | | | `synced_at` | string (date-time) / null | нет | | | `last_error` | string / null | нет | | | `loyalty_status` | LoyaltyStatusSchema / null | нет | | | `management` | WalletManagementSchema / null | нет | | ```json { "properties": { "amount": { "anyOf": [ { "type": "number" }, { "type": "string" } ], "title": "Amount" }, "card_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Card Number" }, "last_error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Last Error" }, "loyalty_status": { "anyOf": [ { "$ref": "#/components/schemas/LoyaltyStatusSchema" }, { "type": "null" } ] }, "management": { "anyOf": [ { "$ref": "#/components/schemas/WalletManagementSchema" }, { "type": "null" } ] }, "points_balance": { "default": "0", "title": "Points Balance", "type": "string" }, "qrcode": { "anyOf": [ { "$ref": "#/components/schemas/QrcodeSchema" }, { "type": "null" } ] }, "status": { "default": "pending", "title": "Status", "type": "string" }, "synced_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Synced At" } }, "required": [ "amount" ], "title": "WalletSchema", "type": "object" } ``` ### WalletWrapperSchema Wraps wallet in {"wallet": {...}} as mobile expects for mutations. | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `wallet` | WalletSchema | да | | ```json { "description": "Wraps wallet in {\"wallet\": {...}} as mobile expects for mutations.", "properties": { "wallet": { "$ref": "#/components/schemas/WalletSchema" } }, "required": [ "wallet" ], "title": "WalletWrapperSchema", "type": "object" } ``` ### WeightInput | Поле | Тип | Обязательное | Описание | |---|---|---|---| | `quantity_kg` | number / string | да | Фактический вес в килограммах, максимум три знака после запятой. | ```json { "properties": { "quantity_kg": { "anyOf": [ { "exclusiveMinimum": 0.0, "type": "number" }, { "type": "string" } ], "description": "Фактический вес в килограммах, максимум три знака после запятой.", "examples": [ "1.250" ], "title": "Quantity Kg" } }, "required": [ "quantity_kg" ], "title": "WeightInput", "type": "object" } ```