openapi: 3.2.0 info: title: Lokki Shop API description: The main API powering the Lokki Dashboard and Online Store version: '2.0' contact: {} servers: [] security: - x-access-token: [] tags: - name: Shop paths: /v2/shop/{slug}: get: operationId: getOneBookingStore 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: 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: rentalPoint required: false in: query description: Slug of the rental point to get details for. If not provided, main store location is used. example: my-rental-point schema: 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: context required: false in: query description: Context in which the store is being queried. RENTAL_PLACE (default) requires marketplace eligibility (rentalPlace access + active Stripe Express). ONLINE_STORE relaxes those requirements to allow BEL V1 companies that are not listed on the marketplace to still serve their store page. schema: default: RENTAL_PLACE enum: - RENTAL_PLACE - ONLINE_STORE type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StoreDto' tags: - Shop /v2/shop/{slug}/items/verticales: get: operationId: getShopItemsVerticales 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: 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: 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 responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetShopItemsVerticalesResponseDto' tags: - Shop /v2/shop/{slug}/items/product-models: get: operationId: getShopItemsProductModels 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: 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: 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 responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetShopItemsProductModelsResponseDto' tags: - Shop /v2/shop/{slug}/items/{itemId}: get: operationId: getOneShopItem 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 responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StoreItemDto' tags: - Shop /v2/shop/{slug}/items/{itemId}/availability: get: operationId: getOneShopItemAvailability 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: 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: boundary required: false in: query description: Boundary for item availability. If it is a start type, the booking minimum duration will be taken into account. Default to start. example: start schema: default: start enum: - start - end 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 responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/ItemDailyAvailabilityDto' tags: - Shop /v2/shop/{slug}/items: get: operationId: getManyShopItems 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 responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/StoreItemDto' tags: - Shop /v2/shop/checkout/{cartId}/config: get: operationId: shopCheckoutGetConfig summary: Get checkout configuration for a cart parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string - name: context required: true in: query description: Active store context — stamped on the cart on every call. schema: enum: - RENTAL_PLACE - ONLINE_STORE type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CheckoutConfigDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/payment/stripe: post: operationId: shopCheckoutInitStripePayment summary: Initialize Stripe payment for a cart parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/CheckoutStripeResultDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/payment/ancv: post: operationId: shopCheckoutInitAncvPayment summary: Initialize ANCV payment for a cart parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/AncvCheckoutResultDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/payment/ancv/confirm: post: operationId: shopCheckoutConfirmAncvPayment summary: Confirm ANCV payment after manual authentication parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ConfirmAncvPaymentBodyDto' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/AncvPaymentResultDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/payment/on-site: post: operationId: shopCheckoutConfirmPayOnSite summary: Confirm order with pay-on-site payment or free orders parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string - name: context required: true in: query description: Active store context — stamped on the cart on every call. schema: enum: - RENTAL_PLACE - ONLINE_STORE type: string responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/ConfirmOrderResultDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/order: get: operationId: shopCheckoutPollOrder summary: Poll order creation status for a cart parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PollOrderResultDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/customer/models: get: operationId: shopCheckoutListCustomerModels summary: List customer models available for a cart's company parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomerModel' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/promo-code/{code}: get: operationId: shopCheckoutVerifyPromoCode summary: Verify a promo code against a checkout cart parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string - name: code required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PromoCodeDto' security: - bearer: [] tags: - Shop /v2/shop/checkout/{cartId}/insurance: get: operationId: getItemsInsuranceInfo parameters: - name: x-session-id in: header description: Session ID for guest users required: false schema: type: string - name: cartId required: true in: path schema: type: string - name: productIds required: true in: query description: Product ids to get insurance info for schema: type: array items: type: string - name: startDate required: true in: query description: Start date of booking schema: type: string - name: endDate required: true in: query description: End date of booking schema: type: string - name: isLLD required: true in: query description: Is checkout in LLD context schema: type: boolean responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ItemsTulipInsuranceInfoDto' security: - bearer: [] tags: - Shop /v2/shop/{slug}/items/{itemId}/suggestions: get: operationId: getOneItemSuggestions 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: 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: 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: 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 responses: '200': description: '' content: application/json: schema: type: array items: type: object tags: - Shop /v2/shop/{slug}/suggestions: get: operationId: getCartSuggestions 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: 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: 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: 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 responses: '200': description: '' content: application/json: schema: type: array items: type: object tags: - Shop /v2/shop/{slug}/contracts: get: operationId: getManyShopContracts 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: 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: context required: false in: query description: Context in which contracts 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 responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/ContractDto' tags: - Shop /v2/shop/{slug}/theme: get: operationId: getStoreTheme parameters: - name: slug required: true in: path description: The slug of the store example: my-store-slug schema: pattern: /^[a-z0-9-]+$/ type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CompanyTheme' tags: - Shop 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 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 CheckoutConfigDto: type: object properties: remainingAmount: type: number description: Amount remaining to pay after any part-payment reduction example: 69.8 bailAmount: type: number description: Security deposit amount (0 if not applicable) example: 150 shouldCaptureBail: type: boolean description: Whether the bail will be captured now (short-term rental ending < 7 days) example: false allowPayOnSite: type: boolean description: Whether pay-on-site is available for this store and cart example: true isPartPayment: type: boolean description: Whether the store offers part-payment (user pays X% upfront, remaining % later) example: true freeBooking: type: boolean description: When true, no payment method is needed (remaining amount < 1€ — below Stripe minimum) example: false required: - remainingAmount - bailAmount - shouldCaptureBail - allowPayOnSite - isPartPayment - freeBooking 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 ProductModelLLDPrice: type: object properties: type: type: string default: LLD enum: - LLD label: $ref: '#/components/schemas/LocalizedContent' calendarMonths: type: number id: type: string required: - type - label - calendarMonths - id CustomerModelField: type: object properties: id: type: string value: $ref: '#/components/schemas/LocalizedContent' required: - id - value 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 ThemeMainStyles: type: object properties: radius: type: string backgroundColor: type: string fontFamily: type: string required: - radius - backgroundColor - fontFamily 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 CustomerModel: type: object properties: id: type: string type: enum: - entreprise - individual type: string fields: type: array items: $ref: '#/components/schemas/CustomerModelField' companyId: type: string createdAt: format: date-time type: string required: - id - type - fields - companyId - createdAt 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 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 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 StoreMarketing: type: object properties: trackers: description: Third-party analytics tracker IDs configured by the store owner allOf: - $ref: '#/components/schemas/StoreMarketingTrackers' required: - trackers 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 ItemSettings: type: object properties: visibility: enum: - PUBLIC - RESTRICTED type: string description: Visibility status of the item example: PUBLIC required: - visibility ThemeCompanyName: type: object properties: style: $ref: '#/components/schemas/ThemeTextStyle' required: - style 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 ItemDailyAvailabilityDto: type: object properties: date: format: date-time type: string availability: type: string enum: - available - partially_available - unavailable quantity: type: number slots: type: array items: $ref: '#/components/schemas/ItemSlotAvailabilityDto' required: - date - availability - quantity - slots 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 ThemeTitle: type: object properties: style: $ref: '#/components/schemas/ThemeTextStyle' required: - style 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 ThemeColors: type: object properties: primary: type: string secondary: type: string ternary: type: string priceColor: type: string priceColorText: type: string blockColor: $ref: '#/components/schemas/ThemeBlockColor' textColor: type: string danger: type: string header: type: string required: - primary - secondary - ternary - priceColor - priceColorText - blockColor - textColor - danger - header 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 GetShopItemsVerticalesResponseDto: type: object properties: verticaleCategories: description: Verticales and categories of the store's items type: array items: $ref: '#/components/schemas/GetShopItemsVerticalesCategoriesResponseDto' required: - verticaleCategories 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 ContractDto: type: object properties: type: enum: - CGL_LCD - CGL_LLD - CGL_EVENT - RGPD type: string description: Type of the contract example: CGL_LCD content: type: string description: Localized content of the contract example:
Contract content in HTML format
required: - type - content ItemSlotDto: type: object properties: hours: type: number minutes: type: number required: - hours - minutes 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 ConfirmOrderResultDto: type: object properties: orderId: type: string description: Newly created order ID required: - orderId 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 ItemInsurancePricingDto: type: object properties: price: type: number description: Total tulip price margin: type: number description: Customizable insurance margin amount deposit: type: number description: Deposit amount with insurance baseDeposit: type: number description: Deposit amount without insurance contractType: enum: - OPTION - INCLUSION - HIDDEN_INCLUSION type: string description: Tulip contract option type required: - price - margin - deposit - baseDeposit - contractType 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 ThemeTextStyle: type: object properties: color: type: string fontSize: type: string fontWeight: type: string fontStyle: type: string required: - color - fontSize - fontWeight - fontStyle 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 CompanyTheme: type: object properties: id: type: string mainStyles: $ref: '#/components/schemas/ThemeMainStyles' button: $ref: '#/components/schemas/ThemeButton' companyName: $ref: '#/components/schemas/ThemeCompanyName' title: $ref: '#/components/schemas/ThemeTitle' colors: $ref: '#/components/schemas/ThemeColors' required: - mainStyles - button - companyName - title - colors 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 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 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 CheckoutStripeResultDto: type: object properties: clientSecret: type: string description: Stripe PaymentIntent client secret paymentId: type: string description: Internal PaymentV2 ID paymentIntentRef: type: string description: Stripe PaymentIntent ID (pi_...) required: - clientSecret - paymentId - paymentIntentRef ThemeBlockColor: type: object properties: color: type: string backgroundColor: type: string required: - color - backgroundColor 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 PollOrderResultDto: type: object properties: orderId: type: - string - 'null' description: Order ID once created, null while pending or failed status: enum: - pending - ready - failed type: string description: Current status of order creation failureReason: enum: - item_not_available - internal_error - prepaid_card_not_accepted type: string description: Reason the order failed — present only when status is 'failed' required: - orderId - status 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 LocalizedContent: type: object additionalProperties: type: string ItemSlotAvailabilityDto: type: object properties: slot: $ref: '#/components/schemas/ItemSlotDto' available: type: boolean quantity: type: number subProductsMask: type: string required: - slot - available - quantity GetShopItemsVerticalesCategoriesResponseDto: type: object properties: verticale: description: Verticale of the store's items allOf: - $ref: '#/components/schemas/ItemVerticale' category: description: Categories of the store's items allOf: - $ref: '#/components/schemas/ItemCategoryLevel' required: - verticale - category 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 AncvPaymentResultDto: type: object properties: orderId: type: - string - 'null' description: Order ID if fully paid, null if partial payment remainingAmount: type: number description: Remaining amount to pay after ANCV payment (0 if fully paid) required: - orderId - remainingAmount ConfirmAncvPaymentBodyDto: type: object properties: transactionId: type: string description: ANCV transaction ID to confirm required: - transactionId ProductModelPriceRange: type: object properties: type: type: string default: range enum: - range label: $ref: '#/components/schemas/LocalizedContent' id: type: string timeStartHours: type: number timeStartMinutes: type: number timeEndHours: type: number timeEndMinutes: type: number durationInDays: type: number required: - type - label - id - timeStartHours - timeStartMinutes - timeEndHours - timeEndMinutes AncvCheckoutResultDto: type: object properties: preTransactionId: type: string description: ANCV pre-transaction ID for QR code display transactionId: type: string description: ANCV transaction ID for manual authentication required: - preTransactionId - transactionId 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 ProductModelField: type: object properties: id: type: string value: type: string required: - id - value 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 StoreDto: 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' required: - id - slug - profile - localization - contact - branding - geo - modules - reviews - temporal - pricing - booking - checkout - metadata ItemVat: type: object properties: amount: type: number description: VAT percentage (e.g., 20 for 20%) example: 20 required: - amount ProductModelDto: type: object properties: prices: type: array items: oneOf: - $ref: '#/components/schemas/ProductModelPrice' - $ref: '#/components/schemas/ProductModelPriceRange' - $ref: '#/components/schemas/ProductModelLLDPrice' name: type: string rentalType: enum: - LCD - LLD type: string id: type: string fields: type: array items: $ref: '#/components/schemas/ProductModelField' model: type: string stateModelId: type: string companyId: type: string required: - prices - name - rentalType - id - fields - model - stateModelId - companyId 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' 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: {} ItemInsuranceInfoDto: type: object properties: id: type: string description: Product insurance Id enabled: type: boolean description: Product insurance enabled tulipProductId: type: string description: Tulip product Id pricing: description: Product insurance pricing allOf: - $ref: '#/components/schemas/ItemInsurancePricingDto' required: - id - enabled - tulipProductId - pricing 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 ThemeButtonStyle: type: object properties: backgroundColor: type: string borderRadius: type: string padding: type: string required: - backgroundColor - borderRadius - padding ItemsTulipInsuranceInfoDto: type: object properties: allowed: type: boolean description: Is product allowed for insurance insurance: description: Product insurance information type: array items: $ref: '#/components/schemas/ItemInsuranceInfoDto' displayedOptions: type: array items: type: string enum: - theft - break description: Options highlighted to customers required: - allowed - insurance - displayedOptions ThemeButton: type: object properties: textStyle: $ref: '#/components/schemas/ThemeTextStyle' style: $ref: '#/components/schemas/ThemeButtonStyle' required: - textStyle - style PromoCodeDto: type: object properties: id: type: string code: type: string source: enum: - COMPANY - LOKKI type: string active: type: boolean discountAmount: type: number discountType: enum: - PERCENTAGE - AMOUNT type: string amountUsed: type: number creationDate: format: date-time type: string expirationDate: format: date-time type: string minPrice: type: number maxUses: type: - number - 'null' dateCheck: enum: - CREATION_DATE - ORDER_DATE type: string applyOnDelivery: type: boolean limitToNewCustomers: type: boolean limitToVerticales: type: array items: type: string enum: - BIKE - ELECTRIC_BIKE - MOPED - MOTORCYCLE - CAR - SCOOTER - SKI - CLIMBING - SNOWSHOES - SURF - PADDLE - CANOE_KAYAK - BOAT - EVENT - MOTOCULTURE - TOOLING limitToCompanies: type: array items: type: string appliedDiscountAmount: type: number required: - id - code - source - active - discountAmount - discountType - amountUsed - creationDate - expirationDate - minPrice - maxUses - dateCheck - applyOnDelivery 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 GetShopItemsProductModelsResponseDto: type: object properties: productModels: description: Product models of the store's items type: array items: $ref: '#/components/schemas/ProductModelDto' required: - productModels PriceRuleDate: type: object properties: day: type: number time: type: string required: - day - time 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 ProductModelPrice: type: object properties: type: type: string default: specific enum: - specific label: $ref: '#/components/schemas/LocalizedContent' hours: type: number minutes: type: number id: type: string required: - type - label - hours - minutes - id securitySchemes: x-access-token: scheme: bearer bearerFormat: JWT type: apiKey in: header name: x-access-token