openapi: 3.2.0 info: title: Lokki External API version: '2.0' description: 'Operations tagged External across 2 of this provider''s published API definitions: lokki-dashboard-api-openapi.json, lokki-external-api-openapi.json. Each path carries the servers of the definition it was published in.' servers: - url: https://staging.api.eu-west-3.lokki.rent - url: https://prod.api.eu-west-3.getlokki.com security: - x-access-token: [] tags: - name: External paths: /v2/external/verticales: get: operationId: external__getManyVerticales parameters: - name: lang required: true in: query schema: type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/VerticaleExternalDto' tags: - External /v2/external/verticales/categories: get: operationId: external__getManyCategories parameters: - name: skip required: false in: query description: Number of documents to skip schema: minimum: 0 default: 0 type: number - name: limit required: false in: query description: Maximum number of documents to return schema: minimum: 0 maximum: 100 default: 100 type: number - name: sort required: false in: query schema: oneOf: - type: array items: type: string - type: string description: 'Sort order for the results. Use ''__asc'' or ''__desc'' suffix to specify ascending or descending order respectively. Example: ''name__asc''' - name: fields required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Fields to include in the response - name: verticale.isNull required: false in: query description: Filter entries that have the field as null schema: type: boolean - name: verticale.exists required: false in: query description: Filter entries that have the field not null schema: type: boolean - name: verticale.equals required: false in: query description: Filter entries that have a specific value schema: type: string - name: verticale.notEquals required: false in: query description: Filter entries that do not have a specific value schema: type: string - name: verticale.in required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that match any of the specified values - name: verticale.notIn required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that do not match any of the specified values - name: lang required: false in: query description: Language for localized content example: fr schema: enum: - fr - en - nl - de - it - pt - es - pl type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetManyCategoriesResponseDto' tags: - External /v2/external/stores: get: operationId: external__getManyStores parameters: - name: skip required: false in: query description: Number of documents to skip schema: minimum: 0 default: 0 type: number - name: limit required: false in: query description: Maximum number of documents to return schema: minimum: 0 maximum: 100 default: 100 type: number - name: sort required: false in: query schema: oneOf: - type: array items: type: string - type: string description: 'Sort order for the results. Use ''__asc'' or ''__desc'' suffix to specify ascending or descending order respectively. Example: ''name__asc''' - name: fields required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Fields to include in the response - name: verticale.isNull required: false in: query description: Filter entries that have the field as null schema: type: boolean - name: verticale.exists required: false in: query description: Filter entries that have the field not null schema: type: boolean - name: verticale.equals required: false in: query description: Filter entries that have a specific value schema: type: string - name: verticale.notEquals required: false in: query description: Filter entries that do not have a specific value schema: type: string - name: verticale.in required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that match any of the specified values - name: verticale.notIn required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that do not match any of the specified values - name: position.radius required: false in: query description: Radius in kilometers (max 50km). Optional, but if provided, latitude and longitude must also be provided. schema: minimum: 0 maximum: 50 type: number - name: position.latitude required: false in: query description: Latitude of the position. Optional, but if provided, longitude and radius must also be provided. schema: minimum: -90 maximum: 90 type: number - name: position.longitude required: false in: query description: Longitude of the position. Optional, but if provided, latitude and radius must also be provided. schema: minimum: -180 maximum: 180 type: number - name: lang required: false in: query description: Language for localized content example: fr schema: enum: - fr - en - nl - de - it - pt - es - pl type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetManyStoresResponseDto' tags: - External /v2/external/stores/count: get: operationId: external__getCountStores parameters: - name: sort required: false in: query schema: oneOf: - type: array items: type: string - type: string description: 'Sort order for the results. Use ''__asc'' or ''__desc'' suffix to specify ascending or descending order respectively. Example: ''name__asc''' - name: fields required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Fields to include in the response - name: verticale.isNull required: false in: query description: Filter entries that have the field as null schema: type: boolean - name: verticale.exists required: false in: query description: Filter entries that have the field not null schema: type: boolean - name: verticale.equals required: false in: query description: Filter entries that have a specific value schema: type: string - name: verticale.notEquals required: false in: query description: Filter entries that do not have a specific value schema: type: string - name: verticale.in required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that match any of the specified values - name: verticale.notIn required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that do not match any of the specified values - name: position.radius required: false in: query description: Radius in kilometers (max 50km). Optional, but if provided, latitude and longitude must also be provided. schema: minimum: 0 maximum: 50 type: number - name: position.latitude required: false in: query description: Latitude of the position. Optional, but if provided, longitude and radius must also be provided. schema: minimum: -90 maximum: 90 type: number - name: position.longitude required: false in: query description: Longitude of the position. Optional, but if provided, latitude and radius must also be provided. schema: minimum: -180 maximum: 180 type: number responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CountStoresResponseDto' tags: - External /v2/external/stores/{id}: get: operationId: external__getOneStore parameters: - name: id required: true in: path description: The unique ID or slug of the store example: 64b64c4f5f3c2a6d8e7f9a01 schema: type: string - name: fields required: false in: query description: Fields to include in the response schema: type: array items: type: string - name: lang required: false in: query description: Language for localized content example: fr schema: default: fr enum: - fr - en - nl - de - it - pt - es - pl type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Deprecated_External_Store' tags: - External /v2/external/stores/{slug}/items/{itemId}: get: operationId: external__getOneStoreItem parameters: - name: slug required: true in: path description: The slug of the store example: my-store-slug schema: pattern: /^[a-z0-9-]+$/ type: string - name: itemId required: true in: path description: The ID of the item example: item-12345 schema: type: string - name: ids required: false in: query description: Item IDs to retrieve example: - '1' - '2' - '3' schema: type: array items: type: string - name: lang required: true in: query description: Language for localized content example: fr schema: default: fr enum: - fr - en - nl - de - it - pt - es - pl type: string - name: preview required: false in: query description: If true, include unpublished stores (for preview mode) example: false schema: default: false type: boolean - name: from required: false in: query description: Start date for filtering items (optional) example: '2025-09-26T10:00:00.000Z' schema: format: date-time type: string - name: to required: false in: query description: End date for filtering items (optional) example: '2025-10-31T14:30:00.000Z' schema: format: date-time type: string - name: verticale required: false in: query description: The large category of the item (e.g., BIKE, CAR, BOAT, etc.) example: BIKE schema: enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING type: string - name: verticaleCategoryIds required: false in: query description: The precise category of the item (e.g., Mountain Bike, Road Bike, etc.) schema: type: array items: type: string - name: sortBy required: false in: query description: Sort by example: price_asc schema: enum: - relevance - price_asc - price_desc type: string - name: limit required: false in: query description: Limit of items to retrieve example: 10 schema: type: number - name: skip required: false in: query description: Skip of items to retrieve example: 0 schema: default: 0 type: number - name: search required: false in: query description: Search term to filter items example: electric bike schema: type: string - name: context required: false in: query description: Context in which items are being queried. RENTAL_PLACE (default) requires marketplace eligibility. ONLINE_STORE relaxes those requirements for BEL V1 companies not listed on the marketplace. schema: default: RENTAL_PLACE enum: - RENTAL_PLACE - ONLINE_STORE type: string - name: fields required: false in: query description: Fields to include in the response schema: type: array items: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StoreItemDto' tags: - External /v2/external/stores/{slug}/items: get: operationId: external__getManyStoreItems parameters: - name: slug required: true in: path description: The slug of the store example: my-store-slug schema: pattern: /^[a-z0-9-]+$/ type: string - name: ids required: false in: query description: Item IDs to retrieve example: - '1' - '2' - '3' schema: type: array items: type: string - name: lang required: true in: query description: Language for localized content example: fr schema: default: fr enum: - fr - en - nl - de - it - pt - es - pl type: string - name: preview required: false in: query description: If true, include unpublished stores (for preview mode) example: false schema: default: false type: boolean - name: from required: false in: query description: Start date for filtering items (optional) example: '2025-09-26T10:00:00.000Z' schema: format: date-time type: string - name: to required: false in: query description: End date for filtering items (optional) example: '2025-10-31T14:30:00.000Z' schema: format: date-time type: string - name: verticale required: false in: query description: The large category of the item (e.g., BIKE, CAR, BOAT, etc.) example: BIKE schema: enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING type: string - name: verticaleCategoryIds required: false in: query description: The precise category of the item (e.g., Mountain Bike, Road Bike, etc.) schema: type: array items: type: string - name: sortBy required: false in: query description: Sort by example: price_asc schema: enum: - relevance - price_asc - price_desc type: string - name: limit required: false in: query description: Limit of items to retrieve example: 10 schema: type: number - name: skip required: false in: query description: Skip of items to retrieve example: 0 schema: default: 0 type: number - name: search required: false in: query description: Search term to filter items example: electric bike schema: type: string - name: context required: false in: query description: Context in which items are being queried. RENTAL_PLACE (default) requires marketplace eligibility. ONLINE_STORE relaxes those requirements for BEL V1 companies not listed on the marketplace. schema: default: RENTAL_PLACE enum: - RENTAL_PLACE - ONLINE_STORE type: string - name: fields required: false in: query description: Fields to include in the response schema: type: array items: type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreItemDto' tags: - External components: schemas: ItemInfos: type: object properties: name: type: string description: Name of the item example: Mountain Bike X2000 localizedName: description: Item name resolved per supported locale allOf: - $ref: '#/components/schemas/LocalizedContent' description: type: string description: Detailed localized description of the item example: A high-performance mountain bike suitable for all terrains. required: - name - description StoreBookingType: type: object properties: lcd: type: boolean description: Indicates if short-term rentals (LCD) are enabled example: true lld: type: boolean description: Indicates if long-term rentals (LLD) are enabled example: true event: type: boolean description: Indicates if events are enabled example: true required: - lcd - lld - event ItemPricingTableEntryDurationSpecific: type: object properties: type: type: string enum: - specific minutes: type: number description: Duration in minutes example: 1440 required: - type - minutes StoreProductDto: type: object properties: id: type: string description: Unique identifier for the item example: 61e7b8f9e4b0c8a1d4f3c2b1 rentalType: enum: - LCD - LLD type: string description: The rental type of the item (Short-term or Long-term rental) example: LCD settings: description: Settings and configuration for the item allOf: - $ref: '#/components/schemas/ItemSettings' infos: description: Information about the item allOf: - $ref: '#/components/schemas/ItemInfos' category: description: Category information of the item allOf: - $ref: '#/components/schemas/ItemCategory' media: description: Media associated with the item allOf: - $ref: '#/components/schemas/ItemMedia' pricing: description: Pricing details of the item allOf: - $ref: '#/components/schemas/ItemPricing' time: description: Time range information and constraints for the item allOf: - $ref: '#/components/schemas/ItemTimeInfos' stock: description: Stock information of the item allOf: - $ref: '#/components/schemas/ItemStock' modules: description: Item module settings (insurance, etc.) allOf: - $ref: '#/components/schemas/ItemModules' type: type: string enum: - product - service - pack description: Type of the item example: product required: - id - rentalType - settings - infos - category - media - pricing - time - stock - modules - type CategoryExternalVerticaleInfos: type: object properties: id: enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING type: string description: Identifier of the verticale example: BIKE name: type: string description: Localized name of the verticale example: Vélo required: - id - name Deprecated_External_StoreAddressComponents: type: object properties: administrativeAreaLevel1: type: string description: 'State, province, or region Deprecated, use `geo.location.components.administrativeAreaLevel1` instead.' example: Hauts-de-France deprecated: true administrativeAreaLevel2: type: string description: 'County or district Deprecated, use `geo.location.components.administrativeAreaLevel2` instead.' example: Nord deprecated: true city: type: string description: 'City Deprecated, use `geo.location.components.city` instead.' example: Lille deprecated: true country: type: string description: 'Country Deprecated, use `geo.location.components.country` instead.' example: France deprecated: true placeId: type: string description: 'Google Place ID Deprecated, use `geo.location.placeId` instead.' example: ChIJCSaqfIjVwkcRhvxuup4tznk deprecated: true postalCode: type: string description: 'Postal code Deprecated, use `geo.location.components.postalCode` instead.' example: '59000' deprecated: true street: type: string description: 'Route or street name Deprecated, use `geo.location.components.street` instead.' example: Place du Général de Gaulle deprecated: true streetNumber: type: string description: 'Street number Deprecated, use `geo.location.components.streetNumber` instead.' example: '1' deprecated: true required: - administrativeAreaLevel1 - administrativeAreaLevel2 - city - country - placeId - postalCode - street - streetNumber StoreDeliveryFreeSettings: type: object properties: activated: type: boolean description: Indicates if free delivery is activated example: true type: enum: - MINUTES - SUBTOTAL type: string description: Type of condition for free delivery (either minimum minutes or subtotal amount) example: MINUTES value: type: number description: Value corresponding to the type (minutes or subtotal amount) example: 60 required: - activated - type - value ItemPriceRule: type: object properties: id: type: string companyId: type: string title: type: string rules: type: array items: $ref: '#/components/schemas/PriceRule' required: - id - companyId - title - rules StoreModules: type: object properties: delivery: description: Delivery module settings allOf: - $ref: '#/components/schemas/StoreDelivery' onlinePayment: description: Online payment module settings allOf: - $ref: '#/components/schemas/StoreOnlinePayment' insurance: description: Insurance module settings allOf: - $ref: '#/components/schemas/StoreInsurance' multipleLocations: description: Multiple locations module settings allOf: - $ref: '#/components/schemas/StoreMultipleLocations' cancellation: description: Cancellation module settings allOf: - $ref: '#/components/schemas/StoreCancellation' rentalPlaceNetwork: description: Rental place network participation settings allOf: - $ref: '#/components/schemas/StoreRentalPlaceNetwork' stockVisibility: description: Stock visibility module settings allOf: - $ref: '#/components/schemas/StoreStockVisibility' breadcrumbVisibility: description: Breadcrumb visibility on BEL 2.0 store pages allOf: - $ref: '#/components/schemas/StoreBreadcrumbVisibility' required: - delivery - onlinePayment - insurance - multipleLocations - cancellation - rentalPlaceNetwork - stockVisibility - breadcrumbVisibility ItemRangeInfos: type: object properties: min: type: number description: Minimum time in minutes for this time range with price example: 60 max: type: number description: Maximum time in minutes for this time range with price example: 1440 required: - min - max StoreTimestamps: type: object properties: createdAt: format: date-time type: string description: Date when the store was created example: '2024-10-15T10:30:00.000Z' required: - createdAt StoreInsuranceTulipDetails: type: object properties: provider: type: string enum: - TULIP status: enum: - 'off' - on_inclusion_hidden - on_inclusion - on_option - with_assurance type: string description: Tulip insurance status for the store example: on_inclusion required: - provider - status StorePackCategoryInfos: type: object properties: name: type: string required: - name ItemStock: type: object properties: availableQuantity: type: number description: Available quantity of the item example: 10 totalQuantity: type: number description: Total quantity of the item example: 10 isAvailable: type: boolean description: 'Whether the item can be booked for the requested range. Quantities overload 0 as both ''none'' and ''unlimited'' (services, service-backed pack lines), so this is the only unambiguous availability signal. Products: at least one sub-product available. Services: always true. Packs: every line has at least one available option.' example: true required: - availableQuantity - totalQuantity - isAvailable ItemDurationInfos: type: object properties: min: type: number description: Minimum duration in minutes allowed for the item example: 60 max: type: number description: Maximum duration in minutes allowed for the item example: 1440 required: - min - max StoreGlobalDiscount: type: object properties: percentage: type: number description: Percentage value of the discount example: '10.0' from: format: date-time type: - string - 'null' description: Start date of the discount period (null if always applicable) example: '2024-12-01T00:00:00.000Z' to: format: date-time type: - string - 'null' description: End date of the discount period (null if always applicable) example: '2024-12-31T23:59:59.999Z' applicableDate: enum: - CREATED_DATE - START_DATE type: string description: Whether the discount applies on the start date of the booking or when the booking is made example: START_DATE required: - percentage - from - to - applicableDate StoreDeposit: type: object properties: max: description: Maximum deposit settings allOf: - $ref: '#/components/schemas/StoreDepositMax' online: type: boolean description: Whether the customer can pay the deposit online example: true required: - max - online ItemMediaDocuments: type: object properties: url: type: string description: document URLs associated with the item example: - https://example.com/documents/item1.pdf - https://example.com/documents/item2.pdf name: type: string description: Name of the document example: Item Manual required: - url - name StoreTemporal: type: object properties: timezone: type: string description: Store timezone in IANA format (e.g., Europe/Paris) example: Europe/Paris schedule: description: Store opening hours and schedule allOf: - $ref: '#/components/schemas/StoreSchedule' required: - timezone - schedule ItemPricingDiscount: type: object properties: appliedDiscounts: type: array description: List of discounts applied to the item items: oneOf: - $ref: '#/components/schemas/ItemDiscountPeriodic' - $ref: '#/components/schemas/ItemDiscountWeekly' availableDiscounts: type: array description: List of available discounts for the item items: oneOf: - $ref: '#/components/schemas/ItemDiscountQuantity' required: - appliedDiscounts - availableDiscounts ItemVerticale: type: object properties: id: enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING type: string description: Identifier of the verticale example: BIKE name: type: string description: Localized name of the verticale example: Bike required: - id - name ItemMediaVideos: type: object properties: youtubeUrls: description: Array of YouTube video URLs associated with the item example: - https://www.youtube.com/watch?v=dQw4w9WgXcQ - https://www.youtube.com/watch?v=sNPnbI1arSE type: - array - 'null' items: type: string required: - youtubeUrls StoreGoogleReview: type: object properties: author: description: Author information of the Google Review allOf: - $ref: '#/components/schemas/StoreGoogleReviewAuthor' comment: type: string description: Comment text of the Google Review example: Great service and friendly staff! rating: type: number description: Rating given in the Google Review (out of 5) example: 5 publishTime: format: date-time type: string description: Date when the Google Review was published example: '2024-10-15T10:30:00.000Z' required: - author - comment - rating - publishTime StoreCheckout: type: object properties: partPayment: description: Part payment settings — whether and how much the customer must pay upfront allOf: - $ref: '#/components/schemas/StorePartPayment' deposit: description: Deposit settings — cap amount and whether online payment is enabled allOf: - $ref: '#/components/schemas/StoreDeposit' payOnSite: type: boolean description: Whether the store allows customers to pay in person at pickup example: true required: - partPayment - deposit - payOnSite StoreMarketing: type: object properties: trackers: description: Third-party analytics tracker IDs configured by the store owner allOf: - $ref: '#/components/schemas/StoreMarketingTrackers' required: - trackers StoreSchedule: type: object properties: openingHours: description: List of regular opening hours type: array items: $ref: '#/components/schemas/StoreOpeningHours' openingHoursLowSeason: description: List of opening hours for the low season type: array items: $ref: '#/components/schemas/StoreOpeningHours' lowSeasonRanges: description: List of date ranges for the low season type: array items: $ref: '#/components/schemas/StoreDateRange' closedRanges: description: List of date ranges when the store is closed type: array items: $ref: '#/components/schemas/StoreDateRange' required: - openingHours - openingHoursLowSeason - lowSeasonRanges - closedRanges StoreBranding: type: object properties: logoURL: type: string description: Logo image URL for the online store banners: description: Banner images and settings for the online store allOf: - $ref: '#/components/schemas/StoreBrandingBanners' required: - logoURL - banners ItemInsuranceTulipDetails: type: object properties: provider: type: string enum: - TULIP status: enum: - 'off' - on_inclusion_hidden - on_inclusion - on_option - with_assurance type: string description: Tulip insurance status for the item example: on_inclusion_hidden required: - provider - status StoreMarketingTrackers: type: object properties: ga4Id: type: string description: Google Analytics 4 measurement ID example: G-XXXXXXXXXX googleAdsId: type: string description: Google Ads conversion ID example: AW-123456789 metaPixelId: type: string description: Meta (Facebook) Pixel ID example: '123456789012345' tiktokPixelId: type: string description: TikTok Pixel ID example: ABCDEFGHIJKLMNOPQRST linkedinPartnerId: type: string description: LinkedIn Partner ID example: '123456' linkedinConversionId: type: string description: LinkedIn Conversion ID example: '1234567' StorePackCategory: type: object properties: id: type: string infos: $ref: '#/components/schemas/StorePackCategoryInfos' stock: $ref: '#/components/schemas/ItemStock' items: type: array items: $ref: '#/components/schemas/StorePackCategoryItem' required: - id - infos - stock - items StoreInstantBooking: type: object properties: lcd: type: boolean description: Indicates if automatic online store booking is enabled for short-term rentals example: true lld: type: boolean description: Indicates if automatic online store booking is enabled for long-term rentals example: true event: type: boolean description: Indicates if automatic online store booking is enabled for events example: false required: - lcd - lld - event StoreStockVisibility: type: object properties: enabled: type: boolean description: Whether the store chooses to display available stock quantity on product cards. example: false required: - enabled StoreBookingRules: type: object properties: timeAnchors: description: Allowed booking times (e.g., specific time slots) allOf: - $ref: '#/components/schemas/StoreBookingTimeAnchorsRule' leadTime: description: Lead time required before a booking can be made allOf: - $ref: '#/components/schemas/StoreBookingLeadTimeRule' duration: description: Minimum and maximum booking durations allOf: - $ref: '#/components/schemas/StoreBookingDurationRule' gapBeforeOrderInMinutes: type: number description: Preparation time required before an order starts, in minutes. A product is unavailable for this duration ahead of each existing order (derived from timeProductsUnavailableBeforeOrder + dayProductsUnavailableBeforeOrder). example: 60 gapAfterOrderInMinutes: type: number description: Time required after an order ends before the product is available again, in minutes (derived from timeProductsUnavailableAfterOrder + dayProductsUnavailableAfterOrder). example: 120 required: - timeAnchors - leadTime - duration - gapBeforeOrderInMinutes - gapAfterOrderInMinutes StoreDiscount: type: object properties: globalDiscounts: description: List of global discounts applicable to the store type: array items: $ref: '#/components/schemas/StoreGlobalDiscount' categoryDiscounts: description: List of category-specific discounts applicable to the store type: array items: $ref: '#/components/schemas/StoreCategoryDiscount' required: - globalDiscounts - categoryDiscounts StoreDepositMax: type: object properties: activated: type: boolean description: Whether the deposit max value is activated example: true amount: type: number description: Maximum deposit amount example: 200 required: - activated - amount CategoryExternalInfos: type: object properties: name: type: string description: Localized name of the category example: Mountain Bike verticale: description: Information about the parent verticale allOf: - $ref: '#/components/schemas/CategoryExternalVerticaleInfos' required: - name - verticale ItemSettings: type: object properties: visibility: enum: - PUBLIC - RESTRICTED type: string description: Visibility status of the item example: PUBLIC required: - visibility StoreMultipleLocations: type: object properties: enabled: type: boolean description: Indicates if multiple locations are enabled for this store example: true dropoffRule: enum: - SAME - DIFFERENT type: string description: Controls whether the user can drop-off the products in a different rental point example: DIFFERENT required: - enabled - dropoffRule ItemSurveyField: type: object properties: id: type: string description: ID of the field example: '1' value: type: string description: Value of the field example: Survey 1 type: enum: - TEXT - SELECT - MULTIPLE_SELECT - DOCUMENT type: string description: Type of the field example: TEXT selectAnswers: description: Select answers of the field example: - Survey answer 1 - Survey answer 2 type: array items: type: string required: - id - value - type - selectAnswers StoreCurrency: type: object properties: isoCode: type: string description: Currency code in ISO 4217 format example: EUR symbol: type: string description: Currency symbol example: € required: - isoCode - symbol StorePackDto: type: object properties: id: type: string description: Unique identifier for the item example: 61e7b8f9e4b0c8a1d4f3c2b1 rentalType: enum: - LCD - LLD type: string description: The rental type of the item (Short-term or Long-term rental) example: LCD settings: description: Settings and configuration for the item allOf: - $ref: '#/components/schemas/ItemSettings' infos: description: Information about the item allOf: - $ref: '#/components/schemas/ItemInfos' category: description: Category information of the item allOf: - $ref: '#/components/schemas/ItemCategory' media: description: Media associated with the item allOf: - $ref: '#/components/schemas/ItemMedia' pricing: description: Pricing details of the item allOf: - $ref: '#/components/schemas/ItemPricing' time: description: Time range information and constraints for the item allOf: - $ref: '#/components/schemas/ItemTimeInfos' stock: description: Stock information of the item allOf: - $ref: '#/components/schemas/ItemStock' modules: description: Item module settings (insurance, etc.) allOf: - $ref: '#/components/schemas/ItemModules' type: type: string enum: - product - service - pack description: Type of the item example: pack categories: type: array items: $ref: '#/components/schemas/StorePackCategory' required: - id - rentalType - settings - infos - category - media - pricing - time - stock - modules - type - categories StoreBookingFixedDuration: type: object properties: id: type: string description: Unique identifier for the predefined booking duration example: 64b64c4f5f3c2a6d8e7f9b0e minutes: type: number description: Predefined booking duration in minutes example: 60 hours: type: number description: Predefined booking duration in hours example: 1 label: type: string description: Label for the predefined booking duration example: 1 hour required: - id - minutes - hours - label VerticaleExternalDto: type: object properties: id: enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING type: string description: Unique identifier for the verticale example: BIKE infos: description: Descriptive information about the verticale allOf: - $ref: '#/components/schemas/VerticaleExternalInfos' required: - id - infos StoreStripePaymentMethods: type: object properties: card: type: boolean description: Credit card enabled example: true applePay: type: boolean description: Apple Pay enabled example: true googlePay: type: boolean description: Google Pay enabled example: true sepa: type: boolean description: SEPA enabled example: false ideal: type: boolean description: iDEAL enabled example: false bancontact: type: boolean description: Bancontact enabled example: false giroPay: type: boolean description: Giropay enabled example: false p24: type: boolean description: Przelewy24 enabled example: false blik: type: boolean description: BLIK enabled example: false multibanco: type: boolean description: Multibanco enabled example: false eps: type: boolean description: EPS enabled example: false required: - card - applePay - googlePay - sepa - ideal - bancontact - giroPay - p24 - blik - multibanco - eps ItemPricingTableEntry: type: object properties: id: type: string description: Unique identifier of the price model row example: 61e7b8f9e4b0c8a1d4f3c2b1 label: type: string description: Localized duration label (e.g. '1 jour', '1 semaine') example: 1 jour price: type: number description: Price for this duration example: 50 duration: description: Raw duration data for client-side formatting oneOf: - $ref: '#/components/schemas/ItemPricingTableEntryDurationRange' - $ref: '#/components/schemas/ItemPricingTableEntryDurationSpecific' - $ref: '#/components/schemas/ItemPricingTableEntryDurationLld' discriminator: propertyName: type mapping: range: '#/components/schemas/ItemPricingTableEntryDurationRange' specific: '#/components/schemas/ItemPricingTableEntryDurationSpecific' LLD: '#/components/schemas/ItemPricingTableEntryDurationLld' required: - id - label - price - duration StoreLocationPoint: type: object properties: lat: type: number description: Latitude of the location example: 48.8728361 lng: type: number description: Longitude of the location example: 2.3094988 required: - lat - lng ItemSurvey: type: object properties: name: type: string description: Name of the survey example: Survey 1 fields: description: Fields of the survey example: - id: '1' value: Survey 1 type: text selectAnswers: [] type: array items: $ref: '#/components/schemas/ItemSurveyField' required: - name - fields ItemPricingTable: type: object properties: highSeason: description: High-season pricing rows, ordered by duration type: array items: $ref: '#/components/schemas/ItemPricingTableEntry' lowSeason: description: Low-season pricing rows, ordered by duration. Null when the store has no low-season pricing configured. type: - array - 'null' items: $ref: '#/components/schemas/ItemPricingTableEntry' required: - highSeason - lowSeason StoreReviews: type: object properties: google: description: Google Reviews data allOf: - $ref: '#/components/schemas/StoreGoogleReviews' required: - google StoreOnlinePayment: type: object properties: enabled: type: boolean description: True if at least one payment provider is configured for this store example: true providers: description: Available payment providers for this store allOf: - $ref: '#/components/schemas/StoreOnlinePaymentProviders' required: - enabled - providers StoreBookingDurationRule: type: object properties: minHours: type: - number - 'null' description: Minimum booking duration in hours, null if no minimum example: 1 maxHours: type: - number - 'null' description: Maximum booking duration in hours, null if no maximum example: 24 required: - minHours - maxHours ItemTimeInfos: type: object properties: duration: description: Duration constraints for the item allOf: - $ref: '#/components/schemas/ItemDurationInfos' ranges: description: Relevant time ranges with available price type: array items: $ref: '#/components/schemas/ItemRangeInfos' required: - duration - ranges StoreLocalization: type: object properties: current: enum: - fr - en - nl - de - it - pt - es - pl type: string description: Language used in this response example: fr default: enum: - fr - en - nl - de - it - pt - es - pl type: string description: Default language of the store example: fr available: type: array items: type: string enum: - fr - en - nl - de - it - pt - es - pl description: List of available languages for the store example: - fr - en required: - current - default - available StoreBreadcrumbVisibility: type: object properties: enabled: type: boolean description: Whether the breadcrumb is displayed on the BEL 2.0 store pages. example: true required: - enabled ItemDiscountQuantity: type: object properties: type: type: string default: QUANTITY enum: - QUANTITY rules: description: Rules for quantity-based discounts type: array items: $ref: '#/components/schemas/CompanyCategoryDiscountRange' required: - type - rules StoreDeliveryRangeSpecificPriceCity: type: object properties: cityName: type: string description: Name of the city example: Paris sublocalityName: type: string description: Name of the sublocality (e.g., neighborhood or district) example: Batignolles zipCode: type: string description: Postal code example: '75017' placeId: type: string description: Google Place ID for the city example: ChIJD7fiBh9u5kcRYJSMaMOCCwQ hasMultiplePostcodeLocalities: type: boolean description: Indicates if the city has multiple postal code localities example: false required: - cityName - sublocalityName - zipCode - placeId - hasMultiplePostcodeLocalities StoreDeliveryRange: type: object properties: min: type: number description: Minimum distance for this delivery range, in kilometers example: 0 max: type: number description: Maximum distance for this delivery range, in kilometers example: 5 price: type: number description: Base price for deliveries within this range example: 10 specificPrices: description: List of specific prices for certain cities within this range type: array items: $ref: '#/components/schemas/StoreDeliveryRangeSpecificPrice' required: - min - max - price - specificPrices StoreContact: type: object properties: phone: type: - string - 'null' description: Phone number for contacting the store. Only present if the store has opted in to display their phone number. example: +33 1 23 45 67 89 email: type: string description: Email address for contacting the store example: contact@henricorp.com website: type: string description: Website URL for the store example: https://www.henricorp.com socialMedia: description: List of social media profiles for the store allOf: - $ref: '#/components/schemas/StoreContactSocialMedia' required: - phone - email - website - socialMedia ItemInsurance: type: object properties: enabled: type: boolean description: Indicates if insurance is enabled for this item example: true provider: type: string enum: - TULIP description: Insurance provider for this item example: TULIP details: description: Detailed settings for the insurance provider allOf: - $ref: '#/components/schemas/ItemInsuranceTulipDetails' required: - enabled - provider - details StoreStripeProviderConfig: type: object properties: publishableKey: type: string description: Stripe publishable key resolved by the backend (live or test) example: pk_live_... accountId: type: string description: Stripe connected account ID example: acct_... methods: description: Available Stripe payment methods allOf: - $ref: '#/components/schemas/StoreStripePaymentMethods' required: - publishableKey - accountId - methods StoreBookingTimeAnchorsRule: type: object properties: startTimes: description: List of allowed booking start times (e.g., specific time slots) type: array items: $ref: '#/components/schemas/StoreBookingTimeAnchorTime' endTimes: description: List of allowed booking end times (e.g., specific time slots) type: array items: $ref: '#/components/schemas/StoreBookingTimeAnchorTime' required: - startTimes - endTimes StoreOnlinePaymentProviders: type: object properties: stripe: description: Stripe provider config — present only when Stripe is active for this store allOf: - $ref: '#/components/schemas/StoreStripeProviderConfig' ancv: description: ANCV Connect provider config — present only when ANCV is active for this store allOf: - $ref: '#/components/schemas/StoreAncvProviderConfig' ItemDeposit: type: object properties: amount: type: number description: Deposit amount for the item example: 100 required: - amount StoreProfile: type: object properties: name: type: string description: Store name example: Henri Corp description: type: string description: Store description in the requested language, or fallback to French example: Location de vélos entre particuliers. Louez un vélo près de chez vous, où que vous soyez en France. verticales: type: array items: type: string enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING description: List of company verticales (sectors of activity) example: - BIKE - SCOOTER required: - name - description - verticales StoreDateRange: type: object properties: id: type: string description: Unique identifier for the date range example: 64b64c4f5f3c2a6d8e7f9b0d from: format: date-time type: string description: Start date of the range (inclusive) example: '2024-12-01T00:00:00.000Z' to: format: date-time type: string description: End date of the range (inclusive) example: '2024-12-31T23:59:59.999Z' required: - id - from - to ItemDiscountPeriodic: type: object properties: amount: type: number description: Discount amount applied to the item example: 5 amountType: enum: - PERCENTAGE - AMOUNT type: string description: Discount type (amount or percentage) example: PERCENTAGE type: type: string default: PERIODIC enum: - PERIODIC from: format: date-time type: - string - 'null' description: Start date of the discount period (nullable if always applicable) example: '2025-09-01T00:00:00.000Z' to: format: date-time type: - string - 'null' description: End date of the discount period (nullable if always applicable) example: '2025-09-30T23:59:59.000Z' applicableDate: enum: - CREATED_DATE - START_DATE type: string description: Applicable date context for the discount (Creation date or Booking start date) example: CREATED_DATE required: - amount - amountType - type - from - to - applicableDate StorePartPayment: type: object properties: isActive: type: boolean description: Whether part payment (upfront deposit) is active for this store example: true percentage: type: number description: Percentage of the total amount the customer must pay upfront example: 30 required: - isActive - percentage StoreBookingLeadTimeRule: type: object properties: minHours: type: number description: Minimum lead time required before a booking can be made, in hours example: 2 required: - minHours StoreRentalPlaceNetwork: type: object properties: enabled: type: boolean description: Indicates if this store participates in the rental place network newsletter example: true required: - enabled ItemMedia: type: object properties: images: description: Images associated with the item allOf: - $ref: '#/components/schemas/ItemMediaImages' videos: description: Videos associated with the item allOf: - $ref: '#/components/schemas/ItemMediaVideos' documents: description: Documents associated with the item type: array items: $ref: '#/components/schemas/ItemMediaDocuments' required: - images - videos - documents StoreTax: type: object properties: type: enum: - INCLUSIVE - EXCLUSIVE type: string description: Type of tax applied to prices (inclusive or exclusive of tax) example: INCLUSIVE value: type: number description: Tax percentage applied to prices example: 20 name: type: string description: Name of the tax (e.g., VAT) example: TVA required: - type - value - name ItemDiscountWeekly: type: object properties: amount: type: number description: Discount amount applied to the item example: 5 amountType: enum: - PERCENTAGE - AMOUNT type: string description: Discount type (amount or percentage) example: PERCENTAGE type: type: string default: WEEKLY enum: - WEEKLY baseAmount: type: number description: Base amount of the discount before applying overlap percentage example: 100 overlapPercentage: type: number description: Percentage of overlap between the booking and the price rule period example: 75 rule: description: Price rule associated with the weekly discount allOf: - $ref: '#/components/schemas/PriceRule' required: - amount - amountType - type - baseAmount - overlapPercentage - rule StoreCategoryDiscount: type: object properties: itemCategoryIds: description: Categories of items to which the discount applies type: array items: type: string rules: description: List of discount rules for the category type: array items: $ref: '#/components/schemas/CompanyCategoryDiscountRange' required: - itemCategoryIds - rules StoreMetadata: type: object properties: timestamps: description: Store lifecycle timestamps allOf: - $ref: '#/components/schemas/StoreTimestamps' required: - timestamps StoreBrandingBanners: type: object properties: urls: description: List of banner image URLs type: array items: type: string scrollTime: type: number description: Time each banner is displayed before transitioning to the next one example: 5 required: - urls - scrollTime StoreOpeningHours: type: object properties: id: type: string description: Unique identifier for the opening hours entry example: 64b64c4f5f3c2a6d8e7f9b0c day: enum: - '0' - '1' - '2' - '3' - '4' - '5' - '6' - '*' type: string description: Day of the week these opening hours apply to (0=Sunday, 1=Monday, ..., 6=Saturday, *=Every day) example: '1' from: type: string description: Opening time in "HH:mm" format (24-hour clock) example: 09:00 to: type: string description: Closing time in "HH:mm" format (24-hour clock) example: '18:00' open: type: boolean description: Indicates if the store is open during this time range example: true required: - id - day - from - to - open StoreBookingFixedDurations: type: object properties: enabled: type: boolean description: Indicates if predefined booking durations are enabled example: true durations: description: List of predefined booking durations type: array items: $ref: '#/components/schemas/StoreBookingFixedDuration' required: - enabled - durations StoreInsurance: type: object properties: enabled: type: boolean description: Indicates if insurance is enabled for this store example: true provider: type: string enum: - TULIP description: Insurance provider for this store example: TULIP details: description: Detailed settings for the insurance provider allOf: - $ref: '#/components/schemas/StoreInsuranceTulipDetails' required: - enabled - provider - details StoreGoogleReviews: type: object properties: rating: type: number description: Average rating from Google Reviews (out of 5) example: 4.5 total: type: number description: Total number of Google Reviews example: 120 placeId: type: string description: Google Place ID associated with the reviews example: ChIJLU7jZClu5kcR4PcOOO6p3I0 reviews: description: List of individual Google Reviews type: array items: $ref: '#/components/schemas/StoreGoogleReview' mapsUrl: type: string description: URL to the Google Maps page for the store example: https://maps.google.com/?cid=1234567890123456789 updatedAt: format: date-time type: string description: Date when the Google Reviews were last updated example: '2024-11-01T12:00:00.000Z' required: - rating - total - placeId - reviews - mapsUrl - updatedAt ItemMediaImages: type: object properties: urls: description: Array of image URLs associated with the item example: - https://example.com/images/item1.jpg - https://example.com/images/item2.jpg type: array items: type: string required: - urls StoreDeliveryRangeSpecificPrice: type: object properties: price: type: number description: Price for delivery to the specified cities example: 5 cities: description: List of cities with specific delivery prices type: array items: $ref: '#/components/schemas/StoreDeliveryRangeSpecificPriceCity' required: - price - cities VerticaleExternalInfos: type: object properties: name: type: string description: Localized name of the verticale example: Vélo required: - name LocalizedContent: type: object additionalProperties: type: string StoreCancellation: type: object properties: enabled: type: boolean description: True when the store has a cancellation policy set up example: true onlineRequests: type: boolean description: True when the store allows customers to request cancellation online example: true automaticRefunds: type: boolean description: True when the store supports automatic refunds on cancellation example: false ranges: description: List of cancellation ranges and their refund policies type: array items: $ref: '#/components/schemas/StoreCancellationRange' required: - enabled - onlineRequests - automaticRefunds - ranges CompanyCategoryDiscountRange: type: object properties: discount: type: number description: Discount value for the range discountType: enum: - AMOUNT - PERCENTAGE type: string description: Type of discount applied (amount or percentage) rangeFrom: type: - number - 'null' description: Minimum value of the range (Quantity of items) rangeTo: type: - number - 'null' description: Maximum value of the range (Quantity of items) infiniteTo: type: boolean description: Indicates if the range has no upper limit required: - discount - discountType - rangeFrom - rangeTo - infiniteTo ItemModules: type: object properties: insurance: description: Insurance module settings allOf: - $ref: '#/components/schemas/ItemInsurance' survey: description: Survey module settings allOf: - $ref: '#/components/schemas/ItemSurvey' required: - insurance StorePricing: type: object properties: currency: description: Store currency information allOf: - $ref: '#/components/schemas/StoreCurrency' tax: description: Store tax information allOf: - $ref: '#/components/schemas/StoreTax' discount: description: Store discount information allOf: - $ref: '#/components/schemas/StoreDiscount' showPricingTable: type: boolean description: Whether the store chooses to display the full pricing table (price per duration). example: true required: - currency - tax - discount - showPricingTable StoreDelivery: type: object properties: enabled: type: boolean description: Indicates if delivery is enabled for this store example: true deliveryOnly: type: boolean description: Indicates if only delivery is allowed for this store example: false ranges: description: List of delivery ranges for this store type: array items: $ref: '#/components/schemas/StoreDeliveryRange' excludedCities: description: List of cities excluded from delivery type: array items: $ref: '#/components/schemas/StoreDeliveryRangeSpecificPriceCity' freeDelivery: description: Free delivery settings for this store allOf: - $ref: '#/components/schemas/StoreDeliveryFreeSettings' returnDelivery: type: boolean description: Indicates if return delivery is enabled for this store example: false required: - enabled - deliveryOnly - ranges - excludedCities - freeDelivery - returnDelivery ItemPricingTableEntryDurationRange: type: object properties: type: type: string enum: - range minMinutes: type: number description: Minimum duration in minutes example: 0 maxMinutes: type: number description: Maximum duration in minutes example: 1440 required: - type - minMinutes - maxMinutes Deprecated_External_Store: type: object properties: id: type: string description: Unique identifier for the booking store - MongoDB ObjectId example: 64b64c4f5f3c2a6d8e7f9b0a slug: type: string description: Unique identifier for the store. Used for URL paths (e.g., https://www.lokki.rent/loueur/my-store) example: my-store rentalPointSlug: type: string description: Slug of the rental point to get details for. If not provided, main store location is used. example: my-rental-point profile: description: Store general profile information (name, description, verticales) allOf: - $ref: '#/components/schemas/StoreProfile' localization: description: Store localization information (current, default, available languages) allOf: - $ref: '#/components/schemas/StoreLocalization' contact: description: Store contact information (email, phone, website, social media, etc.) allOf: - $ref: '#/components/schemas/StoreContact' branding: description: Store branding information (banners, colors, etc.) allOf: - $ref: '#/components/schemas/StoreBranding' geo: description: Store geographical information (main and secondary locations) allOf: - $ref: '#/components/schemas/StoreGeo' modules: description: Store modules settings (delivery, online payment, insurance, etc.) allOf: - $ref: '#/components/schemas/StoreModules' reviews: description: Store reviews from external platforms (e.g., Google Reviews) allOf: - $ref: '#/components/schemas/StoreReviews' temporal: description: Store temporal settings (opening hours, timezone, etc.) allOf: - $ref: '#/components/schemas/StoreTemporal' pricing: description: Store pricing settings (currency, tax, discounts, etc.) allOf: - $ref: '#/components/schemas/StorePricing' booking: description: Booking settings allOf: - $ref: '#/components/schemas/StoreBookingSettings' checkout: description: Checkout settings (payment methods, deposit, part payment) allOf: - $ref: '#/components/schemas/StoreCheckout' metadata: description: Store technical metadata and timestamps allOf: - $ref: '#/components/schemas/StoreMetadata' marketing: description: Store marketing tracker IDs configured by the store owner allOf: - $ref: '#/components/schemas/StoreMarketing' name: type: string description: 'Name of the store. Deprecated, use `profile.name` instead.' example: My Store deprecated: true logoURL: type: string description: 'URL to the store logo image Deprecated, use `branding.logoURL` instead.' example: https://bucket-prod.getlokki.com/****+/logo.png deprecated: true bannerURL: description: 'URLs to the store banner images Deprecated, use `branding.banners.urls` instead.' example: - https://bucket-prod.getlokki.com/****+/banner1.png - https://bucket-prod.getlokki.com/****+/banner2.png deprecated: true type: array items: type: string pageUrl: type: string description: Public URL for the online store page. UTM parameters may be appended for tracking. example: https://www.lokki.rent/loueur/my-store?utm_source=partner&utm_medium=social&utm_campaign=spring-sale currency: description: 'Currency used by the store Deprecated, use `pricing.currency` instead.' deprecated: true allOf: - $ref: '#/components/schemas/Deprecated_External_StoreCurrency' lat: type: number description: 'Latitude of the store location Deprecated, use `geo.location.point.lat` instead.' example: 50.62925 deprecated: true lng: type: number description: 'Longitude of the store location Deprecated, use `geo.location.point.lng` instead.' example: 3.057256 deprecated: true address: type: string description: 'Full address of the store Deprecated, use `geo.location.address` instead.' example: 1 Place du Général de Gaulle, 59000 Lille, France deprecated: true addressComponents: description: 'Address components of the store Deprecated, use `geo.location.components` instead.' deprecated: true allOf: - $ref: '#/components/schemas/Deprecated_External_StoreAddressComponents' distance: type: number description: Distance from the queried location (in km) example: 5 googleRating: type: number description: 'Google rating of the store Deprecated, use `reviews.google.rating` instead.' example: 4.5 deprecated: true googleReviewsNb: type: number description: 'Number of Google reviews for the store Deprecated, use `reviews.google.total` instead.' example: 120 deprecated: true verticales: type: array items: type: string enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING description: 'Verticals associated with the store Deprecated, use `profile.verticales` instead.' deprecated: true required: - id - slug - profile - localization - contact - branding - geo - modules - reviews - temporal - pricing - booking - checkout - metadata - name - logoURL - bannerURL - pageUrl - currency - lat - lng - address - addressComponents - googleRating - googleReviewsNb - verticales StoreGeo: type: object properties: location: description: Queried location for the store (or main location if none queried). May be null if address display is disabled allOf: - $ref: '#/components/schemas/StoreLocation' locations: description: List of rental point locations. May be null if none exist or address display is disabled type: - array - 'null' items: $ref: '#/components/schemas/StoreLocation' required: - location - locations AddressComponents: type: object properties: streetNumber: type: string description: Street number example: '4' street: type: string description: Street name example: Rue du Commandant Rivière postalCode: type: string description: Postal code example: '75008' city: type: string description: City name example: Paris administrativeAreaLevel1: type: string description: Administrative area level 1 (e.g. state or province) example: Île-de-France administrativeAreaLevel2: type: string description: Administrative area level 2 (e.g. city or district) example: Paris country: type: string description: Country name example: France required: - streetNumber - street - postalCode - city - administrativeAreaLevel1 - administrativeAreaLevel2 - country StoreCancellationRange: type: object properties: hourThreshold: type: number description: Threshold in hours before the booking start time for this cancellation range. (e.g. 48 means cancellations made more than 48 hours before start) example: 48 refundType: enum: - PERCENTAGE - AMOUNT type: string description: Type of refund for this cancellation range example: PERCENTAGE refundAmount: type: number description: Refund amount for this cancellation range example: 50 required: - hourThreshold - refundType - refundAmount ItemCategoryLevel: type: object properties: id: type: string description: Unique identifier for the category example: 61e7b8f9e4b0c8a1d4f3c2b1 name: type: string description: Localized name of the category example: Mountain Bike type: enum: - STANDARD - ACCESSORY type: string description: Type of the category example: STANDARD required: - id - name - type StoreBookingTimeAnchorTime: type: object properties: hours: type: number description: Hours of the time anchor example: 9 minutes: type: number description: Minutes of the time anchor example: 30 required: - hours - minutes GetManyCategoriesResponseDto: type: object properties: total: type: number description: Total number of categories matching the query minimum: 0 example: 10 docs: description: List of categories matching the query type: array items: $ref: '#/components/schemas/CategoryExternalDto' required: - total - docs ItemVat: type: object properties: amount: type: number description: VAT percentage (e.g., 20 for 20%) example: 20 required: - amount CategoryExternalDto: type: object properties: id: type: string description: Unique identifier for the category example: 61e7b8f9e4b0c8a1d4f3c2b1 infos: description: Descriptive information about the category allOf: - $ref: '#/components/schemas/CategoryExternalInfos' meta: description: Metadata flags for the category allOf: - $ref: '#/components/schemas/CategoryExternalMeta' required: - id - infos - meta StoreGoogleReviewAuthor: type: object properties: name: type: string description: Author name of the Google Review example: John Doe profilePictureUrl: type: string description: Profile picture URL of the Google Review author example: https://example.com/profile.jpg required: - name - profilePictureUrl StoreServiceDto: type: object properties: id: type: string description: Unique identifier for the item example: 61e7b8f9e4b0c8a1d4f3c2b1 rentalType: enum: - LCD - LLD type: string description: The rental type of the item (Short-term or Long-term rental) example: LCD settings: description: Settings and configuration for the item allOf: - $ref: '#/components/schemas/ItemSettings' infos: description: Information about the item allOf: - $ref: '#/components/schemas/ItemInfos' category: description: Category information of the item allOf: - $ref: '#/components/schemas/ItemCategory' media: description: Media associated with the item allOf: - $ref: '#/components/schemas/ItemMedia' pricing: description: Pricing details of the item allOf: - $ref: '#/components/schemas/ItemPricing' time: description: Time range information and constraints for the item allOf: - $ref: '#/components/schemas/ItemTimeInfos' stock: description: Stock information of the item allOf: - $ref: '#/components/schemas/ItemStock' modules: description: Item module settings (insurance, etc.) allOf: - $ref: '#/components/schemas/ItemModules' type: type: string enum: - product - service - pack description: Type of the item example: service required: - id - rentalType - settings - infos - category - media - pricing - time - stock - modules - type StoreItemDto: oneOf: - $ref: '#/components/schemas/StoreProductDto' - $ref: '#/components/schemas/StoreServiceDto' - $ref: '#/components/schemas/StorePackDto' discriminator: propertyName: type mapping: product: '#/components/schemas/StoreProductDto' service: '#/components/schemas/StoreServiceDto' pack: '#/components/schemas/StorePackDto' GetManyStoresResponseDto: type: object properties: total: type: number description: Total number of documents matching the query minimum: 0 example: 150 docs: description: List of stores matching the query type: array items: $ref: '#/components/schemas/Deprecated_External_Store' required: - total - docs ItemCategory: type: object properties: storeItemCategory: description: The store-specific category of the item allOf: - $ref: '#/components/schemas/ItemCategoryLevel' verticale: description: The large category of the item (e.g., BIKE, CAR, BOAT, etc.) allOf: - $ref: '#/components/schemas/ItemVerticale' categoryLevel1: description: The precise category of the item (e.g., Mountain Bike, Road Bike, etc.) allOf: - $ref: '#/components/schemas/ItemCategoryLevel' required: - storeItemCategory - verticale - categoryLevel1 StoreLocation: type: object properties: id: type: string description: Unique identifier for the secondary location example: 64b64c4f5f3c2a6d8e7f9b0b name: type: string description: Name of the secondary location example: Point de retrait - Gare de Lyon slug: type: string description: Unique slug for the secondary location, used in URLs (https://www.lokki.rent/loueur/my-store/magasin/my-location) example: my-location address: type: string description: Full address as a single string example: 4 Rue du Commandant Rivière, 75008 Paris, France placeId: type: string description: Google Place ID for the location example: ChIJLU7jZClu5kcR4PcOOO6p3I0 components: description: Detailed address components allOf: - $ref: '#/components/schemas/AddressComponents' canonicalComponents: description: Detailed address components, normalized in english allOf: - $ref: '#/components/schemas/AddressComponents' point: description: Geographical point (latitude and longitude) allOf: - $ref: '#/components/schemas/StoreLocationPoint' required: - id - name - slug - address - placeId - components - canonicalComponents - point StoreAncvProviderConfig: type: object properties: {} CategoryExternalMeta: type: object properties: isOptions: type: boolean description: True if this category is for accessories/options example: false isDefault: type: boolean description: True if this is the default category for the verticale example: true required: - isOptions - isDefault Deprecated_External_StoreCurrency: type: object properties: isoName: type: string description: 'Currency code in ISO 4217 format Deprecated, use `pricing.currency.isoName` instead.' example: EUR deprecated: true symbol: type: string description: 'Currency symbol Deprecated, use `pricing.currency.symbol` instead.' example: € deprecated: true required: - isoName - symbol PriceRule: type: object properties: _id: type: string startDate: $ref: '#/components/schemas/PriceRuleDate' endDate: $ref: '#/components/schemas/PriceRuleDate' type: type: string enum: - in - include - overlap variation: type: number required: - startDate - endDate - type - variation StoreBookingSettings: type: object properties: bookingType: description: Booking type settings allOf: - $ref: '#/components/schemas/StoreBookingType' instantBooking: description: Indicates if automatic online store booking is enabled allOf: - $ref: '#/components/schemas/StoreInstantBooking' fixedDurations: description: Predefined booking durations allOf: - $ref: '#/components/schemas/StoreBookingFixedDurations' rules: description: Booking rules and restrictions allOf: - $ref: '#/components/schemas/StoreBookingRules' required: - bookingType - instantBooking - fixedDurations - rules ItemPricing: type: object properties: basis: enum: - RANGE_COMPUTED - LOWEST_PRICE type: string description: Basis used for pricing the item example: LOWEST_PRICE price: type: - number - 'null' description: Rental price of the item (null if no price available) example: 29.99 basePrice: type: - number - 'null' description: Base rental price of the item (without discounts, null if no price available) example: 29.99 discount: description: Discount applied to the item allOf: - $ref: '#/components/schemas/ItemPricingDiscount' deposit: description: Deposit amount for the item allOf: - $ref: '#/components/schemas/ItemDeposit' vat: description: VAT information for the item (null means store default VAT) allOf: - $ref: '#/components/schemas/ItemVat' pricingTable: description: Full pricing table split by season. Null when the store has disabled the pricing table display. allOf: - $ref: '#/components/schemas/ItemPricingTable' priceRule: description: Full price rule associated with this item (id + title + rules). Null when no price rule is configured. allOf: - $ref: '#/components/schemas/ItemPriceRule' required: - basis - price - basePrice - discount - deposit - vat - pricingTable - priceRule ItemPricingTableEntryDurationLld: type: object properties: type: type: string enum: - LLD months: type: number description: Duration in calendar months example: 12 required: - type - months StoreContactSocialMedia: type: object properties: facebook: type: - string - 'null' description: Facebook profile URL example: https://www.facebook.com/henricorp twitter: type: - string - 'null' description: Twitter profile URL example: https://www.twitter.com/henricorp instagram: type: - string - 'null' description: Instagram profile URL example: https://www.instagram.com/henricorp linkedIn: type: - string - 'null' description: LinkedIn profile URL example: https://www.linkedin.com/company/henricorp tiktok: type: - string - 'null' description: TikTok profile URL example: https://www.tiktok.com/@henricorp required: - facebook - twitter - instagram - linkedIn - tiktok StorePackCategoryItem: type: object properties: id: type: string type: type: string enum: - product - service infos: $ref: '#/components/schemas/ItemInfos' media: $ref: '#/components/schemas/ItemMedia' stock: $ref: '#/components/schemas/ItemStock' category: $ref: '#/components/schemas/ItemCategory' required: - id - type - infos - media - stock - category PriceRuleDate: type: object properties: day: type: number time: type: string required: - day - time CountStoresResponseDto: type: object properties: total: type: number description: Total number of stores matching the query minimum: 0 example: 42 required: - total ItemInfos_2: type: object properties: name: type: string description: Name of the item example: Mountain Bike X2000 description: type: string description: Detailed localized description of the item example: A high-performance mountain bike suitable for all terrains. required: - name - description CompanyVerticale: type: string enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING StoreModules_2: type: object properties: delivery: description: Delivery module settings allOf: - $ref: '#/components/schemas/StoreDelivery_2' onlinePayment: description: Online payment module settings allOf: - $ref: '#/components/schemas/StoreOnlinePayment_2' insurance: description: Insurance module settings allOf: - $ref: '#/components/schemas/StoreInsurance' multipleLocations: description: Multiple locations module settings allOf: - $ref: '#/components/schemas/StoreMultipleLocations' cancellation: description: Cancellation module settings allOf: - $ref: '#/components/schemas/StoreCancellation_2' required: - delivery - onlinePayment - insurance - multipleLocations - cancellation ItemStock_2: type: object properties: availableQuantity: type: number description: Available quantity of the item example: 10 totalQuantity: type: number description: Total quantity of the item example: 10 required: - availableQuantity - totalQuantity StoreGlobalDiscount_2: type: object properties: percentage: type: number description: Percentage value of the discount example: '10.0' from: format: date-time type: string nullable: true description: Start date of the discount period (null if always applicable) example: '2024-12-01T00:00:00.000Z' to: format: date-time type: string nullable: true description: End date of the discount period (null if always applicable) example: '2024-12-31T23:59:59.999Z' applicableDate: enum: - CREATED_DATE - START_DATE type: string description: Whether the discount applies on the start date of the booking or when the booking is made example: START_DATE required: - percentage - from - to - applicableDate ItemMediaVideos_2: type: object properties: youtubeUrls: description: Array of YouTube video URLs associated with the item example: - https://www.youtube.com/watch?v=dQw4w9WgXcQ - https://www.youtube.com/watch?v=sNPnbI1arSE nullable: true type: array items: type: string required: - youtubeUrls StoreInstantBooking_2: type: object properties: lcd: type: boolean description: Indicates if automatic online store booking is enabled for short-term rentals example: true lld: type: boolean description: Indicates if automatic online store booking is enabled for long-term rentals example: true required: - lcd - lld StoreBookingRules_2: type: object properties: timeAnchors: description: Allowed booking times (e.g., specific time slots) allOf: - $ref: '#/components/schemas/StoreBookingTimeAnchorsRule' leadTime: description: Lead time required before a booking can be made allOf: - $ref: '#/components/schemas/StoreBookingLeadTimeRule' duration: description: Minimum and maximum booking durations allOf: - $ref: '#/components/schemas/StoreBookingDurationRule_2' required: - timeAnchors - leadTime - duration ItemPricingTable_2: type: object properties: highSeason: description: High-season pricing rows, ordered by duration type: array items: $ref: '#/components/schemas/ItemPricingTableEntry' lowSeason: nullable: true description: Low-season pricing rows, ordered by duration. Null when the store has no low-season pricing configured. type: array items: $ref: '#/components/schemas/ItemPricingTableEntry' required: - highSeason - lowSeason StoreReviews_2: type: object properties: google: nullable: true description: Google Reviews data allOf: - $ref: '#/components/schemas/StoreGoogleReviews' required: - google StoreOnlinePayment_2: type: object properties: enabled: type: boolean description: Indicates if online payment is enabled for this store example: true provider: type: string enum: - STRIPE description: Online payment provider for this store example: STRIPE methods: description: Available payment methods for the online store allOf: - $ref: '#/components/schemas/StoreOnlinePaymentMethods' required: - enabled - provider - methods StoreBookingDurationRule_2: type: object properties: minHours: type: number nullable: true description: Minimum booking duration in hours, null if no minimum example: 1 maxHours: type: number nullable: true description: Maximum booking duration in hours, null if no maximum example: 24 required: - minHours - maxHours StoreOnlinePaymentMethods: type: object properties: card: type: boolean description: Credit card enabled example: true applePay: type: boolean description: Apple Pay enabled example: true googlePay: type: boolean description: Google Pay enabled example: true ancvConnect: type: boolean description: ANCV Connect enabled example: false sepa: type: boolean description: SEPA enabled example: false ideal: type: boolean description: iDEAL enabled example: false bancontact: type: boolean description: Bancontact enabled example: false giroPay: type: boolean description: Giropay enabled example: false p24: type: boolean description: Przelewy24 enabled example: false blik: type: boolean description: BLIK enabled example: false multibanco: type: boolean description: Multibanco enabled example: false eps: type: boolean description: EPS enabled example: false required: - card - applePay - googlePay - ancvConnect - sepa - ideal - bancontact - giroPay - p24 - blik - multibanco - eps StoreContact_2: type: object properties: socialMedia: description: List of social media profiles for the store allOf: - $ref: '#/components/schemas/StoreContactSocialMedia_2' required: - socialMedia ItemInsurance_2: type: object properties: enabled: type: boolean description: Indicates if insurance is enabled for this item example: true provider: type: string enum: - TULIP description: Insurance provider for this item example: TULIP details: nullable: true description: Detailed settings for the insurance provider allOf: - $ref: '#/components/schemas/ItemInsuranceTulipDetails' required: - enabled - provider - details ItemDiscountPeriodic_2: type: object properties: amount: type: number description: Discount amount applied to the item example: 5 amountType: enum: - PERCENTAGE - AMOUNT type: string description: Discount type (amount or percentage) example: PERCENTAGE type: type: string default: PERIODIC enum: - PERIODIC from: format: date-time type: string nullable: true description: Start date of the discount period (nullable if always applicable) example: '2025-09-01T00:00:00.000Z' to: format: date-time type: string nullable: true description: End date of the discount period (nullable if always applicable) example: '2025-09-30T23:59:59.000Z' applicableDate: enum: - CREATED_DATE - START_DATE type: string description: Applicable date context for the discount (Creation date or Booking start date) example: CREATED_DATE required: - amount - amountType - type - from - to - applicableDate StoreCancellation_2: type: object properties: enabled: type: boolean description: Indicates if the cancellation module is enabled for this store example: true ranges: description: List of cancellation ranges and their refund policies type: array items: $ref: '#/components/schemas/StoreCancellationRange' required: - enabled - ranges CompanyCategoryDiscountRange_2: type: object properties: discount: type: number description: Discount value for the range discountType: enum: - AMOUNT - PERCENTAGE type: string description: Type of discount applied (amount or percentage) rangeFrom: type: number description: Minimum value of the range (Quantity of items) rangeTo: type: number description: Maximum value of the range (Quantity of items) infiniteTo: type: boolean description: Indicates if the range has no upper limit required: - discount - discountType - rangeFrom - rangeTo - infiniteTo ItemModules_2: type: object properties: insurance: description: Insurance module settings allOf: - $ref: '#/components/schemas/ItemInsurance_2' required: - insurance StoreDelivery_2: type: object properties: enabled: type: boolean description: Indicates if delivery is enabled for this store example: true deliveryOnly: type: boolean description: Indicates if only delivery is allowed for this store example: false ranges: description: List of delivery ranges for this store type: array items: $ref: '#/components/schemas/StoreDeliveryRange' excludedCities: description: List of cities excluded from delivery type: array items: $ref: '#/components/schemas/StoreDeliveryRangeSpecificPriceCity' freeDelivery: description: Free delivery settings for this store allOf: - $ref: '#/components/schemas/StoreDeliveryFreeSettings' required: - enabled - deliveryOnly - ranges - excludedCities - freeDelivery Deprecated_External_Store_2: type: object properties: id: type: string description: Unique identifier for the booking store - MongoDB ObjectId example: 64b64c4f5f3c2a6d8e7f9b0a slug: type: string description: Unique identifier for the store. Used for URL paths (e.g., https://www.lokki.rent/loueur/my-store) example: my-store rentalPointSlug: type: string description: Slug of the rental point to get details for. If not provided, main store location is used. example: my-rental-point profile: description: Store general profile information (name, description, verticales) allOf: - $ref: '#/components/schemas/StoreProfile' localization: description: Store localization information (current, default, available languages) allOf: - $ref: '#/components/schemas/StoreLocalization' contact: description: Store contact information (email, phone, website, social media, etc.) allOf: - $ref: '#/components/schemas/StoreContact_2' branding: description: Store branding information (banners, colors, etc.) allOf: - $ref: '#/components/schemas/StoreBranding' geo: description: Store geographical information (main and secondary locations) allOf: - $ref: '#/components/schemas/StoreGeo_2' modules: description: Store modules settings (delivery, online payment, insurance, etc.) allOf: - $ref: '#/components/schemas/StoreModules_2' reviews: description: Store reviews from external platforms (e.g., Google Reviews) allOf: - $ref: '#/components/schemas/StoreReviews_2' temporal: description: Store temporal settings (opening hours, timezone, etc.) allOf: - $ref: '#/components/schemas/StoreTemporal' pricing: description: Store pricing settings (currency, tax, discounts, etc.) allOf: - $ref: '#/components/schemas/StorePricing' booking: description: Booking settings allOf: - $ref: '#/components/schemas/StoreBookingSettings' metadata: description: Store technical metadata and timestamps allOf: - $ref: '#/components/schemas/StoreMetadata' name: type: string description: 'Name of the store. Deprecated, use `profile.name` instead.' example: My Store deprecated: true logoURL: type: string description: 'URL to the store logo image Deprecated, use `branding.logoURL` instead.' example: https://bucket-prod.getlokki.com/****+/logo.png deprecated: true bannerURL: description: 'URLs to the store banner images Deprecated, use `branding.banners.urls` instead.' example: - https://bucket-prod.getlokki.com/****+/banner1.png - https://bucket-prod.getlokki.com/****+/banner2.png deprecated: true type: array items: type: string pageUrl: type: string description: Public URL for the online store page. UTM parameters may be appended for tracking. example: https://www.lokki.rent/loueur/my-store?utm_source=partner&utm_medium=social&utm_campaign=spring-sale currency: description: 'Currency used by the store Deprecated, use `pricing.currency` instead.' deprecated: true allOf: - $ref: '#/components/schemas/Deprecated_External_StoreCurrency' lat: type: number description: 'Latitude of the store location Deprecated, use `geo.location.point.lat` instead.' example: 50.62925 deprecated: true lng: type: number description: 'Longitude of the store location Deprecated, use `geo.location.point.lng` instead.' example: 3.057256 deprecated: true address: type: string description: 'Full address of the store Deprecated, use `geo.location.address` instead.' example: 1 Place du Général de Gaulle, 59000 Lille, France deprecated: true addressComponents: description: 'Address components of the store Deprecated, use `geo.location.components` instead.' deprecated: true allOf: - $ref: '#/components/schemas/Deprecated_External_StoreAddressComponents' distance: type: number description: Distance from the queried location (in km) example: 5 googleRating: type: number description: 'Google rating of the store Deprecated, use `reviews.google.rating` instead.' example: 4.5 deprecated: true googleReviewsNb: type: number description: 'Number of Google reviews for the store Deprecated, use `reviews.google.total` instead.' example: 120 deprecated: true verticales: type: array items: type: string enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING description: 'Verticals associated with the store Deprecated, use `profile.verticales` instead.' deprecated: true required: - id - slug - profile - localization - contact - branding - geo - modules - reviews - temporal - pricing - booking - metadata - name - logoURL - bannerURL - pageUrl - currency - lat - lng - address - addressComponents - googleRating - googleReviewsNb - verticales StoreGeo_2: type: object properties: location: nullable: true description: Queried location for the store (or main location if none queried). May be null if address display is disabled allOf: - $ref: '#/components/schemas/StoreLocation' locations: nullable: true description: List of rental point locations. May be null if none exist or address display is disabled type: array items: $ref: '#/components/schemas/StoreLocation' required: - location - locations StoreItemDto_2: type: object properties: id: type: string description: Unique identifier for the item example: 61e7b8f9e4b0c8a1d4f3c2b1 type: enum: - product - service type: string description: Type of the item example: product rentalType: enum: - LCD - LLD type: string description: The rental type of the item (Short-term or Long-term rental) example: LCD settings: description: Settings and configuration for the item allOf: - $ref: '#/components/schemas/ItemSettings' infos: description: Information about the item allOf: - $ref: '#/components/schemas/ItemInfos_2' category: description: Category information of the item nullable: true allOf: - $ref: '#/components/schemas/ItemCategory_2' media: description: Media associated with the item allOf: - $ref: '#/components/schemas/ItemMedia' pricing: description: Pricing details of the item allOf: - $ref: '#/components/schemas/ItemPricing_2' time: description: Time range information and constraints for the item allOf: - $ref: '#/components/schemas/ItemTimeInfos' stock: description: Stock information of the item allOf: - $ref: '#/components/schemas/ItemStock_2' modules: description: Item modules settings (insurance..) allOf: - $ref: '#/components/schemas/ItemModules_2' required: - id - type - rentalType - settings - infos - category - media - pricing - time - stock - modules ItemCategory_2: type: object properties: storeItemCategory: description: The store-specific category of the item allOf: - $ref: '#/components/schemas/ItemCategoryLevel' verticale: nullable: true description: The large category of the item (e.g., BIKE, CAR, BOAT, etc.) allOf: - $ref: '#/components/schemas/ItemVerticale' categoryLevel1: nullable: true description: The precise category of the item (e.g., Mountain Bike, Road Bike, etc.) allOf: - $ref: '#/components/schemas/ItemCategoryLevel' required: - storeItemCategory - verticale - categoryLevel1 PriceRule_2: type: object properties: startDate: $ref: '#/components/schemas/PriceRuleDate' endDate: $ref: '#/components/schemas/PriceRuleDate' type: type: string enum: - in - include - overlap variation: type: number required: - startDate - endDate - type - variation ItemPricing_2: type: object properties: basis: enum: - RANGE_COMPUTED - LOWEST_PRICE type: string description: Basis used for pricing the item example: LOWEST_PRICE price: type: number nullable: true description: Rental price of the item (null if no price available) example: 29.99 basePrice: type: number nullable: true description: Base rental price of the item (without discounts, null if no price available) example: 29.99 discount: description: Discount applied to the item allOf: - $ref: '#/components/schemas/ItemPricingDiscount' deposit: description: Deposit amount for the item allOf: - $ref: '#/components/schemas/ItemDeposit' vat: nullable: true description: VAT information for the item (null means store default VAT) allOf: - $ref: '#/components/schemas/ItemVat' pricingTable: nullable: true description: Full pricing table split by season. Null when the store has disabled the pricing table display. allOf: - $ref: '#/components/schemas/ItemPricingTable_2' required: - basis - price - basePrice - discount - deposit - vat - pricingTable StoreContactSocialMedia_2: type: object properties: facebook: type: string nullable: true description: Facebook profile URL example: https://www.facebook.com/henricorp twitter: type: string nullable: true description: Twitter profile URL example: https://www.twitter.com/henricorp instagram: type: string nullable: true description: Instagram profile URL example: https://www.instagram.com/henricorp linkedIn: type: string nullable: true description: LinkedIn profile URL example: https://www.linkedin.com/company/henricorp tiktok: type: string nullable: true description: TikTok profile URL example: https://www.tiktok.com/@henricorp required: - facebook - twitter - instagram - linkedIn - tiktok securitySchemes: x-access-token: scheme: bearer bearerFormat: JWT type: apiKey in: header name: x-access-token x-refined-from: - lokki-dashboard-api-openapi.json - lokki-external-api-openapi.json