openapi: 3.2.0 info: title: Lokki Customer API description: The main API powering the Lokki Dashboard and Online Store version: '2.0' contact: {} servers: [] security: - x-access-token: [] tags: - name: Customer paths: /v2/customer/generic-query: get: operationId: getManyCustomers 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: 1 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: id.isNull required: false in: query description: Filter entries that have the field as null schema: type: boolean - name: id.exists required: false in: query description: Filter entries that have the field not null schema: type: boolean - name: id.equals required: false in: query description: Filter entries that have a specific value schema: type: string - name: id.notEquals required: false in: query description: Filter entries that do not have a specific value schema: type: string - name: id.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: id.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: id.contains required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that contain the specified substring - name: id.regex required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that match the specified regular expression - name: createdAt.isNull required: false in: query description: Filter entries that have the field as null schema: type: boolean - name: createdAt.exists required: false in: query description: Filter entries that have the field not null schema: type: boolean - name: createdAt.equals required: false in: query description: Filter entries that match a specific date schema: type: string - name: createdAt.notEquals required: false in: query description: Filter entries that do not match a specific date schema: type: string - name: createdAt.in required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that match any of the specified dates - name: createdAt.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 dates - name: createdAt.gt required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries with a date greater than the specified date - name: createdAt.lt required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries with a date less than the specified date - name: createdAt.gte required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries with a date greater than or equal to the specified date - name: createdAt.lte required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries with a date less than or equal to the specified date - name: email.isNull required: false in: query description: Filter entries that have the field as null schema: type: boolean - name: email.exists required: false in: query description: Filter entries that have the field not null schema: type: boolean - name: email.equals required: false in: query description: Filter entries that have a specific value schema: type: string - name: email.notEquals required: false in: query description: Filter entries that do not have a specific value schema: type: string - name: email.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: email.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: email.contains required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that contain the specified substring - name: email.regex required: false in: query schema: oneOf: - type: array items: type: string - type: string description: Filter entries that match the specified regular expression responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/GetManyCustomersResponseDto' tags: - Customer /v2/customer: post: operationId: createCustomer parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateUpdateCustomerDto' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Customer' tags: - Customer get: operationId: listCustomers parameters: - name: page required: false in: query schema: minimum: 1 default: 1 type: number - name: limit required: false in: query schema: maximum: 100 default: 15 type: number - name: search required: false in: query schema: default: '' type: string - name: adminSearch required: false in: query schema: default: false type: boolean responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PaginatedCustomersDto' tags: - Customer /v2/customer/{customerId}: put: operationId: updateCustomer parameters: - name: customerId required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateUpdateCustomerDto' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Customer' tags: - Customer delete: operationId: deleteCustomer parameters: - name: customerId required: true in: path schema: type: string responses: '200': description: '' tags: - Customer get: operationId: getCustomerById parameters: - name: customerId required: true in: path description: The ID of the customer example: 65b2f3d1b7a4e8f1a2c3d4e5 schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Customer' tags: - Customer /v2/customer/csv: get: operationId: getCustomerCsv parameters: [] responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CustomersCsvDto' tags: - Customer /v2/customer/listSelectCustomers: get: operationId: listSelectCustomers parameters: - name: customerIds required: true in: query schema: type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/Customer' tags: - Customer /v2/customer/email/{email}: get: operationId: getCustomerByEmail parameters: - name: email required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: type: object tags: - Customer /v2/customer/verifyCustomerInDb/{email}/{id}: get: operationId: verifyCustomerInDb parameters: - name: email required: true in: path schema: type: string - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: type: boolean tags: - Customer /v2/customer/company-newsletter/{id}: patch: operationId: updateCustomerCompanyNewsletter parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CustomerCompanyNewsletterUpdateDto' responses: '200': description: '' tags: - Customer components: schemas: LocalizedContent: type: object additionalProperties: type: string TulipInfos: type: object properties: address: type: string zipcode: type: string city: type: string managerFirstName: type: string managerLastName: type: string sirenNumber: type: string required: - address - zipcode - city - managerFirstName - managerLastName - sirenNumber CustomerFieldDto: type: object properties: label: $ref: '#/components/schemas/LocalizedContent' value: type: string id: type: string required: - label - value - id PaginatedCustomersDto: type: object properties: totalCount: type: number customers: type: array items: $ref: '#/components/schemas/Customer' required: - totalCount - customers CustomersCsvDto: type: object properties: customers: type: array items: type: array items: type: string required: - customers Customer: type: object properties: id: type: string firstName: type: string lastName: type: string companyName: type: string phone: type: string email: type: string zipCode: type: string fields: type: array items: $ref: '#/components/schemas/CustomerField' companyId: type: string deliveryAddress: type: string deliveryZipCode: type: string deliveryCity: type: string isNewsletterSubscribe: type: boolean isLokkiNewsletterSubscribe: type: boolean customerImage: type: string type: enum: - entreprise - individual type: string skisetInfos: $ref: '#/components/schemas/CustomerSkisetInfos' tulipInfos: $ref: '#/components/schemas/TulipInfos' createdAt: format: date-time type: string remark: type: string customerRpId: type: string hidden: type: boolean createdFrom: enum: - DASHBOARD - ONLINE_STORE - RENTAL_PLACE_LOKKI type: string required: - id - firstName - lastName - companyName - phone - email - zipCode - fields - companyId - deliveryAddress - deliveryZipCode - deliveryCity - isNewsletterSubscribe - isLokkiNewsletterSubscribe - customerImage - type - createdAt - hidden - createdFrom CustomerSkisetInfos: type: object properties: customerId: type: - string - 'null' required: - customerId CustomerCompanyNewsletterUpdateDto: type: object properties: subscribed: type: boolean required: - subscribed CreateUpdateCustomerDto: type: object properties: lastName: type: string firstName: type: string email: type: string phone: type: string zipCode: type: string fields: type: array items: $ref: '#/components/schemas/CustomerFieldDto' deliveryAddress: type: string deliveryZipCode: type: string deliveryCity: type: string companyName: type: string isNewsletterSubscribe: type: boolean isLokkiNewsletterSubscribe: type: boolean customerImage: type: string skisetInfos: $ref: '#/components/schemas/CustomerSkisetInfos' tulipInfos: $ref: '#/components/schemas/TulipInfos' remark: type: string customerRpId: type: string hidden: type: boolean createdFrom: enum: - DASHBOARD - ONLINE_STORE - RENTAL_PLACE_LOKKI type: string required: - lastName - firstName - email - phone - fields - companyName - isNewsletterSubscribe - isLokkiNewsletterSubscribe - customerImage CustomerField: type: object properties: label: $ref: '#/components/schemas/LocalizedContent' value: type: string id: type: string required: - label - value - id GetManyCustomersResponseDto: type: object properties: total: type: number description: Total number of documents matching the query minimum: 0 example: 150 docs: type: array items: $ref: '#/components/schemas/Customer' required: - total - docs securitySchemes: x-access-token: scheme: bearer bearerFormat: JWT type: apiKey in: header name: x-access-token